diff options
1146 files changed, 51640 insertions, 6036 deletions
diff --git a/.gitattributes b/.gitattributes index 15410b16b46..40a4005bf43 100644 --- a/.gitattributes +++ b/.gitattributes @@ -15,3 +15,6 @@ # special files which must ignore whitespace *.patch whitespace=-trailing-space eol=lf *.diff whitespace=-trailing-space eol=lf + +# Ignore sql/* files +sql/* linguist-documentation diff --git a/.travis.yml b/.travis.yml index e8ff00f425f..091eb2b18b3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,8 +11,8 @@ before_install: - echo "yes" | sudo add-apt-repository ppa:ubuntu-toolchain-r/test - sudo apt-get -qq update - sudo apt-get -qq install build-essential libtool gcc-4.8 g++-4.8 make cmake openssl - - sudo apt-get -qq install libssl-dev libmysqlclient15-dev libmysql++-dev libreadline6-dev zlib1g-dev libbz2-dev - - sudo apt-get -qq install libboost1.55-dev libboost-thread1.55-dev libboost-system1.55-dev libboost-program-options1.55-dev + - sudo apt-get -qq install libssl-dev libmysqlclient-dev libmysql++-dev libreadline6-dev zlib1g-dev libbz2-dev + - sudo apt-get -qq install libboost1.55-dev libboost-thread1.55-dev libboost-filesystem1.55-dev libboost-system1.55-dev libboost-program-options1.55-dev libboost-iostreams1.55-dev install: - mysql -uroot -e 'create database test_mysql;' diff --git a/CMakeLists.txt b/CMakeLists.txt index 821176c8fea..2630ef17da7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -50,6 +50,8 @@ endif() include(CheckPlatform) +include(GroupSources) + # basic packagesearching and setup (further support will be needed, this is a preliminary release!) set(OPENSSL_EXPECTED_VERSION 1.0.0) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 99fb588c1cf..01e941cc465 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,12 +1,41 @@ # Contributing -Want to contribute? Great! +So, you want to contribute? Great! +Contributing is not only about creating fixes, but also reporting bugs. Before reporting a bug, please make sure to use the latest core and database revision. + + +Issues +====== + +Read [this](http://www.trinitycore.org/f/topic/37-the-trinitycore-issuetracker-and-you/) before creating a ticket. +If you have problems with TrinityCore instalation, read [this](http://www.trinitycore.org/f/topic/1518-trouble-with-your-trinity-install-readme-1st-faqs/) + +Mandatory things when creating a ticket: +======================================== + +- Branch +- commit hash (if you get something like TrinityCore rev. unknown 1970-01-01 00:00:00 +0000 (Archived branch) (Win64, Release), please read this [post](http://www.trinitycore.org/f/topic/345-howto-properly-install-git-on-windows-fix-trinitycore-rev-1970-01-01-000000-0000/) or clone this repository instead downloading the source code. +- entries of affected creatures / items / quests with a link to the relevant wowhead page. +- clear title and description of the bug - if your english is very bad, please use google translate or yandex to translate to english and include one text in your native language. + +When reporting a crash, you MUST compile in debug mode because release dumps are useless (not enough information) - if you don't know how to compile in debug, read [this](http://www.trinitycore.org/f/topic/1518-trouble-with-your-trinity-install-readme-1st-faqs/#entry47672) + +We sugest the title and body to have the next style: + +DB/Quest: The Collapse + +4.3.4 branch +hash 63f96a282307 +The quest "The Collapse" http://www.wowhead.com/quest=11706 lacks final event. + +Creating Pull Requests: +======================= 1. Fork it. -2. Create a branch (`git checkout -b fixes`) +2. Create a branch (`git checkout -b fixes`) (Note: fixes is an arbitrary name, choose whatever you want here) 3. Commit your changes (`git commit -am "Added Snarkdown"`) 4. Push to the branch (`git push origin fixes`) -5. Open a [Pull Request][1] +5. Open a Pull Request When creating patches read: @@ -14,10 +43,12 @@ When creating patches read: - [WDB Fields](http://www.trinitycore.org/f/topic/58-wdb-fields/) - [Git Squash](https://ariejan.net/2011/07/05/git-squash-your-latests-commits-into-one/) -We suggest you to create one branch for each `C++` based fix: on that way you can continue creating more fixes without having to wait to get one pull request merged. -For the `SQL` files of `C++` based fixes the naming schema is: `YYYY_MM_DD_i_database_description.sql`, where `YYYY_MM_DD` is the date of the fix, `i_database` is the *ith* sql created that day for `database`. + +We suggest that you create one branch for each C++ based fix: this will allow you to create more fixes without having to wait for your pull request to be merged. +For the SQL files coming with C++ based fixes the naming schema is `YYYY_MM_DD_i_database.sql`, where `YYYY_MM_DD` is the date of the fix, `i_database` is the *ith* sql created that day for `database`. When doing changes to `auth` or `characters` database remember to update the base files (`/sql/base/*`). -For SQL only fixes [create a ticket](https://github.com/TrinityCore/TrinityCore/issues/new). +For SQL only fixes, please [create a ticket](https://github.com/TrinityCore/TrinityCore/issues/new). +Since it's very unlikely that your Pull Request will be merged on the day that you open it, please name the files with an impossible date to avoid merging issues ie: 2015_13_32_00_world.sql Wiki ==== @@ -27,13 +58,6 @@ The wiki is located at [http://trinitycore.info](http://trinitycore.info). You are welcome to create an account and help us improve and extend the wiki. -Issues -====== - -Read [this](http://www.trinitycore.org/f/topic/37-the-trinitycore-issuetracker-and-you/) before creating a ticket. -If you have problems with TrinityCore instalation, read http://www.trinitycore.org/f/topic/1518-trouble-with-your-trinity-install-readme-1st-faqs/ - - Requirements ============ @@ -44,7 +68,6 @@ MySQL ≥ 5.1.0 CMake ≥ 2.8.11.2 / 2.8.9 (Windows / Linux) OpenSSL ≥ 1.0.0 GCC ≥ 4.7.2 (Linux only) -MS Visual Studio ≥ 12 (2013) (Windows only) +MS Visual Studio ≥ 12 (2013) Update 4 (Windows only) -In case you choose Linux, we recommend to use Debian 7, it's the Linux we use to test compilations. -Remember 4.3.4 branch is alpha, only intended for development, we don't recomend this branch to run a server. +If you choose Linux, we recommend to use Debian 8, since it's the Linux that we use to test compilations. diff --git a/README.md b/README.md index d92b3848c94..614dea777f0 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,13 @@ #  TrinityCore -[](https://scan.coverity.com/projects/435) -[](https://www.bountysource.com/trackers/1310-trinity-core?utm_source=1310&utm_medium=shield&utm_campaign=TRACKER_BADGE) -[](http://www.issuestats.com/github/TrinityCore/TrinityCore) -[](http://www.issuestats.com/github/TrinityCore/TrinityCore) -`6.x`: [](https://travis-ci.org/TrinityCore/TrinityCore) -`4.3.4`: [](https://travis-ci.org/TrinityCore/TrinityCore) -`3.3.5`: [](https://travis-ci.org/TrinityCore/TrinityCore) +[](http://www.issuestats.com/github/TrinityCore/TrinityCore) [](http://www.issuestats.com/github/TrinityCore/TrinityCore) [](https://www.bountysource.com/trackers/1310-trinity-core?utm_source=1310&utm_medium=shield&utm_campaign=TRACKER_BADGE) + +## Build Status + +6.x | 4.3.4 | 3.3.5 +:------------: | :------------: | :------------: +[](https://travis-ci.org/TrinityCore/TrinityCore) | [](https://travis-ci.org/TrinityCore/TrinityCore) | [](https://travis-ci.org/TrinityCore/TrinityCore) +[](https://scan.coverity.com/projects/435) | | [](https://scan.coverity.com/projects/4656) ## Introduction @@ -13,90 +13,973 @@ Thanks to the ScriptDev2 team (http://www.scriptdev2.com) for scripts. Thanks to the WCell team (especially Ralek) for research on realm reconnect sequence, item scaling stats algorithm, gameobject rotation issues. -Thanks go out to the following people for various patches/code (listed in the -order they were added) (there may be duplicates or invalid names, most of them -were extracted from commits): -w12x, dythzer, XEQT, death420, balrok, TOM_RUS, -runningnak3d, Seline, KingPin, raczman, bogie, Neo2003, NoFantasy, Derex, -freghar, toilet1, megamage, MadJack, WarHead, gvcoman, Ntsc, arrai, jrkpote, -Seraphim, vagoth, KerchumA222, Rognar, Blaymoira, DragonHunter, Molius, ApoC, -SeT, hunuza, Wyk3d, VladimirMangos, rj686, Arthorius, QAston, Muhaha, dereka, -Kaldorei, NuRRi, Biglad, Machiavelli, Nivelo, Paradox, Aokromes, EleGoS, -Visagalis, reno, Cybrax, GriffonHeart, fgenesis, rilex, XTElite1, Anubisss, eL, -Iskander, arclite, Bladex, EIFEL, Klaimmore, XTZGZoReX, panaut0lordv, DearScorpion, -BlueSteel, AlexDereka, Drahy, krz, Xeptor, Sethoso, Sarjuuk, pasdVn, nissen, -Triply, `win, Fog, emsy, McBitter, Lukaasm, maikash, Wormheart, DonTomika, -DiSlord, Tiretunderl, Ramses_II, cccyril, Cha0S2, miebaik, Trazom, KiriX, -darkEvil, Sorken, Kudlaty, Charlie2025, Medwise, Rat, Lutik, domingo, -TrullyONE, rastikzzz, Tassader, Lightguard, KAPATEJIb, Tux`Volant, zhanhang03, -Asael, Elron, False, nos4r2zod, Disassembler, thumsoul, rvnth, throneinc, -MrTux, Luniz2k1, Dani, BroodWyrm, raven_coda, Bagsac, Thraxx, Trogvar, -teacher4, zhenya, Albrecht de Endrau, Phacops, Naicisum, thenecromancer, shax, -cryingcloud, freeganja, Foks, daveh, Az@zel, evilstar, Corfen, Astellar, Maxxie, -DEN_North, StarJoker, Nezemnoy, X-Savior, subhuman_bob, Ambal, Brueggus, sparc, -jojo, Trojan, tvaroh, Genars, BombermaG, Bulkin, nesocip, xILOSWag, SilverIce, -Uruviel, timmit, Seizerkiller, Stokrotka, JoN0, Tanatos, Hunteee, Alyen, -Farah, Them, DaGNU, arthurcik, BudIcePenguin, Amok, Amit86, onkelz28, Azrael, -Larva, Roland, DerDyddye, Vicos, PSZ, CRAZyBUg, irish, Sephiroth1984, -mike753, Xlybriem, Paytheo, ArticDevil, FearX, Beaste, bufferoverflow, Jeniczek, -Den, bobaz, crackm, seirge, D_Skywalk, mknjc, Christyan, Saeba, Nevan, tlexii, -liszt, duckman, Joro, Charlie, smellbee, bigjohnson4, maxdestroyer, Destalker, -ckegg, Drethek, yad02, Win32, NetSky, Zcuron, Necroo, ogeraisi, Coldblooded, -Edder, riddick, Craker, NeoLithicX, srounet, SLG, Tidus, neo0608, SyRiOCoP, -F636y623, Patro, mobel, simak, hectolight, Riccardo, GodsdoG, Gomez, kamir86, fredi, -qubix, Deafboy, Authorius, DarkRabbit, mrbungle, netoya, peldor, eumario, Alex, -Moandor, ebx, DasBlub, guenex, Brats, Lucy, arcx, Enril, oiler2112, -Wizz, Elminster, 123qwe, NeatElves, Turk3y, deicide, vladonix, nugu100, -Skystar, Reve, jorooo, FrozenDB, miranda.conrado, Tequila, Gommes, Zerg2000, -aerione_alt, Rastik, FrenchW, wilibald09, Velorien, kancaras, fisherman, -Aviram, Mufik, loop69, multiplexer, Koani, rechapa79, kozelo, MeanMachine, -fregh, adrycasillo, IncoGnito, Alez, Itch, Kuteur, MaS0n, peaceman, manuel, -Gendalph, Lynx3d, raftom, Infinity, Ebrithil, Sorya, HP1, Prince, redcore, -Boogie, Necro, Thyros, simon, MrSmite, horogandris, Stryker, MaXiMiUS, kaell, -totoro, Forgiven, Big, Oculus, Lorac, Nemesis, Epsik, iadus3, durotar, hoshie, -fukifat, imbecile, Nafsih, Meldanor, Turok, Naturamen, Themris, Sundark, -Azuritus, jotapdiez, EnderGT, Curuad, oc_redfox, rockzOr, Darkshines, -BlackYoghurt, McLovin, Gyullo, kaxap, Hawthorne, nanouniko, new001, Opterman, -Typhoon, Cleave, HiZed, The_Game_Master, Athor, Veras, Menia, Jolan, BlackOne, -johnholiver, Spp, Drevi, kb_z, Tartalo, Shendor, Demonx, Taliesin, defacer, -SoulForge, Jackpoz, Cass, QuaLiT1, exul182, sunwell, AniRB, clotza, Tommassino, -dracula70, alexsot, RedSonja, Cnillidan, Proofzor, aqs999, Sony, amsjunior123, -Sisif, Joshh, alex_1983, arez, RammboNr5, Insider, bodompelle, lobuz, Azazel, -footman, elron103, make_the_king, destros, MetaphysicalDrama, disassebler, -Malcrom, Vladmimír Lipták, retriman, hyriuu, Smakapotatis, PainKiller, -bkhorizon, n0n4m3, Chesterfield, Frankir, Wowka321, Morpheux, p0wer, -Ouden, toshik, laise, yavi, Splinter, Syntec, Arthas, denyde, unholy, -Vaughner, blackmanos, edrinn, Liberate, Shauren, dr.tenma, click, -SupaBad, Xanadu, Socolin, Shocker, Silinoron, 0xFuture, xK1, Ramus, menke, -wowgargamel, Dark0r, Kierkegaard, Leak, ge0rg, StormByte, joshwhedon, -BlackCat0110, JuliuSZS, n4rk0, filip.havlicek, m.ax, laviniu, LordJZ, Scazzato88, -svannon, jurkovic.nikola, Willian Krueger, BioHazard, Ille000, Erocoloco, -terrorbringer, antihrists, Havenard, scarymovie87, D3VIL, FaTe753, PrinceCreed, -spgm, Dakeyras, sombre88, 19Maxx83, moriquendu, Ille, breakerfly, -zthoreen, clement.roussel, p.alexej, Ceris, Nayre, Kiper, announce, thmarth, -Ner'zhul, DarkXuan, linencloth, SnakeIce, Tome, Nay, Kaelima, -Subv, Tuxity, tibbi, Gigatotem, Nexflame, trickerer, zxbiohazardzx, w1sht0l1v3, -Warpten, CeIa, Kandera, horn, Dimitro, thesensei, Sovak, Vincent-Michael, -Xanvial, faq, Gacko, Geodar, hexa-, MacWarrior, cyberbrest, Myran2, Northstrider, -AFROM, CrYser, Kretol, Bizzy, nelegalno, Kinzcool, armano2, Tomas, Aristoo, Trista, -e@cacaw.net, oMadMano, Kiddie, blub, Santiago, tobmaps, Mik43l, danik, Souler, -joschiwald, CDawg, WishToDie, gecko32, gadge, neuro_999, Stefo, dr.skull, NTX, Hexit, -Stalker-Riddick, thomas33, Manuel Carrasco, Imprtat, Chaplain, teyrnon, zorix, Greymane, -Venugh, e000, Amit, Alternative, Exodius, Jorge, shlomi1515, tharaca, Alestaan, Valcorb, -Odyssey, Chipsi, Pesthuf, stfx, Yaki Khadafi, David KlepáÄek, SignFinder, unknown, -NNN666, AliveShiro, 4m1g0, mweinelt, Abdollah Hasan, Xees, zori, warriorpoetex, qaywsx, -ghost, Discovered, faq_, Jildor, The Game, Kezo90, Helias, Frca, Ramusik, elecyb, Joni, -Multivitamin, faramir118, cookta2012, Gyx, ShinDarth, Lopin, Martin Weinelt, -Bezo, frozenarmor, E. van Harten, LiMCrosS, Albis, Go6o, Pitcrawler, Matthew Goff, neurorulez, -Ka0z, glkrlos, zwerg, Merlin2010, furion, Giuseppe Montesanto, LihO, Bootz, PKX, burnham, -Drake Fish, Vlad, Discover, Heisenberg, Kapoeira, Emo Norfik, tREAk, zoidmann, Wilds, weclub, -Jon, Cron, Alexander, Vinolentus, LaserJet, mns, Stalker_Riddick, Yelvann, draco, Geekotron, -bytewarrior, Fredi Machado, Studioworks, 3kids, idostyle@zoit, Sebastián Orellana, DemiDroL, -n4ndo, et2012, Rochet2, Grobi, Google, Wispeckt, hacknowledge, wonopon, Naga, -Joeri Thissen, Payn, Fest, insider42, DrTenma, L30m4nc3r, Akama, Jesper Meyer, Kiperr, -maanuel, vcrx6, Furion89, Mark07, lost-illusion, SeTM, TCKiper, vlad852, tehmarto, boom, -Per Wilhelmsen, telsamat, Various, erimioa, Sawiner, zergtmn, SimonDMII, pek2011, alexbolotsin, -laly, mrquickfx, Koord, amnell, GWRde, EdwinDW, gildor, darkstalker, Feanordev, _manuel_, -thymuswisewood, sohrab, Lazzalf, Taser, Ottowayne, Exordian, nucleartux, John Holiver, j4r0d, -Trazom62, Brian, enjoi, teacher, Alex Bolotsin, Troy, silver1ce, nihal, arcanzic, Chaz Brown, -pendragon, aven_coda, cca220v, ArcticDevil, derex_tri
\ No newline at end of file +Thanks go out to the following people for various patches/code (there may be duplicates or invalid names, most of them +were extracted from old commits): + +- 0xFuture +- 123qwe +- 19Maxx83 +- 2010phenix +- 3kids +- 4m1g0 +- A Metaphysical Drama +- Aaron126 +- Abdollah Hasan +- adrycasillo +- aerione_alt +- AFROM +- Akama +- Albis +- Albrecht de Endrau +- Alestaan +- aletuna +- Alex +- Alex Bolotsin +- Alexander +- alexbolotsin +- AlexDereka +- Alexei_Nech +- alexsot +- alex_1983 +- Alez +- AliveShiro +- alpharius +- Alternative +- Alyen +- Ambal +- Aminxhm +- Amit +- Amit86 +- amnell +- Amok +- amsjunior123 +- AniRB +- Ankso +- announce +- Ante +- antihrists +- Anton Usmansky +- Anubisss +- Aokromes +- ApoC +- Appled +- aqs999 +- arcanzic +- arclite +- ArcticDevil +- arcx +- arez +- AriDEV +- ariel- +- Aristoo +- arks +- Armano +- armano2 +- arrai +- Arthas +- Arthorius +- arthurcik +- ArticDevil +- Asael +- Ascathor +- Astellar +- Athor +- Authorius +- aven_coda +- Aviram +- Azazel +- Azrael +- Azuritus +- b4nan1 +- badmoon +- Baeumchen +- Bagsac +- baines +- balrok +- baric +- Barlok +- Beaste +- bele +- betagan +- Bezo +- Big +- bigjohnson4 +- Biglad +- BioHazard +- BitCoding +- Bizzy +- bkhorizon +- BlackCat0110 +- blackmanos +- BlackOne +- BlackYoghurt +- Bladex +- Blaymoira +- Blipi +- bloerwald +- blub +- BlueSteel +- Blumster +- bobaz +- bodompelle +- bogie +- BombermaG +- Bonitas +- Bonny1992 +- Boogie +- boom +- Bootz +- Brats +- breakerfly +- Brecky +- Brian +- BroodWyrm +- Brueggus +- BudIcePenguin +- bufferoverflow +- Bulkin +- burnham +- Butterfly69 +- bytewarrior +- Carbenium +- Carl Hjerpe +- Carlos Vargas +- Cass +- cca220v +- cccyril +- ccrs +- CDawg +- CeIa +- cemak +- Cepox +- Ceris +- Cha0S2 +- chadryx +- Chaplain +- Charlie +- Charlie2025 +- Chaz Brown +- Chesterfield +- Chevron +- ChipLeo +- Chipsi +- Christyan +- Ciclop +- ckegg +- Cleave +- clement.roussel +- click +- clotza +- Cnillidan +- cocolino +- Coldblooded +- cookta2012 +- corbi +- Corfen +- cr4st +- crackm +- Craker +- CRAZyBUg +- Cristal +- Cron +- cryingcloud +- CrYser +- Crysicle +- Curuad +- cyberbrest +- Cyberium +- Cybrax +- d-sat +- D3VIL +- D4R4 +- Daejiv +- DaGNU +- Dakeyras +- Dani +- Daniel M. Weeks +- danik +- danlapps +- Dark0r +- DarkBrain2580 +- darkEvil +- darkman1983 +- DarkRabbit +- Darkshines +- darkstalker +- DarkXuan +- DasBlub +- daveh +- David KlepáÄek +- DDuarte +- Deafboy +- DearScorpion +- death420 +- deathicon +- defacer +- Dehravor +- deicide +- Dekadence +- delavega +- dele +- DemiDroL +- Demonx +- Den +- denyde +- DEN_North +- DerDyddye +- dereka +- Derex +- derex_tri +- Destalker +- destros +- devil1234 +- Dietrich +- Dimitro +- disassebler +- Disassembler +- Discover +- Discovered +- DiSlord +- DJScias +- dkmbasura +- domingo +- DonTomika +- DorianGrey +- Dr-J +- dr.skull +- dr.tenma +- draco +- dracula70 +- DragonHunter +- Drahy +- Drake Fish +- Drethek +- Drevi +- DrTenma +- duckman +- durotar +- Dyddye +- dythzer +- D_Skywalk +- E. van Harten +- e000 +- e@cacaw.net +- Ebrithil +- ebx +- Edder +- edrinn +- EdwinDW +- EIFEL +- Eilo +- eL +- elecyb +- EleGoS +- Ellie +- Elminster +- Elron +- elron103 +- Emo +- Emo Norfik +- emsy +- EnderGT +- enjoi +- Enril +- Epicurus4 +- Epsik +- Ergar +- erimioa +- Erocoloco +- et2012 +- et65 +- eumario +- evilstar +- ExHunter +- Exodius +- Exordian +- Expecto +- exul182 +- F03SD +- F636y623 +- Fabi +- False +- faq +- Farah +- faramir118 +- fatalaim +- FaTe753 +- Feanordev +- FearX +- fedehacker +- Fest +- fgenesis +- FH3095 +- Filip +- filip.havlicek +- FireEmerald +- fisherman +- Fmut +- Foereaper +- Fog +- Foks +- Foldor +- Foldy +- footman +- Forgiven +- Francesco Borzì +- Frankir +- Frca +- fredi +- Fredi Machado +- freeganja +- fregh +- freghar +- FrenchW +- frozenarmor +- FrozenDB +- FrozenSoul +- Frytiks +- fukifat +- furion +- Furion89 +- Gacko +- gadge +- gaut +- ge0rg +- gecko32 +- Geekotron +- Genars +- Gendalph +- Geodar +- gerripeach +- ghost +- Gigatotem +- Gigi1237 +- gildor +- Giuseppe Montesanto +- glkrlos +- Go6o +- Goatform +- GodsdoG +- Golrag +- Gomez +- Gommes +- Google +- Gooyeth +- Goret +- greenbagels +- Greymane +- GriffonHeart +- Grimton1337 +- Grobi +- grsgs +- guenex +- Guillaume Belz +- gvcoman +- GWRde +- gwrde +- Gyullo +- Gyx +- hacknowledge +- hamcake9 +- Hanfblatt +- Havenard +- Hawthorne +- hectolight +- Heihachi +- Heisenberg +- Helias +- HenryG +- hexa- +- Hexit +- HiZed +- Hobbilis +- horn +- horogandris +- hoshie +- HP1 +- Hristo Bogdanov +- Hunteee +- HUNTERok +- hunuza +- huri +- hyriuu +- iadus3 +- iDenyDeX +- idostyle +- Ille +- illusion +- imbecile +- Imprtat +- IncoGnito +- Infinity +- Insider +- insider42 +- Intel +- Intra +- irish +- Iskander +- Itch +- j4r0d +- Jackpoz +- Jared Jones +- Jeniczek +- Jens Bäckman +- Jesper Meyer +- Jildor +- Joeri Thissen +- John Holiver +- johnholiver +- jojo +- Jolan +- Jon +- JoN0 +- Joni +- Jorge +- Joro +- jorooo +- joschiwald +- Joshh +- Joshiwald +- joshwhedon +- jotapdiez +- jrkpote +- JuliuSZS +- JunkyBulgaria +- jurkovic.nikola +- Ka0z +- Kaelima +- kaell +- Kaldorei +- kamir86 +- kancaras +- Kandera +- KAPATEJIb +- Kapoeira +- karn +- kaxap +- kb_z +- keke222 +- kelsarhu +- kenjiro +- kennylive +- KerchumA222 +- kerhong +- Kevin Darcel +- Kezo90 +- Kiddie +- Kierkegaard +- Killyana +- KingPin +- Kinzcool +- Kiper +- Kiperr +- Kiritoo +- KiriX +- Kirkhammett +- Kittnz +- Klaimmore +- Koani +- kontownik +- Koord +- kozelo +- Kretol +- krofna +- Krogonos +- krz +- Krzysztof Rapacki +- Kudlaty +- Kuteur +- L30m4nc3r +- laise +- laly +- Lapps +- Lartza +- Larva +- Larya +- LaserJet +- laviniu +- Lazzalf +- Leak +- leguybrush +- Leonid Logvinov +- Liberate +- Lightguard +- LihO +- LilleCarl +- LiMCrosS +- linencloth +- liszt +- lobuz +- loop69 +- Lopin +- Lorac +- LordJZ +- Lordron +- LordUsagi +- lost-illusion +- Lucas +- Lucy +- Luhzinha +- Lukaasm +- Luniz2k1 +- Lutik +- Luzifix +- Lynx3d +- m.ax +- m7nu3l +- maanuel +- Machiavelli +- MacWarrior +- MadJack +- Magnifikator +- maikash +- make_the_king +- Malcrom +- manuel +- Manuel Carrasco +- ManuFe +- marc0303 +- Marius Ungureanu +- Mark07 +- Marosa +- Martin Weinelt +- MaS0n +- Matthew Goff +- maxdestroyer +- MaXiMiUS +- Maxxie +- maxxx +- McBitter +- McLovin +- MeanMachine +- Medwise +- megamage +- Meldanor +- Menia +- menke +- Merlin2010 +- MetaphysicalDrama +- Michael +- MidnaAT +- miebaik +- Miha Penger +- Mihapro +- mik1893 +- Mik43l +- mike753 +- miranda.conrado +- Miroslav1993 +- Mislav Blažević +- MitchesD +- mknjc +- mns +- Moandor +- mobel +- Mogadischu +- Molius +- MorganaOP +- Morgoporc +- moriquendu +- Morpheux +- mrbungle +- mrquickfx +- MrSmite +- MrTux +- msoky +- mthsena +- Mufik +- Muhaha +- multiplexer +- Multivitamin +- mweinelt +- Myran2 +- n0n4m3 +- n4ndo +- n4rk0 +- Nafsih +- Naga +- Naicisum +- Naios +- nanouniko +- Nate +- natepizzle +- Naturamen +- Natureknight +- Nawuko +- Nay +- Nayre +- Ne3x +- NeatElves +- Necro +- Necroo +- Nefarion +- nelegalno +- nelgalno +- Nemesis +- neo0608 +- Neo2003 +- NeoLithicX +- Ner'zhul +- nesocip +- netoya +- NetSky +- neurorulez +- neuro_999 +- Nevadas +- Nevan +- new001 +- Nexflame +- Nezemnoy +- Nick +- nihal +- Nihilianth +- nissen +- Nivelo +- NNN666 +- Noeliel +- NoFantasy +- Noffearr +- Northstrider +- nos4r2zod +- Ntsc +- NTX +- nucleartux +- nugu100 +- Numielle +- NuRRi +- Nyeriah +- Oculus +- oc_redfox +- Odyssey +- ogeraisi +- oiler2112 +- oMadMano +- onkelz28 +- Opterman +- Orphus +- Ottowayne +- Ouden +- P-Kito +- p.alexej +- p0ody +- p0wer +- PainKiller +- panaut0lordv +- Paradox +- pasdVn +- Patro +- Payn +- Paytheo +- peaceman +- pek2011 +- peldor +- pendragon +- Per Wilhelmsen +- Pesthuf +- pete318 +- Phacops +- Phantons +- phoenixfight +- Pitcrawler +- pjasicek +- PKX +- Polkic +- Portgas +- Portgas D. Ace +- Praetonus +- Prince +- PrinceCreed +- profPlum +- projectcoredevs +- Proofzor +- PSZ +- PuniCZ +- QAston +- qaywsx +- qsa +- QT +- QuaLiT1 +- qubix +- raczman +- raelik +- raftom +- RammboNr5 +- Ramses_II +- Ramus +- Ramusik +- Rastik +- rastikzzz +- Rat +- raven_coda +- razer025 +- rechapa79 +- redcore +- RedSonja +- Regigicas +- reno +- retriman +- Reve +- RezolveX +- Rhyme +- Ric101 +- Riccardo +- Ricko92 +- riddick +- rilex +- rj686 +- robinsch +- roc13x +- Rochet2 +- rocky517 +- rockzOr +- rocverde +- Rognar +- Rohlik +- Roland +- Rolando +- runningnak3d +- Rushor +- rvnth +- Saeba +- Santiago +- Sar777 +- Sarjuuk +- Sawiner +- scarymovie87 +- Scazzato88 +- Schmoozerd +- seaofgreen +- Sebastián Orellana +- secharles +- seirge +- Seizerkiller +- Seline +- Sephiroth1984 +- Seraphim +- SeT +- Sethoso +- SeTM +- SgT-Fatality +- Shauren +- shax +- Shendor +- ShinDarth +- shlomi1515 +- Shocker +- SignFinder +- Silinoron +- silver1ce +- SilverIce +- simak +- simon +- SimonDMII +- sirikfoll +- Sisif +- Skystar +- SLG +- Smakapotatis +- smellbee +- SnakeIce +- Socolin +- sohrab +- sombre88 +- sonic3000 +- Sony +- Sorken +- Sorya +- Souler +- SoulForge +- soulfrost +- Sovak +- sparc +- spgm +- Splash +- Splinter +- Spp +- springfieldking +- srounet +- Stalker-Riddick +- StarJoker +- Stefo +- stfx +- Stokrotka +- StormByte +- streetart +- Stryker +- Studioworks +- subhuman_bob +- Subv +- Sundark +- sunwell +- SupaBad +- suranex +- svannon +- svetilo12 +- Syntec +- SyRiOCoP +- Takenbacon +- Taliesin +- Tanatos +- Tanner Carter +- Tartalo +- Taser +- Tassader +- TCKiper +- teacher +- teacher4 +- tehmarto +- telsamat +- Tequila +- terrorbringer +- teyrnon +- tharaca +- The Game +- The-Legend +- thebillkidy +- Them +- Themris +- thenecromancer +- therzok +- thesensei +- The_Game_Master +- thmarth +- thomas33 +- Thraxx +- throneinc +- thumsoul +- thymuswisewood +- Thyros +- tibbi +- Tidus +- timh52280 +- timmit +- Tiretunderl +- tkrokli +- tlexii +- tobmaps +- toilet1 +- Tomas +- Tomatoes +- Tome +- Tommassino +- tomrus88 +- TOM_RUS +- toshik +- totoro +- Trazom +- Trazom62 +- tREAk +- trickerer +- Triply +- Trisjdc +- Trista +- Trogvar +- Trojan +- Trond B Krokli +- Troy +- TrullyONE +- Turk3y +- Turok +- Tuxity +- Tux`Volant +- tvaroh +- Typhoon +- tyraela +- Ukulutl +- unholy +- Unholychick +- unknown +- untaught +- Uruviel +- Vadim +- vagoth +- Valcorb +- Various +- Vaughner +- vcrx6 +- velinath +- Velorien +- Venugh +- Veras +- Vicos +- Vincent-Michael +- Vinolentus +- Visagalis +- Vlad +- vlad852 +- VladimirMangos +- VladmimÃr Lipták +- vladonix +- VojtÄ›ch BoÄek +- w12x +- w1sht0l1v3 +- Walkum +- WarHead +- warmech +- Warpten +- warriorpoetex +- Wayt +- weclub +- Wilds +- wilibald09 +- Willian Krueger +- win +- Win32 +- wintergreen77 +- WishToDie +- Wispeckt +- Wizz +- wonopon +- Wormheart +- wowgargamel +- Wowka321 +- wowpsp +- Wulfr +- Wyk3d +- WyldePointer +- X-Savior +- Xanadu +- Xanvial +- Xanviall +- Xees +- Xeptor +- XEQT +- xerkoss +- XFurry +- Xiledria +- xILOSWag +- xjose93 +- xK1 +- Xlybriem +- xomachine +- XTElite1 +- xter +- XTZGZoReX +- yad02 +- Yaki Khadafi +- yavi +- Yelvann +- yesitsme +- z0ldrax +- Zabustak +- ZackTsuna +- Zakamurite +- Zaphod +- Zcuron +- Zedron +- zengwf +- Zerg2000 +- zergtmn +- zhanhang03 +- Zharvek +- zhenya +- zoidmann +- zori +- zorix +- zthoreen +- zwerg +- zxbiohazardzx +- [M]axx +- _manuel_ +- `win +- Дмитрий diff --git a/cmake/compiler/clang/settings.cmake b/cmake/compiler/clang/settings.cmake index 87f8a2f82c8..32ef8172534 100644 --- a/cmake/compiler/clang/settings.cmake +++ b/cmake/compiler/clang/settings.cmake @@ -17,3 +17,4 @@ endif() # -Wno-narrowing needed to suppress a warning in g3d # -Wno-deprecated-register is needed to suppress 185 gsoap warnings on Unix systems. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-narrowing -Wno-deprecated-register") +set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG=1") diff --git a/cmake/macros/CheckPlatform.cmake b/cmake/macros/CheckPlatform.cmake index e08aaed8db2..0f41a9c127e 100644 --- a/cmake/macros/CheckPlatform.cmake +++ b/cmake/macros/CheckPlatform.cmake @@ -7,8 +7,6 @@ else() MESSAGE(STATUS "Detected 32-bit platform") endif() -include("${CMAKE_SOURCE_DIR}/cmake/platform/settings.cmake") - if(WIN32) include("${CMAKE_SOURCE_DIR}/cmake/platform/win/settings.cmake") elseif(UNIX) diff --git a/cmake/macros/ConfigureBoost.cmake b/cmake/macros/ConfigureBoost.cmake index 3d3791b8a93..190151af155 100644 --- a/cmake/macros/ConfigureBoost.cmake +++ b/cmake/macros/ConfigureBoost.cmake @@ -1,35 +1,60 @@ -macro(get_WIN32_WINNT version)
- if (WIN32 AND CMAKE_SYSTEM_VERSION)
- set(ver ${CMAKE_SYSTEM_VERSION})
- string(REPLACE "." "" ver ${ver})
- string(REGEX REPLACE "([0-9])" "0\\1" ver ${ver})
-
- set(${version} "0x${ver}")
- endif()
-endmacro()
-
-if(WIN32)
- set(BOOST_DEBUG ON)
- if(DEFINED ENV{BOOST_ROOT})
- set(BOOST_ROOT $ENV{BOOST_ROOT})
- set(BOOST_LIBRARYDIR ${BOOST_ROOT}/lib${PLATFORM}-msvc-12.0)
- else()
- message(FATAL_ERROR "No BOOST_ROOT environment variable could be found! Please make sure it is set and the points to your Boost installation.")
- endif()
-
- set(Boost_USE_STATIC_LIBS ON)
- set(Boost_USE_MULTITHREADED ON)
- set(Boost_USE_STATIC_RUNTIME OFF)
-
- get_WIN32_WINNT(ver)
- add_definitions(-D_WIN32_WINNT=${ver})
-endif()
-
-find_package(Boost 1.49 REQUIRED system thread program_options)
-add_definitions(-DBOOST_DATE_TIME_NO_LIB)
-add_definitions(-DBOOST_REGEX_NO_LIB)
-add_definitions(-DBOOST_CHRONO_NO_LIB)
-
-if(Boost_FOUND)
- include_directories(${Boost_INCLUDE_DIRS})
-endif()
+macro(get_WIN32_WINNT version) + if (WIN32 AND CMAKE_SYSTEM_VERSION) + set(ver ${CMAKE_SYSTEM_VERSION}) + string(REPLACE "." "" ver ${ver}) + string(REGEX REPLACE "([0-9])" "0\\1" ver ${ver}) + + set(${version} "0x${ver}") + endif() +endmacro() + +if(WIN32) + set(BOOST_DEBUG ON) + if(DEFINED ENV{BOOST_ROOT}) + set(BOOST_ROOT $ENV{BOOST_ROOT}) + set(BOOST_LIBRARYDIR ${BOOST_ROOT}/lib${PLATFORM}-msvc-12.0) + else() + message(FATAL_ERROR "No BOOST_ROOT environment variable could be found! Please make sure it is set and the points to your Boost installation.") + endif() + + set(Boost_USE_STATIC_LIBS ON) + set(Boost_USE_MULTITHREADED ON) + set(Boost_USE_STATIC_RUNTIME OFF) + + get_WIN32_WINNT(ver) + add_definitions(-D_WIN32_WINNT=${ver}) +endif() + +find_package(Boost 1.49 REQUIRED system filesystem thread program_options iostreams) +add_definitions(-DBOOST_DATE_TIME_NO_LIB) +add_definitions(-DBOOST_REGEX_NO_LIB) +add_definitions(-DBOOST_CHRONO_NO_LIB) + +# Find if Boost was compiled in C++03 mode because it requires -DBOOST_NO_CXX11_SCOPED_ENUMS + +include (CheckCXXSourceCompiles) + +set(CMAKE_REQUIRED_INCLUDES ${Boost_INCLUDE_DIR}) +set(CMAKE_REQUIRED_LIBRARIES ${Boost_SYSTEM_LIBRARY} ${Boost_FILESYSTEM_LIBRARY} ${Boost_IOSTREAMS_LIBRARY}) +set(CMAKE_REQUIRED_FLAGS "-std=c++11") +unset(boost_filesystem_copy_links_without_NO_SCOPED_ENUM CACHE) +check_cxx_source_compiles(" + #include <boost/filesystem/path.hpp> + #include <boost/filesystem/operations.hpp> + int main() { boost::filesystem::copy_file(boost::filesystem::path(), boost::filesystem::path()); }" +boost_filesystem_copy_links_without_NO_SCOPED_ENUM) +unset(CMAKE_REQUIRED_INCLUDES CACHE) +unset(CMAKE_REQUIRED_LIBRARIES CACHE) +unset(CMAKE_REQUIRED_FLAGS CACHE) + +if (NOT boost_filesystem_copy_links_without_NO_SCOPED_ENUM) + if (Boost_VERSION LESS 105100) # 1.51 + add_definitions(-DBOOST_NO_SCOPED_ENUMS) + else() + add_definitions(-DBOOST_NO_CXX11_SCOPED_ENUMS) + endif() +endif() + +if(Boost_FOUND) + include_directories(${Boost_INCLUDE_DIRS}) +endif() diff --git a/cmake/macros/FindBoost.cmake b/cmake/macros/FindBoost.cmake index d90a9c12c16..3c6af49dcaa 100644 --- a/cmake/macros/FindBoost.cmake +++ b/cmake/macros/FindBoost.cmake @@ -1,136 +1,165 @@ -# - Find Boost include dirs and libraries
-# Use this module by invoking find_package with the form:
-# find_package(Boost
-# [version] [EXACT] # Minimum or EXACT version e.g. 1.36.0
-# [REQUIRED] # Fail with error if Boost is not found
-# [COMPONENTS <libs>...] # Boost libraries by their canonical name
-# ) # e.g. "date_time" for "libboost_date_time"
+#.rst:
+# FindBoost
+# ---------
+#
+# Find Boost include dirs and libraries
+#
+# Use this module by invoking find_package with the form::
+#
+# find_package(Boost
+# [version] [EXACT] # Minimum or EXACT version e.g. 1.36.0
+# [REQUIRED] # Fail with error if Boost is not found
+# [COMPONENTS <libs>...] # Boost libraries by their canonical name
+# ) # e.g. "date_time" for "libboost_date_time"
+#
# This module finds headers and requested component libraries OR a CMake
# package configuration file provided by a "Boost CMake" build. For the
# latter case skip to the "Boost CMake" section below. For the former
-# case results are reported in variables:
-# Boost_FOUND - True if headers and requested libraries were found
-# Boost_INCLUDE_DIRS - Boost include directories
-# Boost_LIBRARY_DIRS - Link directories for Boost libraries
-# Boost_LIBRARIES - Boost component libraries to be linked
-# Boost_<C>_FOUND - True if component <C> was found (<C> is upper-case)
-# Boost_<C>_LIBRARY - Libraries to link for component <C> (may include
-# target_link_libraries debug/optimized keywords)
-# Boost_VERSION - BOOST_VERSION value from boost/version.hpp
-# Boost_LIB_VERSION - Version string appended to library filenames
-# Boost_MAJOR_VERSION - Boost major version number (X in X.y.z)
-# Boost_MINOR_VERSION - Boost minor version number (Y in x.Y.z)
-# Boost_SUBMINOR_VERSION - Boost subminor version number (Z in x.y.Z)
-# Boost_LIB_DIAGNOSTIC_DEFINITIONS (Windows)
-# - Pass to add_definitions() to have diagnostic
-# information about Boost's automatic linking
-# displayed during compilation
+# case results are reported in variables::
+#
+# Boost_FOUND - True if headers and requested libraries were found
+# Boost_INCLUDE_DIRS - Boost include directories
+# Boost_LIBRARY_DIRS - Link directories for Boost libraries
+# Boost_LIBRARIES - Boost component libraries to be linked
+# Boost_<C>_FOUND - True if component <C> was found (<C> is upper-case)
+# Boost_<C>_LIBRARY - Libraries to link for component <C> (may include
+# target_link_libraries debug/optimized keywords)
+# Boost_VERSION - BOOST_VERSION value from boost/version.hpp
+# Boost_LIB_VERSION - Version string appended to library filenames
+# Boost_MAJOR_VERSION - Boost major version number (X in X.y.z)
+# Boost_MINOR_VERSION - Boost minor version number (Y in x.Y.z)
+# Boost_SUBMINOR_VERSION - Boost subminor version number (Z in x.y.Z)
+# Boost_LIB_DIAGNOSTIC_DEFINITIONS (Windows)
+# - Pass to add_definitions() to have diagnostic
+# information about Boost's automatic linking
+# displayed during compilation
+#
+# This module reads hints about search locations from variables::
+#
+# BOOST_ROOT - Preferred installation prefix
+# (or BOOSTROOT)
+# BOOST_INCLUDEDIR - Preferred include directory e.g. <prefix>/include
+# BOOST_LIBRARYDIR - Preferred library directory e.g. <prefix>/lib
+# Boost_NO_SYSTEM_PATHS - Set to ON to disable searching in locations not
+# specified by these hint variables. Default is OFF.
+# Boost_ADDITIONAL_VERSIONS
+# - List of Boost versions not known to this module
+# (Boost install locations may contain the version)
+#
+# and saves search results persistently in CMake cache entries::
+#
+# Boost_INCLUDE_DIR - Directory containing Boost headers
+# Boost_LIBRARY_DIR - Directory containing Boost libraries
+# Boost_<C>_LIBRARY_DEBUG - Component <C> library debug variant
+# Boost_<C>_LIBRARY_RELEASE - Component <C> library release variant
+#
+# Users may set these hints or results as cache entries. Projects
+# should not read these entries directly but instead use the above
+# result variables. Note that some hint names start in upper-case
+# "BOOST". One may specify these as environment variables if they are
+# not specified as CMake variables or cache entries.
+#
+# This module first searches for the Boost header files using the above
+# hint variables (excluding BOOST_LIBRARYDIR) and saves the result in
+# Boost_INCLUDE_DIR. Then it searches for requested component libraries
+# using the above hints (excluding BOOST_INCLUDEDIR and
+# Boost_ADDITIONAL_VERSIONS), "lib" directories near Boost_INCLUDE_DIR,
+# and the library name configuration settings below. It saves the
+# library directory in Boost_LIBRARY_DIR and individual library
+# locations in Boost_<C>_LIBRARY_DEBUG and Boost_<C>_LIBRARY_RELEASE.
+# When one changes settings used by previous searches in the same build
+# tree (excluding environment variables) this module discards previous
+# search results affected by the changes and searches again.
#
-# This module reads hints about search locations from variables:
-# BOOST_ROOT - Preferred installation prefix
-# (or BOOSTROOT)
-# BOOST_INCLUDEDIR - Preferred include directory e.g. <prefix>/include
-# BOOST_LIBRARYDIR - Preferred library directory e.g. <prefix>/lib
-# Boost_NO_SYSTEM_PATHS - Set to ON to disable searching in locations not
-# specified by these hint variables. Default is OFF.
-# Boost_ADDITIONAL_VERSIONS
-# - List of Boost versions not known to this module
-# (Boost install locations may contain the version)
-# and saves search results persistently in CMake cache entries:
-# Boost_INCLUDE_DIR - Directory containing Boost headers
-# Boost_LIBRARY_DIR - Directory containing Boost libraries
-# Boost_<C>_LIBRARY_DEBUG - Component <C> library debug variant
-# Boost_<C>_LIBRARY_RELEASE - Component <C> library release variant
-# Users may set these hints or results as cache entries. Projects should
-# not read these entries directly but instead use the above result variables.
-# Note that some hint names start in upper-case "BOOST". One may specify
-# these as environment variables if they are not specified as CMake variables
-# or cache entries.
+# Boost libraries come in many variants encoded in their file name.
+# Users or projects may tell this module which variant to find by
+# setting variables::
#
-# This module first searches for the Boost header files using the above hint
-# variables (excluding BOOST_LIBRARYDIR) and saves the result in
-# Boost_INCLUDE_DIR. Then it searches for requested component libraries using
-# the above hints (excluding BOOST_INCLUDEDIR and Boost_ADDITIONAL_VERSIONS),
-# "lib" directories near Boost_INCLUDE_DIR, and the library name configuration
-# settings below. It saves the library directory in Boost_LIBRARY_DIR and
-# individual library locations in Boost_<C>_LIBRARY_DEBUG and
-# Boost_<C>_LIBRARY_RELEASE. When one changes settings used by previous
-# searches in the same build tree (excluding environment variables) this
-# module discards previous search results affected by the changes and searches
-# again.
+# Boost_USE_MULTITHREADED - Set to OFF to use the non-multithreaded
+# libraries ('mt' tag). Default is ON.
+# Boost_USE_STATIC_LIBS - Set to ON to force the use of the static
+# libraries. Default is OFF.
+# Boost_USE_STATIC_RUNTIME - Set to ON or OFF to specify whether to use
+# libraries linked statically to the C++ runtime
+# ('s' tag). Default is platform dependent.
+# Boost_USE_DEBUG_RUNTIME - Set to ON or OFF to specify whether to use
+# libraries linked to the MS debug C++ runtime
+# ('g' tag). Default is ON.
+# Boost_USE_DEBUG_PYTHON - Set to ON to use libraries compiled with a
+# debug Python build ('y' tag). Default is OFF.
+# Boost_USE_STLPORT - Set to ON to use libraries compiled with
+# STLPort ('p' tag). Default is OFF.
+# Boost_USE_STLPORT_DEPRECATED_NATIVE_IOSTREAMS
+# - Set to ON to use libraries compiled with
+# STLPort deprecated "native iostreams"
+# ('n' tag). Default is OFF.
+# Boost_COMPILER - Set to the compiler-specific library suffix
+# (e.g. "-gcc43"). Default is auto-computed
+# for the C++ compiler in use.
+# Boost_THREADAPI - Suffix for "thread" component library name,
+# such as "pthread" or "win32". Names with
+# and without this suffix will both be tried.
+# Boost_NAMESPACE - Alternate namespace used to build boost with
+# e.g. if set to "myboost", will search for
+# myboost_thread instead of boost_thread.
+#
+# Other variables one may set to control this module are::
+#
+# Boost_DEBUG - Set to ON to enable debug output from FindBoost.
+# Please enable this before filing any bug report.
+# Boost_DETAILED_FAILURE_MSG
+# - Set to ON to add detailed information to the
+# failure message even when the REQUIRED option
+# is not given to the find_package call.
+# Boost_REALPATH - Set to ON to resolve symlinks for discovered
+# libraries to assist with packaging. For example,
+# the "system" component library may be resolved to
+# "/usr/lib/libboost_system.so.1.42.0" instead of
+# "/usr/lib/libboost_system.so". This does not
+# affect linking and should not be enabled unless
+# the user needs this information.
#
-# Boost libraries come in many variants encoded in their file name. Users or
-# projects may tell this module which variant to find by setting variables:
-# Boost_USE_MULTITHREADED - Set to OFF to use the non-multithreaded
-# libraries ('mt' tag). Default is ON.
-# Boost_USE_STATIC_LIBS - Set to ON to force the use of the static
-# libraries. Default is OFF.
-# Boost_USE_STATIC_RUNTIME - Set to ON or OFF to specify whether to use
-# libraries linked statically to the C++ runtime
-# ('s' tag). Default is platform dependent.
-# Boost_USE_DEBUG_PYTHON - Set to ON to use libraries compiled with a
-# debug Python build ('y' tag). Default is OFF.
-# Boost_USE_STLPORT - Set to ON to use libraries compiled with
-# STLPort ('p' tag). Default is OFF.
-# Boost_USE_STLPORT_DEPRECATED_NATIVE_IOSTREAMS
-# - Set to ON to use libraries compiled with
-# STLPort deprecated "native iostreams"
-# ('n' tag). Default is OFF.
-# Boost_COMPILER - Set to the compiler-specific library suffix
-# (e.g. "-gcc43"). Default is auto-computed
-# for the C++ compiler in use.
-# Boost_THREADAPI - Suffix for "thread" component library name,
-# such as "pthread" or "win32". Names with
-# and without this suffix will both be tried.
-# Other variables one may set to control this module are:
-# Boost_DEBUG - Set to ON to enable debug output from FindBoost.
-# Please enable this before filing any bug report.
-# Boost_DETAILED_FAILURE_MSG
-# - Set to ON to add detailed information to the
-# failure message even when the REQUIRED option
-# is not given to the find_package call.
-# Boost_REALPATH - Set to ON to resolve symlinks for discovered
-# libraries to assist with packaging. For example,
-# the "system" component library may be resolved to
-# "/usr/lib/libboost_system.so.1.42.0" instead of
-# "/usr/lib/libboost_system.so". This does not
-# affect linking and should not be enabled unless
-# the user needs this information.
# On Visual Studio and Borland compilers Boost headers request automatic
-# linking to corresponding libraries. This requires matching libraries to be
-# linked explicitly or available in the link library search path. In this
-# case setting Boost_USE_STATIC_LIBS to OFF may not achieve dynamic linking.
-# Boost automatic linking typically requests static libraries with a few
-# exceptions (such as Boost.Python). Use
-# add_definitions(${Boost_LIB_DIAGNOSTIC_DEFINITIONS})
+# linking to corresponding libraries. This requires matching libraries
+# to be linked explicitly or available in the link library search path.
+# In this case setting Boost_USE_STATIC_LIBS to OFF may not achieve
+# dynamic linking. Boost automatic linking typically requests static
+# libraries with a few exceptions (such as Boost.Python). Use::
+#
+# add_definitions(${Boost_LIB_DIAGNOSTIC_DEFINITIONS})
+#
# to ask Boost to report information about automatic linking requests.
#
-# Example to find Boost headers only:
-# find_package(Boost 1.36.0)
-# if(Boost_FOUND)
-# include_directories(${Boost_INCLUDE_DIRS})
-# add_executable(foo foo.cc)
-# endif()
-# Example to find Boost headers and some libraries:
-# set(Boost_USE_STATIC_LIBS ON)
-# set(Boost_USE_MULTITHREADED ON)
-# set(Boost_USE_STATIC_RUNTIME OFF)
-# find_package(Boost 1.36.0 COMPONENTS date_time filesystem system ...)
-# if(Boost_FOUND)
-# include_directories(${Boost_INCLUDE_DIRS})
-# add_executable(foo foo.cc)
-# target_link_libraries(foo ${Boost_LIBRARIES})
-# endif()
+# Example to find Boost headers only::
+#
+# find_package(Boost 1.36.0)
+# if(Boost_FOUND)
+# include_directories(${Boost_INCLUDE_DIRS})
+# add_executable(foo foo.cc)
+# endif()
+#
+# Example to find Boost headers and some *static* libraries::
#
-# Boost CMake ----------------------------------------------------------
+# set(Boost_USE_STATIC_LIBS ON) # only find static libs
+# set(Boost_USE_MULTITHREADED ON)
+# set(Boost_USE_STATIC_RUNTIME OFF)
+# find_package(Boost 1.36.0 COMPONENTS date_time filesystem system ...)
+# if(Boost_FOUND)
+# include_directories(${Boost_INCLUDE_DIRS})
+# add_executable(foo foo.cc)
+# target_link_libraries(foo ${Boost_LIBRARIES})
+# endif()
+#
+# Boost CMake
+# ^^^^^^^^^^^
#
# If Boost was built using the boost-cmake project it provides a package
-# configuration file for use with find_package's Config mode. This module
-# looks for the package configuration file called BoostConfig.cmake or
-# boost-config.cmake and stores the result in cache entry "Boost_DIR". If
-# found, the package configuration file is loaded and this module returns with
-# no further action. See documentation of the Boost CMake package
-# configuration for details on what it provides.
+# configuration file for use with find_package's Config mode. This
+# module looks for the package configuration file called
+# BoostConfig.cmake or boost-config.cmake and stores the result in cache
+# entry "Boost_DIR". If found, the package configuration file is loaded
+# and this module returns with no further action. See documentation of
+# the Boost CMake package configuration for details on what it provides.
#
# Set Boost_NO_BOOST_CMAKE to ON to disable the search for boost-cmake.
@@ -279,15 +308,20 @@ endmacro() macro(_Boost_FIND_LIBRARY var)
find_library(${var} ${ARGN})
- # If we found the first library save Boost_LIBRARY_DIR.
- if(${var} AND NOT Boost_LIBRARY_DIR)
- get_filename_component(_dir "${${var}}" PATH)
- set(Boost_LIBRARY_DIR "${_dir}" CACHE PATH "Boost library directory" FORCE)
+ if(${var})
+ # If this is the first library found then save Boost_LIBRARY_DIR.
+ if(NOT Boost_LIBRARY_DIR)
+ get_filename_component(_dir "${${var}}" PATH)
+ set(Boost_LIBRARY_DIR "${_dir}" CACHE PATH "Boost library directory" FORCE)
+ endif()
+ elseif(_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT)
+ # Try component-specific hints but do not save Boost_LIBRARY_DIR.
+ find_library(${var} HINTS ${_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT} ${ARGN})
endif()
# If Boost_LIBRARY_DIR is known then search only there.
if(Boost_LIBRARY_DIR)
- set(_boost_LIBRARY_SEARCH_DIRS ${Boost_LIBRARY_DIR} NO_DEFAULT_PATH)
+ set(_boost_LIBRARY_SEARCH_DIRS ${Boost_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
endif()
endmacro()
@@ -341,9 +375,9 @@ endfunction() # Guesses Boost's compiler prefix used in built library names
# Returns the guess by setting the variable pointed to by _ret
function(_Boost_GUESS_COMPILER_PREFIX _ret)
- if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel"
- OR ${CMAKE_CXX_COMPILER} MATCHES "icl"
- OR ${CMAKE_CXX_COMPILER} MATCHES "icpc")
+ if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel"
+ OR CMAKE_CXX_COMPILER MATCHES "icl"
+ OR CMAKE_CXX_COMPILER MATCHES "icpc")
if(WIN32)
set (_boost_COMPILER "-iw")
else()
@@ -369,7 +403,7 @@ function(_Boost_GUESS_COMPILER_PREFIX _ret) set(_boost_COMPILER "-vc6") # yes, this is correct
elseif (BORLAND)
set(_boost_COMPILER "-bcb")
- elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "SunPro")
+ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
set(_boost_COMPILER "-sw")
elseif (MINGW)
if(${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION} VERSION_LESS 1.34)
@@ -425,6 +459,9 @@ endfunction() if(NOT DEFINED Boost_USE_MULTITHREADED)
set(Boost_USE_MULTITHREADED TRUE)
endif()
+if(NOT DEFINED Boost_USE_DEBUG_RUNTIME)
+ set(Boost_USE_DEBUG_RUNTIME TRUE)
+endif()
# Check the version of Boost against the requested version.
if(Boost_FIND_VERSION AND NOT Boost_FIND_VERSION_MINOR)
@@ -441,7 +478,7 @@ else() # The user has not requested an exact version. Among known
# versions, find those that are acceptable to the user request.
set(_Boost_KNOWN_VERSIONS ${Boost_ADDITIONAL_VERSIONS}
- "1.56.0" "1.56" "1.55.0" "1.55" "1.54.0" "1.54"
+ "1.58.0" "1.58" "1.57.0" "1.57" "1.56.0" "1.56" "1.55.0" "1.55" "1.54.0" "1.54"
"1.53.0" "1.53" "1.52.0" "1.52" "1.51.0" "1.51"
"1.50.0" "1.50" "1.49.0" "1.49" "1.48.0" "1.48" "1.47.0" "1.47" "1.46.1"
"1.46.0" "1.46" "1.45.0" "1.45" "1.44.0" "1.44" "1.43.0" "1.43" "1.42.0" "1.42"
@@ -598,12 +635,12 @@ if(NOT Boost_INCLUDE_DIR) set(_boost_BOOSTIFIED_VERSION)
# Transform 1.35 => 1_35 and 1.36.0 => 1_36_0
- if(_boost_VER MATCHES "[0-9]+\\.[0-9]+\\.[0-9]+")
- string(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\1_\\2_\\3"
- _boost_BOOSTIFIED_VERSION ${_boost_VER})
- elseif(_boost_VER MATCHES "[0-9]+\\.[0-9]+")
- string(REGEX REPLACE "([0-9]+)\\.([0-9]+)" "\\1_\\2"
- _boost_BOOSTIFIED_VERSION ${_boost_VER})
+ if(_boost_VER MATCHES "([0-9]+)\\.([0-9]+)\\.([0-9]+)")
+ set(_boost_BOOSTIFIED_VERSION
+ "${CMAKE_MATCH_1}_${CMAKE_MATCH_2}_${CMAKE_MATCH_3}")
+ elseif(_boost_VER MATCHES "([0-9]+)\\.([0-9]+)")
+ set(_boost_BOOSTIFIED_VERSION
+ "${CMAKE_MATCH_1}_${CMAKE_MATCH_2}")
endif()
list(APPEND _boost_PATH_SUFFIXES
@@ -651,7 +688,7 @@ if(Boost_INCLUDE_DIR) set(_Boost_VERSION_REGEX "([0-9]+)")
set(_Boost_LIB_VERSION_REGEX "\"([0-9_]+)\"")
foreach(v VERSION LIB_VERSION)
- if("${_boost_VERSION_HPP_CONTENTS}" MATCHES ".*#define BOOST_${v} ${_Boost_${v}_REGEX}.*")
+ if("${_boost_VERSION_HPP_CONTENTS}" MATCHES "#define BOOST_${v} ${_Boost_${v}_REGEX}")
set(Boost_${v} "${CMAKE_MATCH_1}")
endif()
endforeach()
@@ -706,10 +743,24 @@ else() endif()
# ------------------------------------------------------------------------
+# Prefix initialization
+# ------------------------------------------------------------------------
+
+set(Boost_LIB_PREFIX "")
+if ( WIN32 AND Boost_USE_STATIC_LIBS AND NOT CYGWIN)
+ set(Boost_LIB_PREFIX "lib")
+endif()
+
+if ( NOT Boost_NAMESPACE )
+ set(Boost_NAMESPACE "boost")
+endif()
+
+# ------------------------------------------------------------------------
# Suffix initialization and compiler suffix detection.
# ------------------------------------------------------------------------
set(_Boost_VARS_NAME
+ Boost_NAMESPACE
Boost_COMPILER
Boost_THREADAPI
Boost_USE_DEBUG_PYTHON
@@ -722,11 +773,6 @@ set(_Boost_VARS_NAME _Boost_CHANGE_DETECT(_Boost_CHANGE_LIBNAME ${_Boost_VARS_NAME})
# Setting some more suffixes for the library
-set(Boost_LIB_PREFIX "")
-if ( WIN32 AND Boost_USE_STATIC_LIBS AND NOT CYGWIN)
- set(Boost_LIB_PREFIX "lib")
-endif()
-
if (Boost_COMPILER)
set(_boost_COMPILER ${Boost_COMPILER})
if(Boost_DEBUG)
@@ -768,7 +814,7 @@ if(Boost_USE_STATIC_RUNTIME) endif()
# g using debug versions of the standard and runtime
# support libraries
-if(WIN32)
+if(WIN32 AND Boost_USE_DEBUG_RUNTIME)
if(MSVC OR "${CMAKE_CXX_COMPILER}" MATCHES "icl"
OR "${CMAKE_CXX_COMPILER}" MATCHES "icpc")
set(_boost_DEBUG_ABI_TAG "${_boost_DEBUG_ABI_TAG}g")
@@ -811,7 +857,7 @@ if(_Boost_CHANGE_LIBDIR AND NOT _Boost_LIBRARY_DIR_CHANGED) endif()
if(Boost_LIBRARY_DIR)
- set(_boost_LIBRARY_SEARCH_DIRS ${Boost_LIBRARY_DIR} NO_DEFAULT_PATH)
+ set(_boost_LIBRARY_SEARCH_DIRS ${Boost_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
else()
set(_boost_LIBRARY_SEARCH_DIRS "")
if(BOOST_LIBRARYDIR)
@@ -910,22 +956,45 @@ foreach(COMPONENT ${Boost_FIND_COMPONENTS}) set( _boost_docstring_release "Boost ${COMPONENT} library (release)")
set( _boost_docstring_debug "Boost ${COMPONENT} library (debug)")
+ # Compute component-specific hints.
+ set(_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT "")
+ if(${COMPONENT} STREQUAL "mpi" OR ${COMPONENT} STREQUAL "mpi_python" OR
+ ${COMPONENT} STREQUAL "graph_parallel")
+ foreach(lib ${MPI_CXX_LIBRARIES} ${MPI_C_LIBRARIES})
+ if(IS_ABSOLUTE "${lib}")
+ get_filename_component(libdir "${lib}" PATH)
+ string(REPLACE "\\" "/" libdir "${libdir}")
+ list(APPEND _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT ${libdir})
+ endif()
+ endforeach()
+ endif()
+
+ # Consolidate and report component-specific hints.
+ if(_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT)
+ list(REMOVE_DUPLICATES _Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT)
+ if(Boost_DEBUG)
+ message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
+ "Component-specific library search paths for ${COMPONENT}: "
+ "${_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT}")
+ endif()
+ endif()
+
#
# Find RELEASE libraries
#
set(_boost_RELEASE_NAMES
- ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}-${Boost_LIB_VERSION}
- ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}
- ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}-${Boost_LIB_VERSION}
- ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}
- ${Boost_LIB_PREFIX}boost_${COMPONENT} )
+ ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}-${Boost_LIB_VERSION}
+ ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}
+ ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${COMPONENT}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}-${Boost_LIB_VERSION}
+ ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${COMPONENT}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}
+ ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${COMPONENT} )
if(_boost_STATIC_RUNTIME_WORKAROUND)
set(_boost_RELEASE_STATIC_ABI_TAG "-s${_boost_RELEASE_ABI_TAG}")
list(APPEND _boost_RELEASE_NAMES
- ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG}-${Boost_LIB_VERSION}
- ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG}
- ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG}-${Boost_LIB_VERSION}
- ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG} )
+ ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG}-${Boost_LIB_VERSION}
+ ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG}
+ ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${COMPONENT}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG}-${Boost_LIB_VERSION}
+ ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${COMPONENT}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG} )
endif()
if(Boost_THREADAPI AND ${COMPONENT} STREQUAL "thread")
_Boost_PREPEND_LIST_WITH_THREADAPI(_boost_RELEASE_NAMES ${_boost_RELEASE_NAMES})
@@ -949,19 +1018,19 @@ foreach(COMPONENT ${Boost_FIND_COMPONENTS}) # Find DEBUG libraries
#
set(_boost_DEBUG_NAMES
- ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}-${Boost_LIB_VERSION}
- ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}
- ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}-${Boost_LIB_VERSION}
- ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}
- ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}
- ${Boost_LIB_PREFIX}boost_${COMPONENT} )
+ ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}-${Boost_LIB_VERSION}
+ ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}
+ ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${COMPONENT}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}-${Boost_LIB_VERSION}
+ ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${COMPONENT}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}
+ ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${COMPONENT}${_boost_MULTITHREADED}
+ ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${COMPONENT} )
if(_boost_STATIC_RUNTIME_WORKAROUND)
set(_boost_DEBUG_STATIC_ABI_TAG "-s${_boost_DEBUG_ABI_TAG}")
list(APPEND _boost_DEBUG_NAMES
- ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG}-${Boost_LIB_VERSION}
- ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG}
- ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG}-${Boost_LIB_VERSION}
- ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG} )
+ ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG}-${Boost_LIB_VERSION}
+ ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG}
+ ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${COMPONENT}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG}-${Boost_LIB_VERSION}
+ ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${COMPONENT}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG} )
endif()
if(Boost_THREADAPI AND ${COMPONENT} STREQUAL "thread")
_Boost_PREPEND_LIST_WITH_THREADAPI(_boost_DEBUG_NAMES ${_boost_DEBUG_NAMES})
@@ -1034,7 +1103,7 @@ if(Boost_FOUND) "${Boost_ERROR_REASON} Boost libraries:\n")
foreach(COMPONENT ${_Boost_MISSING_COMPONENTS})
set(Boost_ERROR_REASON
- "${Boost_ERROR_REASON} boost_${COMPONENT}\n")
+ "${Boost_ERROR_REASON} ${Boost_NAMESPACE}_${COMPONENT}\n")
endforeach()
list(LENGTH Boost_FIND_COMPONENTS Boost_NUM_COMPONENTS_WANTED)
diff --git a/cmake/macros/FindMySQL.cmake b/cmake/macros/FindMySQL.cmake index 2c393463c47..6b00510ba42 100644 --- a/cmake/macros/FindMySQL.cmake +++ b/cmake/macros/FindMySQL.cmake @@ -5,6 +5,7 @@ # This module defines # MYSQL_INCLUDE_DIR, where to find mysql.h # MYSQL_LIBRARIES, the libraries to link against to connect to MySQL +# MYSQL_EXECUTABLE, the MySQL executable. # MYSQL_FOUND, if false, you cannot build anything that requires MySQL. # also defined, but not for general use are @@ -94,6 +95,7 @@ find_path(MYSQL_INCLUDE_DIR "$ENV{ProgramFiles}/MySQL/*/include" "$ENV{SystemDrive}/MySQL/*/include" "c:/msys/local/include" + "$ENV{MYSQL_ROOT}/include" DOC "Specify the directory containing mysql.h." ) @@ -159,6 +161,7 @@ if( WIN32 ) "$ENV{ProgramFiles}/MySQL/*/lib/opt" "$ENV{SystemDrive}/MySQL/*/lib/opt" "c:/msys/local/include" + "$ENV{MYSQL_ROOT}/lib" DOC "Specify the location of the mysql library here." ) endif( WIN32 ) @@ -180,6 +183,65 @@ else( NOT WIN32 ) set( MYSQL_EXTRA_LIBRARIES "" ) endif( NOT WIN32 ) +if( UNIX ) + find_program(MYSQL_EXECUTABLE mysql + PATHS + ${MYSQL_CONFIG_PREFER_PATH} + /usr/local/mysql/bin/ + /usr/local/bin/ + /usr/bin/ + DOC + "path to your mysql binary." + ) +endif( UNIX ) + +if( WIN32 ) + find_program(MYSQL_EXECUTABLE mysql + PATHS + "C:/Program Files/MySQL/MySQL Server 5.6/bin" + "C:/Program Files/MySQL/MySQL Server 5.6/bin/opt" + "C:/Program Files/MySQL/MySQL Server 5.5/bin" + "C:/Program Files/MySQL/MySQL Server 5.5/bin/opt" + "C:/Program Files/MySQL/MySQL Server 5.1/bin" + "C:/Program Files/MySQL/MySQL Server 5.1/bin/opt" + "C:/Program Files/MySQL/MySQL Server 5.0/bin" + "C:/Program Files/MySQL/MySQL Server 5.0/bin/opt" + "C:/Program Files/MySQL/bin" + "C:/Program Files (x86)/MySQL/MySQL Server 5.6/bin" + "C:/Program Files (x86)/MySQL/MySQL Server 5.6/bin/opt" + "C:/Program Files (x86)/MySQL/MySQL Server 5.5/bin" + "C:/Program Files (x86)/MySQL/MySQL Server 5.5/bin/opt" + "C:/Program Files (x86)/MySQL/MySQL Server 5.1/bin" + "C:/Program Files (x86)/MySQL/MySQL Server 5.1/bin/opt" + "C:/Program Files (x86)/MySQL/MySQL Server 5.0/bin" + "C:/Program Files (x86)/MySQL/MySQL Server 5.0/bin/opt" + "C:/Program Files (x86)/MySQL/bin" + "C:/MySQL/bin/debug" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.6;Location]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.6;Location]/bin/opt" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.5;Location]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.5;Location]/bin/opt" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.1;Location]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.1;Location]/bin/opt" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.0;Location]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.0;Location]/bin/opt" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.6;Location]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.6;Location]/bin/opt" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.5;Location]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.5;Location]/bin/opt" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.1;Location]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.1;Location]/bin/opt" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.0;Location]/bin" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.0;Location]/bin/opt" + "$ENV{ProgramFiles}/MySQL/*/bin/opt" + "$ENV{SystemDrive}/MySQL/*/bin/opt" + "c:/msys/local/include" + "$ENV{MYSQL_ROOT}/bin" + DOC + "path to your mysql binary." + ) +endif( WIN32 ) + if( MYSQL_LIBRARY ) if( MYSQL_INCLUDE_DIR ) set( MYSQL_FOUND 1 ) @@ -188,7 +250,10 @@ if( MYSQL_LIBRARY ) else( MYSQL_INCLUDE_DIR ) message(FATAL_ERROR "Could not find MySQL headers! Please install the development libraries and headers") endif( MYSQL_INCLUDE_DIR ) - mark_as_advanced( MYSQL_FOUND MYSQL_LIBRARY MYSQL_EXTRA_LIBRARIES MYSQL_INCLUDE_DIR ) + if( MYSQL_EXECUTABLE ) + message(STATUS "Found MySQL executable: ${MYSQL_EXECUTABLE}") + endif( MYSQL_EXECUTABLE ) + mark_as_advanced( MYSQL_FOUND MYSQL_LIBRARY MYSQL_EXTRA_LIBRARIES MYSQL_INCLUDE_DIR MYSQL_EXECUTABLE) else( MYSQL_LIBRARY ) message(FATAL_ERROR "Could not find the MySQL libraries! Please install the development libraries and headers") endif( MYSQL_LIBRARY ) diff --git a/cmake/macros/FindOpenSSL.cmake b/cmake/macros/FindOpenSSL.cmake index 1cc34b36a4c..7baa43274ab 100644 --- a/cmake/macros/FindOpenSSL.cmake +++ b/cmake/macros/FindOpenSSL.cmake @@ -186,7 +186,7 @@ if (OPENSSL_INCLUDE_DIR) set(OPENSSL_VERSION "${_OPENSSL_VERSION}") else (_OPENSSL_VERSION) file(STRINGS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h" openssl_version_str - REGEX "^#define[\t ]+OPENSSL_VERSION_NUMBER[\t ]+0x[0-9][0-9][0-9][0-9][0-9][0-9].*") + REGEX "^# *define[\t ]+OPENSSL_VERSION_NUMBER[\t ]+0x[0-9][0-9][0-9][0-9][0-9][0-9].*") # The version number is encoded as 0xMNNFFPPS: major minor fix patch status # The status gives if this is a developer or prerelease and is ignored here. diff --git a/cmake/macros/GroupSources.cmake b/cmake/macros/GroupSources.cmake new file mode 100644 index 00000000000..3acb03e7b4c --- /dev/null +++ b/cmake/macros/GroupSources.cmake @@ -0,0 +1,46 @@ +# Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/> +# +# This file is free software; as a special exception the author gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +macro(GroupSources dir) + # Skip this if WITH_SOURCE_TREE is not set (empty string). + if (NOT ${_WITH_SOURCE_TREE} STREQUAL "") + # Include all header and c files + file(GLOB_RECURSE elements RELATIVE ${dir} *.h *.hpp *.c *.cpp *.cc) + + foreach(element ${elements}) + # Extract filename and directory + get_filename_component(element_name ${element} NAME) + get_filename_component(element_dir ${element} DIRECTORY) + + if (NOT ${element_dir} STREQUAL "") + # If the file is in a subdirectory use it as source group. + if (${_WITH_SOURCE_TREE} STREQUAL "flat") + # Build flat structure by using only the first subdirectory. + string(FIND ${element_dir} "/" delemiter_pos) + if (NOT ${delemiter_pos} EQUAL -1) + string(SUBSTRING ${element_dir} 0 ${delemiter_pos} group_name) + source_group("${group_name}" FILES ${dir}/${element}) + else() + # Build hierarchical structure. + # File is in root directory. + source_group("${element_dir}" FILES ${dir}/${element}) + endif() + else() + # Use the full hierarchical structure to build source_groups. + string(REPLACE "/" "\\" group_name ${element_dir}) + source_group("${group_name}" FILES ${dir}/${element}) + endif() + else() + # If the file is in the root directory, place it in the root source_group. + source_group("\\" FILES ${dir}/${element}) + endif() + endforeach() + endif() +endmacro() diff --git a/cmake/options.cmake b/cmake/options.cmake index 83783fdc1b6..486cc909605 100644 --- a/cmake/options.cmake +++ b/cmake/options.cmake @@ -15,4 +15,6 @@ option(USE_SCRIPTPCH "Use precompiled headers when compiling scripts" option(USE_COREPCH "Use precompiled headers when compiling servers" 1) option(WITH_WARNINGS "Show all warnings during compile" 0) option(WITH_COREDEBUG "Include additional debug-code in core" 0) +set(WITH_SOURCE_TREE "no" CACHE STRING "Build the source tree for IDE's.") +set_property(CACHE WITH_SOURCE_TREE PROPERTY STRINGS no flat hierarchical) option(WITHOUT_GIT "Disable the GIT testing routines" 0) diff --git a/cmake/platform/settings.cmake b/cmake/platform/settings.cmake deleted file mode 100644 index 6df5bc2165f..00000000000 --- a/cmake/platform/settings.cmake +++ /dev/null @@ -1,5 +0,0 @@ -# set installation prefix -if( PREFIX ) - set(CMAKE_INSTALL_PREFIX "${PREFIX}") -endif() - diff --git a/cmake/platform/unix/settings.cmake b/cmake/platform/unix/settings.cmake index ab54124b5a1..754ff450fcc 100644 --- a/cmake/platform/unix/settings.cmake +++ b/cmake/platform/unix/settings.cmake @@ -2,6 +2,7 @@ if(CMAKE_SYSTEM_NAME MATCHES "Linux") if (NOT NOJEM) set(JEMALLOC_LIBRARY "jemalloc") + add_definitions(-DNO_BUFFERPOOL) message(STATUS "UNIX: Using jemalloc") endif() endif() @@ -40,5 +41,5 @@ elseif(CMAKE_C_COMPILER MATCHES "icc") elseif(CMAKE_C_COMPILER MATCHES "clang" OR CMAKE_C_COMPILER_ID STREQUAL "Clang") include(${CMAKE_SOURCE_DIR}/cmake/compiler/clang/settings.cmake) else() -add_definitions(-D_BUILD_DIRECTIVE='"${CMAKE_BUILD_TYPE}"') + add_definitions(-D_BUILD_DIRECTIVE='"${CMAKE_BUILD_TYPE}"') endif() diff --git a/cmake/showoptions.cmake b/cmake/showoptions.cmake index ea4820a01f0..bb848a2a9c0 100644 --- a/cmake/showoptions.cmake +++ b/cmake/showoptions.cmake @@ -62,6 +62,29 @@ else() message("* Use coreside debug : No (default)") endif() +if( WITH_SOURCE_TREE STREQUAL "flat" OR WITH_SOURCE_TREE STREQUAL "hierarchical" ) + # TODO: Remove this after Debian 8 is released and set general required version to 2.8.12 + # Debian 7 is shipped with CMake 2.8.9 . But DIRECTORY flag of get_filename_component requires 2.8.12 . + if (NOT CMAKE_VERSION VERSION_LESS 2.8.12) + message("* Show source tree : Yes - ${WITH_SOURCE_TREE}") + set(_WITH_SOURCE_TREE ${WITH_SOURCE_TREE} CACHE INTERNAL "WITH_SOURCE_TREE support enabled.") + else() + message("* Show source tree : No (default)") + + message("") + message(" *** WITH_SOURCE_TREE - WARNING!") + message(" *** This functionality is ONLY supported on CMake 2.8.12 or higher.") + message(" *** You are running ${CMAKE_VERSION}, which does not have the functions needed") + message(" *** to create a sourcetree - this option is thus forced to disabled!") + message("") + + set(_WITH_SOURCE_TREE "" CACHE INTERNAL "WITH_SOURCE_TREE support disabled.") + endif() +else() + message("* Show source tree : No (default)") + set(_WITH_SOURCE_TREE "" CACHE INTERNAL "WITH_SOURCE_TREE support disabled.") +endif() + if ( WITHOUT_GIT ) message("* Use GIT revision hash : No") message("") diff --git a/contrib/valgrind/helgrind.supp b/contrib/valgrind/helgrind.supp index 59dec3018c6..582b25bbb10 100644 --- a/contrib/valgrind/helgrind.supp +++ b/contrib/valgrind/helgrind.supp @@ -45,3 +45,63 @@ fun:_ZNKSt13__atomic_baseIjE4loadESt12memory_order fun:_ZNKSt13__atomic_baseIjEcvjEv } +{ + [1] std::atomic + Helgrind:Race + fun:load + fun:_ZNKSt13__atomic_baseIjEcvjEv +} +{ + [1] std::atomic + Helgrind:Race + fun:store + fun:_ZNSt13__atomic_baseIiEaSEi +} +{ + [1] std::atomic + Helgrind:Race + fun:store + fun:_ZNSt13__atomic_baseIbEaSEb +} +{ + [1] std::atomic + Helgrind:Race + fun:load + fun:_ZNKSt11atomic_boolcvbEv +} +{ + [1] std::atomic + Helgrind:Race + fun:store + fun:_ZNSt13__atomic_baseIjEaSEj +} +{ + [2] integer counters + Helgrind:Race + fun:_ZN4MMAP11MMapManager7loadMapERKSsjii + fun:_ZN3Map8LoadMMapEii +} +{ + [2] integer counters + Helgrind:Race + fun:_ZN8Movement7counterIjLj4294967295EE8IncreaseEv +} +{ + [2] integer counters + Helgrind:Race + fun:_ZN3G3D10BufferPool6mallocEm +} +{ + [3] System libraries + Helgrind:Race + fun:__GI_mempcpy + fun:_IO_file_xsputn@@GLIBC_2.2.5 + fun:vfprintf +} +{ + [3] System libraries + Helgrind:Race + fun:__GI_mempcpy + fun:_IO_file_xsputn@@GLIBC_2.2.5 + fun:fwrite +} diff --git a/dep/CMakeLists.txt b/dep/CMakeLists.txt index f04c8580413..a38dcbe068d 100644 --- a/dep/CMakeLists.txt +++ b/dep/CMakeLists.txt @@ -35,6 +35,7 @@ if(SERVERS OR TOOLS) endif() if(SERVERS) + add_subdirectory(cppformat) add_subdirectory(gsoap) endif() diff --git a/dep/PackageList.txt b/dep/PackageList.txt index 4412df6ffa6..704fab5c168 100644 --- a/dep/PackageList.txt +++ b/dep/PackageList.txt @@ -4,10 +4,18 @@ Boost http://www.boost.org Version: 1.55 +Boost Process (Proposed for boost, but its not an official part of it yet. Used to start child processes.) + http://www.highscore.de/boost/process0.5/ + Version: 0.5 + bzip2 (a freely available, patent free, high-quality data compressor) http://www.bzip.org/ Version: 1.0.6 +cppformat (type safe format library) + https://github.com/cppformat/cppformat + Version: 1.1.0 fd53bb6fb88a23e38ec4fe331bfe95d7372d49c9 + G3D (a commercial-grade C++ 3D engine available as Open Source (BSD License) http://g3d.sourceforge.net/ Version: 9.0-Release r4036 @@ -17,8 +25,8 @@ jemalloc (a general-purpose scalable concurrent malloc-implementation) Version: 3.6.0 libMPQ (a library for reading MPQ files) - https://libmpq.org/ - Version: 1.0.4 + https://github.com/mbroemme/libmpq/ + Version: d59b4cf1d107b5f6a0f67d6bc545c6c6ebef3d74 SFMT (SIMD-oriented Fast Mersenne Twister) Based on http://agner.org/random/ diff --git a/dep/cppformat/CMakeLists.txt b/dep/cppformat/CMakeLists.txt new file mode 100644 index 00000000000..ea02185811f --- /dev/null +++ b/dep/cppformat/CMakeLists.txt @@ -0,0 +1,35 @@ +include(CheckCXXCompilerFlag) +include(CheckSymbolExists) + +set(FMT_SOURCES format.cc format.h) + +# Use variadic templates +add_definitions(-DFMT_VARIADIC_TEMPLATES=1) + +# Check if initializer lists are supported. +check_cxx_source_compiles(" + #include <initializer_list> + int main() {}" FMT_INITIALIZER_LIST) + +# Use delete +add_definitions(-DFMT_USE_DELETED_FUNCTIONS=1) + +# Use static assert +add_definitions(-DFMT_USE_STATIC_ASSERT=1) + +if (WIN32) + check_symbol_exists(open io.h HAVE_OPEN) +else () + check_symbol_exists(open fcntl.h HAVE_OPEN) +endif () +if (HAVE_OPEN) + add_definitions(-DFMT_USE_FILE_DESCRIPTORS=1) + set(FMT_SOURCES ${FMT_SOURCES} posix.cc posix.h) +endif () + +add_library(format STATIC ${FMT_SOURCES}) + +if (CMAKE_COMPILER_IS_GNUCXX) + set_target_properties(format PROPERTIES COMPILE_FLAGS + "-Wall -Wextra -Wshadow -pedantic") +endif () diff --git a/dep/cppformat/ChangeLog.rst b/dep/cppformat/ChangeLog.rst new file mode 100644 index 00000000000..fe780ae010c --- /dev/null +++ b/dep/cppformat/ChangeLog.rst @@ -0,0 +1,335 @@ +1.1.0 - 2015-03-06 +------------------ + +* Added ``BasicArrayWriter``, a class template that provides operations for + formatting and writing data into a fixed-size array + (`#105 <https://github.com/cppformat/cppformat/issues/105>`_ and + `#122 <https://github.com/cppformat/cppformat/issues/122>`_): + + .. code:: c++ + + char buffer[100]; + fmt::ArrayWriter w(buffer); + w.write("The answer is {}", 42); + +* Added `0 A.D. <http://play0ad.com/>`_ and `PenUltima Online (POL) + <http://www.polserver.com/>`_ to the list of notable projects using C++ Format. + +* C++ Format now uses MSVC intrinsics for better formatting performance + (`#115 <https://github.com/cppformat/cppformat/pull/115>`_, + `#116 <https://github.com/cppformat/cppformat/pull/116>`_, + `#118 <https://github.com/cppformat/cppformat/pull/118>`_ and + `#121 <https://github.com/cppformat/cppformat/pull/121>`_). + Previously these optimizations where only used on GCC and Clang. + Thanks to `@CarterLi <https://github.com/CarterLi>`_ and + `@objectx <https://github.com/objectx>`_. + +* CMake install target (`#119 <https://github.com/cppformat/cppformat/pull/119>`_). + Thanks to `@TrentHouliston <https://github.com/TrentHouliston>`_. + + You can now install C++ Format with ``make install`` command. + +* Improved `Biicode <http://www.biicode.com/>`_ support + (`#98 <https://github.com/cppformat/cppformat/pull/98>`_ and + `#104 <https://github.com/cppformat/cppformat/pull/104>`_). Thanks to + `@MariadeAnton <https://github.com/MariadeAnton>`_ and + `@franramirez688 <https://github.com/franramirez688>`_. + +* Improved support for bulding with `Android NDK + <https://developer.android.com/tools/sdk/ndk/index.html>`_ + (`#107 <https://github.com/cppformat/cppformat/pull/107>`_). + Thanks to `@newnon <https://github.com/newnon>`_. + + The `android-ndk-example <https://github.com/cppformat/android-ndk-example>`_ + repository provides and example of using C++ Format with Android NDK: + + .. image:: https://raw.githubusercontent.com/cppformat/android-ndk-example/ + master/screenshot.png + +* Improved documentation of ``SystemError`` and ``WindowsError`` + (`#54 <https://github.com/cppformat/cppformat/issues/54>`_). + +* Various code improvements + (`#110 <https://github.com/cppformat/cppformat/pull/110>`_, + `#111 <https://github.com/cppformat/cppformat/pull/111>`_ + `#112 <https://github.com/cppformat/cppformat/pull/112>`_). + Thanks to `@CarterLi <https://github.com/CarterLi>`_. + +* Improved compile-time errors when formatting wide into narrow strings + (`#117 <https://github.com/cppformat/cppformat/issues/117>`_). + +* Fixed ``BasicWriter::write`` without formatting arguments when C++11 support + is disabled (`#109 <https://github.com/cppformat/cppformat/issues/109>`_). + +* Fixed header-only build on OS X with GCC 4.9 + (`#124 <https://github.com/cppformat/cppformat/issues/124>`_). + +* Fixed packaging issues (`#94 <https://github.com/cppformat/cppformat/issues/94>`_). + +* Fixed warnings in GCC, MSVC and Xcode/Clang + (`#95 <https://github.com/cppformat/cppformat/issues/95>`_, + `#96 <https://github.com/cppformat/cppformat/issues/96>`_ and + `#114 <https://github.com/cppformat/cppformat/pull/114>`_). + +* Added `changelog <https://github.com/cppformat/cppformat/edit/master/ChangeLog.rst>`_ + (`#103 <https://github.com/cppformat/cppformat/issues/103>`_). + +1.0.0 - 2015-02-05 +------------------ + +* Add support for a header-only configuration when ``FMT_HEADER_ONLY`` is + defined before including ``format.h``: + + .. code:: c++ + + #define FMT_HEADER_ONLY + #include "format.h" + +* Compute string length in the constructor of ``BasicStringRef`` + instead of the ``size`` method + (`#79 <https://github.com/cppformat/cppformat/issues/79>`_). + This eliminates size computation for string literals on reasonable optimizing + compilers. + +* Fix formatting of types with overloaded ``operator <<`` for ``std::wostream`` + (`#86 <https://github.com/cppformat/cppformat/issues/86>`_): + + .. code:: c++ + + fmt::format(L"The date is {0}", Date(2012, 12, 9)); + +* Fix linkage of tests on Arch Linux + (`#89 <https://github.com/cppformat/cppformat/issues/89>`_). + +* Allow precision specifier for non-float arguments + (`#90 <https://github.com/cppformat/cppformat/issues/90>`_): + + .. code:: c++ + + fmt::print("{:.3}\n", "Carpet"); // prints "Car" + +* Fix build on Android NDK + (`#93 <https://github.com/cppformat/cppformat/issues/93>`_) + +* Improvements to documentation build procedure. + +* Remove ``FMT_SHARED`` CMake variable in favor of standard `BUILD_SHARED_LIBS + <http://www.cmake.org/cmake/help/v3.0/variable/BUILD_SHARED_LIBS.html>`_. + +* Fix error handling in ``fmt::fprintf``. + +* Fix a number of warnings. + +0.12.0 - 2014-10-25 +------------------- + +* [Breaking] Improved separation between formatting and buffer management. + ``Writer`` is now a base class that cannot be instantiated directly. + The new ``MemoryWriter`` class implements the default buffer management + with small allocations done on stack. So ``fmt::Writer`` should be replaced + with ``fmt::MemoryWriter`` in variable declarations. + + Old code: + + .. code:: c++ + + fmt::Writer w; + + New code: + + .. code:: c++ + + fmt::MemoryWriter w; + + If you pass ``fmt::Writer`` by reference, you can continue to do so: + + .. code:: c++ + + void f(fmt::Writer &w); + + This doesn't affect the formatting API. + +* Support for custom memory allocators + (`#69 <https://github.com/cppformat/cppformat/issues/69>`_) + +* Formatting functions now accept `signed char` and `unsigned char` strings as + arguments (`#73 <https://github.com/cppformat/cppformat/issues/73>`_): + + .. code:: c++ + + auto s = format("GLSL version: {}", glGetString(GL_VERSION)); + +* Reduced code bloat. According to the new `benchmark results + <https://github.com/cppformat/cppformat#compile-time-and-code-bloat>`_, + cppformat is close to ``printf`` and by the order of magnitude better than + Boost Format in terms of compiled code size. + +* Improved appearance of the documentation on mobile by using the `Sphinx + Bootstrap theme <http://ryan-roemer.github.io/sphinx-bootstrap-theme/>`_: + + .. |old| image:: https://cloud.githubusercontent.com/assets/576385/4792130/ + cd256436-5de3-11e4-9a62-c077d0c2b003.png + + .. |new| image:: https://cloud.githubusercontent.com/assets/576385/4792131/ + cd29896c-5de3-11e4-8f59-cac952942bf0.png + + +-------+-------+ + | Old | New | + +-------+-------+ + | |old| | |new| | + +-------+-------+ + +0.11.0 - 2014-08-21 +------------------- + +* Safe printf implementation with a POSIX extension for positional arguments: + + .. code:: c++ + + fmt::printf("Elapsed time: %.2f seconds", 1.23); + fmt::printf("%1$s, %3$d %2$s", weekday, month, day); + +* Arguments of ``char`` type can now be formatted as integers + (Issue `#55 <https://github.com/cppformat/cppformat/issues/55>`_): + + .. code:: c++ + + fmt::format("0x{0:02X}", 'a'); + +* Deprecated parts of the API removed. + +* The library is now built and tested on MinGW with Appveyor in addition to + existing test platforms Linux/GCC, OS X/Clang, Windows/MSVC. + +0.10.0 - 2014-07-01 +------------------- + +**Improved API** + +* All formatting methods are now implemented as variadic functions instead + of using ``operator<<`` for feeding arbitrary arguments into a temporary + formatter object. This works both with C++11 where variadic templates are + used and with older standards where variadic functions are emulated by + providing lightweight wrapper functions defined with the ``FMT_VARIADIC`` + macro. You can use this macro for defining your own portable variadic + functions: + + .. code:: c++ + + void report_error(const char *format, const fmt::ArgList &args) { + fmt::print("Error: {}"); + fmt::print(format, args); + } + FMT_VARIADIC(void, report_error, const char *) + + report_error("file not found: {}", path); + + Apart from a more natural syntax, this also improves performance as there + is no need to construct temporary formatter objects and control arguments' + lifetimes. Because the wrapper functions are very ligthweight, this doesn't + cause code bloat even in pre-C++11 mode. + +* Simplified common case of formatting an ``std::string``. Now it requires a + single function call: + + .. code:: c++ + + std::string s = format("The answer is {}.", 42); + + Previously it required 2 function calls: + + .. code:: c++ + + std::string s = str(Format("The answer is {}.") << 42); + + Instead of unsafe ``c_str`` function, ``fmt::Writer`` should be used directly + to bypass creation of ``std::string``: + + .. code:: c++ + + fmt::Writer w; + w.write("The answer is {}.", 42); + w.c_str(); // returns a C string + + This doesn't do dynamic memory allocation for small strings and is less error + prone as the lifetime of the string is the same as for ``std::string::c_str`` + which is well understood (hopefully). + +* Improved consistency in naming functions that are a part of the public API. + Now all public functions are lowercase following the standard library + conventions. Previously it was a combination of lowercase and + CapitalizedWords. + Issue `#50 <https://github.com/cppformat/cppformat/issues/50>`_. + +* Old functions are marked as deprecated and will be removed in the next + release. + +**Other Changes** + +* Experimental support for printf format specifications (work in progress): + + .. code:: c++ + + fmt::printf("The answer is %d.", 42); + std::string s = fmt::sprintf("Look, a %s!", "string"); + +* Support for hexadecimal floating point format specifiers ``a`` and ``A``: + + .. code:: c++ + + print("{:a}", -42.0); // Prints -0x1.5p+5 + print("{:A}", -42.0); // Prints -0X1.5P+5 + +* CMake option ``FMT_SHARED`` that specifies whether to build format as a + shared library (off by default). + +0.9.0 - 2014-05-13 +------------------ + +* More efficient implementation of variadic formatting functions. + +* ``Writer::Format`` now has a variadic overload: + + .. code:: c++ + + Writer out; + out.Format("Look, I'm {}!", "variadic"); + +* For efficiency and consistency with other overloads, variadic overload of + the ``Format`` function now returns ``Writer`` instead of ``std::string``. + Use the ``str`` function to convert it to ``std::string``: + + .. code:: c++ + + std::string s = str(Format("Look, I'm {}!", "variadic")); + +* Replaced formatter actions with output sinks: ``NoAction`` -> ``NullSink``, + ``Write`` -> ``FileSink``, ``ColorWriter`` -> ``ANSITerminalSink``. + This improves naming consistency and shouldn't affect client code unless + these classes are used directly which should be rarely needed. + +* Added ``ThrowSystemError`` function that formats a message and throws + ``SystemError`` containing the formatted message and system-specific error + description. For example, the following code + + .. code:: c++ + + FILE *f = fopen(filename, "r"); + if (!f) + ThrowSystemError(errno, "Failed to open file '{}'") << filename; + + will throw ``SystemError`` exception with description + "Failed to open file '<filename>': No such file or directory" if file + doesn't exist. + +* Support for AppVeyor continuous integration platform. + +* ``Format`` now throws ``SystemError`` in case of I/O errors. + +* Improve test infrastructure. Print functions are now tested by redirecting + the output to a pipe. + +0.8.0 - 2014-04-14 +------------------ + +* Initial release diff --git a/dep/cppformat/LICENSE b/dep/cppformat/LICENSE new file mode 100644 index 00000000000..2ee9ec93495 --- /dev/null +++ b/dep/cppformat/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2014 - 2015, Victor Zverovich +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/dep/cppformat/format.cc b/dep/cppformat/format.cc new file mode 100644 index 00000000000..fe4f1b18733 --- /dev/null +++ b/dep/cppformat/format.cc @@ -0,0 +1,1207 @@ +/* + Formatting library for C++ + + Copyright (c) 2012 - 2015, Victor Zverovich + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "format.h" + +#include <string.h> + +#include <cctype> +#include <cerrno> +#include <climits> +#include <cmath> +#include <cstdarg> + +#ifdef _WIN32 +# ifdef __MINGW32__ +# include <cstring> +# endif +# include <windows.h> +#endif + +using fmt::internal::Arg; + +// Check if exceptions are disabled. +#if __GNUC__ && !__EXCEPTIONS +# define FMT_EXCEPTIONS 0 +#endif +#if _MSC_VER && !_HAS_EXCEPTIONS +# define FMT_EXCEPTIONS 0 +#endif +#ifndef FMT_EXCEPTIONS +# define FMT_EXCEPTIONS 1 +#endif + +#if FMT_EXCEPTIONS +# define FMT_TRY try +# define FMT_CATCH(x) catch (x) +#else +# define FMT_TRY if (true) +# define FMT_CATCH(x) if (false) +#endif + +#ifndef FMT_THROW +# if FMT_EXCEPTIONS +# define FMT_THROW(x) throw x +# else +# define FMT_THROW(x) assert(false) +# endif +#endif + +#ifdef FMT_HEADER_ONLY +# define FMT_FUNC inline +#else +# define FMT_FUNC +#endif + +#if _MSC_VER +# pragma warning(push) +# pragma warning(disable: 4127) // conditional expression is constant +# pragma warning(disable: 4702) // unreachable code +// Disable deprecation warning for strerror. The latter is not called but +// MSVC fails to detect it. +# pragma warning(disable: 4996) +#endif + +// Dummy implementations of strerror_r and strerror_s called if corresponding +// system functions are not available. +static inline fmt::internal::None<> strerror_r(int, char *, ...) { + return fmt::internal::None<>(); +} +static inline fmt::internal::None<> strerror_s(char *, std::size_t, ...) { + return fmt::internal::None<>(); +} + +namespace { + +#ifndef _MSC_VER +# define FMT_SNPRINTF snprintf +#else // _MSC_VER +inline int fmt_snprintf(char *buffer, size_t size, const char *format, ...) { + va_list args; + va_start(args, format); + int result = vsnprintf_s(buffer, size, _TRUNCATE, format, args); + va_end(args); + return result; +} +# define FMT_SNPRINTF fmt_snprintf +#endif // _MSC_VER + +#if defined(_WIN32) && defined(__MINGW32__) && !defined(__NO_ISOCEXT) +# define FMT_SWPRINTF snwprintf +#else +# define FMT_SWPRINTF swprintf +#endif // defined(_WIN32) && defined(__MINGW32__) && !defined(__NO_ISOCEXT) + +// Checks if a value fits in int - used to avoid warnings about comparing +// signed and unsigned integers. +template <bool IsSigned> +struct IntChecker { + template <typename T> + static bool fits_in_int(T value) { + unsigned max = INT_MAX; + return value <= max; + } +}; + +template <> +struct IntChecker<true> { + template <typename T> + static bool fits_in_int(T value) { + return value >= INT_MIN && value <= INT_MAX; + } +}; + +const char RESET_COLOR[] = "\x1b[0m"; + +typedef void (*FormatFunc)(fmt::Writer &, int, fmt::StringRef); + +// Portable thread-safe version of strerror. +// Sets buffer to point to a string describing the error code. +// This can be either a pointer to a string stored in buffer, +// or a pointer to some static immutable string. +// Returns one of the following values: +// 0 - success +// ERANGE - buffer is not large enough to store the error message +// other - failure +// Buffer should be at least of size 1. +int safe_strerror( + int error_code, char *&buffer, std::size_t buffer_size) FMT_NOEXCEPT { + assert(buffer != 0 && buffer_size != 0); + + class StrError { + private: + int error_code_; + char *&buffer_; + std::size_t buffer_size_; + + // A noop assignment operator to avoid bogus warnings. + void operator=(const StrError &) {} + + // Handle the result of XSI-compliant version of strerror_r. + int handle(int result) { + // glibc versions before 2.13 return result in errno. + return result == -1 ? errno : result; + } + + // Handle the result of GNU-specific version of strerror_r. + int handle(char *message) { + // If the buffer is full then the message is probably truncated. + if (message == buffer_ && strlen(buffer_) == buffer_size_ - 1) + return ERANGE; + buffer_ = message; + return 0; + } + + // Handle the case when strerror_r is not available. + int handle(fmt::internal::None<>) { + return fallback(strerror_s(buffer_, buffer_size_, error_code_)); + } + + // Fallback to strerror_s when strerror_r is not available. + int fallback(int result) { + // If the buffer is full then the message is probably truncated. + return result == 0 && strlen(buffer_) == buffer_size_ - 1 ? + ERANGE : result; + } + + // Fallback to strerror if strerror_r and strerror_s are not available. + int fallback(fmt::internal::None<>) { + errno = 0; + buffer_ = strerror(error_code_); + return errno; + } + + public: + StrError(int error_code, char *&buffer, std::size_t buffer_size) + : error_code_(error_code), buffer_(buffer), buffer_size_(buffer_size) {} + + int run() { return handle(strerror_r(error_code_, buffer_, buffer_size_)); } + }; + return StrError(error_code, buffer, buffer_size).run(); +} + +void format_error_code(fmt::Writer &out, int error_code, + fmt::StringRef message) FMT_NOEXCEPT { + // Report error code making sure that the output fits into + // INLINE_BUFFER_SIZE to avoid dynamic memory allocation and potential + // bad_alloc. + out.clear(); + static const char SEP[] = ": "; + static const char ERROR_STR[] = "error "; + fmt::internal::IntTraits<int>::MainType ec_value = error_code; + // Subtract 2 to account for terminating null characters in SEP and ERROR_STR. + std::size_t error_code_size = sizeof(SEP) + sizeof(ERROR_STR) - 2; + error_code_size += fmt::internal::count_digits(ec_value); + if (message.size() <= fmt::internal::INLINE_BUFFER_SIZE - error_code_size) + out << message << SEP; + out << ERROR_STR << error_code; + assert(out.size() <= fmt::internal::INLINE_BUFFER_SIZE); +} + +void report_error(FormatFunc func, + int error_code, fmt::StringRef message) FMT_NOEXCEPT { + fmt::MemoryWriter full_message; + func(full_message, error_code, message); + // Use Writer::data instead of Writer::c_str to avoid potential memory + // allocation. + std::fwrite(full_message.data(), full_message.size(), 1, stderr); + std::fputc('\n', stderr); +} + +// IsZeroInt::visit(arg) returns true iff arg is a zero integer. +class IsZeroInt : public fmt::internal::ArgVisitor<IsZeroInt, bool> { + public: + template <typename T> + bool visit_any_int(T value) { return value == 0; } +}; + +// Parses an unsigned integer advancing s to the end of the parsed input. +// This function assumes that the first character of s is a digit. +template <typename Char> +int parse_nonnegative_int(const Char *&s) { + assert('0' <= *s && *s <= '9'); + unsigned value = 0; + do { + unsigned new_value = value * 10 + (*s++ - '0'); + // Check if value wrapped around. + if (new_value < value) { + value = UINT_MAX; + break; + } + value = new_value; + } while ('0' <= *s && *s <= '9'); + if (value > INT_MAX) + FMT_THROW(fmt::FormatError("number is too big")); + return value; +} + +inline void require_numeric_argument(const Arg &arg, char spec) { + if (arg.type > Arg::LAST_NUMERIC_TYPE) { + std::string message = + fmt::format("format specifier '{}' requires numeric argument", spec); + FMT_THROW(fmt::FormatError(message)); + } +} + +template <typename Char> +void check_sign(const Char *&s, const Arg &arg) { + char sign = static_cast<char>(*s); + require_numeric_argument(arg, sign); + if (arg.type == Arg::UINT || arg.type == Arg::ULONG_LONG) { + FMT_THROW(fmt::FormatError(fmt::format( + "format specifier '{}' requires signed argument", sign))); + } + ++s; +} + +// Checks if an argument is a valid printf width specifier and sets +// left alignment if it is negative. +class WidthHandler : public fmt::internal::ArgVisitor<WidthHandler, unsigned> { + private: + fmt::FormatSpec &spec_; + + FMT_DISALLOW_COPY_AND_ASSIGN(WidthHandler); + + public: + explicit WidthHandler(fmt::FormatSpec &spec) : spec_(spec) {} + + void report_unhandled_arg() { + FMT_THROW(fmt::FormatError("width is not integer")); + } + + template <typename T> + unsigned visit_any_int(T value) { + typedef typename fmt::internal::IntTraits<T>::MainType UnsignedType; + UnsignedType width = value; + if (fmt::internal::is_negative(value)) { + spec_.align_ = fmt::ALIGN_LEFT; + width = 0 - width; + } + if (width > INT_MAX) + FMT_THROW(fmt::FormatError("number is too big")); + return static_cast<unsigned>(width); + } +}; + +class PrecisionHandler : + public fmt::internal::ArgVisitor<PrecisionHandler, int> { + public: + void report_unhandled_arg() { + FMT_THROW(fmt::FormatError("precision is not integer")); + } + + template <typename T> + int visit_any_int(T value) { + if (!IntChecker<std::numeric_limits<T>::is_signed>::fits_in_int(value)) + FMT_THROW(fmt::FormatError("number is too big")); + return static_cast<int>(value); + } +}; + +// Converts an integer argument to an integral type T for printf. +template <typename T> +class ArgConverter : public fmt::internal::ArgVisitor<ArgConverter<T>, void> { + private: + fmt::internal::Arg &arg_; + wchar_t type_; + + FMT_DISALLOW_COPY_AND_ASSIGN(ArgConverter); + + public: + ArgConverter(fmt::internal::Arg &arg, wchar_t type) + : arg_(arg), type_(type) {} + + template <typename U> + void visit_any_int(U value) { + bool is_signed = type_ == 'd' || type_ == 'i'; + using fmt::internal::Arg; + if (sizeof(T) <= sizeof(int)) { + // Extra casts are used to silence warnings. + if (is_signed) { + arg_.type = Arg::INT; + arg_.int_value = static_cast<int>(static_cast<T>(value)); + } else { + arg_.type = Arg::UINT; + arg_.uint_value = static_cast<unsigned>( + static_cast<typename fmt::internal::MakeUnsigned<T>::Type>(value)); + } + } else { + if (is_signed) { + arg_.type = Arg::LONG_LONG; + arg_.long_long_value = + static_cast<typename fmt::internal::MakeUnsigned<U>::Type>(value); + } else { + arg_.type = Arg::ULONG_LONG; + arg_.ulong_long_value = + static_cast<typename fmt::internal::MakeUnsigned<U>::Type>(value); + } + } + } +}; + +// Converts an integer argument to char for printf. +class CharConverter : public fmt::internal::ArgVisitor<CharConverter, void> { + private: + fmt::internal::Arg &arg_; + + FMT_DISALLOW_COPY_AND_ASSIGN(CharConverter); + + public: + explicit CharConverter(fmt::internal::Arg &arg) : arg_(arg) {} + + template <typename T> + void visit_any_int(T value) { + arg_.type = Arg::CHAR; + arg_.int_value = static_cast<char>(value); + } +}; + +// This function template is used to prevent compile errors when handling +// incompatible string arguments, e.g. handling a wide string in a narrow +// string formatter. +template <typename Char> +Arg::StringValue<Char> ignore_incompatible_str(Arg::StringValue<wchar_t>); + +template <> +inline Arg::StringValue<char> ignore_incompatible_str( + Arg::StringValue<wchar_t>) { return Arg::StringValue<char>(); } + +template <> +inline Arg::StringValue<wchar_t> ignore_incompatible_str( + Arg::StringValue<wchar_t> s) { return s; } +} // namespace + +FMT_FUNC void fmt::SystemError::init( + int err_code, StringRef format_str, ArgList args) { + error_code_ = err_code; + MemoryWriter w; + internal::format_system_error(w, err_code, format(format_str, args)); + std::runtime_error &base = *this; + base = std::runtime_error(w.str()); +} + +template <typename T> +int fmt::internal::CharTraits<char>::format_float( + char *buffer, std::size_t size, const char *format, + unsigned width, int precision, T value) { + if (width == 0) { + return precision < 0 ? + FMT_SNPRINTF(buffer, size, format, value) : + FMT_SNPRINTF(buffer, size, format, precision, value); + } + return precision < 0 ? + FMT_SNPRINTF(buffer, size, format, width, value) : + FMT_SNPRINTF(buffer, size, format, width, precision, value); +} + +template <typename T> +int fmt::internal::CharTraits<wchar_t>::format_float( + wchar_t *buffer, std::size_t size, const wchar_t *format, + unsigned width, int precision, T value) { + if (width == 0) { + return precision < 0 ? + FMT_SWPRINTF(buffer, size, format, value) : + FMT_SWPRINTF(buffer, size, format, precision, value); + } + return precision < 0 ? + FMT_SWPRINTF(buffer, size, format, width, value) : + FMT_SWPRINTF(buffer, size, format, width, precision, value); +} + +template <typename T> +const char fmt::internal::BasicData<T>::DIGITS[] = + "0001020304050607080910111213141516171819" + "2021222324252627282930313233343536373839" + "4041424344454647484950515253545556575859" + "6061626364656667686970717273747576777879" + "8081828384858687888990919293949596979899"; + +#define FMT_POWERS_OF_10(factor) \ + factor * 10, \ + factor * 100, \ + factor * 1000, \ + factor * 10000, \ + factor * 100000, \ + factor * 1000000, \ + factor * 10000000, \ + factor * 100000000, \ + factor * 1000000000 + +template <typename T> +const uint32_t fmt::internal::BasicData<T>::POWERS_OF_10_32[] = { + 0, FMT_POWERS_OF_10(1) +}; + +template <typename T> +const uint64_t fmt::internal::BasicData<T>::POWERS_OF_10_64[] = { + 0, + FMT_POWERS_OF_10(1), + FMT_POWERS_OF_10(fmt::ULongLong(1000000000)), + // Multiply several constants instead of using a single long long constant + // to avoid warnings about C++98 not supporting long long. + fmt::ULongLong(1000000000) * fmt::ULongLong(1000000000) * 10 +}; + +FMT_FUNC void fmt::internal::report_unknown_type(char code, const char *type) { + (void)type; + if (std::isprint(static_cast<unsigned char>(code))) { + FMT_THROW(fmt::FormatError( + fmt::format("unknown format code '{}' for {}", code, type))); + } + FMT_THROW(fmt::FormatError( + fmt::format("unknown format code '\\x{:02x}' for {}", + static_cast<unsigned>(code), type))); +} + +#ifdef _WIN32 + +FMT_FUNC fmt::internal::UTF8ToUTF16::UTF8ToUTF16(fmt::StringRef s) { + int length = MultiByteToWideChar( + CP_UTF8, MB_ERR_INVALID_CHARS, s.c_str(), -1, 0, 0); + static const char ERROR_MSG[] = "cannot convert string from UTF-8 to UTF-16"; + if (length == 0) + FMT_THROW(WindowsError(GetLastError(), ERROR_MSG)); + buffer_.resize(length); + length = MultiByteToWideChar( + CP_UTF8, MB_ERR_INVALID_CHARS, s.c_str(), -1, &buffer_[0], length); + if (length == 0) + FMT_THROW(WindowsError(GetLastError(), ERROR_MSG)); +} + +FMT_FUNC fmt::internal::UTF16ToUTF8::UTF16ToUTF8(fmt::WStringRef s) { + if (int error_code = convert(s)) { + FMT_THROW(WindowsError(error_code, + "cannot convert string from UTF-16 to UTF-8")); + } +} + +FMT_FUNC int fmt::internal::UTF16ToUTF8::convert(fmt::WStringRef s) { + int length = WideCharToMultiByte(CP_UTF8, 0, s.c_str(), -1, 0, 0, 0, 0); + if (length == 0) + return GetLastError(); + buffer_.resize(length); + length = WideCharToMultiByte( + CP_UTF8, 0, s.c_str(), -1, &buffer_[0], length, 0, 0); + if (length == 0) + return GetLastError(); + return 0; +} + +FMT_FUNC void fmt::WindowsError::init( + int err_code, StringRef format_str, ArgList args) { + error_code_ = err_code; + MemoryWriter w; + internal::format_windows_error(w, err_code, format(format_str, args)); + std::runtime_error &base = *this; + base = std::runtime_error(w.str()); +} + +#endif + +FMT_FUNC void fmt::internal::format_system_error( + fmt::Writer &out, int error_code, + fmt::StringRef message) FMT_NOEXCEPT { + FMT_TRY { + MemoryBuffer<char, INLINE_BUFFER_SIZE> buffer; + buffer.resize(INLINE_BUFFER_SIZE); + for (;;) { + char *system_message = &buffer[0]; + int result = safe_strerror(error_code, system_message, buffer.size()); + if (result == 0) { + out << message << ": " << system_message; + return; + } + if (result != ERANGE) + break; // Can't get error message, report error code instead. + buffer.resize(buffer.size() * 2); + } + } FMT_CATCH(...) {} + format_error_code(out, error_code, message); +} + +#ifdef _WIN32 +FMT_FUNC void fmt::internal::format_windows_error( + fmt::Writer &out, int error_code, + fmt::StringRef message) FMT_NOEXCEPT { + class String { + private: + LPWSTR str_; + + public: + String() : str_() {} + ~String() { LocalFree(str_); } + LPWSTR *ptr() { return &str_; } + LPCWSTR c_str() const { return str_; } + }; + FMT_TRY { + String system_message; + if (FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, 0, + error_code, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + reinterpret_cast<LPWSTR>(system_message.ptr()), 0, 0)) { + UTF16ToUTF8 utf8_message; + if (utf8_message.convert(system_message.c_str()) == ERROR_SUCCESS) { + out << message << ": " << utf8_message; + return; + } + } + } FMT_CATCH(...) {} + format_error_code(out, error_code, message); +} +#endif + +// An argument formatter. +template <typename Char> +class fmt::internal::ArgFormatter : + public fmt::internal::ArgVisitor<fmt::internal::ArgFormatter<Char>, void> { + private: + fmt::BasicFormatter<Char> &formatter_; + fmt::BasicWriter<Char> &writer_; + fmt::FormatSpec &spec_; + const Char *format_; + + FMT_DISALLOW_COPY_AND_ASSIGN(ArgFormatter); + + public: + ArgFormatter( + fmt::BasicFormatter<Char> &f,fmt::FormatSpec &s, const Char *fmt) + : formatter_(f), writer_(f.writer()), spec_(s), format_(fmt) {} + + template <typename T> + void visit_any_int(T value) { writer_.write_int(value, spec_); } + + template <typename T> + void visit_any_double(T value) { writer_.write_double(value, spec_); } + + void visit_char(int value) { + if (spec_.type_ && spec_.type_ != 'c') { + spec_.flags_ |= CHAR_FLAG; + writer_.write_int(value, spec_); + return; + } + if (spec_.align_ == ALIGN_NUMERIC || spec_.flags_ != 0) + FMT_THROW(FormatError("invalid format specifier for char")); + typedef typename fmt::BasicWriter<Char>::CharPtr CharPtr; + Char fill = static_cast<Char>(spec_.fill()); + if (spec_.precision_ == 0) { + std::fill_n(writer_.grow_buffer(spec_.width_), spec_.width_, fill); + return; + } + CharPtr out = CharPtr(); + if (spec_.width_ > 1) { + out = writer_.grow_buffer(spec_.width_); + if (spec_.align_ == fmt::ALIGN_RIGHT) { + std::fill_n(out, spec_.width_ - 1, fill); + out += spec_.width_ - 1; + } else if (spec_.align_ == fmt::ALIGN_CENTER) { + out = writer_.fill_padding(out, spec_.width_, 1, fill); + } else { + std::fill_n(out + 1, spec_.width_ - 1, fill); + } + } else { + out = writer_.grow_buffer(1); + } + *out = static_cast<Char>(value); + } + + void visit_string(Arg::StringValue<char> value) { + writer_.write_str(value, spec_); + } + void visit_wstring(Arg::StringValue<wchar_t> value) { + writer_.write_str(ignore_incompatible_str<Char>(value), spec_); + } + + void visit_pointer(const void *value) { + if (spec_.type_ && spec_.type_ != 'p') + fmt::internal::report_unknown_type(spec_.type_, "pointer"); + spec_.flags_ = fmt::HASH_FLAG; + spec_.type_ = 'x'; + writer_.write_int(reinterpret_cast<uintptr_t>(value), spec_); + } + + void visit_custom(Arg::CustomValue c) { + c.format(&formatter_, c.value, &format_); + } +}; + +template <typename Char> +void fmt::internal::FixedBuffer<Char>::grow(std::size_t) { + FMT_THROW(std::runtime_error("buffer overflow")); +} + +template <typename Char> +template <typename StrChar> +void fmt::BasicWriter<Char>::write_str( + const Arg::StringValue<StrChar> &s, const FormatSpec &spec) { + // Check if StrChar is convertible to Char. + internal::CharTraits<Char>::convert(StrChar()); + if (spec.type_ && spec.type_ != 's') + internal::report_unknown_type(spec.type_, "string"); + const StrChar *str_value = s.value; + std::size_t str_size = s.size; + if (str_size == 0) { + if (!str_value) + FMT_THROW(FormatError("string pointer is null")); + if (*str_value) + str_size = std::char_traits<StrChar>::length(str_value); + } + std::size_t precision = spec.precision_; + if (spec.precision_ >= 0 && precision < str_size) + str_size = spec.precision_; + write_str(str_value, str_size, spec); +} + +template <typename Char> +inline Arg fmt::BasicFormatter<Char>::parse_arg_index(const Char *&s) { + const char *error = 0; + Arg arg = *s < '0' || *s > '9' ? + next_arg(error) : get_arg(parse_nonnegative_int(s), error); + if (error) { + FMT_THROW(FormatError( + *s != '}' && *s != ':' ? "invalid format string" : error)); + } + return arg; +} + +FMT_FUNC Arg fmt::internal::FormatterBase::do_get_arg( + unsigned arg_index, const char *&error) { + Arg arg = args_[arg_index]; + if (arg.type == Arg::NONE) + error = "argument index out of range"; + return arg; +} + +inline Arg fmt::internal::FormatterBase::next_arg(const char *&error) { + if (next_arg_index_ >= 0) + return do_get_arg(next_arg_index_++, error); + error = "cannot switch from manual to automatic argument indexing"; + return Arg(); +} + +inline Arg fmt::internal::FormatterBase::get_arg( + unsigned arg_index, const char *&error) { + if (next_arg_index_ <= 0) { + next_arg_index_ = -1; + return do_get_arg(arg_index, error); + } + error = "cannot switch from automatic to manual argument indexing"; + return Arg(); +} + +template <typename Char> +void fmt::internal::PrintfFormatter<Char>::parse_flags( + FormatSpec &spec, const Char *&s) { + for (;;) { + switch (*s++) { + case '-': + spec.align_ = ALIGN_LEFT; + break; + case '+': + spec.flags_ |= SIGN_FLAG | PLUS_FLAG; + break; + case '0': + spec.fill_ = '0'; + break; + case ' ': + spec.flags_ |= SIGN_FLAG; + break; + case '#': + spec.flags_ |= HASH_FLAG; + break; + default: + --s; + return; + } + } +} + +template <typename Char> +Arg fmt::internal::PrintfFormatter<Char>::get_arg( + const Char *s, unsigned arg_index) { + (void)s; + const char *error = 0; + Arg arg = arg_index == UINT_MAX ? + next_arg(error) : FormatterBase::get_arg(arg_index - 1, error); + if (error) + FMT_THROW(FormatError(!*s ? "invalid format string" : error)); + return arg; +} + +template <typename Char> +unsigned fmt::internal::PrintfFormatter<Char>::parse_header( + const Char *&s, FormatSpec &spec) { + unsigned arg_index = UINT_MAX; + Char c = *s; + if (c >= '0' && c <= '9') { + // Parse an argument index (if followed by '$') or a width possibly + // preceded with '0' flag(s). + unsigned value = parse_nonnegative_int(s); + if (*s == '$') { // value is an argument index + ++s; + arg_index = value; + } else { + if (c == '0') + spec.fill_ = '0'; + if (value != 0) { + // Nonzero value means that we parsed width and don't need to + // parse it or flags again, so return now. + spec.width_ = value; + return arg_index; + } + } + } + parse_flags(spec, s); + // Parse width. + if (*s >= '0' && *s <= '9') { + spec.width_ = parse_nonnegative_int(s); + } else if (*s == '*') { + ++s; + spec.width_ = WidthHandler(spec).visit(get_arg(s)); + } + return arg_index; +} + +template <typename Char> +void fmt::internal::PrintfFormatter<Char>::format( + BasicWriter<Char> &writer, BasicStringRef<Char> format_str, + const ArgList &args) { + const Char *start = format_str.c_str(); + set_args(args); + const Char *s = start; + while (*s) { + Char c = *s++; + if (c != '%') continue; + if (*s == c) { + write(writer, start, s); + start = ++s; + continue; + } + write(writer, start, s - 1); + + FormatSpec spec; + spec.align_ = ALIGN_RIGHT; + + // Parse argument index, flags and width. + unsigned arg_index = parse_header(s, spec); + + // Parse precision. + if (*s == '.') { + ++s; + if ('0' <= *s && *s <= '9') { + spec.precision_ = parse_nonnegative_int(s); + } else if (*s == '*') { + ++s; + spec.precision_ = PrecisionHandler().visit(get_arg(s)); + } + } + + Arg arg = get_arg(s, arg_index); + if (spec.flag(HASH_FLAG) && IsZeroInt().visit(arg)) + spec.flags_ &= ~HASH_FLAG; + if (spec.fill_ == '0') { + if (arg.type <= Arg::LAST_NUMERIC_TYPE) + spec.align_ = ALIGN_NUMERIC; + else + spec.fill_ = ' '; // Ignore '0' flag for non-numeric types. + } + + // Parse length and convert the argument to the required type. + switch (*s++) { + case 'h': + if (*s == 'h') + ArgConverter<signed char>(arg, *++s).visit(arg); + else + ArgConverter<short>(arg, *s).visit(arg); + break; + case 'l': + if (*s == 'l') + ArgConverter<fmt::LongLong>(arg, *++s).visit(arg); + else + ArgConverter<long>(arg, *s).visit(arg); + break; + case 'j': + ArgConverter<intmax_t>(arg, *s).visit(arg); + break; + case 'z': + ArgConverter<size_t>(arg, *s).visit(arg); + break; + case 't': + ArgConverter<ptrdiff_t>(arg, *s).visit(arg); + break; + case 'L': + // printf produces garbage when 'L' is omitted for long double, no + // need to do the same. + break; + default: + --s; + ArgConverter<int>(arg, *s).visit(arg); + } + + // Parse type. + if (!*s) + FMT_THROW(FormatError("invalid format string")); + spec.type_ = static_cast<char>(*s++); + if (arg.type <= Arg::LAST_INTEGER_TYPE) { + // Normalize type. + switch (spec.type_) { + case 'i': case 'u': + spec.type_ = 'd'; + break; + case 'c': + // TODO: handle wchar_t + CharConverter(arg).visit(arg); + break; + } + } + + start = s; + + // Format argument. + switch (arg.type) { + case Arg::INT: + writer.write_int(arg.int_value, spec); + break; + case Arg::UINT: + writer.write_int(arg.uint_value, spec); + break; + case Arg::LONG_LONG: + writer.write_int(arg.long_long_value, spec); + break; + case Arg::ULONG_LONG: + writer.write_int(arg.ulong_long_value, spec); + break; + case Arg::CHAR: { + if (spec.type_ && spec.type_ != 'c') + writer.write_int(arg.int_value, spec); + typedef typename BasicWriter<Char>::CharPtr CharPtr; + CharPtr out = CharPtr(); + if (spec.width_ > 1) { + Char fill = ' '; + out = writer.grow_buffer(spec.width_); + if (spec.align_ != ALIGN_LEFT) { + std::fill_n(out, spec.width_ - 1, fill); + out += spec.width_ - 1; + } else { + std::fill_n(out + 1, spec.width_ - 1, fill); + } + } else { + out = writer.grow_buffer(1); + } + *out = static_cast<Char>(arg.int_value); + break; + } + case Arg::DOUBLE: + writer.write_double(arg.double_value, spec); + break; + case Arg::LONG_DOUBLE: + writer.write_double(arg.long_double_value, spec); + break; + case Arg::CSTRING: + arg.string.size = 0; + writer.write_str(arg.string, spec); + break; + case Arg::STRING: + writer.write_str(arg.string, spec); + break; + case Arg::WSTRING: + writer.write_str(ignore_incompatible_str<Char>(arg.wstring), spec); + break; + case Arg::POINTER: + if (spec.type_ && spec.type_ != 'p') + internal::report_unknown_type(spec.type_, "pointer"); + spec.flags_= HASH_FLAG; + spec.type_ = 'x'; + writer.write_int(reinterpret_cast<uintptr_t>(arg.pointer), spec); + break; + case Arg::CUSTOM: { + if (spec.type_) + internal::report_unknown_type(spec.type_, "object"); + const void *str_format = "s"; + arg.custom.format(&writer, arg.custom.value, &str_format); + break; + } + default: + assert(false); + break; + } + } + write(writer, start, s); +} + +template <typename Char> +const Char *fmt::BasicFormatter<Char>::format( + const Char *&format_str, const Arg &arg) { + const Char *s = format_str; + FormatSpec spec; + if (*s == ':') { + if (arg.type == Arg::CUSTOM) { + arg.custom.format(this, arg.custom.value, &s); + return s; + } + ++s; + // Parse fill and alignment. + if (Char c = *s) { + const Char *p = s + 1; + spec.align_ = ALIGN_DEFAULT; + do { + switch (*p) { + case '<': + spec.align_ = ALIGN_LEFT; + break; + case '>': + spec.align_ = ALIGN_RIGHT; + break; + case '=': + spec.align_ = ALIGN_NUMERIC; + break; + case '^': + spec.align_ = ALIGN_CENTER; + break; + } + if (spec.align_ != ALIGN_DEFAULT) { + if (p != s) { + if (c == '}') break; + if (c == '{') + FMT_THROW(FormatError("invalid fill character '{'")); + s += 2; + spec.fill_ = c; + } else ++s; + if (spec.align_ == ALIGN_NUMERIC) + require_numeric_argument(arg, '='); + break; + } + } while (--p >= s); + } + + // Parse sign. + switch (*s) { + case '+': + check_sign(s, arg); + spec.flags_ |= SIGN_FLAG | PLUS_FLAG; + break; + case '-': + check_sign(s, arg); + spec.flags_ |= MINUS_FLAG; + break; + case ' ': + check_sign(s, arg); + spec.flags_ |= SIGN_FLAG; + break; + } + + if (*s == '#') { + require_numeric_argument(arg, '#'); + spec.flags_ |= HASH_FLAG; + ++s; + } + + // Parse width and zero flag. + if ('0' <= *s && *s <= '9') { + if (*s == '0') { + require_numeric_argument(arg, '0'); + spec.align_ = ALIGN_NUMERIC; + spec.fill_ = '0'; + } + // Zero may be parsed again as a part of the width, but it is simpler + // and more efficient than checking if the next char is a digit. + spec.width_ = parse_nonnegative_int(s); + } + + // Parse precision. + if (*s == '.') { + ++s; + spec.precision_ = 0; + if ('0' <= *s && *s <= '9') { + spec.precision_ = parse_nonnegative_int(s); + } else if (*s == '{') { + ++s; + const Arg &precision_arg = parse_arg_index(s); + if (*s++ != '}') + FMT_THROW(FormatError("invalid format string")); + ULongLong value = 0; + switch (precision_arg.type) { + case Arg::INT: + if (precision_arg.int_value < 0) + FMT_THROW(FormatError("negative precision")); + value = precision_arg.int_value; + break; + case Arg::UINT: + value = precision_arg.uint_value; + break; + case Arg::LONG_LONG: + if (precision_arg.long_long_value < 0) + FMT_THROW(FormatError("negative precision")); + value = precision_arg.long_long_value; + break; + case Arg::ULONG_LONG: + value = precision_arg.ulong_long_value; + break; + default: + FMT_THROW(FormatError("precision is not integer")); + } + if (value > INT_MAX) + FMT_THROW(FormatError("number is too big")); + spec.precision_ = static_cast<int>(value); + } else { + FMT_THROW(FormatError("missing precision specifier")); + } + if (arg.type < Arg::LAST_INTEGER_TYPE || arg.type == Arg::POINTER) { + FMT_THROW(FormatError( + fmt::format("precision not allowed in {} format specifier", + arg.type == Arg::POINTER ? "pointer" : "integer"))); + } + } + + // Parse type. + if (*s != '}' && *s) + spec.type_ = static_cast<char>(*s++); + } + + if (*s++ != '}') + FMT_THROW(FormatError("missing '}' in format string")); + start_ = s; + + // Format argument. + internal::ArgFormatter<Char>(*this, spec, s - 1).visit(arg); + return s; +} + +template <typename Char> +void fmt::BasicFormatter<Char>::format( + BasicStringRef<Char> format_str, const ArgList &args) { + const Char *s = start_ = format_str.c_str(); + set_args(args); + while (*s) { + Char c = *s++; + if (c != '{' && c != '}') continue; + if (*s == c) { + write(writer_, start_, s); + start_ = ++s; + continue; + } + if (c == '}') + FMT_THROW(FormatError("unmatched '}' in format string")); + write(writer_, start_, s - 1); + Arg arg = parse_arg_index(s); + s = format(s, arg); + } + write(writer_, start_, s); +} + +FMT_FUNC void fmt::report_system_error( + int error_code, fmt::StringRef message) FMT_NOEXCEPT { + report_error(internal::format_system_error, error_code, message); +} + +#ifdef _WIN32 +FMT_FUNC void fmt::report_windows_error( + int error_code, fmt::StringRef message) FMT_NOEXCEPT { + report_error(internal::format_windows_error, error_code, message); +} +#endif + +FMT_FUNC void fmt::print(std::FILE *f, StringRef format_str, ArgList args) { + MemoryWriter w; + w.write(format_str, args); + std::fwrite(w.data(), 1, w.size(), f); +} + +FMT_FUNC void fmt::print(StringRef format_str, ArgList args) { + print(stdout, format_str, args); +} + +FMT_FUNC void fmt::print(std::ostream &os, StringRef format_str, ArgList args) { + MemoryWriter w; + w.write(format_str, args); + os.write(w.data(), w.size()); +} + +FMT_FUNC void fmt::print_colored(Color c, StringRef format, ArgList args) { + char escape[] = "\x1b[30m"; + escape[3] = '0' + static_cast<char>(c); + std::fputs(escape, stdout); + print(format, args); + std::fputs(RESET_COLOR, stdout); +} + +FMT_FUNC int fmt::fprintf(std::FILE *f, StringRef format, ArgList args) { + MemoryWriter w; + printf(w, format, args); + std::size_t size = w.size(); + return std::fwrite(w.data(), 1, size, f) < size ? -1 : static_cast<int>(size); +} + +#ifndef FMT_HEADER_ONLY + +// Explicit instantiations for char. + +template void fmt::internal::FixedBuffer<char>::grow(std::size_t); + +template const char *fmt::BasicFormatter<char>::format( + const char *&format_str, const fmt::internal::Arg &arg); + +template void fmt::BasicFormatter<char>::format( + BasicStringRef<char> format, const ArgList &args); + +template void fmt::internal::PrintfFormatter<char>::format( + BasicWriter<char> &writer, BasicStringRef<char> format, const ArgList &args); + +template int fmt::internal::CharTraits<char>::format_float( + char *buffer, std::size_t size, const char *format, + unsigned width, int precision, double value); + +template int fmt::internal::CharTraits<char>::format_float( + char *buffer, std::size_t size, const char *format, + unsigned width, int precision, long double value); + +// Explicit instantiations for wchar_t. + +template void fmt::internal::FixedBuffer<wchar_t>::grow(std::size_t); + +template const wchar_t *fmt::BasicFormatter<wchar_t>::format( + const wchar_t *&format_str, const fmt::internal::Arg &arg); + +template void fmt::BasicFormatter<wchar_t>::format( + BasicStringRef<wchar_t> format, const ArgList &args); + +template void fmt::internal::PrintfFormatter<wchar_t>::format( + BasicWriter<wchar_t> &writer, BasicStringRef<wchar_t> format, + const ArgList &args); + +template int fmt::internal::CharTraits<wchar_t>::format_float( + wchar_t *buffer, std::size_t size, const wchar_t *format, + unsigned width, int precision, double value); + +template int fmt::internal::CharTraits<wchar_t>::format_float( + wchar_t *buffer, std::size_t size, const wchar_t *format, + unsigned width, int precision, long double value); + +#endif // FMT_HEADER_ONLY + +#if _MSC_VER +# pragma warning(pop) +#endif diff --git a/dep/cppformat/format.h b/dep/cppformat/format.h new file mode 100644 index 00000000000..8d54bf521c7 --- /dev/null +++ b/dep/cppformat/format.h @@ -0,0 +1,2737 @@ +/* + Formatting library for C++ + + Copyright (c) 2012 - 2015, Victor Zverovich + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef FMT_FORMAT_H_ +#define FMT_FORMAT_H_ + +#include <stdint.h> + +#include <cassert> +#include <cmath> +#include <cstddef> // for std::ptrdiff_t +#include <cstdio> +#include <algorithm> +#include <limits> +#include <stdexcept> +#include <string> +#include <sstream> + +#if _SECURE_SCL +# include <iterator> +#endif + +#ifdef _MSC_VER +# include <intrin.h> // _BitScanReverse, _BitScanReverse64 + +namespace fmt { +namespace internal { +# pragma intrinsic(_BitScanReverse) +inline uint32_t clz(uint32_t x) { + unsigned long r = 0; + _BitScanReverse(&r, x); + return 31 - r; +} +# define FMT_BUILTIN_CLZ(n) fmt::internal::clz(n) + +# ifdef _WIN64 +# pragma intrinsic(_BitScanReverse64) +# endif + +inline uint32_t clzll(uint64_t x) { + unsigned long r = 0; +# ifdef _WIN64 + _BitScanReverse64(&r, x); +# else + // Scan the high 32 bits. + if (_BitScanReverse(&r, static_cast<uint32_t>(x >> 32))) + return 63 - (r + 32); + + // Scan the low 32 bits. + _BitScanReverse(&r, static_cast<uint32_t>(x)); +# endif + return 63 - r; +} +# define FMT_BUILTIN_CLZLL(n) fmt::internal::clzll(n) +} +} +#endif + +#ifdef __GNUC__ +# define FMT_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) +# define FMT_GCC_EXTENSION __extension__ +# if FMT_GCC_VERSION >= 406 +# pragma GCC diagnostic push +// Disable the warning about "long long" which is sometimes reported even +// when using __extension__. +# pragma GCC diagnostic ignored "-Wlong-long" +// Disable the warning about declaration shadowing because it affects too +// many valid cases. +# pragma GCC diagnostic ignored "-Wshadow" +# endif +# if __cplusplus >= 201103L || defined __GXX_EXPERIMENTAL_CXX0X__ +# define FMT_HAS_GXX_CXX11 1 +# endif +#else +# define FMT_GCC_EXTENSION +#endif + +#ifdef __clang__ +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wdocumentation" +#endif + +#ifdef __GNUC_LIBSTD__ +# define FMT_GNUC_LIBSTD_VERSION (__GNUC_LIBSTD__ * 100 + __GNUC_LIBSTD_MINOR__) +#endif + +#ifdef __has_feature +# define FMT_HAS_FEATURE(x) __has_feature(x) +#else +# define FMT_HAS_FEATURE(x) 0 +#endif + +#ifdef __has_builtin +# define FMT_HAS_BUILTIN(x) __has_builtin(x) +#else +# define FMT_HAS_BUILTIN(x) 0 +#endif + +#ifdef __has_cpp_attribute +# define FMT_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x) +#else +# define FMT_HAS_CPP_ATTRIBUTE(x) 0 +#endif + +#ifndef FMT_USE_VARIADIC_TEMPLATES +// Variadic templates are available in GCC since version 4.4 +// (http://gcc.gnu.org/projects/cxx0x.html) and in Visual C++ +// since version 2013. +# define FMT_USE_VARIADIC_TEMPLATES \ + (FMT_HAS_FEATURE(cxx_variadic_templates) || \ + (FMT_GCC_VERSION >= 404 && FMT_HAS_GXX_CXX11) || _MSC_VER >= 1800) +#endif + +#ifndef FMT_USE_RVALUE_REFERENCES +// Don't use rvalue references when compiling with clang and an old libstdc++ +// as the latter doesn't provide std::move. +# if defined(FMT_GNUC_LIBSTD_VERSION) && FMT_GNUC_LIBSTD_VERSION <= 402 +# define FMT_USE_RVALUE_REFERENCES 0 +# else +# define FMT_USE_RVALUE_REFERENCES \ + (FMT_HAS_FEATURE(cxx_rvalue_references) || \ + (FMT_GCC_VERSION >= 403 && FMT_HAS_GXX_CXX11) || _MSC_VER >= 1600) +# endif +#endif + +#if FMT_USE_RVALUE_REFERENCES +# include <utility> // for std::move +#endif + +// Define FMT_USE_NOEXCEPT to make C++ Format use noexcept (C++11 feature). +#if FMT_USE_NOEXCEPT || FMT_HAS_FEATURE(cxx_noexcept) || \ + (FMT_GCC_VERSION >= 408 && FMT_HAS_GXX_CXX11) +# define FMT_NOEXCEPT noexcept +#else +# define FMT_NOEXCEPT throw() +#endif + +// A macro to disallow the copy constructor and operator= functions +// This should be used in the private: declarations for a class +#if FMT_USE_DELETED_FUNCTIONS || FMT_HAS_FEATURE(cxx_deleted_functions) || \ + (FMT_GCC_VERSION >= 404 && FMT_HAS_GXX_CXX11) || _MSC_VER >= 1800 +# define FMT_DISALLOW_COPY_AND_ASSIGN(TypeName) \ + TypeName(const TypeName&) = delete; \ + TypeName& operator=(const TypeName&) = delete +#else +# define FMT_DISALLOW_COPY_AND_ASSIGN(TypeName) \ + TypeName(const TypeName&); \ + TypeName& operator=(const TypeName&) +#endif + +namespace fmt { + +// Fix the warning about long long on older versions of GCC +// that don't support the diagnostic pragma. +FMT_GCC_EXTENSION typedef long long LongLong; +FMT_GCC_EXTENSION typedef unsigned long long ULongLong; + +#if FMT_USE_RVALUE_REFERENCES +using std::move; +#endif + +template <typename Char> +class BasicWriter; + +typedef BasicWriter<char> Writer; +typedef BasicWriter<wchar_t> WWriter; + +template <typename Char> +class BasicFormatter; + +template <typename Char, typename T> +void format(BasicFormatter<Char> &f, const Char *&format_str, const T &value); + +/** + \rst + A string reference. It can be constructed from a C string or + ``std::string``. + + You can use one of the following typedefs for common character types: + + +------------+-------------------------+ + | Type | Definition | + +============+=========================+ + | StringRef | BasicStringRef<char> | + +------------+-------------------------+ + | WStringRef | BasicStringRef<wchar_t> | + +------------+-------------------------+ + + This class is most useful as a parameter type to allow passing + different types of strings to a function, for example:: + + template <typename... Args> + std::string format(StringRef format_str, const Args & ... args); + + format("{}", 42); + format(std::string("{}"), 42); + \endrst + */ +template <typename Char> +class BasicStringRef { + private: + const Char *data_; + std::size_t size_; + + public: + /** + Constructs a string reference object from a C string and a size. + */ + BasicStringRef(const Char *s, std::size_t size) : data_(s), size_(size) {} + + /** + Constructs a string reference object from a C string computing + the size with ``std::char_traits<Char>::length``. + */ + BasicStringRef(const Char *s) + : data_(s), size_(std::char_traits<Char>::length(s)) {} + + /** + Constructs a string reference from an `std::string` object. + */ + BasicStringRef(const std::basic_string<Char> &s) + : data_(s.c_str()), size_(s.size()) {} + + /** + Converts a string reference to an `std::string` object. + */ + operator std::basic_string<Char>() const { + return std::basic_string<Char>(data_, size()); + } + + /** + Returns the pointer to a C string. + */ + const Char *c_str() const { return data_; } + + /** + Returns the string size. + */ + std::size_t size() const { return size_; } + + friend bool operator==(BasicStringRef lhs, BasicStringRef rhs) { + return lhs.data_ == rhs.data_; + } + friend bool operator!=(BasicStringRef lhs, BasicStringRef rhs) { + return lhs.data_ != rhs.data_; + } +}; + +typedef BasicStringRef<char> StringRef; +typedef BasicStringRef<wchar_t> WStringRef; + +/** + A formatting error such as invalid format string. +*/ +class FormatError : public std::runtime_error { + public: + explicit FormatError(StringRef message) + : std::runtime_error(message.c_str()) {} +}; + +namespace internal { +// The number of characters to store in the MemoryBuffer object itself +// to avoid dynamic memory allocation. +enum { INLINE_BUFFER_SIZE = 500 }; + +#if _SECURE_SCL +// Use checked iterator to avoid warnings on MSVC. +template <typename T> +inline stdext::checked_array_iterator<T*> make_ptr(T *ptr, std::size_t size) { + return stdext::checked_array_iterator<T*>(ptr, size); +} +#else +template <typename T> +inline T *make_ptr(T *ptr, std::size_t) { return ptr; } +#endif +} // namespace internal + +/** A buffer supporting a subset of ``std::vector``'s operations. */ +template <typename T> +class Buffer { + private: + FMT_DISALLOW_COPY_AND_ASSIGN(Buffer); + + protected: + T *ptr_; + std::size_t size_; + std::size_t capacity_; + + Buffer(T *ptr = 0, std::size_t capacity = 0) + : ptr_(ptr), size_(0), capacity_(capacity) {} + + /** + Increases the buffer capacity to hold at least *size* elements updating + ``ptr_`` and ``capacity_``. + */ + virtual void grow(std::size_t size) = 0; + + public: + virtual ~Buffer() {} + + /** Returns the size of this buffer. */ + std::size_t size() const { return size_; } + + /** Returns the capacity of this buffer. */ + std::size_t capacity() const { return capacity_; } + + /** + Resizes the buffer. If T is a POD type new elements may not be initialized. + */ + void resize(std::size_t new_size) { + if (new_size > capacity_) + grow(new_size); + size_ = new_size; + } + + /** Reserves space to store at least *capacity* elements. */ + void reserve(std::size_t capacity) { + if (capacity > capacity_) + grow(capacity); + } + + void clear() FMT_NOEXCEPT { size_ = 0; } + + void push_back(const T &value) { + if (size_ == capacity_) + grow(size_ + 1); + ptr_[size_++] = value; + } + + /** Appends data to the end of the buffer. */ + void append(const T *begin, const T *end); + + T &operator[](std::size_t index) { return ptr_[index]; } + const T &operator[](std::size_t index) const { return ptr_[index]; } +}; + +template <typename T> +void Buffer<T>::append(const T *begin, const T *end) { + std::ptrdiff_t num_elements = end - begin; + if (size_ + num_elements > capacity_) + grow(size_ + num_elements); + std::copy(begin, end, internal::make_ptr(ptr_, capacity_) + size_); + size_ += num_elements; +} + +namespace internal { + +// A memory buffer for POD types with the first SIZE elements stored in +// the object itself. +template <typename T, std::size_t SIZE, typename Allocator = std::allocator<T> > +class MemoryBuffer : private Allocator, public Buffer<T> { + private: + T data_[SIZE]; + + // Free memory allocated by the buffer. + void free() { + if (this->ptr_ != data_) this->deallocate(this->ptr_, this->capacity_); + } + + protected: + void grow(std::size_t size); + + public: + explicit MemoryBuffer(const Allocator &alloc = Allocator()) + : Allocator(alloc), Buffer<T>(data_, SIZE) {} + ~MemoryBuffer() { free(); } + +#if FMT_USE_RVALUE_REFERENCES + private: + // Move data from other to this buffer. + void move(MemoryBuffer &other) { + Allocator &this_alloc = *this, &other_alloc = other; + this_alloc = std::move(other_alloc); + this->size_ = other.size_; + this->capacity_ = other.capacity_; + if (other.ptr_ == other.data_) { + this->ptr_ = data_; + std::copy(other.data_, + other.data_ + this->size_, make_ptr(data_, this->capacity_)); + } else { + this->ptr_ = other.ptr_; + // Set pointer to the inline array so that delete is not called + // when freeing. + other.ptr_ = other.data_; + } + } + + public: + MemoryBuffer(MemoryBuffer &&other) { + move(other); + } + + MemoryBuffer &operator=(MemoryBuffer &&other) { + assert(this != &other); + free(); + move(other); + return *this; + } +#endif + + // Returns a copy of the allocator associated with this buffer. + Allocator get_allocator() const { return *this; } +}; + +template <typename T, std::size_t SIZE, typename Allocator> +void MemoryBuffer<T, SIZE, Allocator>::grow(std::size_t size) { + std::size_t new_capacity = + (std::max)(size, this->capacity_ + this->capacity_ / 2); + T *new_ptr = this->allocate(new_capacity); + // The following code doesn't throw, so the raw pointer above doesn't leak. + std::copy(this->ptr_, + this->ptr_ + this->size_, make_ptr(new_ptr, new_capacity)); + std::size_t old_capacity = this->capacity_; + T *old_ptr = this->ptr_; + this->capacity_ = new_capacity; + this->ptr_ = new_ptr; + // deallocate may throw (at least in principle), but it doesn't matter since + // the buffer already uses the new storage and will deallocate it in case + // of exception. + if (old_ptr != data_) + this->deallocate(old_ptr, old_capacity); +} + +// A fixed-size buffer. +template <typename Char> +class FixedBuffer : public fmt::Buffer<Char> { + public: + FixedBuffer(Char *array, std::size_t size) : fmt::Buffer<Char>(array, size) {} + + protected: + void grow(std::size_t size); +}; + +#ifndef _MSC_VER +// Portable version of signbit. +inline int getsign(double x) { + // When compiled in C++11 mode signbit is no longer a macro but a function + // defined in namespace std and the macro is undefined. +# ifdef signbit + return signbit(x); +# else + return std::signbit(x); +# endif +} + +// Portable version of isinf. +# ifdef isinf +inline int isinfinity(double x) { return isinf(x); } +inline int isinfinity(long double x) { return isinf(x); } +# else +inline int isinfinity(double x) { return std::isinf(x); } +inline int isinfinity(long double x) { return std::isinf(x); } +# endif +#else +inline int getsign(double value) { + if (value < 0) return 1; + if (value == value) return 0; + int dec = 0, sign = 0; + char buffer[2]; // The buffer size must be >= 2 or _ecvt_s will fail. + _ecvt_s(buffer, sizeof(buffer), value, 0, &dec, &sign); + return sign; +} +inline int isinfinity(double x) { return !_finite(x); } +inline int isinfinity(long double x) { return !_finite(static_cast<double>(x)); } +#endif + +template <typename Char> +class BasicCharTraits { + public: +#if _SECURE_SCL + typedef stdext::checked_array_iterator<Char*> CharPtr; +#else + typedef Char *CharPtr; +#endif +}; + +template <typename Char> +class CharTraits; + +template <> +class CharTraits<char> : public BasicCharTraits<char> { + private: + // Conversion from wchar_t to char is not allowed. + static char convert(wchar_t); + +public: + static char convert(char value) { return value; } + + // Formats a floating-point number. + template <typename T> + static int format_float(char *buffer, std::size_t size, + const char *format, unsigned width, int precision, T value); +}; + +template <> +class CharTraits<wchar_t> : public BasicCharTraits<wchar_t> { + public: + static wchar_t convert(char value) { return value; } + static wchar_t convert(wchar_t value) { return value; } + + template <typename T> + static int format_float(wchar_t *buffer, std::size_t size, + const wchar_t *format, unsigned width, int precision, T value); +}; + +// Checks if a number is negative - used to avoid warnings. +template <bool IsSigned> +struct SignChecker { + template <typename T> + static bool is_negative(T value) { return value < 0; } +}; + +template <> +struct SignChecker<false> { + template <typename T> + static bool is_negative(T) { return false; } +}; + +// Returns true if value is negative, false otherwise. +// Same as (value < 0) but doesn't produce warnings if T is an unsigned type. +template <typename T> +inline bool is_negative(T value) { + return SignChecker<std::numeric_limits<T>::is_signed>::is_negative(value); +} + +// Selects uint32_t if FitsIn32Bits is true, uint64_t otherwise. +template <bool FitsIn32Bits> +struct TypeSelector { typedef uint32_t Type; }; + +template <> +struct TypeSelector<false> { typedef uint64_t Type; }; + +template <typename T> +struct IntTraits { + // Smallest of uint32_t and uint64_t that is large enough to represent + // all values of T. + typedef typename + TypeSelector<std::numeric_limits<T>::digits <= 32>::Type MainType; +}; + +// MakeUnsigned<T>::Type gives an unsigned type corresponding to integer type T. +template <typename T> +struct MakeUnsigned { typedef T Type; }; + +#define FMT_SPECIALIZE_MAKE_UNSIGNED(T, U) \ + template <> \ + struct MakeUnsigned<T> { typedef U Type; } + +FMT_SPECIALIZE_MAKE_UNSIGNED(char, unsigned char); +FMT_SPECIALIZE_MAKE_UNSIGNED(signed char, unsigned char); +FMT_SPECIALIZE_MAKE_UNSIGNED(short, unsigned short); +FMT_SPECIALIZE_MAKE_UNSIGNED(int, unsigned); +FMT_SPECIALIZE_MAKE_UNSIGNED(long, unsigned long); +FMT_SPECIALIZE_MAKE_UNSIGNED(LongLong, ULongLong); + +void report_unknown_type(char code, const char *type); + +// Static data is placed in this class template to allow header-only +// configuration. +template <typename T = void> +struct BasicData { + static const uint32_t POWERS_OF_10_32[]; + static const uint64_t POWERS_OF_10_64[]; + static const char DIGITS[]; +}; + +typedef BasicData<> Data; + +#if FMT_GCC_VERSION >= 400 || FMT_HAS_BUILTIN(__builtin_clz) +# define FMT_BUILTIN_CLZ(n) __builtin_clz(n) +#endif + +#if FMT_GCC_VERSION >= 400 || FMT_HAS_BUILTIN(__builtin_clzll) +# define FMT_BUILTIN_CLZLL(n) __builtin_clzll(n) +#endif + +#ifdef FMT_BUILTIN_CLZLL +// Returns the number of decimal digits in n. Leading zeros are not counted +// except for n == 0 in which case count_digits returns 1. +inline unsigned count_digits(uint64_t n) { + // Based on http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog10 + // and the benchmark https://github.com/localvoid/cxx-benchmark-count-digits. + unsigned t = (64 - FMT_BUILTIN_CLZLL(n | 1)) * 1233 >> 12; + return t - (n < Data::POWERS_OF_10_64[t]) + 1; +} +#else +// Fallback version of count_digits used when __builtin_clz is not available. +inline unsigned count_digits(uint64_t n) { + unsigned count = 1; + for (;;) { + // Integer division is slow so do it for a group of four digits instead + // of for every digit. The idea comes from the talk by Alexandrescu + // "Three Optimization Tips for C++". See speed-test for a comparison. + if (n < 10) return count; + if (n < 100) return count + 1; + if (n < 1000) return count + 2; + if (n < 10000) return count + 3; + n /= 10000u; + count += 4; + } +} +#endif + +#ifdef FMT_BUILTIN_CLZ +// Optional version of count_digits for better performance on 32-bit platforms. +inline unsigned count_digits(uint32_t n) { + uint32_t t = (32 - FMT_BUILTIN_CLZ(n | 1)) * 1233 >> 12; + return t - (n < Data::POWERS_OF_10_32[t]) + 1; +} +#endif + +// Formats a decimal unsigned integer value writing into buffer. +template <typename UInt, typename Char> +inline void format_decimal(Char *buffer, UInt value, unsigned num_digits) { + --num_digits; + while (value >= 100) { + // Integer division is slow so do it for a group of two digits instead + // of for every digit. The idea comes from the talk by Alexandrescu + // "Three Optimization Tips for C++". See speed-test for a comparison. + unsigned index = (value % 100) * 2; + value /= 100; + buffer[num_digits] = Data::DIGITS[index + 1]; + buffer[num_digits - 1] = Data::DIGITS[index]; + num_digits -= 2; + } + if (value < 10) { + *buffer = static_cast<char>('0' + value); + return; + } + unsigned index = static_cast<unsigned>(value * 2); + buffer[1] = Data::DIGITS[index + 1]; + buffer[0] = Data::DIGITS[index]; +} + +#ifdef _WIN32 +// A converter from UTF-8 to UTF-16. +// It is only provided for Windows since other systems support UTF-8 natively. +class UTF8ToUTF16 { + private: + MemoryBuffer<wchar_t, INLINE_BUFFER_SIZE> buffer_; + + public: + explicit UTF8ToUTF16(StringRef s); + operator WStringRef() const { return WStringRef(&buffer_[0], size()); } + size_t size() const { return buffer_.size() - 1; } + const wchar_t *c_str() const { return &buffer_[0]; } + std::wstring str() const { return std::wstring(&buffer_[0], size()); } +}; + +// A converter from UTF-16 to UTF-8. +// It is only provided for Windows since other systems support UTF-8 natively. +class UTF16ToUTF8 { + private: + MemoryBuffer<char, INLINE_BUFFER_SIZE> buffer_; + + public: + UTF16ToUTF8() {} + explicit UTF16ToUTF8(WStringRef s); + operator StringRef() const { return StringRef(&buffer_[0], size()); } + size_t size() const { return buffer_.size() - 1; } + const char *c_str() const { return &buffer_[0]; } + std::string str() const { return std::string(&buffer_[0], size()); } + + // Performs conversion returning a system error code instead of + // throwing exception on conversion error. This method may still throw + // in case of memory allocation error. + int convert(WStringRef s); +}; +#endif + +void format_system_error(fmt::Writer &out, int error_code, + fmt::StringRef message) FMT_NOEXCEPT; + +#ifdef _WIN32 +void format_windows_error(fmt::Writer &out, int error_code, + fmt::StringRef message) FMT_NOEXCEPT; +#endif + +// Computes max(N, 1) at compile time. It is used to avoid errors about +// allocating an array of 0 size. +template <unsigned N> +struct NonZero { + enum { VALUE = N > 0 ? N : 1 }; +}; + +// A formatting argument. It is a POD type to allow storage in +// internal::MemoryBuffer. +struct Arg { + template <typename Char> + struct StringValue { + const Char *value; + std::size_t size; + }; + + typedef void (*FormatFunc)( + void *formatter, const void *arg, void *format_str_ptr); + + struct CustomValue { + const void *value; + FormatFunc format; + }; + + union { + int int_value; + unsigned uint_value; + LongLong long_long_value; + ULongLong ulong_long_value; + double double_value; + long double long_double_value; + const void *pointer; + StringValue<char> string; + StringValue<signed char> sstring; + StringValue<unsigned char> ustring; + StringValue<wchar_t> wstring; + CustomValue custom; + }; + + enum Type { + NONE, + // Integer types should go first, + INT, UINT, LONG_LONG, ULONG_LONG, CHAR, LAST_INTEGER_TYPE = CHAR, + // followed by floating-point types. + DOUBLE, LONG_DOUBLE, LAST_NUMERIC_TYPE = LONG_DOUBLE, + CSTRING, STRING, WSTRING, POINTER, CUSTOM + }; + Type type; +}; + +template <typename T = void> +struct None {}; + +// A helper class template to enable or disable overloads taking wide +// characters and strings in MakeValue. +template <typename T, typename Char> +struct WCharHelper { + typedef None<T> Supported; + typedef T Unsupported; +}; + +template <typename T> +struct WCharHelper<T, wchar_t> { + typedef T Supported; + typedef None<T> Unsupported; +}; + +template <typename T> +class IsConvertibleToInt { + private: + typedef char yes[1]; + typedef char no[2]; + + static const T &get(); + + static yes &check(fmt::ULongLong); + static no &check(...); + + public: + enum { value = (sizeof(check(get())) == sizeof(yes)) }; +}; + +#define FMT_CONVERTIBLE_TO_INT(Type) \ + template <> \ + class IsConvertibleToInt<Type> { \ + public: \ + enum { value = 1 }; \ + } + +// Silence warnings about convering float to int. +FMT_CONVERTIBLE_TO_INT(float); +FMT_CONVERTIBLE_TO_INT(double); +FMT_CONVERTIBLE_TO_INT(long double); + +template<bool B, class T = void> +struct EnableIf {}; + +template<class T> +struct EnableIf<true, T> { typedef T type; }; + +// A helper function to suppress bogus "conditional expression is constant" +// warnings. +inline bool check(bool value) { return value; } + +// Makes an Arg object from any type. +template <typename Char> +class MakeValue : public Arg { + private: + // The following two methods are private to disallow formatting of + // arbitrary pointers. If you want to output a pointer cast it to + // "void *" or "const void *". In particular, this forbids formatting + // of "[const] volatile char *" which is printed as bool by iostreams. + // Do not implement! + template <typename T> + MakeValue(const T *value); + template <typename T> + MakeValue(T *value); + + // The following methods are private to disallow formatting of wide + // characters and strings into narrow strings as in + // fmt::format("{}", L"test"); + // To fix this, use a wide format string: fmt::format(L"{}", L"test"). + MakeValue(typename WCharHelper<wchar_t, Char>::Unsupported); + MakeValue(typename WCharHelper<wchar_t *, Char>::Unsupported); + MakeValue(typename WCharHelper<const wchar_t *, Char>::Unsupported); + MakeValue(typename WCharHelper<const std::wstring &, Char>::Unsupported); + MakeValue(typename WCharHelper<WStringRef, Char>::Unsupported); + + void set_string(StringRef str) { + string.value = str.c_str(); + string.size = str.size(); + } + + void set_string(WStringRef str) { + wstring.value = str.c_str(); + wstring.size = str.size(); + } + + // Formats an argument of a custom type, such as a user-defined class. + template <typename T> + static void format_custom_arg( + void *formatter, const void *arg, void *format_str_ptr) { + format(*static_cast<BasicFormatter<Char>*>(formatter), + *static_cast<const Char**>(format_str_ptr), + *static_cast<const T*>(arg)); + } + + public: + MakeValue() {} + +#define FMT_MAKE_VALUE(Type, field, TYPE) \ + MakeValue(Type value) { field = value; } \ + static uint64_t type(Type) { return Arg::TYPE; } + + FMT_MAKE_VALUE(bool, int_value, INT) + FMT_MAKE_VALUE(short, int_value, INT) + FMT_MAKE_VALUE(unsigned short, uint_value, UINT) + FMT_MAKE_VALUE(int, int_value, INT) + FMT_MAKE_VALUE(unsigned, uint_value, UINT) + + MakeValue(long value) { + // To minimize the number of types we need to deal with, long is + // translated either to int or to long long depending on its size. + if (check(sizeof(long) == sizeof(int))) + int_value = static_cast<int>(value); + else + long_long_value = value; + } + static uint64_t type(long) { + return sizeof(long) == sizeof(int) ? Arg::INT : Arg::LONG_LONG; + } + + MakeValue(unsigned long value) { + if (check(sizeof(unsigned long) == sizeof(unsigned))) + uint_value = static_cast<unsigned>(value); + else + ulong_long_value = value; + } + static uint64_t type(unsigned long) { + return sizeof(unsigned long) == sizeof(unsigned) ? + Arg::UINT : Arg::ULONG_LONG; + } + + FMT_MAKE_VALUE(LongLong, long_long_value, LONG_LONG) + FMT_MAKE_VALUE(ULongLong, ulong_long_value, ULONG_LONG) + FMT_MAKE_VALUE(float, double_value, DOUBLE) + FMT_MAKE_VALUE(double, double_value, DOUBLE) + FMT_MAKE_VALUE(long double, long_double_value, LONG_DOUBLE) + FMT_MAKE_VALUE(signed char, int_value, CHAR) + FMT_MAKE_VALUE(unsigned char, int_value, CHAR) + FMT_MAKE_VALUE(char, int_value, CHAR) + + MakeValue(typename WCharHelper<wchar_t, Char>::Supported value) { + int_value = value; + } + static uint64_t type(wchar_t) { return Arg::CHAR; } + +#define FMT_MAKE_STR_VALUE(Type, TYPE) \ + MakeValue(Type value) { set_string(value); } \ + static uint64_t type(Type) { return Arg::TYPE; } + + FMT_MAKE_VALUE(char *, string.value, CSTRING) + FMT_MAKE_VALUE(const char *, string.value, CSTRING) + FMT_MAKE_VALUE(const signed char *, sstring.value, CSTRING) + FMT_MAKE_VALUE(const unsigned char *, ustring.value, CSTRING) + FMT_MAKE_STR_VALUE(const std::string &, STRING) + FMT_MAKE_STR_VALUE(StringRef, STRING) + +#define FMT_MAKE_WSTR_VALUE(Type, TYPE) \ + MakeValue(typename WCharHelper<Type, Char>::Supported value) { \ + set_string(value); \ + } \ + static uint64_t type(Type) { return Arg::TYPE; } + + FMT_MAKE_WSTR_VALUE(wchar_t *, WSTRING) + FMT_MAKE_WSTR_VALUE(const wchar_t *, WSTRING) + FMT_MAKE_WSTR_VALUE(const std::wstring &, WSTRING) + FMT_MAKE_WSTR_VALUE(WStringRef, WSTRING) + + FMT_MAKE_VALUE(void *, pointer, POINTER) + FMT_MAKE_VALUE(const void *, pointer, POINTER) + + template <typename T> + MakeValue(const T &value, + typename EnableIf<!IsConvertibleToInt<T>::value, int>::type = 0) { + custom.value = &value; + custom.format = &format_custom_arg<T>; + } + + template <typename T> + MakeValue(const T &value, + typename EnableIf<IsConvertibleToInt<T>::value, int>::type = 0) { + int_value = value; + } + + template <typename T> + static uint64_t type(const T &) { + return IsConvertibleToInt<T>::value ? Arg::INT : Arg::CUSTOM; + } +}; + +#define FMT_DISPATCH(call) static_cast<Impl*>(this)->call + +// An argument visitor. +// To use ArgVisitor define a subclass that implements some or all of the +// visit methods with the same signatures as the methods in ArgVisitor, +// for example, visit_int(int). +// Specify the subclass name as the Impl template parameter. Then calling +// ArgVisitor::visit for some argument will dispatch to a visit method +// specific to the argument type. For example, if the argument type is +// double then visit_double(double) method of a subclass will be called. +// If the subclass doesn't contain a method with this signature, then +// a corresponding method of ArgVisitor will be called. +// +// Example: +// class MyArgVisitor : public ArgVisitor<MyArgVisitor, void> { +// public: +// void visit_int(int value) { print("{}", value); } +// void visit_double(double value) { print("{}", value ); } +// }; +// +// ArgVisitor uses the curiously recurring template pattern: +// http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern +template <typename Impl, typename Result> +class ArgVisitor { + public: + void report_unhandled_arg() {} + + Result visit_unhandled_arg() { + FMT_DISPATCH(report_unhandled_arg()); + return Result(); + } + + Result visit_int(int value) { + return FMT_DISPATCH(visit_any_int(value)); + } + Result visit_long_long(LongLong value) { + return FMT_DISPATCH(visit_any_int(value)); + } + Result visit_uint(unsigned value) { + return FMT_DISPATCH(visit_any_int(value)); + } + Result visit_ulong_long(ULongLong value) { + return FMT_DISPATCH(visit_any_int(value)); + } + Result visit_char(int value) { + return FMT_DISPATCH(visit_any_int(value)); + } + template <typename T> + Result visit_any_int(T) { + return FMT_DISPATCH(visit_unhandled_arg()); + } + + Result visit_double(double value) { + return FMT_DISPATCH(visit_any_double(value)); + } + Result visit_long_double(long double value) { + return FMT_DISPATCH(visit_any_double(value)); + } + template <typename T> + Result visit_any_double(T) { + return FMT_DISPATCH(visit_unhandled_arg()); + } + + Result visit_string(Arg::StringValue<char>) { + return FMT_DISPATCH(visit_unhandled_arg()); + } + Result visit_wstring(Arg::StringValue<wchar_t>) { + return FMT_DISPATCH(visit_unhandled_arg()); + } + Result visit_pointer(const void *) { + return FMT_DISPATCH(visit_unhandled_arg()); + } + Result visit_custom(Arg::CustomValue) { + return FMT_DISPATCH(visit_unhandled_arg()); + } + + Result visit(const Arg &arg) { + switch (arg.type) { + default: + assert(false); + return Result(); + case Arg::INT: + return FMT_DISPATCH(visit_int(arg.int_value)); + case Arg::UINT: + return FMT_DISPATCH(visit_uint(arg.uint_value)); + case Arg::LONG_LONG: + return FMT_DISPATCH(visit_long_long(arg.long_long_value)); + case Arg::ULONG_LONG: + return FMT_DISPATCH(visit_ulong_long(arg.ulong_long_value)); + case Arg::DOUBLE: + return FMT_DISPATCH(visit_double(arg.double_value)); + case Arg::LONG_DOUBLE: + return FMT_DISPATCH(visit_long_double(arg.long_double_value)); + case Arg::CHAR: + return FMT_DISPATCH(visit_char(arg.int_value)); + case Arg::CSTRING: { + Arg::StringValue<char> str = arg.string; + str.size = 0; + return FMT_DISPATCH(visit_string(str)); + } + case Arg::STRING: + return FMT_DISPATCH(visit_string(arg.string)); + case Arg::WSTRING: + return FMT_DISPATCH(visit_wstring(arg.wstring)); + case Arg::POINTER: + return FMT_DISPATCH(visit_pointer(arg.pointer)); + case Arg::CUSTOM: + return FMT_DISPATCH(visit_custom(arg.custom)); + } + } +}; + +class RuntimeError : public std::runtime_error { + protected: + RuntimeError() : std::runtime_error("") {} +}; + +template <typename Char> +class ArgFormatter; +} // namespace internal + +/** An argument list. */ +class ArgList { + private: + // To reduce compiled code size per formatting function call, types of first + // MAX_PACKED_ARGS arguments are passed in the types_ field. + uint64_t types_; + const internal::Arg *args_; + + internal::Arg::Type type(unsigned index) const { + unsigned shift = index * 4; + uint64_t mask = 0xf; + return static_cast<internal::Arg::Type>( + (types_ & (mask << shift)) >> shift); + } + + public: + // Maximum number of arguments with packed types. + enum { MAX_PACKED_ARGS = 16 }; + + ArgList() : types_(0) {} + ArgList(ULongLong types, const internal::Arg *args) + : types_(types), args_(args) {} + + /** Returns the argument at specified index. */ + internal::Arg operator[](unsigned index) const { + using internal::Arg; + Arg arg; + if (index < MAX_PACKED_ARGS) { + Arg::Type arg_type = type(index); + if (arg_type != Arg::NONE) + arg = args_[index]; + arg.type = arg_type; + return arg; + } + if (type(MAX_PACKED_ARGS - 1) == Arg::NONE) { + arg.type = Arg::NONE; + return arg; + } + for (unsigned i = MAX_PACKED_ARGS; i <= index; ++i) { + if (args_[i].type == Arg::NONE) + return args_[i]; + } + return args_[index]; + } +}; + +struct FormatSpec; + +namespace internal { + +class FormatterBase { + private: + ArgList args_; + int next_arg_index_; + + // Returns the argument with specified index. + Arg do_get_arg(unsigned arg_index, const char *&error); + + protected: + void set_args(const ArgList &args) { + args_ = args; + next_arg_index_ = 0; + } + + // Returns the next argument. + Arg next_arg(const char *&error); + + // Checks if manual indexing is used and returns the argument with + // specified index. + Arg get_arg(unsigned arg_index, const char *&error); + + template <typename Char> + void write(BasicWriter<Char> &w, const Char *start, const Char *end) { + if (start != end) + w << BasicStringRef<Char>(start, end - start); + } +}; + +// A printf formatter. +template <typename Char> +class PrintfFormatter : private FormatterBase { + private: + void parse_flags(FormatSpec &spec, const Char *&s); + + // Returns the argument with specified index or, if arg_index is equal + // to the maximum unsigned value, the next argument. + Arg get_arg(const Char *s, + unsigned arg_index = (std::numeric_limits<unsigned>::max)()); + + // Parses argument index, flags and width and returns the argument index. + unsigned parse_header(const Char *&s, FormatSpec &spec); + + public: + void format(BasicWriter<Char> &writer, + BasicStringRef<Char> format_str, const ArgList &args); +}; +} // namespace internal + +// A formatter. +template <typename Char> +class BasicFormatter : private internal::FormatterBase { + private: + BasicWriter<Char> &writer_; + const Char *start_; + + FMT_DISALLOW_COPY_AND_ASSIGN(BasicFormatter); + + // Parses argument index and returns corresponding argument. + internal::Arg parse_arg_index(const Char *&s); + + public: + explicit BasicFormatter(BasicWriter<Char> &w) : writer_(w) {} + + BasicWriter<Char> &writer() { return writer_; } + + void format(BasicStringRef<Char> format_str, const ArgList &args); + + const Char *format(const Char *&format_str, const internal::Arg &arg); +}; + +enum Alignment { + ALIGN_DEFAULT, ALIGN_LEFT, ALIGN_RIGHT, ALIGN_CENTER, ALIGN_NUMERIC +}; + +// Flags. +enum { + SIGN_FLAG = 1, PLUS_FLAG = 2, MINUS_FLAG = 4, HASH_FLAG = 8, + CHAR_FLAG = 0x10 // Argument has char type - used in error reporting. +}; + +// An empty format specifier. +struct EmptySpec {}; + +// A type specifier. +template <char TYPE> +struct TypeSpec : EmptySpec { + Alignment align() const { return ALIGN_DEFAULT; } + unsigned width() const { return 0; } + int precision() const { return -1; } + bool flag(unsigned) const { return false; } + char type() const { return TYPE; } + char fill() const { return ' '; } +}; + +// A width specifier. +struct WidthSpec { + unsigned width_; + // Fill is always wchar_t and cast to char if necessary to avoid having + // two specialization of WidthSpec and its subclasses. + wchar_t fill_; + + WidthSpec(unsigned width, wchar_t fill) : width_(width), fill_(fill) {} + + unsigned width() const { return width_; } + wchar_t fill() const { return fill_; } +}; + +// An alignment specifier. +struct AlignSpec : WidthSpec { + Alignment align_; + + AlignSpec(unsigned width, wchar_t fill, Alignment align = ALIGN_DEFAULT) + : WidthSpec(width, fill), align_(align) {} + + Alignment align() const { return align_; } + + int precision() const { return -1; } +}; + +// An alignment and type specifier. +template <char TYPE> +struct AlignTypeSpec : AlignSpec { + AlignTypeSpec(unsigned width, wchar_t fill) : AlignSpec(width, fill) {} + + bool flag(unsigned) const { return false; } + char type() const { return TYPE; } +}; + +// A full format specifier. +struct FormatSpec : AlignSpec { + unsigned flags_; + int precision_; + char type_; + + FormatSpec( + unsigned width = 0, char type = 0, wchar_t fill = ' ') + : AlignSpec(width, fill), flags_(0), precision_(-1), type_(type) {} + + bool flag(unsigned f) const { return (flags_ & f) != 0; } + int precision() const { return precision_; } + char type() const { return type_; } +}; + +// An integer format specifier. +template <typename T, typename SpecT = TypeSpec<0>, typename Char = char> +class IntFormatSpec : public SpecT { + private: + T value_; + + public: + IntFormatSpec(T val, const SpecT &spec = SpecT()) + : SpecT(spec), value_(val) {} + + T value() const { return value_; } +}; + +// A string format specifier. +template <typename T> +class StrFormatSpec : public AlignSpec { + private: + const T *str_; + + public: + StrFormatSpec(const T *str, unsigned width, wchar_t fill) + : AlignSpec(width, fill), str_(str) {} + + const T *str() const { return str_; } +}; + +/** + Returns an integer format specifier to format the value in base 2. + */ +IntFormatSpec<int, TypeSpec<'b'> > bin(int value); + +/** + Returns an integer format specifier to format the value in base 8. + */ +IntFormatSpec<int, TypeSpec<'o'> > oct(int value); + +/** + Returns an integer format specifier to format the value in base 16 using + lower-case letters for the digits above 9. + */ +IntFormatSpec<int, TypeSpec<'x'> > hex(int value); + +/** + Returns an integer formatter format specifier to format in base 16 using + upper-case letters for the digits above 9. + */ +IntFormatSpec<int, TypeSpec<'X'> > hexu(int value); + +/** + \rst + Returns an integer format specifier to pad the formatted argument with the + fill character to the specified width using the default (right) numeric + alignment. + + **Example**:: + + MemoryWriter out; + out << pad(hex(0xcafe), 8, '0'); + // out.str() == "0000cafe" + + \endrst + */ +template <char TYPE_CODE, typename Char> +IntFormatSpec<int, AlignTypeSpec<TYPE_CODE>, Char> pad( + int value, unsigned width, Char fill = ' '); + +#define FMT_DEFINE_INT_FORMATTERS(TYPE) \ +inline IntFormatSpec<TYPE, TypeSpec<'b'> > bin(TYPE value) { \ + return IntFormatSpec<TYPE, TypeSpec<'b'> >(value, TypeSpec<'b'>()); \ +} \ + \ +inline IntFormatSpec<TYPE, TypeSpec<'o'> > oct(TYPE value) { \ + return IntFormatSpec<TYPE, TypeSpec<'o'> >(value, TypeSpec<'o'>()); \ +} \ + \ +inline IntFormatSpec<TYPE, TypeSpec<'x'> > hex(TYPE value) { \ + return IntFormatSpec<TYPE, TypeSpec<'x'> >(value, TypeSpec<'x'>()); \ +} \ + \ +inline IntFormatSpec<TYPE, TypeSpec<'X'> > hexu(TYPE value) { \ + return IntFormatSpec<TYPE, TypeSpec<'X'> >(value, TypeSpec<'X'>()); \ +} \ + \ +template <char TYPE_CODE> \ +inline IntFormatSpec<TYPE, AlignTypeSpec<TYPE_CODE> > pad( \ + IntFormatSpec<TYPE, TypeSpec<TYPE_CODE> > f, unsigned width) { \ + return IntFormatSpec<TYPE, AlignTypeSpec<TYPE_CODE> >( \ + f.value(), AlignTypeSpec<TYPE_CODE>(width, ' ')); \ +} \ + \ +/* For compatibility with older compilers we provide two overloads for pad, */ \ +/* one that takes a fill character and one that doesn't. In the future this */ \ +/* can be replaced with one overload making the template argument Char */ \ +/* default to char (C++11). */ \ +template <char TYPE_CODE, typename Char> \ +inline IntFormatSpec<TYPE, AlignTypeSpec<TYPE_CODE>, Char> pad( \ + IntFormatSpec<TYPE, TypeSpec<TYPE_CODE>, Char> f, \ + unsigned width, Char fill) { \ + return IntFormatSpec<TYPE, AlignTypeSpec<TYPE_CODE>, Char>( \ + f.value(), AlignTypeSpec<TYPE_CODE>(width, fill)); \ +} \ + \ +inline IntFormatSpec<TYPE, AlignTypeSpec<0> > pad( \ + TYPE value, unsigned width) { \ + return IntFormatSpec<TYPE, AlignTypeSpec<0> >( \ + value, AlignTypeSpec<0>(width, ' ')); \ +} \ + \ +template <typename Char> \ +inline IntFormatSpec<TYPE, AlignTypeSpec<0>, Char> pad( \ + TYPE value, unsigned width, Char fill) { \ + return IntFormatSpec<TYPE, AlignTypeSpec<0>, Char>( \ + value, AlignTypeSpec<0>(width, fill)); \ +} + +FMT_DEFINE_INT_FORMATTERS(int) +FMT_DEFINE_INT_FORMATTERS(long) +FMT_DEFINE_INT_FORMATTERS(unsigned) +FMT_DEFINE_INT_FORMATTERS(unsigned long) +FMT_DEFINE_INT_FORMATTERS(LongLong) +FMT_DEFINE_INT_FORMATTERS(ULongLong) + +/** + \rst + Returns a string formatter that pads the formatted argument with the fill + character to the specified width using the default (left) string alignment. + + **Example**:: + + std::string s = str(MemoryWriter() << pad("abc", 8)); + // s == "abc " + + \endrst + */ +template <typename Char> +inline StrFormatSpec<Char> pad( + const Char *str, unsigned width, Char fill = ' ') { + return StrFormatSpec<Char>(str, width, fill); +} + +inline StrFormatSpec<wchar_t> pad( + const wchar_t *str, unsigned width, char fill = ' ') { + return StrFormatSpec<wchar_t>(str, width, fill); +} + +// Generates a comma-separated list with results of applying f to +// numbers 0..n-1. +# define FMT_GEN(n, f) FMT_GEN##n(f) +# define FMT_GEN1(f) f(0) +# define FMT_GEN2(f) FMT_GEN1(f), f(1) +# define FMT_GEN3(f) FMT_GEN2(f), f(2) +# define FMT_GEN4(f) FMT_GEN3(f), f(3) +# define FMT_GEN5(f) FMT_GEN4(f), f(4) +# define FMT_GEN6(f) FMT_GEN5(f), f(5) +# define FMT_GEN7(f) FMT_GEN6(f), f(6) +# define FMT_GEN8(f) FMT_GEN7(f), f(7) +# define FMT_GEN9(f) FMT_GEN8(f), f(8) +# define FMT_GEN10(f) FMT_GEN9(f), f(9) +# define FMT_GEN11(f) FMT_GEN10(f), f(10) +# define FMT_GEN12(f) FMT_GEN11(f), f(11) +# define FMT_GEN13(f) FMT_GEN12(f), f(12) +# define FMT_GEN14(f) FMT_GEN13(f), f(13) +# define FMT_GEN15(f) FMT_GEN14(f), f(14) + +namespace internal { +inline uint64_t make_type() { return 0; } + +template <typename T> +inline uint64_t make_type(const T &arg) { return MakeValue<char>::type(arg); } + +#if FMT_USE_VARIADIC_TEMPLATES +template <typename Arg, typename... Args> +inline uint64_t make_type(const Arg &first, const Args & ... tail) { + return make_type(first) | (make_type(tail...) << 4); +} +#else + +struct ArgType { + uint64_t type; + + ArgType() : type(0) {} + + template <typename T> + ArgType(const T &arg) : type(make_type(arg)) {} +}; + +# define FMT_ARG_TYPE_DEFAULT(n) ArgType t##n = ArgType() + +inline uint64_t make_type(FMT_GEN15(FMT_ARG_TYPE_DEFAULT)) { + return t0.type | (t1.type << 4) | (t2.type << 8) | (t3.type << 12) | + (t4.type << 16) | (t5.type << 20) | (t6.type << 24) | (t7.type << 28) | + (t8.type << 32) | (t9.type << 36) | (t10.type << 40) | (t11.type << 44) | + (t12.type << 48) | (t13.type << 52) | (t14.type << 56); +} +#endif +} // namespace internal + +# define FMT_MAKE_TEMPLATE_ARG(n) typename T##n +# define FMT_MAKE_ARG_TYPE(n) T##n +# define FMT_MAKE_ARG(n) const T##n &v##n +# define FMT_MAKE_REF_char(n) fmt::internal::MakeValue<char>(v##n) +# define FMT_MAKE_REF_wchar_t(n) fmt::internal::MakeValue<wchar_t>(v##n) + +#if FMT_USE_VARIADIC_TEMPLATES +// Defines a variadic function returning void. +# define FMT_VARIADIC_VOID(func, arg_type) \ + template <typename... Args> \ + void func(arg_type arg1, const Args & ... args) { \ + const fmt::internal::Arg array[ \ + fmt::internal::NonZero<sizeof...(Args)>::VALUE] = { \ + fmt::internal::MakeValue<Char>(args)... \ + }; \ + func(arg1, ArgList(fmt::internal::make_type(args...), array)); \ + } + +// Defines a variadic constructor. +# define FMT_VARIADIC_CTOR(ctor, func, arg0_type, arg1_type) \ + template <typename... Args> \ + ctor(arg0_type arg0, arg1_type arg1, const Args & ... args) { \ + using fmt::internal::MakeValue; \ + const fmt::internal::Arg array[ \ + fmt::internal::NonZero<sizeof...(Args)>::VALUE] = { \ + MakeValue<Char>(args)... \ + }; \ + func(arg0, arg1, ArgList(fmt::internal::make_type(args...), array)); \ + } + +#else + +# define FMT_MAKE_REF(n) fmt::internal::MakeValue<Char>(v##n) +# define FMT_MAKE_REF2(n) v##n + +// Defines a wrapper for a function taking one argument of type arg_type +// and n additional arguments of arbitrary types. +# define FMT_WRAP1(func, arg_type, n) \ + template <FMT_GEN(n, FMT_MAKE_TEMPLATE_ARG)> \ + inline void func(arg_type arg1, FMT_GEN(n, FMT_MAKE_ARG)) { \ + const fmt::internal::Arg args[] = {FMT_GEN(n, FMT_MAKE_REF)}; \ + func(arg1, fmt::ArgList( \ + fmt::internal::make_type(FMT_GEN(n, FMT_MAKE_REF2)), args)); \ + } + +// Emulates a variadic function returning void on a pre-C++11 compiler. +# define FMT_VARIADIC_VOID(func, arg_type) \ + inline void func(arg_type arg) { func(arg, fmt::ArgList()); } \ + FMT_WRAP1(func, arg_type, 1) FMT_WRAP1(func, arg_type, 2) \ + FMT_WRAP1(func, arg_type, 3) FMT_WRAP1(func, arg_type, 4) \ + FMT_WRAP1(func, arg_type, 5) FMT_WRAP1(func, arg_type, 6) \ + FMT_WRAP1(func, arg_type, 7) FMT_WRAP1(func, arg_type, 8) \ + FMT_WRAP1(func, arg_type, 9) FMT_WRAP1(func, arg_type, 10) + +# define FMT_CTOR(ctor, func, arg0_type, arg1_type, n) \ + template <FMT_GEN(n, FMT_MAKE_TEMPLATE_ARG)> \ + ctor(arg0_type arg0, arg1_type arg1, FMT_GEN(n, FMT_MAKE_ARG)) { \ + const fmt::internal::Arg args[] = {FMT_GEN(n, FMT_MAKE_REF)}; \ + func(arg0, arg1, fmt::ArgList( \ + fmt::internal::make_type(FMT_GEN(n, FMT_MAKE_REF2)), args)); \ + } + +// Emulates a variadic constructor on a pre-C++11 compiler. +# define FMT_VARIADIC_CTOR(ctor, func, arg0_type, arg1_type) \ + FMT_CTOR(ctor, func, arg0_type, arg1_type, 1) \ + FMT_CTOR(ctor, func, arg0_type, arg1_type, 2) \ + FMT_CTOR(ctor, func, arg0_type, arg1_type, 3) \ + FMT_CTOR(ctor, func, arg0_type, arg1_type, 4) \ + FMT_CTOR(ctor, func, arg0_type, arg1_type, 5) \ + FMT_CTOR(ctor, func, arg0_type, arg1_type, 6) \ + FMT_CTOR(ctor, func, arg0_type, arg1_type, 7) \ + FMT_CTOR(ctor, func, arg0_type, arg1_type, 8) \ + FMT_CTOR(ctor, func, arg0_type, arg1_type, 9) \ + FMT_CTOR(ctor, func, arg0_type, arg1_type, 10) +#endif + +// Generates a comma-separated list with results of applying f to pairs +// (argument, index). +#define FMT_FOR_EACH1(f, x0) f(x0, 0) +#define FMT_FOR_EACH2(f, x0, x1) \ + FMT_FOR_EACH1(f, x0), f(x1, 1) +#define FMT_FOR_EACH3(f, x0, x1, x2) \ + FMT_FOR_EACH2(f, x0 ,x1), f(x2, 2) +#define FMT_FOR_EACH4(f, x0, x1, x2, x3) \ + FMT_FOR_EACH3(f, x0, x1, x2), f(x3, 3) +#define FMT_FOR_EACH5(f, x0, x1, x2, x3, x4) \ + FMT_FOR_EACH4(f, x0, x1, x2, x3), f(x4, 4) +#define FMT_FOR_EACH6(f, x0, x1, x2, x3, x4, x5) \ + FMT_FOR_EACH5(f, x0, x1, x2, x3, x4), f(x5, 5) +#define FMT_FOR_EACH7(f, x0, x1, x2, x3, x4, x5, x6) \ + FMT_FOR_EACH6(f, x0, x1, x2, x3, x4, x5), f(x6, 6) +#define FMT_FOR_EACH8(f, x0, x1, x2, x3, x4, x5, x6, x7) \ + FMT_FOR_EACH7(f, x0, x1, x2, x3, x4, x5, x6), f(x7, 7) +#define FMT_FOR_EACH9(f, x0, x1, x2, x3, x4, x5, x6, x7, x8) \ + FMT_FOR_EACH8(f, x0, x1, x2, x3, x4, x5, x6, x7), f(x8, 8) +#define FMT_FOR_EACH10(f, x0, x1, x2, x3, x4, x5, x6, x7, x8, x9) \ + FMT_FOR_EACH9(f, x0, x1, x2, x3, x4, x5, x6, x7, x8), f(x9, 9) + +/** + An error returned by an operating system or a language runtime, + for example a file opening error. +*/ +class SystemError : public internal::RuntimeError { + private: + void init(int err_code, StringRef format_str, ArgList args); + + protected: + int error_code_; + + typedef char Char; // For FMT_VARIADIC_CTOR. + + SystemError() {} + + public: + /** + \rst + Constructs a :class:`fmt::SystemError` object with the description + of the form + + .. parsed-literal:: + *<message>*: *<system-message>* + + where *<message>* is the formatted message and *<system-message>* is + the system message corresponding to the error code. + *error_code* is a system error code as given by ``errno``. + If *error_code* is not a valid error code such as -1, the system message + may look like "Unknown error -1" and is platform-dependent. + + **Example**:: + + // This throws a SystemError with the description + // cannot open file 'madeup': No such file or directory + // or similar (system message may vary). + const char *filename = "madeup"; + std::FILE *file = std::fopen(filename, "r"); + if (!file) + throw fmt::SystemError(errno, "cannot open file '{}'", filename); + \endrst + */ + SystemError(int error_code, StringRef message) { + init(error_code, message, ArgList()); + } + FMT_VARIADIC_CTOR(SystemError, init, int, StringRef) + + int error_code() const { return error_code_; } +}; + +/** + \rst + This template provides operations for formatting and writing data into + a character stream. The output is stored in a buffer provided by a subclass + such as :class:`fmt::BasicMemoryWriter`. + + You can use one of the following typedefs for common character types: + + +---------+----------------------+ + | Type | Definition | + +=========+======================+ + | Writer | BasicWriter<char> | + +---------+----------------------+ + | WWriter | BasicWriter<wchar_t> | + +---------+----------------------+ + + \endrst + */ +template <typename Char> +class BasicWriter { + private: + // Output buffer. + Buffer<Char> &buffer_; + + FMT_DISALLOW_COPY_AND_ASSIGN(BasicWriter); + + typedef typename internal::CharTraits<Char>::CharPtr CharPtr; + +#if _SECURE_SCL + // Returns pointer value. + static Char *get(CharPtr p) { return p.base(); } +#else + static Char *get(Char *p) { return p; } +#endif + + // Fills the padding around the content and returns the pointer to the + // content area. + static CharPtr fill_padding(CharPtr buffer, + unsigned total_size, std::size_t content_size, wchar_t fill); + + // Grows the buffer by n characters and returns a pointer to the newly + // allocated area. + CharPtr grow_buffer(std::size_t n) { + std::size_t size = buffer_.size(); + buffer_.resize(size + n); + return internal::make_ptr(&buffer_[size], n); + } + + // Prepare a buffer for integer formatting. + CharPtr prepare_int_buffer(unsigned num_digits, + const EmptySpec &, const char *prefix, unsigned prefix_size) { + unsigned size = prefix_size + num_digits; + CharPtr p = grow_buffer(size); + std::copy(prefix, prefix + prefix_size, p); + return p + size - 1; + } + + template <typename Spec> + CharPtr prepare_int_buffer(unsigned num_digits, + const Spec &spec, const char *prefix, unsigned prefix_size); + + // Formats an integer. + template <typename T, typename Spec> + void write_int(T value, Spec spec); + + // Formats a floating-point number (double or long double). + template <typename T> + void write_double(T value, const FormatSpec &spec); + + // Writes a formatted string. + template <typename StrChar> + CharPtr write_str( + const StrChar *s, std::size_t size, const AlignSpec &spec); + + template <typename StrChar> + void write_str( + const internal::Arg::StringValue<StrChar> &str, const FormatSpec &spec); + + // This following methods are private to disallow writing wide characters + // and strings to a char stream. If you want to print a wide string as a + // pointer as std::ostream does, cast it to const void*. + // Do not implement! + void operator<<(typename internal::WCharHelper<wchar_t, Char>::Unsupported); + void operator<<( + typename internal::WCharHelper<const wchar_t *, Char>::Unsupported); + + // Appends floating-point length specifier to the format string. + // The second argument is only used for overload resolution. + void append_float_length(Char *&format_ptr, long double) { + *format_ptr++ = 'L'; + } + + template<typename T> + void append_float_length(Char *&, T) {} + + friend class internal::ArgFormatter<Char>; + friend class internal::PrintfFormatter<Char>; + + protected: + /** + Constructs a ``BasicWriter`` object. + */ + explicit BasicWriter(Buffer<Char> &b) : buffer_(b) {} + + public: + /** + Destroys a ``BasicWriter`` object. + */ + virtual ~BasicWriter() {} + + /** + Returns the total number of characters written. + */ + std::size_t size() const { return buffer_.size(); } + + /** + Returns a pointer to the output buffer content. No terminating null + character is appended. + */ + const Char *data() const FMT_NOEXCEPT { return &buffer_[0]; } + + /** + Returns a pointer to the output buffer content with terminating null + character appended. + */ + const Char *c_str() const { + std::size_t size = buffer_.size(); + buffer_.reserve(size + 1); + buffer_[size] = '\0'; + return &buffer_[0]; + } + + /** + Returns the content of the output buffer as an `std::string`. + */ + std::basic_string<Char> str() const { + return std::basic_string<Char>(&buffer_[0], buffer_.size()); + } + + /** + \rst + Writes formatted data. + + *args* is an argument list representing arbitrary arguments. + + **Example**:: + + MemoryWriter out; + out.write("Current point:\n"); + out.write("({:+f}, {:+f})", -3.14, 3.14); + + This will write the following output to the ``out`` object: + + .. code-block:: none + + Current point: + (-3.140000, +3.140000) + + The output can be accessed using :func:`data()`, :func:`c_str` or + :func:`str` methods. + + See also :ref:`syntax`. + \endrst + */ + void write(BasicStringRef<Char> format, ArgList args) { + BasicFormatter<Char>(*this).format(format, args); + } + FMT_VARIADIC_VOID(write, BasicStringRef<Char>) + + BasicWriter &operator<<(int value) { + return *this << IntFormatSpec<int>(value); + } + BasicWriter &operator<<(unsigned value) { + return *this << IntFormatSpec<unsigned>(value); + } + BasicWriter &operator<<(long value) { + return *this << IntFormatSpec<long>(value); + } + BasicWriter &operator<<(unsigned long value) { + return *this << IntFormatSpec<unsigned long>(value); + } + BasicWriter &operator<<(LongLong value) { + return *this << IntFormatSpec<LongLong>(value); + } + + /** + Formats *value* and writes it to the stream. + */ + BasicWriter &operator<<(ULongLong value) { + return *this << IntFormatSpec<ULongLong>(value); + } + + BasicWriter &operator<<(double value) { + write_double(value, FormatSpec()); + return *this; + } + + /** + Formats *value* using the general format for floating-point numbers + (``'g'``) and writes it to the stream. + */ + BasicWriter &operator<<(long double value) { + write_double(value, FormatSpec()); + return *this; + } + + /** + Writes a character to the stream. + */ + BasicWriter &operator<<(char value) { + buffer_.push_back(value); + return *this; + } + + BasicWriter &operator<<( + typename internal::WCharHelper<wchar_t, Char>::Supported value) { + buffer_.push_back(value); + return *this; + } + + /** + Writes *value* to the stream. + */ + BasicWriter &operator<<(fmt::BasicStringRef<Char> value) { + const Char *str = value.c_str(); + buffer_.append(str, str + value.size()); + return *this; + } + + template <typename T, typename Spec, typename FillChar> + BasicWriter &operator<<(IntFormatSpec<T, Spec, FillChar> spec) { + internal::CharTraits<Char>::convert(FillChar()); + write_int(spec.value(), spec); + return *this; + } + + template <typename StrChar> + BasicWriter &operator<<(const StrFormatSpec<StrChar> &spec) { + const StrChar *s = spec.str(); + // TODO: error if fill is not convertible to Char + write_str(s, std::char_traits<Char>::length(s), spec); + return *this; + } + + void clear() FMT_NOEXCEPT { buffer_.clear(); } +}; + +template <typename Char> +template <typename StrChar> +typename BasicWriter<Char>::CharPtr BasicWriter<Char>::write_str( + const StrChar *s, std::size_t size, const AlignSpec &spec) { + CharPtr out = CharPtr(); + if (spec.width() > size) { + out = grow_buffer(spec.width()); + Char fill = static_cast<Char>(spec.fill()); + if (spec.align() == ALIGN_RIGHT) { + std::fill_n(out, spec.width() - size, fill); + out += spec.width() - size; + } else if (spec.align() == ALIGN_CENTER) { + out = fill_padding(out, spec.width(), size, fill); + } else { + std::fill_n(out + size, spec.width() - size, fill); + } + } else { + out = grow_buffer(size); + } + std::copy(s, s + size, out); + return out; +} + +template <typename Char> +typename BasicWriter<Char>::CharPtr + BasicWriter<Char>::fill_padding( + CharPtr buffer, unsigned total_size, + std::size_t content_size, wchar_t fill) { + std::size_t padding = total_size - content_size; + std::size_t left_padding = padding / 2; + Char fill_char = static_cast<Char>(fill); + std::fill_n(buffer, left_padding, fill_char); + buffer += left_padding; + CharPtr content = buffer; + std::fill_n(buffer + content_size, padding - left_padding, fill_char); + return content; +} + +template <typename Char> +template <typename Spec> +typename BasicWriter<Char>::CharPtr + BasicWriter<Char>::prepare_int_buffer( + unsigned num_digits, const Spec &spec, + const char *prefix, unsigned prefix_size) { + unsigned width = spec.width(); + Alignment align = spec.align(); + Char fill = static_cast<Char>(spec.fill()); + if (spec.precision() > static_cast<int>(num_digits)) { + // Octal prefix '0' is counted as a digit, so ignore it if precision + // is specified. + if (prefix_size > 0 && prefix[prefix_size - 1] == '0') + --prefix_size; + unsigned number_size = prefix_size + spec.precision(); + AlignSpec subspec(number_size, '0', ALIGN_NUMERIC); + if (number_size >= width) + return prepare_int_buffer(num_digits, subspec, prefix, prefix_size); + buffer_.reserve(width); + unsigned fill_size = width - number_size; + if (align != ALIGN_LEFT) { + CharPtr p = grow_buffer(fill_size); + std::fill(p, p + fill_size, fill); + } + CharPtr result = prepare_int_buffer( + num_digits, subspec, prefix, prefix_size); + if (align == ALIGN_LEFT) { + CharPtr p = grow_buffer(fill_size); + std::fill(p, p + fill_size, fill); + } + return result; + } + unsigned size = prefix_size + num_digits; + if (width <= size) { + CharPtr p = grow_buffer(size); + std::copy(prefix, prefix + prefix_size, p); + return p + size - 1; + } + CharPtr p = grow_buffer(width); + CharPtr end = p + width; + if (align == ALIGN_LEFT) { + std::copy(prefix, prefix + prefix_size, p); + p += size; + std::fill(p, end, fill); + } else if (align == ALIGN_CENTER) { + p = fill_padding(p, width, size, fill); + std::copy(prefix, prefix + prefix_size, p); + p += size; + } else { + if (align == ALIGN_NUMERIC) { + if (prefix_size != 0) { + p = std::copy(prefix, prefix + prefix_size, p); + size -= prefix_size; + } + } else { + std::copy(prefix, prefix + prefix_size, end - size); + } + std::fill(p, end - size, fill); + p = end; + } + return p - 1; +} + +template <typename Char> +template <typename T, typename Spec> +void BasicWriter<Char>::write_int(T value, Spec spec) { + unsigned prefix_size = 0; + typedef typename internal::IntTraits<T>::MainType UnsignedType; + UnsignedType abs_value = value; + char prefix[4] = ""; + if (internal::is_negative(value)) { + prefix[0] = '-'; + ++prefix_size; + abs_value = 0 - abs_value; + } else if (spec.flag(SIGN_FLAG)) { + prefix[0] = spec.flag(PLUS_FLAG) ? '+' : ' '; + ++prefix_size; + } + switch (spec.type()) { + case 0: case 'd': { + unsigned num_digits = internal::count_digits(abs_value); + CharPtr p = prepare_int_buffer( + num_digits, spec, prefix, prefix_size) + 1 - num_digits; + internal::format_decimal(get(p), abs_value, num_digits); + break; + } + case 'x': case 'X': { + UnsignedType n = abs_value; + if (spec.flag(HASH_FLAG)) { + prefix[prefix_size++] = '0'; + prefix[prefix_size++] = spec.type(); + } + unsigned num_digits = 0; + do { + ++num_digits; + } while ((n >>= 4) != 0); + Char *p = get(prepare_int_buffer( + num_digits, spec, prefix, prefix_size)); + n = abs_value; + const char *digits = spec.type() == 'x' ? + "0123456789abcdef" : "0123456789ABCDEF"; + do { + *p-- = digits[n & 0xf]; + } while ((n >>= 4) != 0); + break; + } + case 'b': case 'B': { + UnsignedType n = abs_value; + if (spec.flag(HASH_FLAG)) { + prefix[prefix_size++] = '0'; + prefix[prefix_size++] = spec.type(); + } + unsigned num_digits = 0; + do { + ++num_digits; + } while ((n >>= 1) != 0); + Char *p = get(prepare_int_buffer(num_digits, spec, prefix, prefix_size)); + n = abs_value; + do { + *p-- = '0' + (n & 1); + } while ((n >>= 1) != 0); + break; + } + case 'o': { + UnsignedType n = abs_value; + if (spec.flag(HASH_FLAG)) + prefix[prefix_size++] = '0'; + unsigned num_digits = 0; + do { + ++num_digits; + } while ((n >>= 3) != 0); + Char *p = get(prepare_int_buffer(num_digits, spec, prefix, prefix_size)); + n = abs_value; + do { + *p-- = '0' + (n & 7); + } while ((n >>= 3) != 0); + break; + } + default: + internal::report_unknown_type( + spec.type(), spec.flag(CHAR_FLAG) ? "char" : "integer"); + break; + } +} + +template <typename Char> +template <typename T> +void BasicWriter<Char>::write_double( + T value, const FormatSpec &spec) { + // Check type. + char type = spec.type(); + bool upper = false; + switch (type) { + case 0: + type = 'g'; + break; + case 'e': case 'f': case 'g': case 'a': + break; + case 'F': +#ifdef _MSC_VER + // MSVC's printf doesn't support 'F'. + type = 'f'; +#endif + // Fall through. + case 'E': case 'G': case 'A': + upper = true; + break; + default: + internal::report_unknown_type(type, "double"); + break; + } + + char sign = 0; + // Use getsign instead of value < 0 because the latter is always + // false for NaN. + if (internal::getsign(static_cast<double>(value))) { + sign = '-'; + value = -value; + } else if (spec.flag(SIGN_FLAG)) { + sign = spec.flag(PLUS_FLAG) ? '+' : ' '; + } + + if (value != value) { + // Format NaN ourselves because sprintf's output is not consistent + // across platforms. + std::size_t nan_size = 4; + const char *nan = upper ? " NAN" : " nan"; + if (!sign) { + --nan_size; + ++nan; + } + CharPtr out = write_str(nan, nan_size, spec); + if (sign) + *out = sign; + return; + } + + if (internal::isinfinity(value)) { + // Format infinity ourselves because sprintf's output is not consistent + // across platforms. + std::size_t inf_size = 4; + const char *inf = upper ? " INF" : " inf"; + if (!sign) { + --inf_size; + ++inf; + } + CharPtr out = write_str(inf, inf_size, spec); + if (sign) + *out = sign; + return; + } + + std::size_t offset = buffer_.size(); + unsigned width = spec.width(); + if (sign) { + buffer_.reserve(buffer_.size() + (std::max)(width, 1u)); + if (width > 0) + --width; + ++offset; + } + + // Build format string. + enum { MAX_FORMAT_SIZE = 10}; // longest format: %#-*.*Lg + Char format[MAX_FORMAT_SIZE]; + Char *format_ptr = format; + *format_ptr++ = '%'; + unsigned width_for_sprintf = width; + if (spec.flag(HASH_FLAG)) + *format_ptr++ = '#'; + if (spec.align() == ALIGN_CENTER) { + width_for_sprintf = 0; + } else { + if (spec.align() == ALIGN_LEFT) + *format_ptr++ = '-'; + if (width != 0) + *format_ptr++ = '*'; + } + if (spec.precision() >= 0) { + *format_ptr++ = '.'; + *format_ptr++ = '*'; + } + + append_float_length(format_ptr, value); + *format_ptr++ = type; + *format_ptr = '\0'; + + // Format using snprintf. + Char fill = static_cast<Char>(spec.fill()); + for (;;) { + std::size_t buffer_size = buffer_.capacity() - offset; +#if _MSC_VER + // MSVC's vsnprintf_s doesn't work with zero size, so reserve + // space for at least one extra character to make the size non-zero. + // Note that the buffer's capacity will increase by more than 1. + if (buffer_size == 0) { + buffer_.reserve(offset + 1); + buffer_size = buffer_.capacity() - offset; + } +#endif + Char *start = &buffer_[offset]; + int n = internal::CharTraits<Char>::format_float( + start, buffer_size, format, width_for_sprintf, spec.precision(), value); + if (n >= 0 && offset + n < buffer_.capacity()) { + if (sign) { + if ((spec.align() != ALIGN_RIGHT && spec.align() != ALIGN_DEFAULT) || + *start != ' ') { + *(start - 1) = sign; + sign = 0; + } else { + *(start - 1) = fill; + } + ++n; + } + if (spec.align() == ALIGN_CENTER && + spec.width() > static_cast<unsigned>(n)) { + width = spec.width(); + CharPtr p = grow_buffer(width); + std::copy(p, p + n, p + (width - n) / 2); + fill_padding(p, spec.width(), n, fill); + return; + } + if (spec.fill() != ' ' || sign) { + while (*start == ' ') + *start++ = fill; + if (sign) + *(start - 1) = sign; + } + grow_buffer(n); + return; + } + // If n is negative we ask to increase the capacity by at least 1, + // but as std::vector, the buffer grows exponentially. + buffer_.reserve(n >= 0 ? offset + n + 1 : buffer_.capacity() + 1); + } +} + +/** + \rst + This class template provides operations for formatting and writing data + into a character stream. The output is stored in a memory buffer that grows + dynamically. + + You can use one of the following typedefs for common character types + and the standard allocator: + + +---------------+-----------------------------------------------------+ + | Type | Definition | + +===============+=====================================================+ + | MemoryWriter | BasicMemoryWriter<char, std::allocator<char>> | + +---------------+-----------------------------------------------------+ + | WMemoryWriter | BasicMemoryWriter<wchar_t, std::allocator<wchar_t>> | + +---------------+-----------------------------------------------------+ + + **Example**:: + + MemoryWriter out; + out << "The answer is " << 42 << "\n"; + out.write("({:+f}, {:+f})", -3.14, 3.14); + + This will write the following output to the ``out`` object: + + .. code-block:: none + + The answer is 42 + (-3.140000, +3.140000) + + The output can be converted to an ``std::string`` with ``out.str()`` or + accessed as a C string with ``out.c_str()``. + \endrst + */ +template <typename Char, typename Allocator = std::allocator<Char> > +class BasicMemoryWriter : public BasicWriter<Char> { + private: + internal::MemoryBuffer<Char, internal::INLINE_BUFFER_SIZE, Allocator> buffer_; + + public: + explicit BasicMemoryWriter(const Allocator& alloc = Allocator()) + : BasicWriter<Char>(buffer_), buffer_(alloc) {} + +#if FMT_USE_RVALUE_REFERENCES + /** + \rst + Constructs a :class:`fmt::BasicMemoryWriter` object moving the content + of the other object to it. + \endrst + */ + BasicMemoryWriter(BasicMemoryWriter &&other) + : BasicWriter<Char>(buffer_), buffer_(std::move(other.buffer_)) { + } + + /** + \rst + Moves the content of the other ``BasicMemoryWriter`` object to this one. + \endrst + */ + BasicMemoryWriter &operator=(BasicMemoryWriter &&other) { + buffer_ = std::move(other.buffer_); + return *this; + } +#endif +}; + +typedef BasicMemoryWriter<char> MemoryWriter; +typedef BasicMemoryWriter<wchar_t> WMemoryWriter; + +/** + \rst + This class template provides operations for formatting and writing data + into a fixed-size array. For writing into a dynamically growing buffer + use :class:`fmt::BasicMemoryWriter`. + + Any write method will throw ``std::runtime_error`` if the output doesn't fit + into the array. + + You can use one of the following typedefs for common character types: + + +--------------+---------------------------+ + | Type | Definition | + +==============+===========================+ + | ArrayWriter | BasicArrayWriter<char> | + +--------------+---------------------------+ + | WArrayWriter | BasicArrayWriter<wchar_t> | + +--------------+---------------------------+ + \endrst + */ +template <typename Char> +class BasicArrayWriter : public BasicWriter<Char> { + private: + internal::FixedBuffer<Char> buffer_; + + public: + /** + \rst + Constructs a :class:`fmt::BasicArrayWriter` object for *array* of the + given size. + \endrst + */ + BasicArrayWriter(Char *array, std::size_t size) + : BasicWriter<Char>(buffer_), buffer_(array, size) {} + + // FIXME: this is temporary undocumented due to a bug in Sphinx + /* + \rst + Constructs a :class:`fmt::BasicArrayWriter` object for *array* of the + size known at compile time. + \endrst + */ + template <std::size_t SIZE> + explicit BasicArrayWriter(Char (&array)[SIZE]) + : BasicWriter<Char>(buffer_), buffer_(array, SIZE) {} +}; + +typedef BasicArrayWriter<char> ArrayWriter; +typedef BasicArrayWriter<wchar_t> WArrayWriter; + +// Formats a value. +template <typename Char, typename T> +void format(BasicFormatter<Char> &f, const Char *&format_str, const T &value) { + std::basic_ostringstream<Char> os; + os << value; + std::basic_string<Char> str = os.str(); + internal::Arg arg = internal::MakeValue<Char>(str); + arg.type = static_cast<internal::Arg::Type>( + internal::MakeValue<Char>::type(str)); + format_str = f.format(format_str, arg); +} + +// Reports a system error without throwing an exception. +// Can be used to report errors from destructors. +void report_system_error(int error_code, StringRef message) FMT_NOEXCEPT; + +#ifdef _WIN32 + +/** A Windows error. */ +class WindowsError : public SystemError { + private: + void init(int error_code, StringRef format_str, ArgList args); + + public: + /** + \rst + Constructs a :class:`fmt::WindowsError` object with the description + of the form + + .. parsed-literal:: + *<message>*: *<system-message>* + + where *<message>* is the formatted message and *<system-message>* is the + system message corresponding to the error code. + *error_code* is a Windows error code as given by ``GetLastError``. + If *error_code* is not a valid error code such as -1, the system message + will look like "error -1". + + **Example**:: + + // This throws a WindowsError with the description + // cannot open file 'madeup': The system cannot find the file specified. + // or similar (system message may vary). + const char *filename = "madeup"; + LPOFSTRUCT of = LPOFSTRUCT(); + HFILE file = OpenFile(filename, &of, OF_READ); + if (file == HFILE_ERROR) { + throw fmt::WindowsError(GetLastError(), + "cannot open file '{}'", filename); + } + \endrst + */ + WindowsError(int error_code, StringRef message) { + init(error_code, message, ArgList()); + } + FMT_VARIADIC_CTOR(WindowsError, init, int, StringRef) +}; + +// Reports a Windows error without throwing an exception. +// Can be used to report errors from destructors. +void report_windows_error(int error_code, StringRef message) FMT_NOEXCEPT; + +#endif + +enum Color { BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE }; + +/** + Formats a string and prints it to stdout using ANSI escape sequences + to specify color (experimental). + Example: + PrintColored(fmt::RED, "Elapsed time: {0:.2f} seconds") << 1.23; + */ +void print_colored(Color c, StringRef format, ArgList args); + +/** + \rst + Formats arguments and returns the result as a string. + + **Example**:: + + std::string message = format("The answer is {}", 42); + \endrst +*/ +inline std::string format(StringRef format_str, ArgList args) { + MemoryWriter w; + w.write(format_str, args); + return w.str(); +} + +inline std::wstring format(WStringRef format_str, ArgList args) { + WMemoryWriter w; + w.write(format_str, args); + return w.str(); +} + +/** + \rst + Prints formatted data to the file *f*. + + **Example**:: + + print(stderr, "Don't {}!", "panic"); + \endrst + */ +void print(std::FILE *f, StringRef format_str, ArgList args); + +/** + \rst + Prints formatted data to ``stdout``. + + **Example**:: + + print("Elapsed time: {0:.2f} seconds", 1.23); + \endrst + */ +void print(StringRef format_str, ArgList args); + +/** + \rst + Prints formatted data to the stream *os*. + + **Example**:: + + print(cerr, "Don't {}!", "panic"); + \endrst + */ +void print(std::ostream &os, StringRef format_str, ArgList args); + +template <typename Char> +void printf(BasicWriter<Char> &w, BasicStringRef<Char> format, ArgList args) { + internal::PrintfFormatter<Char>().format(w, format, args); +} + +/** + \rst + Formats arguments and returns the result as a string. + + **Example**:: + + std::string message = fmt::sprintf("The answer is %d", 42); + \endrst +*/ +inline std::string sprintf(StringRef format, ArgList args) { + MemoryWriter w; + printf(w, format, args); + return w.str(); +} + +/** + \rst + Prints formatted data to the file *f*. + + **Example**:: + + fmt::fprintf(stderr, "Don't %s!", "panic"); + \endrst + */ +int fprintf(std::FILE *f, StringRef format, ArgList args); + +/** + \rst + Prints formatted data to ``stdout``. + + **Example**:: + + fmt::printf("Elapsed time: %.2f seconds", 1.23); + \endrst + */ +inline int printf(StringRef format, ArgList args) { + return fprintf(stdout, format, args); +} + +/** + Fast integer formatter. + */ +class FormatInt { + private: + // Buffer should be large enough to hold all digits (digits10 + 1), + // a sign and a null character. + enum {BUFFER_SIZE = std::numeric_limits<ULongLong>::digits10 + 3}; + mutable char buffer_[BUFFER_SIZE]; + char *str_; + + // Formats value in reverse and returns the number of digits. + char *format_decimal(ULongLong value) { + char *buffer_end = buffer_ + BUFFER_SIZE - 1; + while (value >= 100) { + // Integer division is slow so do it for a group of two digits instead + // of for every digit. The idea comes from the talk by Alexandrescu + // "Three Optimization Tips for C++". See speed-test for a comparison. + unsigned index = (value % 100) * 2; + value /= 100; + *--buffer_end = internal::Data::DIGITS[index + 1]; + *--buffer_end = internal::Data::DIGITS[index]; + } + if (value < 10) { + *--buffer_end = static_cast<char>('0' + value); + return buffer_end; + } + unsigned index = static_cast<unsigned>(value * 2); + *--buffer_end = internal::Data::DIGITS[index + 1]; + *--buffer_end = internal::Data::DIGITS[index]; + return buffer_end; + } + + void FormatSigned(LongLong value) { + ULongLong abs_value = static_cast<ULongLong>(value); + bool negative = value < 0; + if (negative) + abs_value = 0 - abs_value; + str_ = format_decimal(abs_value); + if (negative) + *--str_ = '-'; + } + + public: + explicit FormatInt(int value) { FormatSigned(value); } + explicit FormatInt(long value) { FormatSigned(value); } + explicit FormatInt(LongLong value) { FormatSigned(value); } + explicit FormatInt(unsigned value) : str_(format_decimal(value)) {} + explicit FormatInt(unsigned long value) : str_(format_decimal(value)) {} + explicit FormatInt(ULongLong value) : str_(format_decimal(value)) {} + + /** + Returns the number of characters written to the output buffer. + */ + std::size_t size() const { return buffer_ - str_ + BUFFER_SIZE - 1; } + + /** + Returns a pointer to the output buffer content. No terminating null + character is appended. + */ + const char *data() const { return str_; } + + /** + Returns a pointer to the output buffer content with terminating null + character appended. + */ + const char *c_str() const { + buffer_[BUFFER_SIZE - 1] = '\0'; + return str_; + } + + /** + Returns the content of the output buffer as an `std::string`. + */ + std::string str() const { return std::string(str_, size()); } +}; + +// Formats a decimal integer value writing into buffer and returns +// a pointer to the end of the formatted string. This function doesn't +// write a terminating null character. +template <typename T> +inline void format_decimal(char *&buffer, T value) { + typename internal::IntTraits<T>::MainType abs_value = value; + if (internal::is_negative(value)) { + *buffer++ = '-'; + abs_value = 0 - abs_value; + } + if (abs_value < 100) { + if (abs_value < 10) { + *buffer++ = static_cast<char>('0' + abs_value); + return; + } + unsigned index = static_cast<unsigned>(abs_value * 2); + *buffer++ = internal::Data::DIGITS[index]; + *buffer++ = internal::Data::DIGITS[index + 1]; + return; + } + unsigned num_digits = internal::count_digits(abs_value); + internal::format_decimal(buffer, abs_value, num_digits); + buffer += num_digits; +} +} + +#if FMT_GCC_VERSION +// Use the system_header pragma to suppress warnings about variadic macros +// because suppressing -Wvariadic-macros with the diagnostic pragma doesn't +// work. It is used at the end because we want to suppress as little warnings +// as possible. +# pragma GCC system_header +#endif + +// This is used to work around VC++ bugs in handling variadic macros. +#define FMT_EXPAND(args) args + +// Returns the number of arguments. +// Based on https://groups.google.com/forum/#!topic/comp.std.c/d-6Mj5Lko_s. +#define FMT_NARG(...) FMT_NARG_(__VA_ARGS__, FMT_RSEQ_N()) +#define FMT_NARG_(...) FMT_EXPAND(FMT_ARG_N(__VA_ARGS__)) +#define FMT_ARG_N(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N, ...) N +#define FMT_RSEQ_N() 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 + +#define FMT_CONCAT(a, b) a##b +#define FMT_FOR_EACH_(N, f, ...) \ + FMT_EXPAND(FMT_CONCAT(FMT_FOR_EACH, N)(f, __VA_ARGS__)) +#define FMT_FOR_EACH(f, ...) \ + FMT_EXPAND(FMT_FOR_EACH_(FMT_NARG(__VA_ARGS__), f, __VA_ARGS__)) + +#define FMT_ADD_ARG_NAME(type, index) type arg##index +#define FMT_GET_ARG_NAME(type, index) arg##index + +#if FMT_USE_VARIADIC_TEMPLATES + +namespace fmt { +namespace internal { +inline void do_set_types(Arg *) {} + +template <typename T, typename... Args> +inline void do_set_types(Arg *args, const T &arg, const Args & ... tail) { + args->type = static_cast<Arg::Type>(MakeValue<T>::type(arg)); + do_set_types(args + 1, tail...); +} + +template <typename... Args> +inline void set_types(Arg *array, const Args & ... args) { + do_set_types(array, args...); + array[sizeof...(Args)].type = Arg::NONE; +} + +// Computes the argument array size by adding 1 to N, which is the number of +// arguments, if N is zero, because array of zero size is invalid, or if N +// is greater than ArgList::MAX_PACKED_ARGS to accommodate for an extra +// argument that marks the end of the list. +template <unsigned N> +struct ArgArraySize { + enum { VALUE = N + (N == 0 || N > ArgList::MAX_PACKED_ARGS ? 1 : 0) }; +}; +} +} + +# define FMT_VARIADIC_(Char, ReturnType, func, call, ...) \ + template <typename... Args> \ + ReturnType func(FMT_FOR_EACH(FMT_ADD_ARG_NAME, __VA_ARGS__), \ + const Args & ... args) { \ + using fmt::internal::Arg; \ + Arg array[fmt::internal::ArgArraySize<sizeof...(Args)>::VALUE] = { \ + fmt::internal::MakeValue<Char>(args)... \ + }; \ + if (fmt::internal::check((sizeof...(Args) > fmt::ArgList::MAX_PACKED_ARGS))) \ + set_types(array, args...); \ + call(FMT_FOR_EACH(FMT_GET_ARG_NAME, __VA_ARGS__), \ + fmt::ArgList(fmt::internal::make_type(args...), array)); \ + } +#else +// Defines a wrapper for a function taking __VA_ARGS__ arguments +// and n additional arguments of arbitrary types. +# define FMT_WRAP(Char, ReturnType, func, call, n, ...) \ + template <FMT_GEN(n, FMT_MAKE_TEMPLATE_ARG)> \ + inline ReturnType func(FMT_FOR_EACH(FMT_ADD_ARG_NAME, __VA_ARGS__), \ + FMT_GEN(n, FMT_MAKE_ARG)) { \ + const fmt::internal::Arg args[] = {FMT_GEN(n, FMT_MAKE_REF_##Char)}; \ + call(FMT_FOR_EACH(FMT_GET_ARG_NAME, __VA_ARGS__), fmt::ArgList( \ + fmt::internal::make_type(FMT_GEN(n, FMT_MAKE_REF2)), args)); \ + } + +# define FMT_VARIADIC_(Char, ReturnType, func, call, ...) \ + inline ReturnType func(FMT_FOR_EACH(FMT_ADD_ARG_NAME, __VA_ARGS__)) { \ + call(FMT_FOR_EACH(FMT_GET_ARG_NAME, __VA_ARGS__), fmt::ArgList()); \ + } \ + FMT_WRAP(Char, ReturnType, func, call, 1, __VA_ARGS__) \ + FMT_WRAP(Char, ReturnType, func, call, 2, __VA_ARGS__) \ + FMT_WRAP(Char, ReturnType, func, call, 3, __VA_ARGS__) \ + FMT_WRAP(Char, ReturnType, func, call, 4, __VA_ARGS__) \ + FMT_WRAP(Char, ReturnType, func, call, 5, __VA_ARGS__) \ + FMT_WRAP(Char, ReturnType, func, call, 6, __VA_ARGS__) \ + FMT_WRAP(Char, ReturnType, func, call, 7, __VA_ARGS__) \ + FMT_WRAP(Char, ReturnType, func, call, 8, __VA_ARGS__) \ + FMT_WRAP(Char, ReturnType, func, call, 9, __VA_ARGS__) \ + FMT_WRAP(Char, ReturnType, func, call, 10, __VA_ARGS__) \ + FMT_WRAP(Char, ReturnType, func, call, 11, __VA_ARGS__) \ + FMT_WRAP(Char, ReturnType, func, call, 12, __VA_ARGS__) \ + FMT_WRAP(Char, ReturnType, func, call, 13, __VA_ARGS__) \ + FMT_WRAP(Char, ReturnType, func, call, 14, __VA_ARGS__) \ + FMT_WRAP(Char, ReturnType, func, call, 15, __VA_ARGS__) +#endif // FMT_USE_VARIADIC_TEMPLATES + +/** + \rst + Defines a variadic function with the specified return type, function name + and argument types passed as variable arguments to this macro. + + **Example**:: + + void print_error(const char *file, int line, const char *format, + fmt::ArgList args) { + fmt::print("{}: {}: ", file, line); + fmt::print(format, args); + } + FMT_VARIADIC(void, print_error, const char *, int, const char *) + + ``FMT_VARIADIC`` is used for compatibility with legacy C++ compilers that + don't implement variadic templates. You don't have to use this macro if + you don't need legacy compiler support and can use variadic templates + directly:: + + template <typename... Args> + void print_error(const char *file, int line, const char *format, + const Args & ... args) { + fmt::print("{}: {}: ", file, line); + fmt::print(format, args...); + } + \endrst + */ +#define FMT_VARIADIC(ReturnType, func, ...) \ + FMT_VARIADIC_(char, ReturnType, func, return func, __VA_ARGS__) + +#define FMT_VARIADIC_W(ReturnType, func, ...) \ + FMT_VARIADIC_(wchar_t, ReturnType, func, return func, __VA_ARGS__) + +namespace fmt { +FMT_VARIADIC(std::string, format, StringRef) +FMT_VARIADIC_W(std::wstring, format, WStringRef) +FMT_VARIADIC(void, print, StringRef) +FMT_VARIADIC(void, print, std::FILE *, StringRef) +FMT_VARIADIC(void, print, std::ostream &, StringRef) +FMT_VARIADIC(void, print_colored, Color, StringRef) +FMT_VARIADIC(std::string, sprintf, StringRef) +FMT_VARIADIC(int, printf, StringRef) +FMT_VARIADIC(int, fprintf, std::FILE *, StringRef) +} + +// Restore warnings. +#if FMT_GCC_VERSION >= 406 +# pragma GCC diagnostic pop +#endif + +#ifdef __clang__ +# pragma clang diagnostic pop +#endif + +#ifdef FMT_HEADER_ONLY +# include "format.cc" +#endif + +#endif // FMT_FORMAT_H_ diff --git a/dep/cppformat/posix.cc b/dep/cppformat/posix.cc new file mode 100644 index 00000000000..0efb5aff3d0 --- /dev/null +++ b/dep/cppformat/posix.cc @@ -0,0 +1,252 @@ +/* + A C++ interface to POSIX functions. + + Copyright (c) 2014 - 2015, Victor Zverovich + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// Disable bogus MSVC warnings. +#ifndef _CRT_SECURE_NO_WARNINGS +# define _CRT_SECURE_NO_WARNINGS +#endif + +#include "posix.h" + +#include <limits.h> +#include <sys/types.h> +#include <sys/stat.h> + +#ifndef _WIN32 +# include <unistd.h> +#else +# include <windows.h> +# include <io.h> + +# define O_CREAT _O_CREAT +# define O_TRUNC _O_TRUNC + +# ifndef S_IRUSR +# define S_IRUSR _S_IREAD +# endif + +# ifndef S_IWUSR +# define S_IWUSR _S_IWRITE +# endif + +# ifdef __MINGW32__ +# define _SH_DENYNO 0x40 +# undef fileno +# endif + +#endif // _WIN32 + +namespace { +#ifdef _WIN32 +// Return type of read and write functions. +typedef int RWResult; + +// On Windows the count argument to read and write is unsigned, so convert +// it from size_t preventing integer overflow. +inline unsigned convert_rwcount(std::size_t count) { + return count <= UINT_MAX ? static_cast<unsigned>(count) : UINT_MAX; +} +#else +// Return type of read and write functions. +typedef ssize_t RWResult; + +inline std::size_t convert_rwcount(std::size_t count) { return count; } +#endif +} + +fmt::BufferedFile::~BufferedFile() FMT_NOEXCEPT { + if (file_ && FMT_SYSTEM(fclose(file_)) != 0) + fmt::report_system_error(errno, "cannot close file"); +} + +fmt::BufferedFile::BufferedFile(fmt::StringRef filename, fmt::StringRef mode) { + FMT_RETRY_VAL(file_, FMT_SYSTEM(fopen(filename.c_str(), mode.c_str())), 0); + if (!file_) + throw SystemError(errno, "cannot open file {}", filename); +} + +void fmt::BufferedFile::close() { + if (!file_) + return; + int result = FMT_SYSTEM(fclose(file_)); + file_ = 0; + if (result != 0) + throw SystemError(errno, "cannot close file"); +} + +// A macro used to prevent expansion of fileno on broken versions of MinGW. +#define FMT_ARGS + +int fmt::BufferedFile::fileno() const { + int fd = FMT_POSIX_CALL(fileno FMT_ARGS(file_)); + if (fd == -1) + throw SystemError(errno, "cannot get file descriptor"); + return fd; +} + +fmt::File::File(fmt::StringRef path, int oflag) { + int mode = S_IRUSR | S_IWUSR; +#if defined(_WIN32) && !defined(__MINGW32__) + fd_ = -1; + FMT_POSIX_CALL(sopen_s(&fd_, path.c_str(), oflag, _SH_DENYNO, mode)); +#else + FMT_RETRY(fd_, FMT_POSIX_CALL(open(path.c_str(), oflag, mode))); +#endif + if (fd_ == -1) + throw SystemError(errno, "cannot open file {}", path); +} + +fmt::File::~File() FMT_NOEXCEPT { + // Don't retry close in case of EINTR! + // See http://linux.derkeiler.com/Mailing-Lists/Kernel/2005-09/3000.html + if (fd_ != -1 && FMT_POSIX_CALL(close(fd_)) != 0) + fmt::report_system_error(errno, "cannot close file"); +} + +void fmt::File::close() { + if (fd_ == -1) + return; + // Don't retry close in case of EINTR! + // See http://linux.derkeiler.com/Mailing-Lists/Kernel/2005-09/3000.html + int result = FMT_POSIX_CALL(close(fd_)); + fd_ = -1; + if (result != 0) + throw SystemError(errno, "cannot close file"); +} + +fmt::LongLong fmt::File::size() const { +#ifdef _WIN32 + // Use GetFileSize instead of GetFileSizeEx for the case when _WIN32_WINNT + // is less than 0x0500 as is the case with some default MinGW builds. + // Both functions support large file sizes. + DWORD size_upper = 0; + HANDLE handle = reinterpret_cast<HANDLE>(_get_osfhandle(fd_)); + DWORD size_lower = FMT_SYSTEM(GetFileSize(handle, &size_upper)); + if (size_lower == INVALID_FILE_SIZE) { + DWORD error = GetLastError(); + if (error != NO_ERROR) + throw WindowsError(GetLastError(), "cannot get file size"); + } + fmt::ULongLong size = size_upper; + return (size << sizeof(DWORD) * CHAR_BIT) | size_lower; +#else + typedef struct stat Stat; + Stat file_stat = Stat(); + if (FMT_POSIX_CALL(fstat(fd_, &file_stat)) == -1) + throw SystemError(errno, "cannot get file attributes"); + FMT_STATIC_ASSERT(sizeof(fmt::LongLong) >= sizeof(file_stat.st_size), + "return type of File::size is not large enough"); + return file_stat.st_size; +#endif +} + +std::size_t fmt::File::read(void *buffer, std::size_t count) { + RWResult result = 0; + FMT_RETRY(result, FMT_POSIX_CALL(read(fd_, buffer, convert_rwcount(count)))); + if (result < 0) + throw SystemError(errno, "cannot read from file"); + return result; +} + +std::size_t fmt::File::write(const void *buffer, std::size_t count) { + RWResult result = 0; + FMT_RETRY(result, FMT_POSIX_CALL(write(fd_, buffer, convert_rwcount(count)))); + if (result < 0) + throw SystemError(errno, "cannot write to file"); + return result; +} + +fmt::File fmt::File::dup(int fd) { + // Don't retry as dup doesn't return EINTR. + // http://pubs.opengroup.org/onlinepubs/009695399/functions/dup.html + int new_fd = FMT_POSIX_CALL(dup(fd)); + if (new_fd == -1) + throw SystemError(errno, "cannot duplicate file descriptor {}", fd); + return File(new_fd); +} + +void fmt::File::dup2(int fd) { + int result = 0; + FMT_RETRY(result, FMT_POSIX_CALL(dup2(fd_, fd))); + if (result == -1) { + throw SystemError(errno, + "cannot duplicate file descriptor {} to {}", fd_, fd); + } +} + +void fmt::File::dup2(int fd, ErrorCode &ec) FMT_NOEXCEPT { + int result = 0; + FMT_RETRY(result, FMT_POSIX_CALL(dup2(fd_, fd))); + if (result == -1) + ec = ErrorCode(errno); +} + +void fmt::File::pipe(File &read_end, File &write_end) { + // Close the descriptors first to make sure that assignments don't throw + // and there are no leaks. + read_end.close(); + write_end.close(); + int fds[2] = {}; +#ifdef _WIN32 + // Make the default pipe capacity same as on Linux 2.6.11+. + enum { DEFAULT_CAPACITY = 65536 }; + int result = FMT_POSIX_CALL(pipe(fds, DEFAULT_CAPACITY, _O_BINARY)); +#else + // Don't retry as the pipe function doesn't return EINTR. + // http://pubs.opengroup.org/onlinepubs/009696799/functions/pipe.html + int result = FMT_POSIX_CALL(pipe(fds)); +#endif + if (result != 0) + throw SystemError(errno, "cannot create pipe"); + // The following assignments don't throw because read_fd and write_fd + // are closed. + read_end = File(fds[0]); + write_end = File(fds[1]); +} + +fmt::BufferedFile fmt::File::fdopen(const char *mode) { + // Don't retry as fdopen doesn't return EINTR. + FILE *f = FMT_POSIX_CALL(fdopen(fd_, mode)); + if (!f) + throw SystemError(errno, "cannot associate stream with file descriptor"); + BufferedFile file(f); + fd_ = -1; + return file; +} + +long fmt::getpagesize() { +#ifdef _WIN32 + SYSTEM_INFO si; + GetSystemInfo(&si); + return si.dwPageSize; +#else + long size = FMT_POSIX_CALL(sysconf(_SC_PAGESIZE)); + if (size < 0) + throw SystemError(errno, "cannot get memory page size"); + return size; +#endif +} diff --git a/dep/cppformat/posix.h b/dep/cppformat/posix.h new file mode 100644 index 00000000000..70a0db1a560 --- /dev/null +++ b/dep/cppformat/posix.h @@ -0,0 +1,344 @@ +/* + A C++ interface to POSIX functions. + + Copyright (c) 2014 - 2015, Victor Zverovich + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef FMT_POSIX_H_ +#define FMT_POSIX_H_ + +#ifdef __MINGW32__ +// Workaround MinGW bug https://sourceforge.net/p/mingw/bugs/2024/. +# undef __STRICT_ANSI__ +#endif + +#include <errno.h> +#include <fcntl.h> // for O_RDONLY +#include <stdio.h> + +#include <cstddef> + +#include "format.h" + +#ifdef FMT_INCLUDE_POSIX_TEST +# include "test/posix-test.h" +#endif + +#ifndef FMT_POSIX +# if defined(_WIN32) && !defined(__MINGW32__) +// Fix warnings about deprecated symbols. +# define FMT_POSIX(call) _##call +# else +# define FMT_POSIX(call) call +# endif +#endif + +// Calls to system functions are wrapped in FMT_SYSTEM for testability. +#ifdef FMT_SYSTEM +# define FMT_POSIX_CALL(call) FMT_SYSTEM(call) +#else +# define FMT_SYSTEM(call) call +# ifdef _WIN32 +// Fix warnings about deprecated symbols. +# define FMT_POSIX_CALL(call) ::_##call +# else +# define FMT_POSIX_CALL(call) ::call +# endif +#endif + +#if FMT_GCC_VERSION >= 407 +# define FMT_UNUSED __attribute__((unused)) +#else +# define FMT_UNUSED +#endif + +#if FMT_USE_STATIC_ASSERT || FMT_HAS_CPP_ATTRIBUTE(cxx_static_assert) || \ + (FMT_GCC_VERSION >= 403 && FMT_HAS_GXX_CXX11) || _MSC_VER >= 1600 +# define FMT_STATIC_ASSERT(cond, message) static_assert(cond, message) +#else +# define FMT_CONCAT_(a, b) FMT_CONCAT(a, b) +# define FMT_STATIC_ASSERT(cond, message) \ + typedef int FMT_CONCAT_(Assert, __LINE__)[(cond) ? 1 : -1] FMT_UNUSED +#endif + +// Retries the expression while it evaluates to error_result and errno +// equals to EINTR. +#ifndef _WIN32 +# define FMT_RETRY_VAL(result, expression, error_result) \ + do { \ + result = (expression); \ + } while (result == error_result && errno == EINTR) +#else +# define FMT_RETRY_VAL(result, expression, error_result) result = (expression) +#endif + +#define FMT_RETRY(result, expression) FMT_RETRY_VAL(result, expression, -1) + +namespace fmt { + +// An error code. +class ErrorCode { + private: + int value_; + + public: + explicit ErrorCode(int value = 0) FMT_NOEXCEPT : value_(value) {} + + int get() const FMT_NOEXCEPT { return value_; } +}; + +// A buffered file. +class BufferedFile { + private: + FILE *file_; + + friend class File; + + explicit BufferedFile(FILE *f) : file_(f) {} + + public: + // Constructs a BufferedFile object which doesn't represent any file. + BufferedFile() FMT_NOEXCEPT : file_(0) {} + + // Destroys the object closing the file it represents if any. + ~BufferedFile() FMT_NOEXCEPT; + +#if !FMT_USE_RVALUE_REFERENCES + // Emulate a move constructor and a move assignment operator if rvalue + // references are not supported. + + private: + // A proxy object to emulate a move constructor. + // It is private to make it impossible call operator Proxy directly. + struct Proxy { + FILE *file; + }; + +public: + // A "move constructor" for moving from a temporary. + BufferedFile(Proxy p) FMT_NOEXCEPT : file_(p.file) {} + + // A "move constructor" for for moving from an lvalue. + BufferedFile(BufferedFile &f) FMT_NOEXCEPT : file_(f.file_) { + f.file_ = 0; + } + + // A "move assignment operator" for moving from a temporary. + BufferedFile &operator=(Proxy p) { + close(); + file_ = p.file; + return *this; + } + + // A "move assignment operator" for moving from an lvalue. + BufferedFile &operator=(BufferedFile &other) { + close(); + file_ = other.file_; + other.file_ = 0; + return *this; + } + + // Returns a proxy object for moving from a temporary: + // BufferedFile file = BufferedFile(...); + operator Proxy() FMT_NOEXCEPT { + Proxy p = {file_}; + file_ = 0; + return p; + } + +#else + private: + FMT_DISALLOW_COPY_AND_ASSIGN(BufferedFile); + + public: + BufferedFile(BufferedFile &&other) FMT_NOEXCEPT : file_(other.file_) { + other.file_ = 0; + } + + BufferedFile& operator=(BufferedFile &&other) { + close(); + file_ = other.file_; + other.file_ = 0; + return *this; + } +#endif + + // Opens a file. + BufferedFile(fmt::StringRef filename, fmt::StringRef mode); + + // Closes the file. + void close(); + + // Returns the pointer to a FILE object representing this file. + FILE *get() const FMT_NOEXCEPT { return file_; } + + // We place parentheses around fileno to workaround a bug in some versions + // of MinGW that define fileno as a macro. + int (fileno)() const; + + void print(fmt::StringRef format_str, const ArgList &args) { + fmt::print(file_, format_str, args); + } + FMT_VARIADIC(void, print, fmt::StringRef) +}; + +// A file. Closed file is represented by a File object with descriptor -1. +// Methods that are not declared with FMT_NOEXCEPT may throw +// fmt::SystemError in case of failure. Note that some errors such as +// closing the file multiple times will cause a crash on Windows rather +// than an exception. You can get standard behavior by overriding the +// invalid parameter handler with _set_invalid_parameter_handler. +class File { + private: + int fd_; // File descriptor. + + // Constructs a File object with a given descriptor. + explicit File(int fd) : fd_(fd) {} + + public: + // Possible values for the oflag argument to the constructor. + enum { + RDONLY = FMT_POSIX(O_RDONLY), // Open for reading only. + WRONLY = FMT_POSIX(O_WRONLY), // Open for writing only. + RDWR = FMT_POSIX(O_RDWR) // Open for reading and writing. + }; + + // Constructs a File object which doesn't represent any file. + File() FMT_NOEXCEPT : fd_(-1) {} + + // Opens a file and constructs a File object representing this file. + File(fmt::StringRef path, int oflag); + +#if !FMT_USE_RVALUE_REFERENCES + // Emulate a move constructor and a move assignment operator if rvalue + // references are not supported. + + private: + // A proxy object to emulate a move constructor. + // It is private to make it impossible call operator Proxy directly. + struct Proxy { + int fd; + }; + + public: + // A "move constructor" for moving from a temporary. + File(Proxy p) FMT_NOEXCEPT : fd_(p.fd) {} + + // A "move constructor" for for moving from an lvalue. + File(File &other) FMT_NOEXCEPT : fd_(other.fd_) { + other.fd_ = -1; + } + + // A "move assignment operator" for moving from a temporary. + File &operator=(Proxy p) { + close(); + fd_ = p.fd; + return *this; + } + + // A "move assignment operator" for moving from an lvalue. + File &operator=(File &other) { + close(); + fd_ = other.fd_; + other.fd_ = -1; + return *this; + } + + // Returns a proxy object for moving from a temporary: + // File file = File(...); + operator Proxy() FMT_NOEXCEPT { + Proxy p = {fd_}; + fd_ = -1; + return p; + } + +#else + private: + FMT_DISALLOW_COPY_AND_ASSIGN(File); + + public: + File(File &&other) FMT_NOEXCEPT : fd_(other.fd_) { + other.fd_ = -1; + } + + File& operator=(File &&other) { + close(); + fd_ = other.fd_; + other.fd_ = -1; + return *this; + } +#endif + + // Destroys the object closing the file it represents if any. + ~File() FMT_NOEXCEPT; + + // Returns the file descriptor. + int descriptor() const FMT_NOEXCEPT { return fd_; } + + // Closes the file. + void close(); + + // Returns the file size. + fmt::LongLong size() const; + + // Attempts to read count bytes from the file into the specified buffer. + std::size_t read(void *buffer, std::size_t count); + + // Attempts to write count bytes from the specified buffer to the file. + std::size_t write(const void *buffer, std::size_t count); + + // Duplicates a file descriptor with the dup function and returns + // the duplicate as a file object. + static File dup(int fd); + + // Makes fd be the copy of this file descriptor, closing fd first if + // necessary. + void dup2(int fd); + + // Makes fd be the copy of this file descriptor, closing fd first if + // necessary. + void dup2(int fd, ErrorCode &ec) FMT_NOEXCEPT; + + // Creates a pipe setting up read_end and write_end file objects for reading + // and writing respectively. + static void pipe(File &read_end, File &write_end); + + // Creates a BufferedFile object associated with this file and detaches + // this File object from the file. + BufferedFile fdopen(const char *mode); +}; + +// Returns the memory page size. +long getpagesize(); +} // namespace fmt + +#if !FMT_USE_RVALUE_REFERENCES +namespace std { +// For compatibility with C++98. +inline fmt::BufferedFile &move(fmt::BufferedFile &f) { return f; } +inline fmt::File &move(fmt::File &f) { return f; } +} +#endif + +#endif // FMT_POSIX_H_ diff --git a/dep/libmpq/AUTHORS b/dep/libmpq/AUTHORS index 3d7da7bec9a..daac7662eee 100644 --- a/dep/libmpq/AUTHORS +++ b/dep/libmpq/AUTHORS @@ -1,10 +1,10 @@ Project Initiator: - * Maik Broemme <mbroemme@plusserver.de> + * Maik Broemme <mbroemme@libmpq.org> Developers: - * Maik Broemme <mbroemme@plusserver.de> + * Maik Broemme <mbroemme@libmpq.org> * Tilman Sauerbeck <tilman@code-monkey.de> * Forrest Voight <voights@gmail.com> * Georg Lukas <georg@op-co.de> diff --git a/dep/libmpq/FAQ b/dep/libmpq/FAQ index 52ca9f3c705..61cad93b6fc 100644 --- a/dep/libmpq/FAQ +++ b/dep/libmpq/FAQ @@ -57,7 +57,7 @@ A: Of course :) The example below takes first parameter as mpq archive libmpq__archive_open(&mpq_archive, argv[1], -1); /* get size of first file (0) and malloc output buffer. */ - libmpq__file_unpacked_size(mpq_archive, 0, &out_size); + libmpq__file_size_unpacked(mpq_archive, 0, &out_size); out_buf = malloc(out_size); /* read, decrypt and unpack file to output buffer. */ diff --git a/dep/libmpq/README b/dep/libmpq/README index 3f1bd3a1e9f..9d3f80e01c6 100644 --- a/dep/libmpq/README +++ b/dep/libmpq/README @@ -26,9 +26,9 @@ Reporting Bugs Bug reports for 'libmpq' can be send to me directly. - * Maik Broemme <mbroemme@plusserver.de> + * Maik Broemme <mbroemme@libmpq.org> Enjoy! -Maik Broemme <mbroemme@plusserver.de> -http://www.babelize.org/ +Maik Broemme <mbroemme@libmpq.org> +http://libmpq.org/ diff --git a/dep/libmpq/THANKS b/dep/libmpq/THANKS index 42da1235476..384e9f1f9e6 100644 --- a/dep/libmpq/THANKS +++ b/dep/libmpq/THANKS @@ -1,4 +1,4 @@ -'libmpq' was originaly created by Maik Broemme <mbroemme@plusserver.de> +'libmpq' was originaly created by Maik Broemme <mbroemme@libmpq.org> and i want to thank some people which helped by supplying knowledge, code or something else. diff --git a/dep/libmpq/bindings/d/mpq.d b/dep/libmpq/bindings/d/mpq.d index d72c2d2a986..cb3cf100070 100644 --- a/dep/libmpq/bindings/d/mpq.d +++ b/dep/libmpq/bindings/d/mpq.d @@ -1,7 +1,7 @@ /* * mpq.d -- D programming language module for libmpq * - * Copyright (c) 2008 Georg Lukas <georg@op-co.de> + * Copyright (c) 2008-2011 Georg Lukas <georg@op-co.de> * * 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 @@ -58,15 +58,15 @@ char *libmpq__version(); /* libmpq__generic mpq archive information. */ int libmpq__archive_open(mpq_archive_s **mpq_archive, char *mpq_filename, off_t archive_offset); int libmpq__archive_close(mpq_archive_s *mpq_archive); -int libmpq__archive_packed_size(mpq_archive_s *mpq_archive, off_t *packed_size); -int libmpq__archive_unpacked_size(mpq_archive_s *mpq_archive, off_t *unpacked_size); +int libmpq__archive_size_packed(mpq_archive_s *mpq_archive, off_t *packed_size); +int libmpq__archive_size_unpacked(mpq_archive_s *mpq_archive, off_t *unpacked_size); int libmpq__archive_offset(mpq_archive_s *mpq_archive, off_t *offset); int libmpq__archive_version(mpq_archive_s *mpq_archive, uint *version_); int libmpq__archive_files(mpq_archive_s *mpq_archive, uint *files); /* libmpq__generic file processing functions. */ -int libmpq__file_packed_size(mpq_archive_s *mpq_archive, uint file_number, off_t *packed_size); -int libmpq__file_unpacked_size(mpq_archive_s *mpq_archive, uint file_number, off_t *unpacked_size); +int libmpq__file_size_packed(mpq_archive_s *mpq_archive, uint file_number, off_t *packed_size); +int libmpq__file_size_unpacked(mpq_archive_s *mpq_archive, uint file_number, off_t *unpacked_size); int libmpq__file_offset(mpq_archive_s *mpq_archive, uint file_number, off_t *offset); int libmpq__file_blocks(mpq_archive_s *mpq_archive, uint file_number, uint *blocks); int libmpq__file_encrypted(mpq_archive_s *mpq_archive, uint file_number, uint *encrypted); @@ -78,7 +78,7 @@ int libmpq__file_read(mpq_archive_s *mpq_archive, uint file_number, ubyte *out_b /* libmpq__generic block processing functions. */ int libmpq__block_open_offset(mpq_archive_s *mpq_archive, uint file_number); int libmpq__block_close_offset(mpq_archive_s *mpq_archive, uint file_number); -int libmpq__block_unpacked_size(mpq_archive_s *mpq_archive, uint file_number, uint block_number, off_t *unpacked_size); +int libmpq__block_size_unpacked(mpq_archive_s *mpq_archive, uint file_number, uint block_number, off_t *unpacked_size); int libmpq__block_read(mpq_archive_s *mpq_archive, uint file_number, uint block_number, ubyte *out_buf, off_t out_size, off_t *transferred); } diff --git a/dep/libmpq/bindings/python/mpq.py b/dep/libmpq/bindings/python/mpq.py index cf6ecaae800..0f4ca37cfba 100644 --- a/dep/libmpq/bindings/python/mpq.py +++ b/dep/libmpq/bindings/python/mpq.py @@ -50,14 +50,14 @@ libmpq.libmpq__version.restype = ctypes.c_char_p libmpq.libmpq__archive_open.errcheck = check_error libmpq.libmpq__archive_close.errcheck = check_error -libmpq.libmpq__archive_packed_size.errcheck = check_error -libmpq.libmpq__archive_unpacked_size.errcheck = check_error +libmpq.libmpq__archive_size_packed.errcheck = check_error +libmpq.libmpq__archive_size_unpacked.errcheck = check_error libmpq.libmpq__archive_offset.errcheck = check_error libmpq.libmpq__archive_version.errcheck = check_error libmpq.libmpq__archive_files.errcheck = check_error -libmpq.libmpq__file_packed_size.errcheck = check_error -libmpq.libmpq__file_unpacked_size.errcheck = check_error +libmpq.libmpq__file_size_packed.errcheck = check_error +libmpq.libmpq__file_size_unpacked.errcheck = check_error libmpq.libmpq__file_offset.errcheck = check_error libmpq.libmpq__file_blocks.errcheck = check_error libmpq.libmpq__file_encrypted.errcheck = check_error @@ -68,7 +68,7 @@ libmpq.libmpq__file_read.errcheck = check_error libmpq.libmpq__block_open_offset.errcheck = check_error libmpq.libmpq__block_close_offset.errcheck = check_error -libmpq.libmpq__block_unpacked_size.errcheck = check_error +libmpq.libmpq__block_size_unpacked.errcheck = check_error libmpq.libmpq__block_read.errcheck = check_error __version__ = libmpq.libmpq__version() @@ -112,7 +112,7 @@ class Reader(object): def _read_block(self, ctypes=ctypes, libmpq=libmpq): block_size = ctypes.c_uint64() - libmpq.libmpq__block_unpacked_size(self._file._archive._mpq, + libmpq.libmpq__block_size_unpacked(self._file._archive._mpq, self._file.number, self._cur_block, ctypes.byref(block_size)) block_data = ctypes.create_string_buffer(block_size.value) libmpq.libmpq__block_read(self._file._archive._mpq, diff --git a/dep/libmpq/configure.ac b/dep/libmpq/configure.ac index d274eab07c6..ce5f90016da 100644 --- a/dep/libmpq/configure.ac +++ b/dep/libmpq/configure.ac @@ -1,5 +1,6 @@ # the autoconf initilization. -AC_INIT(libmpq, 0.4.2, [mbroemme@plusserver.de], [libmpq]) +AC_INIT(libmpq, 0.4.2, [mbroemme@libmpq.org], [libmpq]) +AC_SUBST(LIBMPQ_ABI, [1:0:0]) # detect the canonical host and target build environment. AC_CANONICAL_SYSTEM diff --git a/dep/libmpq/debian/control b/dep/libmpq/debian/control index f35bb060015..b25a3a36c28 100644 --- a/dep/libmpq/debian/control +++ b/dep/libmpq/debian/control @@ -4,7 +4,7 @@ Maintainer: Georg Lukas <georg@op-co.de> Build-Depends: debhelper (>= 7), autotools-dev, libbz2-dev Standards-Version: 3.7.3 Section: libs -Homepage: https://libmpq.org/ +Homepage: http://libmpq.org/ Package: libmpq-dev Section: libdevel diff --git a/dep/libmpq/debian/copyright b/dep/libmpq/debian/copyright index f014cf14de7..5a86a7f1157 100644 --- a/dep/libmpq/debian/copyright +++ b/dep/libmpq/debian/copyright @@ -1,15 +1,15 @@ This package was debianized by Georg Lukas <georg@op-co.de> on Fri, 04 Jul 2008 18:17:08 +0200. -It was downloaded from <https://libmpq.org/> +It was downloaded from <http://libmpq.org/> Upstream Author: - Maik Broemme <mbroemme@plusserver.de> + Maik Broemme <mbroemme@libmpq.org> Copyright: - Copyright (C) 2008 Maik Broemme + Copyright (C) 2003-2011 Maik Broemme License: @@ -19,5 +19,5 @@ License: (at your option) any later version. -The Debian packaging is (C) 2008, Georg Lukas <georg@op-co.de> and +The Debian packaging is (C) 2008-2011, Georg Lukas <georg@op-co.de> and is licensed under the GPL, see `/usr/share/common-licenses/GPL'. diff --git a/dep/libmpq/doc/man1/libmpq-config.1 b/dep/libmpq/doc/man1/libmpq-config.1 index c025f5ce4f4..01caf2ff664 100644 --- a/dep/libmpq/doc/man1/libmpq-config.1 +++ b/dep/libmpq/doc/man1/libmpq-config.1 @@ -1,4 +1,4 @@ -.\" Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> +.\" Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as @@ -19,7 +19,7 @@ .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. -.TH libmpq 1 2008-02-10 "The MoPaQ archive library" +.TH libmpq 1 2011-11-06 "The MoPaQ archive library" .SH NAME libmpq-config \- script to get information about the installed version of libmpq. .SH SYNOPSIS @@ -63,7 +63,7 @@ Instead of using this configuration script you should better use the pkg-config .SH AUTHOR Check documentation. .TP -libmpq is (c) 2003-2008 -.B Maik Broemme <mbroemme@plusserver.de> +libmpq is (c) 2003-2011 +.B Maik Broemme <mbroemme@libmpq.org> .PP The above e-mail address can be used to send bug reports, feedbacks or library enhancements. diff --git a/dep/libmpq/doc/man3/Makefile.am b/dep/libmpq/doc/man3/Makefile.am index cad3d865dc1..443df545c14 100644 --- a/dep/libmpq/doc/man3/Makefile.am +++ b/dep/libmpq/doc/man3/Makefile.am @@ -11,21 +11,21 @@ man_MANS = \ libmpq__archive_files.3 \ libmpq__archive_offset.3 \ libmpq__archive_open.3 \ - libmpq__archive_packed_size.3 \ - libmpq__archive_unpacked_size.3 \ + libmpq__archive_size_packed.3 \ + libmpq__archive_size_unpacked.3 \ libmpq__archive_version.3 \ libmpq__block_close_offset.3 \ libmpq__block_open_offset.3 \ libmpq__block_read.3 \ - libmpq__block_unpacked_size.3 \ + libmpq__block_size_unpacked.3 \ libmpq__file_blocks.3 \ libmpq__file_compressed.3 \ libmpq__file_encrypted.3 \ libmpq__file_imploded.3 \ libmpq__file_number.3 \ libmpq__file_offset.3 \ - libmpq__file_packed_size.3 \ libmpq__file_read.3 \ - libmpq__file_unpacked_size.3 \ + libmpq__file_size_packed.3 \ + libmpq__file_size_unpacked.3 \ libmpq__strerror.3 \ libmpq__version.3 diff --git a/dep/libmpq/doc/man3/libmpq.3 b/dep/libmpq/doc/man3/libmpq.3 index 768dab0a712..acea1bcef2b 100644 --- a/dep/libmpq/doc/man3/libmpq.3 +++ b/dep/libmpq/doc/man3/libmpq.3 @@ -1,4 +1,4 @@ -.\" Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> +.\" Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as @@ -19,7 +19,7 @@ .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. -.TH libmpq 3 2008-04-29 "The MoPaQ archive library" +.TH libmpq 3 2011-11-06 "The MoPaQ archive library" .SH NAME libmpq \- cross-platform C library for manipulating mpq archives. .SH SYNOPSIS @@ -41,12 +41,12 @@ libmpq \- cross-platform C library for manipulating mpq archives. .BI " mpq_archive_s *" "mpq_archive" .BI ");" .sp -.BI "int32_t libmpq__archive_packed_size(" +.BI "int32_t libmpq__archive_size_packed(" .BI " mpq_archive_s *" "mpq_archive", .BI " off_t *" "packed_size" .BI ");" .sp -.BI "int32_t libmpq__archive_unpacked_size(" +.BI "int32_t libmpq__archive_size_unpacked(" .BI " mpq_archive_s *" "mpq_archive", .BI " off_t *" "unpacked_size" .BI ");" @@ -66,13 +66,13 @@ libmpq \- cross-platform C library for manipulating mpq archives. .BI " uint32_t *" "files" .BI ");" .sp -.BI "int32_t libmpq__file_packed_size(" +.BI "int32_t libmpq__file_size_packed(" .BI " mpq_archive_s *" "mpq_archive", .BI " uint32_t " "file_number", .BI " off_t *" "packed_size" .BI ");" .sp -.BI "int32_t libmpq__file_unpacked_size(" +.BI "int32_t libmpq__file_size_unpacked(" .BI " mpq_archive_s *" "mpq_archive", .BI " uint32_t " "file_number", .BI " off_t *" "unpacked_size" @@ -132,14 +132,14 @@ libmpq \- cross-platform C library for manipulating mpq archives. .BI " uint32_t " "file_number" .BI ");" .sp -.BI "int32_t libmpq__block_packed_size(" +.BI "int32_t libmpq__block_size_packed(" .BI " mpq_archive_s *" "mpq_archive", .BI " uint32_t " "file_number", .BI " uint32_t " "block_number", .BI " off_t *" "packed_size" .BI ");" .sp -.BI "int32_t libmpq__block_unpacked_size(" +.BI "int32_t libmpq__block_size_unpacked(" .BI " mpq_archive_s *" "mpq_archive", .BI " uint32_t " "file_number", .BI " uint32_t " "block_number", @@ -177,13 +177,13 @@ The \fIlibmpq\fP library supports decrypting, decompressing, exploding and vario .BR libmpq__strerror (3), .BR libmpq__archive_open (3), .BR libmpq__archive_close (3), -.BR libmpq__archive_packed_size (3), -.BR libmpq__archive_unpacked_size (3), +.BR libmpq__archive_size_packed (3), +.BR libmpq__archive_size_unpacked (3), .BR libmpq__archive_offset (3), .BR libmpq__archive_version (3), .BR libmpq__archive_files (3), -.BR libmpq__file_packed_size (3), -.BR libmpq__file_unpacked_size (3), +.BR libmpq__file_size_packed (3), +.BR libmpq__file_size_unpacked (3), .BR libmpq__file_offset (3), .BR libmpq__file_blocks (3), .BR libmpq__file_encrypted (3), @@ -193,15 +193,15 @@ The \fIlibmpq\fP library supports decrypting, decompressing, exploding and vario .BR libmpq__file_read (3), .BR libmpq__block_open_offset (3), .BR libmpq__block_close_offset (3), -.BR libmpq__block_packed_size (3), -.BR libmpq__block_unpacked_size (3), +.BR libmpq__block_size_packed (3), +.BR libmpq__block_size_unpacked (3), .BR libmpq__block_offset (3), .BR libmpq__block_seed (3), .BR libmpq__block_read (3) .SH AUTHOR Check documentation. .TP -libmpq is (c) 2003-2008 -.B Maik Broemme <mbroemme@plusserver.de> +libmpq is (c) 2003-2011 +.B Maik Broemme <mbroemme@libmpq.org> .PP The above e-mail address can be used to send bug reports, feedbacks or library enhancements. diff --git a/dep/libmpq/doc/man3/libmpq__archive_close.3 b/dep/libmpq/doc/man3/libmpq__archive_close.3 index dfc652a6721..c529815f668 100644 --- a/dep/libmpq/doc/man3/libmpq__archive_close.3 +++ b/dep/libmpq/doc/man3/libmpq__archive_close.3 @@ -1,4 +1,4 @@ -.\" Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> +.\" Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as @@ -19,7 +19,7 @@ .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. -.TH libmpq 3 2008-04-29 "The MoPaQ archive library" +.TH libmpq 3 2011-11-06 "The MoPaQ archive library" .SH NAME libmpq \- cross-platform C library for manipulating mpq archives. .SH SYNOPSIS @@ -43,15 +43,15 @@ On success, a zero is returned and on error one of the following constants. The given file could not be closed. .SH SEE ALSO .BR libmpq__archive_open (3), -.BR libmpq__archive_packed_size (3), -.BR libmpq__archive_unpacked_size (3), +.BR libmpq__archive_size_packed (3), +.BR libmpq__archive_size_unpacked (3), .BR libmpq__archive_offset (3), .BR libmpq__archive_version (3), .BR libmpq__archive_files (3) .SH AUTHOR Check documentation. .TP -libmpq is (c) 2003-2008 -.B Maik Broemme <mbroemme@plusserver.de> +libmpq is (c) 2003-2011 +.B Maik Broemme <mbroemme@libmpq.org> .PP The above e-mail address can be used to send bug reports, feedbacks or library enhancements. diff --git a/dep/libmpq/doc/man3/libmpq__archive_files.3 b/dep/libmpq/doc/man3/libmpq__archive_files.3 index 6663b99161a..3cd1de4edf3 100644 --- a/dep/libmpq/doc/man3/libmpq__archive_files.3 +++ b/dep/libmpq/doc/man3/libmpq__archive_files.3 @@ -1,4 +1,4 @@ -.\" Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> +.\" Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as @@ -19,7 +19,7 @@ .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. -.TH libmpq 3 2008-05-14 "The MoPaQ archive library" +.TH libmpq 3 2011-11-06 "The MoPaQ archive library" .SH NAME libmpq \- cross-platform C library for manipulating mpq archives. .SH SYNOPSIS @@ -44,7 +44,7 @@ On success, a zero is returned. .SH AUTHOR Check documentation. .TP -libmpq is (c) 2003-2008 -.B Maik Broemme <mbroemme@plusserver.de> +libmpq is (c) 2003-2011 +.B Maik Broemme <mbroemme@libmpq.org> .PP The above e-mail address can be used to send bug reports, feedbacks or library enhancements. diff --git a/dep/libmpq/doc/man3/libmpq__archive_offset.3 b/dep/libmpq/doc/man3/libmpq__archive_offset.3 index 696ac5e809f..3aee44c9577 100644 --- a/dep/libmpq/doc/man3/libmpq__archive_offset.3 +++ b/dep/libmpq/doc/man3/libmpq__archive_offset.3 @@ -1,4 +1,4 @@ -.\" Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> +.\" Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as @@ -19,7 +19,7 @@ .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. -.TH libmpq 3 2008-05-14 "The MoPaQ archive library" +.TH libmpq 3 2011-11-06 "The MoPaQ archive library" .SH NAME libmpq \- cross-platform C library for manipulating mpq archives. .SH SYNOPSIS @@ -45,7 +45,7 @@ On success, a zero is returned. .SH AUTHOR Check documentation. .TP -libmpq is (c) 2003-2008 -.B Maik Broemme <mbroemme@plusserver.de> +libmpq is (c) 2003-2011 +.B Maik Broemme <mbroemme@libmpq.org> .PP The above e-mail address can be used to send bug reports, feedbacks or library enhancements. diff --git a/dep/libmpq/doc/man3/libmpq__archive_open.3 b/dep/libmpq/doc/man3/libmpq__archive_open.3 index 02c021f8948..bc400c444fd 100644 --- a/dep/libmpq/doc/man3/libmpq__archive_open.3 +++ b/dep/libmpq/doc/man3/libmpq__archive_open.3 @@ -1,4 +1,4 @@ -.\" Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> +.\" Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as @@ -19,7 +19,7 @@ .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. -.TH libmpq 3 2008-04-29 "The MoPaQ archive library" +.TH libmpq 3 2011-11-06 "The MoPaQ archive library" .SH NAME libmpq \- cross-platform C library for manipulating mpq archives. .SH SYNOPSIS @@ -57,15 +57,15 @@ The given file is no valid mpq archive. Reading in archive failed. .SH SEE ALSO .BR libmpq__archive_close (3), -.BR libmpq__archive_packed_size (3), -.BR libmpq__archive_unpacked_size (3), +.BR libmpq__archive_size_packed (3), +.BR libmpq__archive_size_unpacked (3), .BR libmpq__archive_offset (3), .BR libmpq__archive_version (3), .BR libmpq__archive_files (3) .SH AUTHOR Check documentation. .TP -libmpq is (c) 2003-2008 -.B Maik Broemme <mbroemme@plusserver.de> +libmpq is (c) 2003-2011 +.B Maik Broemme <mbroemme@libmpq.org> .PP The above e-mail address can be used to send bug reports, feedbacks or library enhancements. diff --git a/dep/libmpq/doc/man3/libmpq__archive_packed_size.3 b/dep/libmpq/doc/man3/libmpq__archive_size_packed.3 index 6c3061f2031..30de1e33c5a 100644 --- a/dep/libmpq/doc/man3/libmpq__archive_packed_size.3 +++ b/dep/libmpq/doc/man3/libmpq__archive_size_packed.3 @@ -1,4 +1,4 @@ -.\" Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> +.\" Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as @@ -19,7 +19,7 @@ .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. -.TH libmpq 3 2008-04-29 "The MoPaQ archive library" +.TH libmpq 3 2011-11-06 "The MoPaQ archive library" .SH NAME libmpq \- cross-platform C library for manipulating mpq archives. .SH SYNOPSIS @@ -27,25 +27,25 @@ libmpq \- cross-platform C library for manipulating mpq archives. .B #include <mpq.h> .sp -.BI "int32_t libmpq__archive_packed_size(" +.BI "int32_t libmpq__archive_size_packed(" .BI " mpq_archive_s *" "mpq_archive", .BI " off_t *" "packed_size" .BI ");" .fi .SH DESCRIPTION .PP -Call \fBlibmpq__archive_packed_size\fP() to get the packed size of all files in the archive. It will count compressed and imploded files as well as stored only. +Call \fBlibmpq__archive_size_packed\fP() to get the packed size of all files in the archive. It will count compressed and imploded files as well as stored only. .LP -The \fBlibmpq__archive_packed_size\fP() function takes as first argument the archive structure \fImpq_archive\fP which have to be allocated first and opened by \fBlibmpq__archive_open\fP(). The second argument is a reference to the compressed, imploded or stored size \fIpacked_size\fP of file. +The \fBlibmpq__archive_size_packed\fP() function takes as first argument the archive structure \fImpq_archive\fP which have to be allocated first and opened by \fBlibmpq__archive_open\fP(). The second argument is a reference to the compressed, imploded or stored size \fIpacked_size\fP of file. .SH RETURN VALUE On success, a zero is returned. .SH SEE ALSO -.BR libmpq__file_packed_size (3), -.BR libmpq__block_packed_size (3) +.BR libmpq__file_size_packed (3), +.BR libmpq__block_size_packed (3) .SH AUTHOR Check documentation. .TP -libmpq is (c) 2003-2008 -.B Maik Broemme <mbroemme@plusserver.de> +libmpq is (c) 2003-2011 +.B Maik Broemme <mbroemme@libmpq.org> .PP The above e-mail address can be used to send bug reports, feedbacks or library enhancements. diff --git a/dep/libmpq/doc/man3/libmpq__archive_unpacked_size.3 b/dep/libmpq/doc/man3/libmpq__archive_size_unpacked.3 index d2ba923c8f0..5ca04e79dbd 100644 --- a/dep/libmpq/doc/man3/libmpq__archive_unpacked_size.3 +++ b/dep/libmpq/doc/man3/libmpq__archive_size_unpacked.3 @@ -1,4 +1,4 @@ -.\" Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> +.\" Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as @@ -19,7 +19,7 @@ .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. -.TH libmpq 3 2008-04-29 "The MoPaQ archive library" +.TH libmpq 3 2011-11-06 "The MoPaQ archive library" .SH NAME libmpq \- cross-platform C library for manipulating mpq archives. .SH SYNOPSIS @@ -27,25 +27,25 @@ libmpq \- cross-platform C library for manipulating mpq archives. .B #include <mpq.h> .sp -.BI "int32_t libmpq__archive_unpacked_size(" +.BI "int32_t libmpq__archive_size_unpacked(" .BI " mpq_archive_s *" "mpq_archive", .BI " off_t *" "unpacked_size" .BI ");" .fi .SH DESCRIPTION .PP -Call \fBlibmpq__archive_unpacked_size\fP() to get the unpacked size of all files in the archive. It will count uncompressed and exploded files as well as stored only. +Call \fBlibmpq__archive_size_unpacked\fP() to get the unpacked size of all files in the archive. It will count uncompressed and exploded files as well as stored only. .LP -The \fBlibmpq__archive_unpacked_size\fP() function takes as first argument the archive structure \fImpq_archive\fP which have to be allocated first and opened by \fBlibmpq__archive_open\fP(). The second argument is a reference to the uncompressed, exploded or stored size \fIunpacked_size\fP of file. +The \fBlibmpq__archive_size_unpacked\fP() function takes as first argument the archive structure \fImpq_archive\fP which have to be allocated first and opened by \fBlibmpq__archive_open\fP(). The second argument is a reference to the uncompressed, exploded or stored size \fIunpacked_size\fP of file. .SH RETURN VALUE On success, a zero is returned. .SH SEE ALSO -.BR libmpq__file_unpacked_size (3), -.BR libmpq__block_unpacked_size (3) +.BR libmpq__file_size_unpacked (3), +.BR libmpq__block_size_unpacked (3) .SH AUTHOR Check documentation. .TP -libmpq is (c) 2003-2008 -.B Maik Broemme <mbroemme@plusserver.de> +libmpq is (c) 2003-2011 +.B Maik Broemme <mbroemme@libmpq.org> .PP The above e-mail address can be used to send bug reports, feedbacks or library enhancements. diff --git a/dep/libmpq/doc/man3/libmpq__archive_version.3 b/dep/libmpq/doc/man3/libmpq__archive_version.3 index 1764046895a..5962fc84c41 100644 --- a/dep/libmpq/doc/man3/libmpq__archive_version.3 +++ b/dep/libmpq/doc/man3/libmpq__archive_version.3 @@ -1,4 +1,4 @@ -.\" Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> +.\" Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as @@ -19,7 +19,7 @@ .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. -.TH libmpq 3 2008-05-14 "The MoPaQ archive library" +.TH libmpq 3 2011-11-06 "The MoPaQ archive library" .SH NAME libmpq \- cross-platform C library for manipulating mpq archives. .SH SYNOPSIS @@ -42,7 +42,7 @@ On success, a zero is returned. .SH AUTHOR Check documentation. .TP -libmpq is (c) 2003-2008 -.B Maik Broemme <mbroemme@plusserver.de> +libmpq is (c) 2003-2011 +.B Maik Broemme <mbroemme@libmpq.org> .PP The above e-mail address can be used to send bug reports, feedbacks or library enhancements. diff --git a/dep/libmpq/doc/man3/libmpq__block_close_offset.3 b/dep/libmpq/doc/man3/libmpq__block_close_offset.3 index 1ec0c06f70d..d3cc08e7a52 100644 --- a/dep/libmpq/doc/man3/libmpq__block_close_offset.3 +++ b/dep/libmpq/doc/man3/libmpq__block_close_offset.3 @@ -1,4 +1,4 @@ -.\" Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> +.\" Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as @@ -19,7 +19,7 @@ .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. -.TH libmpq 3 2008-05-16 "The MoPaQ archive library" +.TH libmpq 3 2011-11-06 "The MoPaQ archive library" .SH NAME libmpq \- cross-platform C library for manipulating mpq archives. .SH SYNOPSIS @@ -47,7 +47,7 @@ File or block does not exist in archive. .SH AUTHOR Check documentation. .TP -libmpq is (c) 2003-2008 -.B Maik Broemme <mbroemme@plusserver.de> +libmpq is (c) 2003-2011 +.B Maik Broemme <mbroemme@libmpq.org> .PP The above e-mail address can be used to send bug reports, feedbacks or library enhancements. diff --git a/dep/libmpq/doc/man3/libmpq__block_open_offset.3 b/dep/libmpq/doc/man3/libmpq__block_open_offset.3 index a60b133f406..ae51fb9fd2a 100644 --- a/dep/libmpq/doc/man3/libmpq__block_open_offset.3 +++ b/dep/libmpq/doc/man3/libmpq__block_open_offset.3 @@ -1,4 +1,4 @@ -.\" Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> +.\" Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as @@ -19,7 +19,7 @@ .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. -.TH libmpq 3 2008-05-16 "The MoPaQ archive library" +.TH libmpq 3 2011-11-06 "The MoPaQ archive library" .SH NAME libmpq \- cross-platform C library for manipulating mpq archives. .SH SYNOPSIS @@ -59,7 +59,7 @@ Decrypting block failed. .SH AUTHOR Check documentation. .TP -libmpq is (c) 2003-2008 -.B Maik Broemme <mbroemme@plusserver.de> +libmpq is (c) 2003-2011 +.B Maik Broemme <mbroemme@libmpq.org> .PP The above e-mail address can be used to send bug reports, feedbacks or library enhancements. diff --git a/dep/libmpq/doc/man3/libmpq__block_read.3 b/dep/libmpq/doc/man3/libmpq__block_read.3 index 3272c64c7ed..46847ca1b88 100644 --- a/dep/libmpq/doc/man3/libmpq__block_read.3 +++ b/dep/libmpq/doc/man3/libmpq__block_read.3 @@ -1,4 +1,4 @@ -.\" Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> +.\" Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as @@ -19,7 +19,7 @@ .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. -.TH libmpq 3 2008-05-16 "The MoPaQ archive library" +.TH libmpq 3 2011-11-06 "The MoPaQ archive library" .SH NAME libmpq \- cross-platform C library for manipulating mpq archives. .SH SYNOPSIS @@ -72,7 +72,7 @@ Unpacking block failed. .SH AUTHOR Check documentation. .TP -libmpq is (c) 2003-2008 -.B Maik Broemme <mbroemme@plusserver.de> +libmpq is (c) 2003-2011 +.B Maik Broemme <mbroemme@libmpq.org> .PP The above e-mail address can be used to send bug reports, feedbacks or library enhancements. diff --git a/dep/libmpq/doc/man3/libmpq__block_unpacked_size.3 b/dep/libmpq/doc/man3/libmpq__block_size_unpacked.3 index a21ca48159a..19c913ce8f0 100644 --- a/dep/libmpq/doc/man3/libmpq__block_unpacked_size.3 +++ b/dep/libmpq/doc/man3/libmpq__block_size_unpacked.3 @@ -1,4 +1,4 @@ -.\" Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> +.\" Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as @@ -19,7 +19,7 @@ .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. -.TH libmpq 3 2008-05-16 "The MoPaQ archive library" +.TH libmpq 3 2011-11-06 "The MoPaQ archive library" .SH NAME libmpq \- cross-platform C library for manipulating mpq archives. .SH SYNOPSIS @@ -27,7 +27,7 @@ libmpq \- cross-platform C library for manipulating mpq archives. .B #include <mpq.h> .sp -.BI "int32_t libmpq__block_unpacked_size(" +.BI "int32_t libmpq__block_size_unpacked(" .BI " mpq_archive_s *" "mpq_archive", .BI " uint32_t " "file_number", .BI " uint32_t " "block_number", @@ -36,9 +36,9 @@ libmpq \- cross-platform C library for manipulating mpq archives. .fi .SH DESCRIPTION .PP -Call \fBlibmpq__block_unpacked_size\fP() to get the unpacked size of a given block in the file. It will return a valid size for compressed and imploded blocks as well as stored only. +Call \fBlibmpq__block_size_unpacked\fP() to get the unpacked size of a given block in the file. It will return a valid size for compressed and imploded blocks as well as stored only. .LP -The \fBlibmpq__block_unpacked_size\fP() function takes as first argument the archive structure \fImpq_archive\fP which have to be allocated first and opened by \fBlibmpq__archive_open\fP(). The second argument \fIfile_number\fP is the number of file, the third argument \fIblock_number\fP is the number of block and the fourth argument is a reference to the uncompressed, exploded or stored size \fIunpacked_size\fP of block. +The \fBlibmpq__block_size_unpacked\fP() function takes as first argument the archive structure \fImpq_archive\fP which have to be allocated first and opened by \fBlibmpq__archive_open\fP(). The second argument \fIfile_number\fP is the number of file, the third argument \fIblock_number\fP is the number of block and the fourth argument is a reference to the uncompressed, exploded or stored size \fIunpacked_size\fP of block. .SH RETURN VALUE On success, a zero is returned and on error one of the following constants. .TP @@ -48,12 +48,12 @@ File or block does not exist in archive. .B LIBMPQ_ERROR_OPEN Block offset table was not opened by calling \fBlibmpq__block_open_offset\fP(), or it was closed by an \fBlibmpq__block_close_offset\fP() call. .SH SEE ALSO -.BR libmpq__archive_unpacked_size (3), -.BR libmpq__file_unpacked_size (3) +.BR libmpq__archive_size_unpacked (3), +.BR libmpq__file_size_unpacked (3) .SH AUTHOR Check documentation. .TP -libmpq is (c) 2003-2008 -.B Maik Broemme <mbroemme@plusserver.de> +libmpq is (c) 2003-2011 +.B Maik Broemme <mbroemme@libmpq.org> .PP The above e-mail address can be used to send bug reports, feedbacks or library enhancements. diff --git a/dep/libmpq/doc/man3/libmpq__file_blocks.3 b/dep/libmpq/doc/man3/libmpq__file_blocks.3 index 85baeffc603..0ce1fbbac08 100644 --- a/dep/libmpq/doc/man3/libmpq__file_blocks.3 +++ b/dep/libmpq/doc/man3/libmpq__file_blocks.3 @@ -1,4 +1,4 @@ -.\" Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> +.\" Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as @@ -19,7 +19,7 @@ .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. -.TH libmpq 3 2008-05-16 "The MoPaQ archive library" +.TH libmpq 3 2011-11-06 "The MoPaQ archive library" .SH NAME libmpq \- cross-platform C library for manipulating mpq archives. .SH SYNOPSIS @@ -48,7 +48,7 @@ File does not exist in archive. .SH AUTHOR Check documentation. .TP -libmpq is (c) 2003-2008 -.B Maik Broemme <mbroemme@plusserver.de> +libmpq is (c) 2003-2011 +.B Maik Broemme <mbroemme@libmpq.org> .PP The above e-mail address can be used to send bug reports, feedbacks or library enhancements. diff --git a/dep/libmpq/doc/man3/libmpq__file_compressed.3 b/dep/libmpq/doc/man3/libmpq__file_compressed.3 index 24b44f0b666..317f6cbfc8f 100644 --- a/dep/libmpq/doc/man3/libmpq__file_compressed.3 +++ b/dep/libmpq/doc/man3/libmpq__file_compressed.3 @@ -1,4 +1,4 @@ -.\" Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> +.\" Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as @@ -19,7 +19,7 @@ .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. -.TH libmpq 3 2008-05-16 "The MoPaQ archive library" +.TH libmpq 3 2011-11-06 "The MoPaQ archive library" .SH NAME libmpq \- cross-platform C library for manipulating mpq archives. .SH SYNOPSIS @@ -48,7 +48,7 @@ File does not exist in archive. .SH AUTHOR Check documentation. .TP -libmpq is (c) 2003-2008 -.B Maik Broemme <mbroemme@plusserver.de> +libmpq is (c) 2003-2011 +.B Maik Broemme <mbroemme@libmpq.org> .PP The above e-mail address can be used to send bug reports, feedbacks or library enhancements. diff --git a/dep/libmpq/doc/man3/libmpq__file_encrypted.3 b/dep/libmpq/doc/man3/libmpq__file_encrypted.3 index 798f4019c7a..2036b9f413d 100644 --- a/dep/libmpq/doc/man3/libmpq__file_encrypted.3 +++ b/dep/libmpq/doc/man3/libmpq__file_encrypted.3 @@ -1,4 +1,4 @@ -.\" Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> +.\" Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as @@ -19,7 +19,7 @@ .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. -.TH libmpq 3 2008-05-16 "The MoPaQ archive library" +.TH libmpq 3 2011-11-06 "The MoPaQ archive library" .SH NAME libmpq \- cross-platform C library for manipulating mpq archives. .SH SYNOPSIS @@ -48,7 +48,7 @@ File does not exist in archive. .SH AUTHOR Check documentation. .TP -libmpq is (c) 2003-2008 -.B Maik Broemme <mbroemme@plusserver.de> +libmpq is (c) 2003-2011 +.B Maik Broemme <mbroemme@libmpq.org> .PP The above e-mail address can be used to send bug reports, feedbacks or library enhancements. diff --git a/dep/libmpq/doc/man3/libmpq__file_imploded.3 b/dep/libmpq/doc/man3/libmpq__file_imploded.3 index 9adce38cb5f..6b549f9cef5 100644 --- a/dep/libmpq/doc/man3/libmpq__file_imploded.3 +++ b/dep/libmpq/doc/man3/libmpq__file_imploded.3 @@ -1,4 +1,4 @@ -.\" Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> +.\" Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as @@ -19,7 +19,7 @@ .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. -.TH libmpq 3 2008-05-16 "The MoPaQ archive library" +.TH libmpq 3 2011-11-06 "The MoPaQ archive library" .SH NAME libmpq \- cross-platform C library for manipulating mpq archives. .SH SYNOPSIS @@ -48,7 +48,7 @@ File does not exist in archive. .SH AUTHOR Check documentation. .TP -libmpq is (c) 2003-2008 -.B Maik Broemme <mbroemme@plusserver.de> +libmpq is (c) 2003-2011 +.B Maik Broemme <mbroemme@libmpq.org> .PP The above e-mail address can be used to send bug reports, feedbacks or library enhancements. diff --git a/dep/libmpq/doc/man3/libmpq__file_number.3 b/dep/libmpq/doc/man3/libmpq__file_number.3 index 8d7a47769ee..5849c556108 100644 --- a/dep/libmpq/doc/man3/libmpq__file_number.3 +++ b/dep/libmpq/doc/man3/libmpq__file_number.3 @@ -1,4 +1,4 @@ -.\" Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> +.\" Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as @@ -19,7 +19,7 @@ .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. -.TH libmpq 3 2008-05-16 "The MoPaQ archive library" +.TH libmpq 3 2011-11-06 "The MoPaQ archive library" .SH NAME libmpq \- cross-platform C library for manipulating mpq archives. .SH SYNOPSIS @@ -46,7 +46,7 @@ File does not exist in archive. .SH AUTHOR Check documentation. .TP -libmpq is (c) 2003-2008 -.B Maik Broemme <mbroemme@plusserver.de> +libmpq is (c) 2003-2011 +.B Maik Broemme <mbroemme@libmpq.org> .PP The above e-mail address can be used to send bug reports, feedbacks or library enhancements. diff --git a/dep/libmpq/doc/man3/libmpq__file_offset.3 b/dep/libmpq/doc/man3/libmpq__file_offset.3 index 392a66d0b04..ec7fc75e73c 100644 --- a/dep/libmpq/doc/man3/libmpq__file_offset.3 +++ b/dep/libmpq/doc/man3/libmpq__file_offset.3 @@ -1,4 +1,4 @@ -.\" Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> +.\" Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as @@ -19,7 +19,7 @@ .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. -.TH libmpq 3 2008-05-15 "The MoPaQ archive library" +.TH libmpq 3 2011-11-06 "The MoPaQ archive library" .SH NAME libmpq \- cross-platform C library for manipulating mpq archives. .SH SYNOPSIS @@ -49,7 +49,7 @@ File does not exist in archive. .SH AUTHOR Check documentation. .TP -libmpq is (c) 2003-2008 -.B Maik Broemme <mbroemme@plusserver.de> +libmpq is (c) 2003-2011 +.B Maik Broemme <mbroemme@libmpq.org> .PP The above e-mail address can be used to send bug reports, feedbacks or library enhancements. diff --git a/dep/libmpq/doc/man3/libmpq__file_read.3 b/dep/libmpq/doc/man3/libmpq__file_read.3 index cbfafbd0f4f..bc6f3d22478 100644 --- a/dep/libmpq/doc/man3/libmpq__file_read.3 +++ b/dep/libmpq/doc/man3/libmpq__file_read.3 @@ -1,4 +1,4 @@ -.\" Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> +.\" Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as @@ -19,7 +19,7 @@ .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. -.TH libmpq 3 2008-05-16 "The MoPaQ archive library" +.TH libmpq 3 2011-11-06 "The MoPaQ archive library" .SH NAME libmpq \- cross-platform C library for manipulating mpq archives. .SH SYNOPSIS @@ -71,7 +71,7 @@ Unpacking file failed. .SH AUTHOR Check documentation. .TP -libmpq is (c) 2003-2008 -.B Maik Broemme <mbroemme@plusserver.de> +libmpq is (c) 2003-2011 +.B Maik Broemme <mbroemme@libmpq.org> .PP The above e-mail address can be used to send bug reports, feedbacks or library enhancements. diff --git a/dep/libmpq/doc/man3/libmpq__file_packed_size.3 b/dep/libmpq/doc/man3/libmpq__file_size_packed.3 index b584ddf77dd..b01f626d828 100644 --- a/dep/libmpq/doc/man3/libmpq__file_packed_size.3 +++ b/dep/libmpq/doc/man3/libmpq__file_size_packed.3 @@ -1,4 +1,4 @@ -.\" Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> +.\" Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as @@ -19,7 +19,7 @@ .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. -.TH libmpq 3 2008-05-15 "The MoPaQ archive library" +.TH libmpq 3 2011-11-06 "The MoPaQ archive library" .SH NAME libmpq \- cross-platform C library for manipulating mpq archives. .SH SYNOPSIS @@ -27,7 +27,7 @@ libmpq \- cross-platform C library for manipulating mpq archives. .B #include <mpq.h> .sp -.BI "int32_t libmpq__file_packed_size(" +.BI "int32_t libmpq__file_size_packed(" .BI " mpq_archive_s *" "mpq_archive", .BI " uint32_t " "file_number", .BI " off_t *" "packed_size" @@ -35,21 +35,21 @@ libmpq \- cross-platform C library for manipulating mpq archives. .fi .SH DESCRIPTION .PP -Call \fBlibmpq__file_packed_size\fP() to get the packed size of a given file in the archive. It will return a valid size for compressed and imploded files as well as stored only. +Call \fBlibmpq__file_size_packed\fP() to get the packed size of a given file in the archive. It will return a valid size for compressed and imploded files as well as stored only. .LP -The \fBlibmpq__file_packed_size\fP() function takes as first argument the archive structure \fImpq_archive\fP which have to be allocated first and opened by \fBlibmpq__archive_open\fP(). The second argument \fIfile_number\fP is the number of file and the third argument is a reference to the compressed, imploded or stored size \fIpacked_size\fP of file. +The \fBlibmpq__file_size_packed\fP() function takes as first argument the archive structure \fImpq_archive\fP which have to be allocated first and opened by \fBlibmpq__archive_open\fP(). The second argument \fIfile_number\fP is the number of file and the third argument is a reference to the compressed, imploded or stored size \fIpacked_size\fP of file. .SH RETURN VALUE On success, a zero is returned and on error one of the following constants. .TP .B LIBMPQ_ERROR_EXIST File does not exist in archive. .SH SEE ALSO -.BR libmpq__archive_packed_size (3), -.BR libmpq__block_packed_size (3) +.BR libmpq__archive_size_packed (3), +.BR libmpq__block_size_packed (3) .SH AUTHOR Check documentation. .TP -libmpq is (c) 2003-2008 -.B Maik Broemme <mbroemme@plusserver.de> +libmpq is (c) 2003-2011 +.B Maik Broemme <mbroemme@libmpq.org> .PP The above e-mail address can be used to send bug reports, feedbacks or library enhancements. diff --git a/dep/libmpq/doc/man3/libmpq__file_unpacked_size.3 b/dep/libmpq/doc/man3/libmpq__file_size_unpacked.3 index a81cf7a4e76..4569a5cf062 100644 --- a/dep/libmpq/doc/man3/libmpq__file_unpacked_size.3 +++ b/dep/libmpq/doc/man3/libmpq__file_size_unpacked.3 @@ -1,4 +1,4 @@ -.\" Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> +.\" Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as @@ -19,7 +19,7 @@ .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. -.TH libmpq 3 2008-05-15 "The MoPaQ archive library" +.TH libmpq 3 2011-11-06 "The MoPaQ archive library" .SH NAME libmpq \- cross-platform C library for manipulating mpq archives. .SH SYNOPSIS @@ -27,7 +27,7 @@ libmpq \- cross-platform C library for manipulating mpq archives. .B #include <mpq.h> .sp -.BI "int32_t libmpq__file_unpacked_size(" +.BI "int32_t libmpq__file_size_unpacked(" .BI " mpq_archive_s *" "mpq_archive", .BI " uint32_t " "file_number", .BI " off_t *" "unpacked_size" @@ -35,21 +35,21 @@ libmpq \- cross-platform C library for manipulating mpq archives. .fi .SH DESCRIPTION .PP -Call \fBlibmpq__file_unpacked_size\fP() to get the unpacked size of a given file in the archive. It will return a valid size for compressed and imploded files as well as stored only. +Call \fBlibmpq__file_size_unpacked\fP() to get the unpacked size of a given file in the archive. It will return a valid size for compressed and imploded files as well as stored only. .LP -The \fBlibmpq__file_unpacked_size\fP() function takes as first argument the archive structure \fImpq_archive\fP which have to be allocated first and opened by \fBlibmpq__archive_open\fP(). The second argument \fIfile_number\fP is the number of file and the third argument is a reference to the uncompressed, exploded or stored size \fIunpacked_size\fP of file. +The \fBlibmpq__file_size_unpacked\fP() function takes as first argument the archive structure \fImpq_archive\fP which have to be allocated first and opened by \fBlibmpq__archive_open\fP(). The second argument \fIfile_number\fP is the number of file and the third argument is a reference to the uncompressed, exploded or stored size \fIunpacked_size\fP of file. .SH RETURN VALUE On success, a zero is returned and on error one of the following constants. .TP .B LIBMPQ_ERROR_EXIST File does not exist in archive. .SH SEE ALSO -.BR libmpq__archive_unpacked_size (3), -.BR libmpq__block_unpacked_size (3) +.BR libmpq__archive_size_unpacked (3), +.BR libmpq__block_size_unpacked (3) .SH AUTHOR Check documentation. .TP -libmpq is (c) 2003-2008 -.B Maik Broemme <mbroemme@plusserver.de> +libmpq is (c) 2003-2011 +.B Maik Broemme <mbroemme@libmpq.org> .PP The above e-mail address can be used to send bug reports, feedbacks or library enhancements. diff --git a/dep/libmpq/doc/man3/libmpq__strerror.3 b/dep/libmpq/doc/man3/libmpq__strerror.3 index 246f422eed0..ac23d7fb8f0 100644 --- a/dep/libmpq/doc/man3/libmpq__strerror.3 +++ b/dep/libmpq/doc/man3/libmpq__strerror.3 @@ -1,4 +1,4 @@ -.\" Copyright (c) 2010 Georg Lukas <georg@op-co.de> +.\" Copyright (c) 2010-2011 Georg Lukas <georg@op-co.de> .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as @@ -19,7 +19,7 @@ .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. -.TH libmpq 3 2010-07-18 "The MoPaQ archive library" +.TH libmpq 3 2011-11-06 "The MoPaQ archive library" .SH NAME libmpq__strerror \- return string describing libmpq error number .SH SYNOPSIS @@ -39,7 +39,7 @@ The function returns a string pointer to non-writable memory or NULL if \fBretur .SH AUTHOR Check documentation. .TP -libmpq is (c) 2003-2008 -.B Maik Broemme <mbroemme@plusserver.de> +libmpq is (c) 2003-2011 +.B Maik Broemme <mbroemme@libmpq.org> .PP The above e-mail address can be used to send bug reports, feedbacks or library enhancements. diff --git a/dep/libmpq/doc/man3/libmpq__version.3 b/dep/libmpq/doc/man3/libmpq__version.3 index 5500d7314f5..dcd072cbd3b 100644 --- a/dep/libmpq/doc/man3/libmpq__version.3 +++ b/dep/libmpq/doc/man3/libmpq__version.3 @@ -1,4 +1,4 @@ -.\" Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> +.\" Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as @@ -19,7 +19,7 @@ .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. -.TH libmpq 3 2008-03-31 "The MoPaQ archive library" +.TH libmpq 3 2011-11-06 "The MoPaQ archive library" .SH NAME libmpq \- cross-platform C library for manipulating mpq archives. .SH SYNOPSIS @@ -39,7 +39,7 @@ The function returns the library version. .SH AUTHOR Check documentation. .TP -libmpq is (c) 2003-2008 -.B Maik Broemme <mbroemme@plusserver.de> +libmpq is (c) 2003-2011 +.B Maik Broemme <mbroemme@libmpq.org> .PP The above e-mail address can be used to send bug reports, feedbacks or library enhancements. diff --git a/dep/libmpq/libmpq-hotfix1.diff b/dep/libmpq/libmpq-hotfix1.diff new file mode 100644 index 00000000000..fba4c7160c6 --- /dev/null +++ b/dep/libmpq/libmpq-hotfix1.diff @@ -0,0 +1,38 @@ + dep/libmpq/libmpq/extract.c | 1 + + dep/libmpq/libmpq/mpq.c | 4 ++-- + 2 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/dep/libmpq/libmpq/extract.c b/dep/libmpq/libmpq/extract.c +index f4ebb29..dc970b7 100644 +--- a/dep/libmpq/libmpq/extract.c ++++ b/dep/libmpq/libmpq/extract.c +@@ -49,6 +49,7 @@ static decompress_table_s dcmp_table[] = { + /* this function decompress a stream using huffman algorithm. */ + int32_t libmpq__decompress_huffman(uint8_t *in_buf, uint32_t in_size, uint8_t *out_buf, uint32_t out_size) { + ++ (void)in_size; + /* TODO: make typdefs of this structs? */ + /* some common variables. */ + int32_t tb = 0; +diff --git a/dep/libmpq/libmpq/mpq.c b/dep/libmpq/libmpq/mpq.c +index 1936f25..71081b5 100644 +--- a/dep/libmpq/libmpq/mpq.c ++++ b/dep/libmpq/libmpq/mpq.c +@@ -65,7 +65,7 @@ const char *libmpq__version(void) { + const char *libmpq__strerror(int32_t return_code) { + + /* check for array bounds */ +- if (-return_code < 0 || -return_code > sizeof(__libmpq_error_strings)/sizeof(char*)) ++ if (-return_code < 0 || (size_t)-return_code > sizeof(__libmpq_error_strings)/sizeof(char*)) + return NULL; + + /* return appropriate string */ +@@ -912,7 +912,7 @@ int32_t libmpq__block_read(mpq_archive_s *mpq_archive, uint32_t file_number, uin + } + + /* read block from file. */ +- if (fread(in_buf, 1, in_size, mpq_archive->fp) != in_size) { ++ if ((libmpq__off_t)fread(in_buf, 1, in_size, mpq_archive->fp) != in_size) { + + /* free buffers. */ + free(in_buf); diff --git a/dep/libmpq/libmpq/Makefile.am b/dep/libmpq/libmpq/Makefile.am index 409e3dfe02f..7653a551a31 100644 --- a/dep/libmpq/libmpq/Makefile.am +++ b/dep/libmpq/libmpq/Makefile.am @@ -12,7 +12,7 @@ libmpq_includedir = $(includedir)/libmpq libmpq_include_HEADERS = mpq.h libmpq_la_SOURCES = $(GENERAL_SRCS) -libmpq_la_LDFLAGS = -release $(PACKAGE_VERSION) +libmpq_la_LDFLAGS = -version-info @LIBMPQ_ABI@ GENERAL_SRCS = \ common.c \ diff --git a/dep/libmpq/libmpq/common.c b/dep/libmpq/libmpq/common.c index 879bd902b58..ca7bca5c391 100644 --- a/dep/libmpq/libmpq/common.c +++ b/dep/libmpq/libmpq/common.c @@ -1,7 +1,7 @@ /* * common.c -- shared functions used by mpq-tools. * - * Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> + * Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.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 @@ -175,7 +175,7 @@ int32_t libmpq__decompress_block(uint8_t *in_buf, uint32_t in_size, uint8_t *out /* check if one compression mode is used. */ else if (compression_type == LIBMPQ_FLAG_COMPRESS_PKZIP || - compression_type == LIBMPQ_FLAG_COMPRESS_MULTI) { + compression_type == LIBMPQ_FLAG_COMPRESS_MULTI) { /* check if block is really compressed, some blocks have set the compression flag, but are not compressed. */ if (in_size < out_size) { diff --git a/dep/libmpq/libmpq/common.h b/dep/libmpq/libmpq/common.h index b9e03126434..93949b4739c 100644 --- a/dep/libmpq/libmpq/common.h +++ b/dep/libmpq/libmpq/common.h @@ -1,7 +1,7 @@ /* * common.h -- header functions used by mpq-tools. * - * Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> + * Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.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 diff --git a/dep/libmpq/libmpq/explode.c b/dep/libmpq/libmpq/explode.c index 2d778d25c39..eca5b1a078e 100644 --- a/dep/libmpq/libmpq/explode.c +++ b/dep/libmpq/libmpq/explode.c @@ -1,7 +1,7 @@ /* * explode.c -- explode function of pkware data compression library. * - * Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> + * Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> * * This source was adepted from the C++ version of pkware.cpp included * in stormlib. The C++ version belongs to the following authors: diff --git a/dep/libmpq/libmpq/explode.h b/dep/libmpq/libmpq/explode.h index 1d14dfc0e0a..2724e02d1f5 100644 --- a/dep/libmpq/libmpq/explode.h +++ b/dep/libmpq/libmpq/explode.h @@ -2,7 +2,7 @@ * explode.h -- header file for pkware data decompression library * used by mpq-tools. * - * Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> + * Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> * * This source was adepted from the C++ version of pklib.h included * in stormlib. The C++ version belongs to the following authors: diff --git a/dep/libmpq/libmpq/extract.c b/dep/libmpq/libmpq/extract.c index 11de1071683..dc970b75ce2 100644 --- a/dep/libmpq/libmpq/extract.c +++ b/dep/libmpq/libmpq/extract.c @@ -2,7 +2,7 @@ * extract.c -- global extracting function for all known file compressions * in a mpq archive. * - * Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> + * Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.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 @@ -49,6 +49,7 @@ static decompress_table_s dcmp_table[] = { /* this function decompress a stream using huffman algorithm. */ int32_t libmpq__decompress_huffman(uint8_t *in_buf, uint32_t in_size, uint8_t *out_buf, uint32_t out_size) { + (void)in_size; /* TODO: make typdefs of this structs? */ /* some common variables. */ int32_t tb = 0; diff --git a/dep/libmpq/libmpq/extract.h b/dep/libmpq/libmpq/extract.h index d6ea794f162..1243af65440 100644 --- a/dep/libmpq/libmpq/extract.h +++ b/dep/libmpq/libmpq/extract.h @@ -1,7 +1,7 @@ /* * extract.h -- header for the extraction functions used by mpq-tools. * - * Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> + * Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.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 diff --git a/dep/libmpq/libmpq/huffman.c b/dep/libmpq/libmpq/huffman.c index 8fc87be2f60..3760f7f8d8e 100644 --- a/dep/libmpq/libmpq/huffman.c +++ b/dep/libmpq/libmpq/huffman.c @@ -2,7 +2,7 @@ * huffman.c -- functions do decompress files in mpq files which * uses a modified huffman version. * - * Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> + * Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> * * Differences between C++ and C version: * diff --git a/dep/libmpq/libmpq/huffman.h b/dep/libmpq/libmpq/huffman.h index 6f691088fa0..9a8b86eab5f 100644 --- a/dep/libmpq/libmpq/huffman.h +++ b/dep/libmpq/libmpq/huffman.h @@ -1,7 +1,7 @@ /* * huffman.h -- structures used for huffman compression. * - * Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> + * Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> * * This source was adepted from the C++ version of huffman.h included * in stormlib. The C++ version belongs to the following authors: diff --git a/dep/libmpq/libmpq/mpq-internal.h b/dep/libmpq/libmpq/mpq-internal.h index 76eabe4190a..e6146cecd4e 100644 --- a/dep/libmpq/libmpq/mpq-internal.h +++ b/dep/libmpq/libmpq/mpq-internal.h @@ -2,7 +2,7 @@ * mpq-internal.h -- some default types and defines, but only required for * compilation of the library. * - * Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> + * Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.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 diff --git a/dep/libmpq/libmpq/mpq.c b/dep/libmpq/libmpq/mpq.c index a6ab5db82d9..71081b57945 100644 --- a/dep/libmpq/libmpq/mpq.c +++ b/dep/libmpq/libmpq/mpq.c @@ -1,7 +1,7 @@ /* * mpq.c -- functions for developers using libmpq. * - * Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> + * Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.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 @@ -37,6 +37,23 @@ /* support for platform specific things */ #include "platform.h" +/* static error constants. */ +static const char *__libmpq_error_strings[] = { + "success", + "open error on file", + "close error on file", + "lseek error on file", + "read error on file", + "write error on file", + "memory allocation error", + "format errror", + "init() wasn't called", + "buffer size is to small", + "file or block does not exist in archive", + "we don't know the decryption seed", + "error on unpacking file" +}; + /* this function returns the library version information. */ const char *libmpq__version(void) { @@ -44,41 +61,25 @@ const char *libmpq__version(void) { return VERSION; } -static const char *__libmpq_error_strings[] = { - "success", - "open error on file", - "close error on file", - "lseek error on file", - "read error on file", - "write error on file", - "memory allocation error", - "format errror", - "init() wasn't called", - "buffer size is to small", - "file or block does not exist in archive", - "we don't know the decryption seed", - "error on unpacking file" - }; - /* this function returns a string message for a return code. */ -const char *libmpq__strerror(int32_t returncode) { +const char *libmpq__strerror(int32_t return_code) { + /* check for array bounds */ - if (-returncode < 0 || -returncode > sizeof(__libmpq_error_strings)/sizeof(char*)) + if (-return_code < 0 || (size_t)-return_code > sizeof(__libmpq_error_strings)/sizeof(char*)) return NULL; /* return appropriate string */ - return __libmpq_error_strings[-returncode]; + return __libmpq_error_strings[-return_code]; } /* this function read a file and verify if it is a valid mpq archive, then it read and decrypt the hash table. */ int32_t libmpq__archive_open(mpq_archive_s **mpq_archive, const char *mpq_filename, libmpq__off_t archive_offset) { /* some common variables. */ - uint32_t rb = 0; - uint32_t i = 0; - uint32_t count = 0; - int32_t result = 0; - uint32_t header_search = FALSE; + uint32_t i = 0; + uint32_t count = 0; + int32_t result = 0; + uint32_t header_search = FALSE; if (archive_offset == -1) { archive_offset = 0; @@ -118,7 +119,7 @@ int32_t libmpq__archive_open(mpq_archive_s **mpq_archive, const char *mpq_filena } /* read header from file. */ - if ((rb = fread(&(*mpq_archive)->mpq_header, 1, sizeof(mpq_header_s), (*mpq_archive)->fp)) != sizeof(mpq_header_s)) { + if (fread(&(*mpq_archive)->mpq_header, 1, sizeof(mpq_header_s), (*mpq_archive)->fp) != sizeof(mpq_header_s)) { /* no valid mpq archive. */ result = LIBMPQ_ERROR_FORMAT; @@ -182,7 +183,7 @@ int32_t libmpq__archive_open(mpq_archive_s **mpq_archive, const char *mpq_filena } /* read header from file. */ - if ((rb = fread(&(*mpq_archive)->mpq_header_ex, 1, sizeof(mpq_header_ex_s), (*mpq_archive)->fp)) != sizeof(mpq_header_ex_s)) { + if (fread(&(*mpq_archive)->mpq_header_ex, 1, sizeof(mpq_header_ex_s), (*mpq_archive)->fp) != sizeof(mpq_header_ex_s)) { /* no valid mpq archive. */ result = LIBMPQ_ERROR_FORMAT; @@ -211,7 +212,7 @@ int32_t libmpq__archive_open(mpq_archive_s **mpq_archive, const char *mpq_filena } /* read the hash table into the buffer. */ - if ((rb = fread((*mpq_archive)->mpq_hash, 1, (*mpq_archive)->mpq_header.hash_table_count * sizeof(mpq_hash_s), (*mpq_archive)->fp)) < 0) { + if (fread((*mpq_archive)->mpq_hash, 1, (*mpq_archive)->mpq_header.hash_table_count * sizeof(mpq_hash_s), (*mpq_archive)->fp) != (*mpq_archive)->mpq_header.hash_table_count * sizeof(mpq_hash_s)) { /* something on read failed. */ result = LIBMPQ_ERROR_READ; @@ -230,7 +231,7 @@ int32_t libmpq__archive_open(mpq_archive_s **mpq_archive, const char *mpq_filena } /* read the block table into the buffer. */ - if ((rb = fread((*mpq_archive)->mpq_block, 1, (*mpq_archive)->mpq_header.block_table_count * sizeof(mpq_block_s), (*mpq_archive)->fp)) < 0) { + if (fread((*mpq_archive)->mpq_block, 1, (*mpq_archive)->mpq_header.block_table_count * sizeof(mpq_block_s), (*mpq_archive)->fp) != (*mpq_archive)->mpq_header.block_table_count * sizeof(mpq_block_s)) { /* something on read failed. */ result = LIBMPQ_ERROR_READ; @@ -252,7 +253,7 @@ int32_t libmpq__archive_open(mpq_archive_s **mpq_archive, const char *mpq_filena } /* read header from file. */ - if ((rb = fread((*mpq_archive)->mpq_block_ex, 1, (*mpq_archive)->mpq_header.block_table_count * sizeof(mpq_block_ex_s), (*mpq_archive)->fp)) < 0) { + if (fread((*mpq_archive)->mpq_block_ex, 1, (*mpq_archive)->mpq_header.block_table_count * sizeof(mpq_block_ex_s), (*mpq_archive)->fp) != (*mpq_archive)->mpq_header.block_table_count * sizeof(mpq_block_ex_s)) { /* no valid mpq archive. */ result = LIBMPQ_ERROR_FORMAT; @@ -327,7 +328,7 @@ int32_t libmpq__archive_close(mpq_archive_s *mpq_archive) { } /* this function return the packed size of all files in the archive. */ -int32_t libmpq__archive_packed_size(mpq_archive_s *mpq_archive, libmpq__off_t *packed_size) { +int32_t libmpq__archive_size_packed(mpq_archive_s *mpq_archive, libmpq__off_t *packed_size) { /* some common variables. */ uint32_t i; @@ -342,7 +343,7 @@ int32_t libmpq__archive_packed_size(mpq_archive_s *mpq_archive, libmpq__off_t *p } /* this function return the unpacked size of all files in the archive. */ -int32_t libmpq__archive_unpacked_size(mpq_archive_s *mpq_archive, libmpq__off_t *unpacked_size) { +int32_t libmpq__archive_size_unpacked(mpq_archive_s *mpq_archive, libmpq__off_t *unpacked_size) { /* some common variables. */ uint32_t i; @@ -397,7 +398,7 @@ int32_t libmpq__archive_files(mpq_archive_s *mpq_archive, uint32_t *files) { } /* this function return the packed size of the given files in the archive. */ -int32_t libmpq__file_packed_size(mpq_archive_s *mpq_archive, uint32_t file_number, libmpq__off_t *packed_size) { +int32_t libmpq__file_size_packed(mpq_archive_s *mpq_archive, uint32_t file_number, libmpq__off_t *packed_size) { /* check if given file number is not out of range. */ CHECK_FILE_NUM(file_number, mpq_archive) @@ -410,7 +411,7 @@ int32_t libmpq__file_packed_size(mpq_archive_s *mpq_archive, uint32_t file_numbe } /* this function return the unpacked size of the given file in the archive. */ -int32_t libmpq__file_unpacked_size(mpq_archive_s *mpq_archive, uint32_t file_number, libmpq__off_t *unpacked_size) { +int32_t libmpq__file_size_unpacked(mpq_archive_s *mpq_archive, uint32_t file_number, libmpq__off_t *unpacked_size) { /* check if given file number is not out of range. */ CHECK_FILE_NUM(file_number, mpq_archive) @@ -534,8 +535,8 @@ int32_t libmpq__file_read(mpq_archive_s *mpq_archive, uint32_t file_number, uint /* some common variables. */ uint32_t i; - uint32_t blocks = 0; - int32_t result = 0; + uint32_t blocks = 0; + int32_t result = 0; libmpq__off_t file_offset = 0; libmpq__off_t unpacked_size = 0; libmpq__off_t transferred_block = 0; @@ -545,7 +546,7 @@ int32_t libmpq__file_read(mpq_archive_s *mpq_archive, uint32_t file_number, uint CHECK_FILE_NUM(file_number, mpq_archive) /* get target size of block. */ - libmpq__file_unpacked_size(mpq_archive, file_number, &unpacked_size); + libmpq__file_size_unpacked(mpq_archive, file_number, &unpacked_size); /* check if target buffer is to small. */ if (unpacked_size > out_size) { @@ -574,7 +575,7 @@ int32_t libmpq__file_read(mpq_archive_s *mpq_archive, uint32_t file_number, uint unpacked_size = 0; /* get unpacked block size. */ - libmpq__block_unpacked_size(mpq_archive, file_number, i, &unpacked_size); + libmpq__block_size_unpacked(mpq_archive, file_number, i, &unpacked_size); /* read block. */ if ((result = libmpq__block_read(mpq_archive, file_number, i, out_buf + transferred_total, unpacked_size, &transferred_block)) < 0) { @@ -610,7 +611,6 @@ int32_t libmpq__block_open_offset(mpq_archive_s *mpq_archive, uint32_t file_numb /* some common variables. */ uint32_t i; uint32_t packed_size; - int32_t rb = 0; int32_t result = 0; /* check if given file number is not out of range. */ @@ -673,7 +673,7 @@ int32_t libmpq__block_open_offset(mpq_archive_s *mpq_archive, uint32_t file_numb } /* read block positions from begin of file. */ - if ((rb = fread(mpq_archive->mpq_file[file_number]->packed_offset, 1, packed_size, mpq_archive->fp)) < 0) { + if (fread(mpq_archive->mpq_file[file_number]->packed_offset, 1, packed_size, mpq_archive->fp) != packed_size) { /* something on read from archive failed. */ result = LIBMPQ_ERROR_READ; @@ -683,8 +683,8 @@ int32_t libmpq__block_open_offset(mpq_archive_s *mpq_archive, uint32_t file_numb /* check if the archive is protected some way, sometimes the file appears not to be encrypted, but it is. * a special case are files with an additional sector but LIBMPQ_FLAG_CRC not set. we don't want to handle * them as encrypted. */ - if (mpq_archive->mpq_file[file_number]->packed_offset[0] != rb && - mpq_archive->mpq_file[file_number]->packed_offset[0] != rb + 4) { + if (mpq_archive->mpq_file[file_number]->packed_offset[0] != packed_size && + mpq_archive->mpq_file[file_number]->packed_offset[0] != packed_size + 4) { /* file is encrypted. */ mpq_archive->mpq_block[mpq_archive->mpq_map[file_number].block_table_indices].flags |= LIBMPQ_FLAG_ENCRYPTED; @@ -789,7 +789,7 @@ int32_t libmpq__block_close_offset(mpq_archive_s *mpq_archive, uint32_t file_num } /* this function return the unpacked size of the given file and block in the archive. */ -int32_t libmpq__block_unpacked_size(mpq_archive_s *mpq_archive, uint32_t file_number, uint32_t block_number, libmpq__off_t *unpacked_size) { +int32_t libmpq__block_size_unpacked(mpq_archive_s *mpq_archive, uint32_t file_number, uint32_t block_number, libmpq__off_t *unpacked_size) { /* check if given file number is not out of range. */ CHECK_FILE_NUM(file_number, mpq_archive) @@ -860,13 +860,13 @@ int32_t libmpq__block_read(mpq_archive_s *mpq_archive, uint32_t file_number, uin /* some common variables. */ uint8_t *in_buf; - uint32_t seed = 0; - uint32_t encrypted = 0; - uint32_t compressed = 0; - uint32_t imploded = 0; - int32_t tb = 0; + uint32_t seed = 0; + uint32_t encrypted = 0; + uint32_t compressed = 0; + uint32_t imploded = 0; + int32_t tb = 0; libmpq__off_t block_offset = 0; - off_t in_size = 0; + libmpq__off_t in_size = 0; libmpq__off_t unpacked_size = 0; /* check if given file number is not out of range. */ @@ -884,7 +884,7 @@ int32_t libmpq__block_read(mpq_archive_s *mpq_archive, uint32_t file_number, uin } /* get target size of block. */ - libmpq__block_unpacked_size(mpq_archive, file_number, block_number, &unpacked_size); + libmpq__block_size_unpacked(mpq_archive, file_number, block_number, &unpacked_size); /* check if target buffer is to small. */ if (unpacked_size > out_size) { @@ -912,7 +912,7 @@ int32_t libmpq__block_read(mpq_archive_s *mpq_archive, uint32_t file_number, uin } /* read block from file. */ - if (fread(in_buf, 1, in_size, mpq_archive->fp) < 0) { + if ((libmpq__off_t)fread(in_buf, 1, in_size, mpq_archive->fp) != in_size) { /* free buffers. */ free(in_buf); @@ -925,7 +925,7 @@ int32_t libmpq__block_read(mpq_archive_s *mpq_archive, uint32_t file_number, uin libmpq__file_encrypted(mpq_archive, file_number, &encrypted); /* check if file is encrypted. */ - if (encrypted == 1) { + if (encrypted) { /* get decryption key. */ libmpq__block_seed(mpq_archive, file_number, block_number, &seed); @@ -945,7 +945,7 @@ int32_t libmpq__block_read(mpq_archive_s *mpq_archive, uint32_t file_number, uin libmpq__file_compressed(mpq_archive, file_number, &compressed); /* check if file is compressed. */ - if (compressed == 1) { + if (compressed) { /* decompress block. */ if ((tb = libmpq__decompress_block(in_buf, in_size, out_buf, out_size, LIBMPQ_FLAG_COMPRESS_MULTI)) < 0) { @@ -962,7 +962,7 @@ int32_t libmpq__block_read(mpq_archive_s *mpq_archive, uint32_t file_number, uin libmpq__file_imploded(mpq_archive, file_number, &imploded); /* check if file is imploded. */ - if (imploded == 1) { + if (imploded) { /* explode block. */ if ((tb = libmpq__decompress_block(in_buf, in_size, out_buf, out_size, LIBMPQ_FLAG_COMPRESS_PKZIP)) < 0) { @@ -975,8 +975,17 @@ int32_t libmpq__block_read(mpq_archive_s *mpq_archive, uint32_t file_number, uin } } + /* files should not be compressed and imploded */ + if (compressed && imploded) { + /* free temporary buffer. */ + free(in_buf); + + /* something on decompressing block failed. */ + return LIBMPQ_ERROR_UNPACK; + } + /* check if file is neither compressed nor imploded. */ - if (compressed == 0 && imploded == 0) { + if (!compressed && !imploded) { /* copy block. */ if ((tb = libmpq__decompress_block(in_buf, in_size, out_buf, out_size, LIBMPQ_FLAG_COMPRESS_NONE)) < 0) { diff --git a/dep/libmpq/libmpq/mpq.h b/dep/libmpq/libmpq/mpq.h index abd4862c334..c367ab3776e 100644 --- a/dep/libmpq/libmpq/mpq.h +++ b/dep/libmpq/libmpq/mpq.h @@ -1,7 +1,7 @@ /* * mpq.h -- some default types and defines. * - * Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> + * Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> * * Some parts (the encryption and decryption stuff) were adapted from * the C++ version of StormLib.h and StormPort.h included in stormlib. @@ -66,20 +66,20 @@ typedef int64_t libmpq__off_t; extern LIBMPQ_API const char *libmpq__version(void); /* string error message for a libmpq return code. */ -extern LIBMPQ_API const char *libmpq__strerror(int32_t returncode); +extern LIBMPQ_API const char *libmpq__strerror(int32_t return_code); /* generic mpq archive information. */ extern LIBMPQ_API int32_t libmpq__archive_open(mpq_archive_s **mpq_archive, const char *mpq_filename, libmpq__off_t archive_offset); extern LIBMPQ_API int32_t libmpq__archive_close(mpq_archive_s *mpq_archive); -extern LIBMPQ_API int32_t libmpq__archive_packed_size(mpq_archive_s *mpq_archive, libmpq__off_t *packed_size); -extern LIBMPQ_API int32_t libmpq__archive_unpacked_size(mpq_archive_s *mpq_archive, libmpq__off_t *unpacked_size); +extern LIBMPQ_API int32_t libmpq__archive_size_packed(mpq_archive_s *mpq_archive, libmpq__off_t *packed_size); +extern LIBMPQ_API int32_t libmpq__archive_size_unpacked(mpq_archive_s *mpq_archive, libmpq__off_t *unpacked_size); extern LIBMPQ_API int32_t libmpq__archive_offset(mpq_archive_s *mpq_archive, libmpq__off_t *offset); extern LIBMPQ_API int32_t libmpq__archive_version(mpq_archive_s *mpq_archive, uint32_t *version); extern LIBMPQ_API int32_t libmpq__archive_files(mpq_archive_s *mpq_archive, uint32_t *files); /* generic file processing functions. */ -extern LIBMPQ_API int32_t libmpq__file_packed_size(mpq_archive_s *mpq_archive, uint32_t file_number, libmpq__off_t *packed_size); -extern LIBMPQ_API int32_t libmpq__file_unpacked_size(mpq_archive_s *mpq_archive, uint32_t file_number, libmpq__off_t *unpacked_size); +extern LIBMPQ_API int32_t libmpq__file_size_packed(mpq_archive_s *mpq_archive, uint32_t file_number, libmpq__off_t *packed_size); +extern LIBMPQ_API int32_t libmpq__file_size_unpacked(mpq_archive_s *mpq_archive, uint32_t file_number, libmpq__off_t *unpacked_size); extern LIBMPQ_API int32_t libmpq__file_offset(mpq_archive_s *mpq_archive, uint32_t file_number, libmpq__off_t *offset); extern LIBMPQ_API int32_t libmpq__file_blocks(mpq_archive_s *mpq_archive, uint32_t file_number, uint32_t *blocks); extern LIBMPQ_API int32_t libmpq__file_encrypted(mpq_archive_s *mpq_archive, uint32_t file_number, uint32_t *encrypted); @@ -91,7 +91,7 @@ extern LIBMPQ_API int32_t libmpq__file_read(mpq_archive_s *mpq_archive, uint32_t /* generic block processing functions. */ extern LIBMPQ_API int32_t libmpq__block_open_offset(mpq_archive_s *mpq_archive, uint32_t file_number); extern LIBMPQ_API int32_t libmpq__block_close_offset(mpq_archive_s *mpq_archive, uint32_t file_number); -extern LIBMPQ_API int32_t libmpq__block_unpacked_size(mpq_archive_s *mpq_archive, uint32_t file_number, uint32_t block_number, libmpq__off_t *unpacked_size); +extern LIBMPQ_API int32_t libmpq__block_size_unpacked(mpq_archive_s *mpq_archive, uint32_t file_number, uint32_t block_number, libmpq__off_t *unpacked_size); extern LIBMPQ_API int32_t libmpq__block_read(mpq_archive_s *mpq_archive, uint32_t file_number, uint32_t block_number, uint8_t *out_buf, libmpq__off_t out_size, libmpq__off_t *transferred); #ifdef __cplusplus diff --git a/dep/libmpq/libmpq/pack_begin.h b/dep/libmpq/libmpq/pack_begin.h index eb4a6ddebbb..eff141c57ce 100644 --- a/dep/libmpq/libmpq/pack_begin.h +++ b/dep/libmpq/libmpq/pack_begin.h @@ -1,7 +1,7 @@ /* * pack_begin.h -- header file for struct packing used by libmpq. * - * Copyright (c) 2010 Georg Lukas <georg@op-co.de> + * Copyright (c) 2010-2011 Georg Lukas <georg@op-co.de> * * 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 diff --git a/dep/libmpq/libmpq/pack_end.h b/dep/libmpq/libmpq/pack_end.h index a8a35113bfb..60b1b1db9d2 100644 --- a/dep/libmpq/libmpq/pack_end.h +++ b/dep/libmpq/libmpq/pack_end.h @@ -1,7 +1,7 @@ /* * pack_end.h -- header file for struct packing used by libmpq. * - * Copyright (c) 2010 Georg Lukas <georg@op-co.de> + * Copyright (c) 2010-2011 Georg Lukas <georg@op-co.de> * * 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 diff --git a/dep/libmpq/libmpq/platform.h b/dep/libmpq/libmpq/platform.h index 68fdfdc5ded..cdffccabbf1 100644 --- a/dep/libmpq/libmpq/platform.h +++ b/dep/libmpq/libmpq/platform.h @@ -1,7 +1,7 @@ /* * platform.h -- header file for platform specific parts. * - * Copyright (c) 2010 Georg Lukas <georg@op-co.de> + * Copyright (c) 2010-2011 Georg Lukas <georg@op-co.de> * * 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 diff --git a/dep/libmpq/libmpq/wave.c b/dep/libmpq/libmpq/wave.c index 628593fce83..9df58a0baf6 100644 --- a/dep/libmpq/libmpq/wave.c +++ b/dep/libmpq/libmpq/wave.c @@ -2,7 +2,7 @@ * wave.c -- this file contains decompression methods used by mpq-tools * to decompress wave files. * - * Copyright (c) 2003-2007 Maik Broemme <mbroemme@plusserver.de> + * Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> * * This source was adepted from the C++ version of wave.cpp included * in stormlib. The C++ version belongs to the following authors: diff --git a/dep/libmpq/libmpq/wave.h b/dep/libmpq/libmpq/wave.h index 1b9491bd70a..7496b1cf9bb 100644 --- a/dep/libmpq/libmpq/wave.h +++ b/dep/libmpq/libmpq/wave.h @@ -1,7 +1,7 @@ /* * wave.h -- header file for wav unplode functions used by mpq-tools. * - * Copyright (c) 2003-2007 Maik Broemme <mbroemme@plusserver.de> + * Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> * * This source was adepted from the C++ version of wave.h included * in stormlib. The C++ version belongs to the following authors: diff --git a/dep/libmpq/tools/crypt_buf_gen.c b/dep/libmpq/tools/crypt_buf_gen.c index 3d150fc661f..c6b1cbc60a6 100644 --- a/dep/libmpq/tools/crypt_buf_gen.c +++ b/dep/libmpq/tools/crypt_buf_gen.c @@ -1,8 +1,8 @@ /* * crypt_buf_gen.c -- tool to re-create the static decryption buffer. * - * Copyright (c) 2003-2008 Maik Broemme <mbroemme@plusserver.de> - * Copyright (c) 2008 Georg Lukas <georg@op-co.de> + * Copyright (c) 2003-2011 Maik Broemme <mbroemme@libmpq.org> + * Copyright (c) 2008-2011 Georg Lukas <georg@op-co.de> * * 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 diff --git a/dep/process/License.txt b/dep/process/License.txt new file mode 100644 index 00000000000..36b7cd93cdf --- /dev/null +++ b/dep/process/License.txt @@ -0,0 +1,23 @@ +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/dep/process/Readme.txt b/dep/process/Readme.txt new file mode 100644 index 00000000000..ada7cf74974 --- /dev/null +++ b/dep/process/Readme.txt @@ -0,0 +1,6 @@ +Boost.Process (Not part of the official boost libraries yet) +================================================================ +Its used to start child processes within the application. + +Website: http://www.highscore.de/boost/process0.5/ +Downloaded from: http://www.highscore.de/boost/process0.5/process.zip diff --git a/dep/process/boost/process.hpp b/dep/process/boost/process.hpp new file mode 100644 index 00000000000..2271e9b49e7 --- /dev/null +++ b/dep/process/boost/process.hpp @@ -0,0 +1,22 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011 Jeff Flinn, Boris Schaeling +// Copyright (c) 2012 Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +/** + * \file boost/process.hpp + * + * Convenience header which includes all public Boost.Process header files. + */ + +#ifndef BOOST_PROCESS_HPP +#define BOOST_PROCESS_HPP + +#include <boost/process/all.hpp> + +#endif diff --git a/dep/process/boost/process/all.hpp b/dep/process/boost/process/all.hpp new file mode 100644 index 00000000000..234dd05d4c1 --- /dev/null +++ b/dep/process/boost/process/all.hpp @@ -0,0 +1,30 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +/** + * \file boost/process/all.hpp + * + * Convenience header which includes all public Boost.Process header files. + */ + +#ifndef BOOST_PROCESS_ALL_HPP +#define BOOST_PROCESS_ALL_HPP + +#include <boost/process/child.hpp> +#include <boost/process/create_pipe.hpp> +#include <boost/process/execute.hpp> +#include <boost/process/executor.hpp> +#include <boost/process/initializers.hpp> +#include <boost/process/pipe.hpp> +#include <boost/process/search_path.hpp> +#include <boost/process/shell_path.hpp> +#include <boost/process/terminate.hpp> +#include <boost/process/wait_for_exit.hpp> + +#endif diff --git a/dep/process/boost/process/child.hpp b/dep/process/boost/process/child.hpp new file mode 100644 index 00000000000..ec129fc9367 --- /dev/null +++ b/dep/process/boost/process/child.hpp @@ -0,0 +1,74 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +/** + * \file boost/process/child.hpp + * + * Defines a child process class. + */ + +#ifndef BOOST_PROCESS_CHILD_HPP +#define BOOST_PROCESS_CHILD_HPP + +#include <boost/process/config.hpp> + +#include BOOST_PROCESS_PLATFORM_PROMOTE_PATH(child) +BOOST_PROCESS_PLATFORM_PROMOTE_NAMESPACE(child) + +#if defined(BOOST_PROCESS_DOXYGEN) +namespace boost { namespace process { + +/** + * Represents a child process. + * + * On Windows child is movable but non-copyable. The destructor + * automatically closes handles to the child process. + */ +struct child +{ + /** + * Process information. + * + * \remark <em>Windows only.</em> + */ + PROCESS_INFORMATION proc_info; + + /** + * Constructor. + * + * \remark <em>Windows only.<em/> + */ + explicit child(const PROCESS_INFORMATION &pi) : proc_info(pi) {} + + /** + * Returns the process handle. + * + * \remark <em>Windows only.</em> + */ + HANDLE process_handle() const { return proc_info.hProcess; } + + /** + * Process identifier. + * + * \remark <em>POSIX only.</em> + */ + pid_t pid; + + /** + * Constructor. + * + * \remark <em>POSIX only.</em> + */ + explicit child(pid_t p) : pid(p) {} +}; + +}} +#endif + +#endif diff --git a/dep/process/boost/process/config.hpp b/dep/process/boost/process/config.hpp new file mode 100644 index 00000000000..7aae4d3ca4f --- /dev/null +++ b/dep/process/boost/process/config.hpp @@ -0,0 +1,82 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +/** + * \file boost/process/config.hpp + * + * Defines various macros. + */ + +#ifndef BOOST_PROCESS_CONFIG_HPP +#define BOOST_PROCESS_CONFIG_HPP + +#include <boost/config.hpp> +#include <boost/system/config.hpp> +#include <boost/system/error_code.hpp> +#include <boost/system/system_error.hpp> + +#if defined(BOOST_POSIX_API) +# include <errno.h> +# define BOOST_PROCESS_LAST_ERROR errno +# define BOOST_PROCESS_PLATFORM posix +#elif defined(BOOST_WINDOWS_API) +# include <Windows.h> +# define BOOST_PROCESS_LAST_ERROR GetLastError() +# define BOOST_PROCESS_PLATFORM windows +#endif + +/** \cond */ +#define BOOST_PROCESS_PLATFORM_PROMOTE_PATH(COMPONENT) \ + <boost/process/BOOST_PROCESS_PLATFORM/COMPONENT.hpp> +#define BOOST_PROCESS_PLATFORM_PROMOTE_NAMESPACE(COMPONENT) \ + namespace boost { namespace process { using BOOST_PROCESS_PLATFORM::COMPONENT; }} +#define BOOST_PROCESS_PLATFORM_PROMOTE_INITIALIZERS_NAMESPACE \ + namespace boost { namespace process { namespace initializers { \ + using namespace boost::process::BOOST_PROCESS_PLATFORM::initializers; }}} +/** \endcond */ + +#if defined(BOOST_PROCESS_DOXYGEN) +/** + * \def BOOST_POSIX_API + * + * This macro is defined on POSIX. + */ +#define BOOST_POSIX_API +/** + * \def BOOST_WINDOWS_API + * + * This macro is defined on Windows. + */ +#define BOOST_WINDOWS_API +#endif + +/** + * \def BOOST_PROCESS_THROW(EX) + * + * Defines how exceptions are thrown. Set this macro for example + * to \c BOOST_THROW_EXCEPTION if you like to use Boost.Exception. + */ +#define BOOST_PROCESS_THROW(EX) throw EX + +/** \cond */ +#define BOOST_PROCESS_SOURCE_LOCATION \ + "in file '" __FILE__ "', line " BOOST_STRINGIZE(__LINE__) ": " + +#define BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR(what) \ + BOOST_PROCESS_THROW(boost::system::system_error( \ + boost::system::error_code(BOOST_PROCESS_LAST_ERROR, \ + boost::system::system_category()), \ + BOOST_PROCESS_SOURCE_LOCATION what)) + +#define BOOST_PROCESS_RETURN_LAST_SYSTEM_ERROR(ec) \ + ec = boost::system::error_code(BOOST_PROCESS_LAST_ERROR, \ + boost::system::system_category()) +/** \endcond */ + +#endif diff --git a/dep/process/boost/process/create_pipe.hpp b/dep/process/boost/process/create_pipe.hpp new file mode 100644 index 00000000000..6c34ecf44b1 --- /dev/null +++ b/dep/process/boost/process/create_pipe.hpp @@ -0,0 +1,48 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +/** + * \file boost/process/create_pipe.hpp + * + * Defines a function to create a pipe. + */ + +#ifndef BOOST_PROCESS_CREATE_PIPE_HPP +#define BOOST_PROCESS_CREATE_PIPE_HPP + +#include <boost/process/config.hpp> + +#include BOOST_PROCESS_PLATFORM_PROMOTE_PATH(create_pipe) +BOOST_PROCESS_PLATFORM_PROMOTE_NAMESPACE(create_pipe) + +#if defined(BOOST_PROCESS_DOXYGEN) +namespace boost { namespace process { + +/** + * Creates an anonymous pipe. + * + * \note On Windows anonymous pipes don't support + * asynchronous I/O. + * + * \throws boost::system::system_error in case of an error + */ +pipe create_pipe(); + +/** + * Creates an anonymous pipe. + * + * \note On Windows anonymous pipes don't support + * asynchronous I/O. + */ +pipe create_pipe(boost::system::error_code &ec); + +}} +#endif + +#endif diff --git a/dep/process/boost/process/execute.hpp b/dep/process/boost/process/execute.hpp new file mode 100644 index 00000000000..608831171e9 --- /dev/null +++ b/dep/process/boost/process/execute.hpp @@ -0,0 +1,38 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +/** + * \file boost/process/execute.hpp + * + * Defines a function to execute a program. + */ + +#ifndef BOOST_PROCESS_EXECUTE_HPP +#define BOOST_PROCESS_EXECUTE_HPP + +#include <boost/process/config.hpp> + +#include BOOST_PROCESS_PLATFORM_PROMOTE_PATH(execute) +BOOST_PROCESS_PLATFORM_PROMOTE_NAMESPACE(execute) + +#if defined(BOOST_PROCESS_DOXYGEN) +namespace boost { namespace process { + +/** + * Starts a program. + * + * \tparam initializers define what and how the program is started + */ +template <class Initializer, class... Initializers> +child execute(const Initializer &initializer, const Initializers... &initializers); + +}} +#endif + +#endif diff --git a/dep/process/boost/process/executor.hpp b/dep/process/boost/process/executor.hpp new file mode 100644 index 00000000000..905d7f84cc7 --- /dev/null +++ b/dep/process/boost/process/executor.hpp @@ -0,0 +1,176 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +/** + * \file boost/process/executor.hpp + * + * Defines an executor which can create child processes. + */ + +#ifndef BOOST_PROCESS_EXECUTOR_HPP +#define BOOST_PROCESS_EXECUTOR_HPP + +#include <boost/process/config.hpp> + +#include BOOST_PROCESS_PLATFORM_PROMOTE_PATH(executor) +BOOST_PROCESS_PLATFORM_PROMOTE_NAMESPACE(executor) + +#if defined(BOOST_PROCESS_DOXYGEN) +namespace boost { namespace process { + +/** + * Starts a program. + * + * boost::process::executor is a functor which calls the system functions + * to start a program. Before system functions are called it iterates + * over initializers and calls a member function passing a reference + * to itself as a parameter. Initializers get then a chance to setup + * the executor. If system functions fail boost::process::executor again + * iterates over initializers and calls another member function passing a + * reference to itself as a parameter. This gives initializers a + * chance to handle the error. + * + * \note Library users shouldn't need to use boost::process::executor. + * It is recommended to call boost::process::execute which uses + * boost::pocess::executor internally. + */ +struct executor +{ + /** + * Default constructor. + */ + executor(); + + /** + * Starts a program. + * + * \tparam initializers define what and how the program is started + */ + template <class Initializer, class... Initializers> + child operator()(const Initializer &initializer, const Initializers... &initializers); + + ///\defgroup WindowsOnly Windows only. + ///@{ + + /** + * Program name. + * + * \remark <em>Windows only.</em> + */ + LPCTSTR exe; + + /** + * Command line. + * + * \remark <em>Windows only.</em> + */ + LPTSTR cmd_line; + + /** + * Process attributes. + * + * \remark <em>Windows only.</em> + */ + LPSECURITY_ATTRIBUTES proc_attrs; + + /** + * Thread attributes. + * + * \remark <em>Windows only.</em> + */ + LPSECURITY_ATTRIBUTES thread_attrs; + + /** + * Flag to inherit handles. + * + * \remark <em>Windows only.</em> + */ + BOOL inherit_handles; + + /** + * Creation flags. + * + * \remark <em>Windows only.</em> + */ + DWORD creation_flags; + + /** + * Environment variables. + * + * \remark <em>Windows only.</em> + */ + LPVOID env; + + /** + * Work directory. + * + * \remark <em>Windows only.</em> + */ + LPCTSTR work_dir; + + /** + * Startupinfo structure. + * + * \remark <em>Windows only.</em> + */ + STARTUPINFO startup_info; + + /** + * Startupinfoex structure. + * + * If this member variable is available, \c startup_info is a reference + * to \c StartupInfo in STARTUPINFOEX. + * + * \remark <em>Windows Vista, Windows Server 2008 or better.</em> + */ + STARTUPINFOEX startup_info_ex; + + /** + * Process information. + * + * \c proc_info contains the result after a child process + * could be started successfully. + * + * \remark <em>Windows only.</em> + */ + PROCESS_INFORMATION proc_info; + + ///@} + + ///\defgroup POSIXOnly POSIX only. + ///@{ + + /** + * Program name. + * + * \remark <em>POSIX only.</em> + */ + const char *exe; + + /** + * Command line arguments. + * + * \remark <em>POSIX only.</em> + */ + char **cmd_line; + + /** + * Environment variables. + * + * \remark <em>POSIX only.</em> + */ + char **env; + + ///@} +}; + +}} +#endif + +#endif diff --git a/dep/process/boost/process/initializers.hpp b/dep/process/boost/process/initializers.hpp new file mode 100644 index 00000000000..c7175d1425d --- /dev/null +++ b/dep/process/boost/process/initializers.hpp @@ -0,0 +1,497 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +/** + * \file boost/process/initializers.hpp + * + * Defines initializers. + */ + +#ifndef BOOST_PROCESS_INITIALIZERS_HPP +#define BOOST_PROCESS_INITIALIZERS_HPP + +#include <boost/process/config.hpp> + +#include BOOST_PROCESS_PLATFORM_PROMOTE_PATH(initializers) +BOOST_PROCESS_PLATFORM_PROMOTE_INITIALIZERS_NAMESPACE + +#if defined(BOOST_PROCESS_DOXYGEN) +namespace boost { namespace process { namespace initializers { + +/** + * Binds the standard error stream. + */ +class bind_stderr : public initializer_base +{ +public: + /** + * Constructor. + */ + explicit bind_stderr(const boost::iostreams::file_descriptor_sink &sink); +}; + +/** + * Binds the standard input stream. + */ +class bind_stdin : public initializer_base +{ +public: + /** + * Constructor. + */ + explicit bind_stdin(const boost::iostreams::file_descriptor_source &source); +}; + +/** + * Binds the standard output stream. + */ +class bind_stdout : public initializer_base +{ +public: + /** + * Constructor. + */ + explicit bind_stdout(const boost::iostreams::file_descriptor_sink &sink); +}; + +/** + * Binds a file descriptor. + * + * \remark <em>POSIX only.</em> + */ +class bind_fd : public initializer_base +{ +public: + /** + * Constructor. + */ + bind_fd(int id, const boost::iostreams::file_descriptor &fd); +}; + +/** + * Closes a file descriptor. + * + * \remark <em>POSIX only.</em> + */ +class close_fd : public initializer_base +{ + /** + * Constructor. + */ + explicit close_fd(int fd); +}; + +/** + * Closes file descriptors. + * + * \remark <em>POSIX only.</em> + */ +class close_fds : public initializer_base +{ +public: + /** + * Constructor. + * + * \c range_type must be an <tt>int</tt>-range. + */ + explicit close_fds(const range_type &fds); +}; + +/** + * Closes all file descriptors a predicate returns + * true for. + * + * This initializer doesn't close file descriptors + * immediately. Instead it sets the \c FD_CLOEXEC + * flag. File descriptors are closed when \c execve + * is called and the call succeeds. + * + * \remark <em>POSIX only.</em> + */ +class close_fds_if : public initializer_base +{ +public: + /** + * Constructor. + * + * \c predicate_type must be a function or functor with + * this signature: <tt>bool(int)</tt> + */ + explicit close_fds_if(const predicate_type &pred); +}; + +/** + * Closes the standard error stream. + */ +class close_stderr : public initializer_base +{ + /** + * Constructor. + */ + close_stderr(); +}; + +/** + * Closes the standard input stream. + */ +class close_stdin : public initializer_base +{ + /** + * Constructor. + */ + close_stdin(); +}; + +/** + * Closes the standard output stream. + */ +class close_stdout : public initializer_base +{ + /** + * Constructor. + */ + close_stdout(); +}; + +/** + * Hides the console. + */ +class hide_console : public initializer_base +{ +public: + /** + * Constructor. + */ + hide_console(); +}; + +/** + * Inherits environment variables. + */ +class inherit_env : public initializer_base +{ +public: + /** + * Constructor. + */ + inherit_env(); +}; + +/** + * Notifies an I/O service object of fork-related events. + * + * \see boost::asio::io_service::notify_fork + * + * \remark <em>POSIX only.</em> + */ +class notify_io_service : public initializer_base +{ +public: + /** + * Constructor. + */ + explicit notify_io_service(boost::asio::io_service &io_service); +}; + +/** + * Generic initializer to execute any code if \c execve + * failed. + * + * \remark <em>POSIX only.</em> + */ +class on_exec_error : public initializer_base +{ +public: + /** + * Constructor. + * + * \c handler_type must be a function or functor with + * this signature: <tt>void(executor&)</tt> + */ + explicit on_exec_error(handler_type handler); +}; + +/** + * Generic initializer to execute any code before \c execve + * is called. + * + * \remark <em>POSIX only.</em> + */ +class on_exec_setup : public initializer_base +{ +public: + /** + * Constructor. + * + * \c handler_type must be a function or functor with + * this signature: <tt>void(executor&)</tt> + */ + explicit on_exec_setup(handler_type handler); +}; + +/** + * Generic initializer to execute any code if \c fork + * failed. + * + * \remark <em>POSIX only.</em> + */ +class on_fork_error : public initializer_base +{ +public: + /** + * Constructor. + * + * \c handler_type must be a function or functor with + * this signature: <tt>void(executor&)</tt> + */ + explicit on_fork_error(handler_type handler); +}; + +/** + * Generic initializer to execute any code before \c fork + * is called. + * + * \remark <em>POSIX only.</em> + */ +class on_fork_setup : public initializer_base +{ +public: + /** + * Constructor. + * + * \c handler_type must be a function or functor with + * this signature: <tt>void(executor&)</tt> + */ + explicit on_fork_setup(handler_type handler); +}; + +/** + * Generic initializer to execute any code in the parent + * process after \c fork has been called successfully. + * + * \remark <em>POSIX only.</em> + */ +class on_fork_success : public initializer_base +{ +public: + /** + * Constructor. + * + * \c handler_type must be a function or functor with + * this signature: <tt>void(executor&)</tt> + */ + explicit on_fork_success(handler_type handler); +}; + +/** + * Generic initializer to execute any code if \c CreateProcess + * failed. + * + * \remark <em>Windows only.</em> + */ +class on_CreateProcess_error : public initializer_base +{ +public: + /** + * Constructor. + * + * \c handler_type must be a function or functor with + * this signature: <tt>void(executor&)</tt> + */ + explicit on_CreateProcess_error(handler_type handler); +}; + +/** + * Generic initializer to execute any code before \c CreateProcess + * is called. + * + * \remark <em>Windows only.</em> + */ +class on_CreateProcess_setup : public initializer_base +{ +public: + /** + * Constructor. + * + * \c handler_type must be a function or functor with + * this signature: <tt>void(executor&)</tt> + */ + explicit on_CreateProcess_setup(handler_type handler); +}; + +/** + * Generic initializer to execute any code after \c CreateProcess + * has been called successfully. + * + * \remark <em>Windows only.</em> + */ +class on_CreateProcess_success : public initializer_base +{ +public: + /** + * Constructor. + * + * \c handler_type must be a function or functor with + * this signature: <tt>void(executor&)</tt> + */ + explicit on_CreateProcess_success(handler_type handler); +}; + +/** + * Specifies the executable to start. + * + * This initializer must always be used. The only exception is + * if you use \c set_args or a generic initializer which + * specifies the executable. + */ +class run_exe : public initializer_base +{ +public: + /** + * Constructor. + * + * On Windows \c string_type must be <tt>const char*</tt>, + * <tt>std::string</tt> or <tt>boost::filesystem::path</tt>. + * If Unicode is used, \c string_type must be + * <tt>const wchar_t*</tt>, <tt>std::wstring</tt> or + * <tt>boost::filesystem::path</tt>. + * + * On POSIX \c string_type must be <tt>const char*</tt>, + * <tt>std::string</tt> or <tt>boost::filesystem::path</tt>. + */ + explicit run_exe(const string_type &s); +}; + +/** + * Sets the command line arguments. + * + * The first argument specifies the executable to start unless + * \c run_exe is used. + * + * Use \c set_cmd_line if you don't want to pass a collection of + * command line arguments but set the command line as one string. + */ +class set_args : public initializer_base +{ +public: + /** + * Constructor. + * + * On Windows \c range_type must be a <tt>std::string</tt>-range. + * If Unicode is used, \c range_type must be a + * <tt>std::wstring</tt>-range. + * + * On POSIX \c range_type must be a <tt>std::string</tt>-range. + */ + explicit set_args(const range_type &r); +}; + +/** + * Sets the command line. + * + * Use \c set_args if you don't want to set the command line as + * one string but pass a collection of command line arguments. + */ +class set_cmd_line : public initializer_base +{ +public: + /** + * Constructor. + * + * On Windows \c string_type must be <tt>const char*</tt>, + * <tt>std::string</tt> or <tt>boost::filesystem::path</tt>. + * If Unicode is used, \c string_type must be + * <tt>const wchar_t*</tt>, <tt>std::wstring</tt> or + * <tt>boost::filesystem::path</tt>. + * + * On POSIX \c string_type must be <tt>const char*</tt>, + * <tt>std::string</tt> or <tt>boost::filesystem::path</tt>. + */ + explicit set_cmd_line(const string_type &s); +}; + +/** + * Sets the environment. + */ +class set_env : public initializer_base +{ +public: + /** + * Constructor. + * + * On Windows \c range_type must be a <tt>std::string</tt>-range. + * If Unicode is used, \c range_type must be a + * <tt>std::wstring</tt>-range. + * + * On POSIX \c range_type must be a <tt>std::string</tt>-range. + */ + explicit set_env(const range_type &r); +}; + +/** + * Sets an error if a child process can't be created. + */ +class set_on_error : public initializer_base +{ +public: + /** + * Constructor. + */ + explicit set_on_error(boost::system::error_code &ec); +}; + +/** + * Sets the flag \c wShowWindow in \c STARTUPINFO. + * + * \remark <em>Windows only.</em> + */ +class show_window : public initializer_base +{ +public: + /** + * Constructor. + */ + explicit show_window(WORD flags); +}; + +/** + * Sets the work directory. + */ +class start_in_dir : public initializer_base +{ +public: + /** + * Constructor. + * + * On Windows \c string_type must be <tt>const char*</tt>, + * <tt>std::string</tt> or <tt>boost::filesystem::path</tt>. + * If Unicode is used, \c string_type must be + * <tt>const wchar_t*</tt>, <tt>std::wstring</tt> or + * <tt>boost::filesystem::path</tt>. + * + * On POSIX \c string_type must be <tt>const char*</tt>, + * <tt>std::string</tt> or <tt>boost::filesystem::path</tt>. + */ + explicit start_in_dir(const string_type &s); +}; + +/** + * Throws an error if a child process can't be created. + * + * The type of the error thrown is \c boost::system::system_error. + */ +class throw_on_error : public initializer_base +{ +public: +}; + +}}} +#endif + +#endif diff --git a/dep/process/boost/process/mitigate.hpp b/dep/process/boost/process/mitigate.hpp new file mode 100644 index 00000000000..6838984aa1a --- /dev/null +++ b/dep/process/boost/process/mitigate.hpp @@ -0,0 +1,104 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +/** + * \file boost/process/mitigate.hpp + * + * Helpers to mitigate platform differences. + */ + +#ifndef BOOST_PROCESS_MITIGATE_HPP +#define BOOST_PROCESS_MITIGATE_HPP + +#include <boost/asio.hpp> +#if defined(BOOST_POSIX_API) +# include <sys/wait.h> +#endif + +namespace boost { namespace process { + +#if defined(BOOST_WINDOWS_API) +typedef boost::asio::windows::stream_handle pipe_end; +#elif defined(BOOST_POSIX_API) +typedef boost::asio::posix::stream_descriptor pipe_end; +#endif + +inline const char *zero_device() +{ +#if defined(BOOST_WINDOWS_API) + return "NUL"; +#elif defined(BOOST_POSIX_API) + return "/dev/zero"; +#endif +} + +inline const char *null_device() +{ +#if defined(BOOST_WINDOWS_API) + return "NUL"; +#elif defined(BOOST_POSIX_API) + return "/dev/null"; +#endif +} + +#if defined(BOOST_WINDOWS_API) +# define BOOST_PROCESS_EXITSTATUS(a) static_cast<int>(a) +#elif defined(BOOST_POSIX_API) +# define BOOST_PROCESS_EXITSTATUS WEXITSTATUS +#endif + +#if defined(BOOST_PROCESS_DOXYGEN) +/** + * Type definition for the end of a pipe. + * + * On Windows the type is based on boost::asio::windows::stream_handle. On + * POSIX it is based on boost::asio::posix::stream_descriptor. + * + * You can use this type definition for asynchronous I/O with streams of + * child processes. + */ +typedef boost_asio_type pipe_end; + +/** + * Gets the name of the zero device. + * + * You can use zero_device to initialize a + * boost::iostreams::file_descriptor_source to read + * null characters from. + * + * \returns NUL on Windows and /dev/zero on POSIX. + */ +const char *zero_device(); + +/** + * Gets the name of the null device. + * + * You can use null_device to initialize a + * boost::iostreams::file_descriptor_sink which discards + * data written to it. + * + * \returns NUL on Windows and /dev/null on POSIX. + */ +const char *null_device(); + +/** + * \def BOOST_PROCESS_EXITSTATUS + * + * On Windows \c BOOST_PROCESS_EXITSTATUS is a static cast to \c int. + * On POSIX it is set to \c WEXITSTATUS. + * + * You can use \c BOOST_PROCESS_EXITSTATUS for the return value of + * boost::process::wait_for_exit to get the exit status of a process. + */ +#define BOOST_PROCESS_EXITSTATUS +#endif + +}} + +#endif diff --git a/dep/process/boost/process/pipe.hpp b/dep/process/boost/process/pipe.hpp new file mode 100644 index 00000000000..35f2a4470d6 --- /dev/null +++ b/dep/process/boost/process/pipe.hpp @@ -0,0 +1,64 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +/** + * \file boost/process/pipe.hpp + * + * Defines a pipe. + */ + +#ifndef BOOST_PROCESS_PIPE_HPP +#define BOOST_PROCESS_PIPE_HPP + +#include <boost/process/config.hpp> + +#include BOOST_PROCESS_PLATFORM_PROMOTE_PATH(pipe) +BOOST_PROCESS_PLATFORM_PROMOTE_NAMESPACE(pipe) +BOOST_PROCESS_PLATFORM_PROMOTE_NAMESPACE(make_pipe) + +#if defined(BOOST_PROCESS_DOXYGEN) +namespace boost { namespace process { + +/** + * Represents a pipe. + */ +struct pipe +{ + /** + * Read-end. + */ + pipe_end_type source; + + /** + * Write-end. + */ + pipe_end_type sink; + + /** + * Constructor. + */ + pipe(pipe_end_type source, pipe_end_type sink); +}; + +/** + * Returns a pipe instance. + * + * This is a helper function to instantiate boost::process::pipe. + * + * \note boost::process::make_pipe does not create a pipe. + * You must pass existing pipe ends to this function. + * If you want to create an anonymous pipe, call + * boost::process::create_pipe. + */ +pipe make_pipe(pipe_end_type source, pipe_end_type sink); + +}} +#endif + +#endif diff --git a/dep/process/boost/process/posix/child.hpp b/dep/process/boost/process/posix/child.hpp new file mode 100644 index 00000000000..913484529e8 --- /dev/null +++ b/dep/process/boost/process/posix/child.hpp @@ -0,0 +1,26 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_CHILD_HPP +#define BOOST_PROCESS_POSIX_CHILD_HPP + +#include <sys/types.h> + +namespace boost { namespace process { namespace posix { + +struct child +{ + pid_t pid; + + explicit child(pid_t p) : pid(p) {} +}; + +}}} + +#endif diff --git a/dep/process/boost/process/posix/create_pipe.hpp b/dep/process/boost/process/posix/create_pipe.hpp new file mode 100644 index 00000000000..ecdd523516f --- /dev/null +++ b/dep/process/boost/process/posix/create_pipe.hpp @@ -0,0 +1,40 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_CREATE_PIPE_HPP +#define BOOST_PROCESS_POSIX_CREATE_PIPE_HPP + +#include <boost/process/config.hpp> +#include <boost/process/posix/pipe.hpp> +#include <boost/system/error_code.hpp> +#include <unistd.h> + +namespace boost { namespace process { namespace posix { + +inline pipe create_pipe() +{ + int fds[2]; + if (::pipe(fds) == -1) + BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("pipe(2) failed"); + return pipe(fds[0], fds[1]); +} + +inline pipe create_pipe(boost::system::error_code &ec) +{ + int fds[2]; + if (::pipe(fds) == -1) + BOOST_PROCESS_RETURN_LAST_SYSTEM_ERROR(ec); + else + ec.clear(); + return pipe(fds[0], fds[1]); +} + +}}} + +#endif diff --git a/dep/process/boost/process/posix/execute.hpp b/dep/process/boost/process/posix/execute.hpp new file mode 100644 index 00000000000..27082196c8a --- /dev/null +++ b/dep/process/boost/process/posix/execute.hpp @@ -0,0 +1,82 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_EXECUTE_HPP +#define BOOST_PROCESS_POSIX_EXECUTE_HPP + +#include <boost/process/posix/executor.hpp> +#include <boost/process/posix/child.hpp> +#include <boost/fusion/tuple/make_tuple.hpp> +#include <boost/ref.hpp> + +namespace boost { namespace process { namespace posix { + +template <class I0> +child execute(const I0 &i0) +{ + return executor()(boost::fusion::make_tuple(boost::cref(i0))); +} + +template <class I0, class I1> +child execute(const I0 &i0, const I1 &i1) +{ + return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1))); +} + +template <class I0, class I1, class I2> +child execute(const I0 &i0, const I1 &i1, const I2 &i2) +{ + return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2))); +} + +template <class I0, class I1, class I2, class I3> +child execute(const I0 &i0, const I1 &i1, const I2 &i2, const I3 &i3) +{ + return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2), boost::cref(i3))); +} + +template <class I0, class I1, class I2, class I3, class I4> +child execute(const I0 &i0, const I1 &i1, const I2 &i2, const I3 &i3, const I4 &i4) +{ + return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2), boost::cref(i3), boost::cref(i4))); +} + +template <class I0, class I1, class I2, class I3, class I4, class I5> +child execute(const I0 &i0, const I1 &i1, const I2 &i2, const I3 &i3, const I4 &i4, const I5 &i5) +{ + return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2), boost::cref(i3), boost::cref(i4), boost::cref(i5))); +} + +template <class I0, class I1, class I2, class I3, class I4, class I5, class I6> +child execute(const I0 &i0, const I1 &i1, const I2 &i2, const I3 &i3, const I4 &i4, const I5 &i5, const I6 &i6) +{ + return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2), boost::cref(i3), boost::cref(i4), boost::cref(i5), boost::cref(i6))); +} + +template <class I0, class I1, class I2, class I3, class I4, class I5, class I6, class I7> +child execute(const I0 &i0, const I1 &i1, const I2 &i2, const I3 &i3, const I4 &i4, const I5 &i5, const I6 &i6, const I7 &i7) +{ + return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2), boost::cref(i3), boost::cref(i4), boost::cref(i5), boost::cref(i6), boost::cref(i7))); +} + +template <class I0, class I1, class I2, class I3, class I4, class I5, class I6, class I7, class I8> +child execute(const I0 &i0, const I1 &i1, const I2 &i2, const I3 &i3, const I4 &i4, const I5 &i5, const I6 &i6, const I7 &i7, const I8 &i8) +{ + return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2), boost::cref(i3), boost::cref(i4), boost::cref(i5), boost::cref(i6), boost::cref(i7), boost::cref(i8))); +} + +template <class I0, class I1, class I2, class I3, class I4, class I5, class I6, class I7, class I8, class I9> +child execute(const I0 &i0, const I1 &i1, const I2 &i2, const I3 &i3, const I4 &i4, const I5 &i5, const I6 &i6, const I7 &i7, const I8 &i8, const I9 &i9) +{ + return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2), boost::cref(i3), boost::cref(i4), boost::cref(i5), boost::cref(i6), boost::cref(i7), boost::cref(i8), boost::cref(i9))); +} + +}}} + +#endif diff --git a/dep/process/boost/process/posix/executor.hpp b/dep/process/boost/process/posix/executor.hpp new file mode 100644 index 00000000000..a3e81f128f5 --- /dev/null +++ b/dep/process/boost/process/posix/executor.hpp @@ -0,0 +1,120 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_EXECUTOR_HPP +#define BOOST_PROCESS_POSIX_EXECUTOR_HPP + +#include <boost/process/posix/child.hpp> +#include <boost/fusion/algorithm/iteration/for_each.hpp> +#include <cstdlib> +#include <sys/types.h> +#include <unistd.h> + +namespace boost { namespace process { namespace posix { + +struct executor +{ + executor() : exe(0), cmd_line(0), env(0) {} + + struct call_on_fork_setup + { + executor &e_; + + call_on_fork_setup(executor &e) : e_(e) {} + + template <class Arg> + void operator()(const Arg &arg) const + { + arg.on_fork_setup(e_); + } + }; + + struct call_on_fork_error + { + executor &e_; + + call_on_fork_error(executor &e) : e_(e) {} + + template <class Arg> + void operator()(Arg &arg) const + { + arg.on_fork_error(e_); + } + }; + + struct call_on_fork_success + { + executor &e_; + + call_on_fork_success(executor &e) : e_(e) {} + + template <class Arg> + void operator()(Arg &arg) const + { + arg.on_fork_success(e_); + } + }; + + struct call_on_exec_setup + { + executor &e_; + + call_on_exec_setup(executor &e) : e_(e) {} + + template <class Arg> + void operator()(Arg &arg) const + { + arg.on_exec_setup(e_); + } + }; + + struct call_on_exec_error + { + executor &e_; + + call_on_exec_error(executor &e) : e_(e) {} + + template <class Arg> + void operator()(Arg &arg) const + { + arg.on_exec_error(e_); + } + }; + + template <class InitializerSequence> + child operator()(const InitializerSequence &seq) + { + boost::fusion::for_each(seq, call_on_fork_setup(*this)); + + pid_t pid = ::fork(); + if (pid == -1) + { + boost::fusion::for_each(seq, call_on_fork_error(*this)); + } + else if (pid == 0) + { + boost::fusion::for_each(seq, call_on_exec_setup(*this)); + ::execve(exe, cmd_line, env); + boost::fusion::for_each(seq, call_on_exec_error(*this)); + _exit(EXIT_FAILURE); + } + + boost::fusion::for_each(seq, call_on_fork_success(*this)); + + return child(pid); + } + + const char *exe; + char **cmd_line; + char **env; +}; + +}}} + +#endif diff --git a/dep/process/boost/process/posix/initializers.hpp b/dep/process/boost/process/posix/initializers.hpp new file mode 100644 index 00000000000..78295c14cb6 --- /dev/null +++ b/dep/process/boost/process/posix/initializers.hpp @@ -0,0 +1,39 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_HPP +#define BOOST_PROCESS_POSIX_INITIALIZERS_HPP + +#include <boost/process/posix/initializers/bind_fd.hpp> +#include <boost/process/posix/initializers/bind_stderr.hpp> +#include <boost/process/posix/initializers/bind_stdin.hpp> +#include <boost/process/posix/initializers/bind_stdout.hpp> +#include <boost/process/posix/initializers/close_fd.hpp> +#include <boost/process/posix/initializers/close_fds.hpp> +#include <boost/process/posix/initializers/close_fds_if.hpp> +#include <boost/process/posix/initializers/close_stderr.hpp> +#include <boost/process/posix/initializers/close_stdin.hpp> +#include <boost/process/posix/initializers/close_stdout.hpp> +#include <boost/process/posix/initializers/hide_console.hpp> +#include <boost/process/posix/initializers/inherit_env.hpp> +#include <boost/process/posix/initializers/notify_io_service.hpp> +#include <boost/process/posix/initializers/on_exec_error.hpp> +#include <boost/process/posix/initializers/on_exec_setup.hpp> +#include <boost/process/posix/initializers/on_fork_error.hpp> +#include <boost/process/posix/initializers/on_fork_setup.hpp> +#include <boost/process/posix/initializers/on_fork_success.hpp> +#include <boost/process/posix/initializers/run_exe.hpp> +#include <boost/process/posix/initializers/set_args.hpp> +#include <boost/process/posix/initializers/set_cmd_line.hpp> +#include <boost/process/posix/initializers/set_env.hpp> +#include <boost/process/posix/initializers/set_on_error.hpp> +#include <boost/process/posix/initializers/start_in_dir.hpp> +#include <boost/process/posix/initializers/throw_on_error.hpp> + +#endif diff --git a/dep/process/boost/process/posix/initializers/bind_fd.hpp b/dep/process/boost/process/posix/initializers/bind_fd.hpp new file mode 100644 index 00000000000..851b7ef3e44 --- /dev/null +++ b/dep/process/boost/process/posix/initializers/bind_fd.hpp @@ -0,0 +1,43 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_BIND_FD_HPP +#define BOOST_PROCESS_POSIX_INITIALIZERS_BIND_FD_HPP + +#include <boost/process/posix/initializers/initializer_base.hpp> +#include <unistd.h> + +namespace boost { namespace process { namespace posix { namespace initializers { + +template <class FileDescriptor> +class bind_fd_ : public initializer_base +{ +public: + bind_fd_(int id, const FileDescriptor &fd) : id_(id), fd_(fd) {} + + template <class PosixExecutor> + void on_exec_setup(PosixExecutor&) const + { + ::dup2(fd_.handle(), id_); + } + +private: + int id_; + FileDescriptor fd_; +}; + +template <class FileDescriptor> +bind_fd_<FileDescriptor> bind_fd(int id, const FileDescriptor &fd) +{ + return bind_fd_<FileDescriptor>(id, fd); +} + +}}}} + +#endif diff --git a/dep/process/boost/process/posix/initializers/bind_stderr.hpp b/dep/process/boost/process/posix/initializers/bind_stderr.hpp new file mode 100644 index 00000000000..be767bf2fe1 --- /dev/null +++ b/dep/process/boost/process/posix/initializers/bind_stderr.hpp @@ -0,0 +1,37 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_BIND_STDERR_HPP +#define BOOST_PROCESS_POSIX_INITIALIZERS_BIND_STDERR_HPP + +#include <boost/process/posix/initializers/initializer_base.hpp> +#include <boost/iostreams/device/file_descriptor.hpp> +#include <unistd.h> + +namespace boost { namespace process { namespace posix { namespace initializers { + +class bind_stderr : public initializer_base +{ +public: + explicit bind_stderr(const boost::iostreams::file_descriptor_sink &sink) + : sink_(sink) {} + + template <class PosixExecutor> + void on_exec_setup(PosixExecutor&) const + { + ::dup2(sink_.handle(), STDERR_FILENO); + } + +private: + boost::iostreams::file_descriptor_sink sink_; +}; + +}}}} + +#endif diff --git a/dep/process/boost/process/posix/initializers/bind_stdin.hpp b/dep/process/boost/process/posix/initializers/bind_stdin.hpp new file mode 100644 index 00000000000..b592d6f8b38 --- /dev/null +++ b/dep/process/boost/process/posix/initializers/bind_stdin.hpp @@ -0,0 +1,37 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_BIND_STDIN_HPP +#define BOOST_PROCESS_POSIX_INITIALIZERS_BIND_STDIN_HPP + +#include <boost/process/posix/initializers/initializer_base.hpp> +#include <boost/iostreams/device/file_descriptor.hpp> +#include <unistd.h> + +namespace boost { namespace process { namespace posix { namespace initializers { + +class bind_stdin : public initializer_base +{ +public: + explicit bind_stdin(const boost::iostreams::file_descriptor_source &source) + : source_(source) {} + + template <class PosixExecutor> + void on_exec_setup(PosixExecutor&) const + { + ::dup2(source_.handle(), STDIN_FILENO); + } + +private: + boost::iostreams::file_descriptor_source source_; +}; + +}}}} + +#endif diff --git a/dep/process/boost/process/posix/initializers/bind_stdout.hpp b/dep/process/boost/process/posix/initializers/bind_stdout.hpp new file mode 100644 index 00000000000..a2c316d9972 --- /dev/null +++ b/dep/process/boost/process/posix/initializers/bind_stdout.hpp @@ -0,0 +1,37 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_BIND_STDOUT_HPP +#define BOOST_PROCESS_POSIX_INITIALIZERS_BIND_STDOUT_HPP + +#include <boost/process/posix/initializers/initializer_base.hpp> +#include <boost/iostreams/device/file_descriptor.hpp> +#include <unistd.h> + +namespace boost { namespace process { namespace posix { namespace initializers { + +class bind_stdout : public initializer_base +{ +public: + explicit bind_stdout(const boost::iostreams::file_descriptor_sink &sink) + : sink_(sink) {} + + template <class PosixExecutor> + void on_exec_setup(PosixExecutor&) const + { + ::dup2(sink_.handle(), STDOUT_FILENO); + } + +private: + boost::iostreams::file_descriptor_sink sink_; +}; + +}}}} + +#endif diff --git a/dep/process/boost/process/posix/initializers/close_fd.hpp b/dep/process/boost/process/posix/initializers/close_fd.hpp new file mode 100644 index 00000000000..fd516e41005 --- /dev/null +++ b/dep/process/boost/process/posix/initializers/close_fd.hpp @@ -0,0 +1,35 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_CLOSE_FD_HPP +#define BOOST_PROCESS_POSIX_INITIALIZERS_CLOSE_FD_HPP + +#include <boost/process/posix/initializers/initializer_base.hpp> +#include <unistd.h> + +namespace boost { namespace process { namespace posix { namespace initializers { + +class close_fd : public initializer_base +{ +public: + explicit close_fd(int fd) : fd_(fd) {} + + template <class PosixExecutor> + void on_exec_setup(PosixExecutor&) const + { + ::close(fd_); + } + +private: + int fd_; +}; + +}}}} + +#endif diff --git a/dep/process/boost/process/posix/initializers/close_fds.hpp b/dep/process/boost/process/posix/initializers/close_fds.hpp new file mode 100644 index 00000000000..2fa338501eb --- /dev/null +++ b/dep/process/boost/process/posix/initializers/close_fds.hpp @@ -0,0 +1,43 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_CLOSE_FDS_HPP +#define BOOST_PROCESS_POSIX_INITIALIZERS_CLOSE_FDS_HPP + +#include <boost/process/posix/initializers/initializer_base.hpp> +#include <boost/range/algorithm/for_each.hpp> +#include <unistd.h> + +namespace boost { namespace process { namespace posix { namespace initializers { + +template <class Range> +class close_fds_ : public initializer_base +{ +public: + explicit close_fds_(const Range &fds) : fds_(fds) {} + + template <class PosixExecutor> + void on_exec_setup(PosixExecutor&) const + { + boost::for_each(fds_, ::close); + } + +private: + Range fds_; +}; + +template <class Range> +close_fds_<Range> close_fds(const Range &fds) +{ + return close_fds_<Range>(fds); +} + +}}}} + +#endif diff --git a/dep/process/boost/process/posix/initializers/close_fds_if.hpp b/dep/process/boost/process/posix/initializers/close_fds_if.hpp new file mode 100644 index 00000000000..fb3a651d628 --- /dev/null +++ b/dep/process/boost/process/posix/initializers/close_fds_if.hpp @@ -0,0 +1,80 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_CLOSE_FDS_IF_HPP +#define BOOST_PROCESS_POSIX_INITIALIZERS_CLOSE_FDS_IF_HPP + +#include <boost/process/posix/initializers/initializer_base.hpp> +#include <boost/iterator/counting_iterator.hpp> +#include <boost/range/counting_range.hpp> +#include <boost/range/adaptor/filtered.hpp> +#include <boost/range/algorithm/for_each.hpp> +#include <unistd.h> +#include <fcntl.h> +#include <errno.h> + +#ifndef BOOST_PROCESS_POSIX_MAX_FD +# define BOOST_PROCESS_POSIX_MAX_FD 32 +#endif + +namespace boost { namespace process { namespace posix { namespace initializers { + +template <class Predicate> +class close_fds_if_ : public initializer_base +{ +private: + static void close(int fd) + { + ::fcntl(fd, F_SETFD, FD_CLOEXEC); + } + +public: + explicit close_fds_if_(const Predicate &pred) : pred_(pred) {} + + template <class PosixExecutor> + void on_exec_setup(PosixExecutor&) const + { + boost::for_each( + boost::adaptors::filter( + boost::counting_range(0, upper_bound()), + pred_ + ), + close + ); + } + +private: + static int upper_bound() + { + int up; +#if defined(F_MAXFD) + do + { + up = ::fcntl(0, F_MAXFD); + } while (up == -1 && errno == EINTR); + if (up == -1) +#endif + up = ::sysconf(_SC_OPEN_MAX); + if (up == -1) + up = BOOST_PROCESS_POSIX_MAX_FD; + return up; + } + + Predicate pred_; +}; + +template <class Predicate> +close_fds_if_<Predicate> close_fds_if(const Predicate &pred) +{ + return close_fds_if_<Predicate>(pred); +} + +}}}} + +#endif diff --git a/dep/process/boost/process/posix/initializers/close_stderr.hpp b/dep/process/boost/process/posix/initializers/close_stderr.hpp new file mode 100644 index 00000000000..1a4c2ad00df --- /dev/null +++ b/dep/process/boost/process/posix/initializers/close_stderr.hpp @@ -0,0 +1,30 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_CLOSE_STDERR_HPP +#define BOOST_PROCESS_POSIX_INITIALIZERS_CLOSE_STDERR_HPP + +#include <boost/process/posix/initializers/initializer_base.hpp> +#include <unistd.h> + +namespace boost { namespace process { namespace posix { namespace initializers { + +class close_stderr : public initializer_base +{ +public: + template <class PosixExecutor> + void on_exec_setup(PosixExecutor&) const + { + ::close(STDERR_FILENO); + } +}; + +}}}} + +#endif diff --git a/dep/process/boost/process/posix/initializers/close_stdin.hpp b/dep/process/boost/process/posix/initializers/close_stdin.hpp new file mode 100644 index 00000000000..021c3ec54df --- /dev/null +++ b/dep/process/boost/process/posix/initializers/close_stdin.hpp @@ -0,0 +1,30 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_CLOSE_STDIN_HPP +#define BOOST_PROCESS_POSIX_INITIALIZERS_CLOSE_STDIN_HPP + +#include <boost/process/posix/initializers/initializer_base.hpp> +#include <unistd.h> + +namespace boost { namespace process { namespace posix { namespace initializers { + +class close_stdin : public initializer_base +{ +public: + template <class PosixExecutor> + void on_exec_setup(PosixExecutor&) const + { + ::close(STDIN_FILENO); + } +}; + +}}}} + +#endif diff --git a/dep/process/boost/process/posix/initializers/close_stdout.hpp b/dep/process/boost/process/posix/initializers/close_stdout.hpp new file mode 100644 index 00000000000..cfab7d1d62f --- /dev/null +++ b/dep/process/boost/process/posix/initializers/close_stdout.hpp @@ -0,0 +1,30 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_CLOSE_STDOUT_HPP +#define BOOST_PROCESS_POSIX_INITIALIZERS_CLOSE_STDOUT_HPP + +#include <boost/process/posix/initializers/initializer_base.hpp> +#include <unistd.h> + +namespace boost { namespace process { namespace posix { namespace initializers { + +class close_stdout : public initializer_base +{ +public: + template <class PosixExecutor> + void on_exec_setup(PosixExecutor&) const + { + ::close(STDOUT_FILENO); + } +}; + +}}}} + +#endif diff --git a/dep/process/boost/process/posix/initializers/hide_console.hpp b/dep/process/boost/process/posix/initializers/hide_console.hpp new file mode 100644 index 00000000000..20d527b457f --- /dev/null +++ b/dep/process/boost/process/posix/initializers/hide_console.hpp @@ -0,0 +1,24 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_HIDE_CONSOLE_HPP +#define BOOST_PROCESS_POSIX_INITIALIZERS_HIDE_CONSOLE_HPP + +#include <boost/process/posix/initializers/initializer_base.hpp> + +namespace boost { namespace process { namespace posix { namespace initializers { + +class hide_console : public initializer_base +{ +public: +}; + +}}}} + +#endif diff --git a/dep/process/boost/process/posix/initializers/inherit_env.hpp b/dep/process/boost/process/posix/initializers/inherit_env.hpp new file mode 100644 index 00000000000..bc73c8571f8 --- /dev/null +++ b/dep/process/boost/process/posix/initializers/inherit_env.hpp @@ -0,0 +1,36 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_INHERIT_ENV_HPP +#define BOOST_PROCESS_POSIX_INITIALIZERS_INHERIT_ENV_HPP + +#include <boost/process/posix/initializers/initializer_base.hpp> +// From <https://svn.boost.org/trac/boost/changeset/67768> +#if defined(__APPLE__) && defined(__DYNAMIC__) +extern "C" { extern char ***_NSGetEnviron(void); } +# define environ (*_NSGetEnviron()) +#else +# include <unistd.h> +#endif + +namespace boost { namespace process { namespace posix { namespace initializers { + +class inherit_env : public initializer_base +{ +public: + template <class PosixExecutor> + void on_fork_setup(PosixExecutor &e) const + { + e.env = environ; + } +}; + +}}}} + +#endif diff --git a/dep/process/boost/process/posix/initializers/initializer_base.hpp b/dep/process/boost/process/posix/initializers/initializer_base.hpp new file mode 100644 index 00000000000..775f00e48ce --- /dev/null +++ b/dep/process/boost/process/posix/initializers/initializer_base.hpp @@ -0,0 +1,35 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_INITIALIZER_BASE_HPP +#define BOOST_PROCESS_POSIX_INITIALIZERS_INITIALIZER_BASE_HPP + +namespace boost { namespace process { namespace posix { namespace initializers { + +struct initializer_base +{ + template <class PosixExecutor> + void on_fork_setup(PosixExecutor&) const {} + + template <class PosixExecutor> + void on_fork_error(PosixExecutor&) const {} + + template <class PosixExecutor> + void on_fork_success(PosixExecutor&) const {} + + template <class PosixExecutor> + void on_exec_setup(PosixExecutor&) const {} + + template <class PosixExecutor> + void on_exec_error(PosixExecutor&) const {} +}; + +}}}} + +#endif diff --git a/dep/process/boost/process/posix/initializers/notify_io_service.hpp b/dep/process/boost/process/posix/initializers/notify_io_service.hpp new file mode 100644 index 00000000000..d94f674c81a --- /dev/null +++ b/dep/process/boost/process/posix/initializers/notify_io_service.hpp @@ -0,0 +1,55 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_NOTIFY_IO_SERVICE_HPP +#define BOOST_PROCESS_POSIX_INITIALIZERS_NOTIFY_IO_SERVICE_HPP + +#include <boost/process/config.hpp> +#include <boost/process/posix/initializers/initializer_base.hpp> + +namespace boost { namespace process { namespace posix { namespace initializers { + +template <class IOService> +class notify_io_service_ : public initializer_base +{ +public: + explicit notify_io_service_(IOService &io_service) : + io_service_(io_service) {} + + template <class PosixExecutor> + void on_fork_setup(PosixExecutor&) const + { + io_service_.notify_fork(IOService::fork_prepare); + } + + template <class PosixExecutor> + void on_fork_success(PosixExecutor&) const + { + io_service_.notify_fork(IOService::fork_parent); + } + + template <class PosixExecutor> + void on_exec_setup(PosixExecutor&) const + { + io_service_.notify_fork(IOService::fork_child); + } + +private: + IOService &io_service_; +}; + +template <class IOService> +notify_io_service_<IOService> notify_io_service(IOService &io_service) +{ + return notify_io_service_<IOService>(io_service); +} + +}}}} + +#endif diff --git a/dep/process/boost/process/posix/initializers/on_exec_error.hpp b/dep/process/boost/process/posix/initializers/on_exec_error.hpp new file mode 100644 index 00000000000..63b56def4f2 --- /dev/null +++ b/dep/process/boost/process/posix/initializers/on_exec_error.hpp @@ -0,0 +1,42 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_ON_EXEC_ERROR_HPP +#define BOOST_PROCESS_POSIX_INITIALIZERS_ON_EXEC_ERROR_HPP + +#include <boost/process/config.hpp> +#include <boost/process/posix/initializers/initializer_base.hpp> + +namespace boost { namespace process { namespace posix { namespace initializers { + +template <class Handler> +class on_exec_error_ : public initializer_base +{ +public: + explicit on_exec_error_(Handler handler) : handler_(handler) {} + + template <class PosixExecutor> + void on_exec_error(PosixExecutor &e) const + { + handler_(e); + } + +private: + Handler handler_; +}; + +template <class Handler> +on_exec_error_<Handler> on_exec_error(Handler handler) +{ + return on_exec_error_<Handler>(handler); +} + +}}}} + +#endif diff --git a/dep/process/boost/process/posix/initializers/on_exec_setup.hpp b/dep/process/boost/process/posix/initializers/on_exec_setup.hpp new file mode 100644 index 00000000000..50f5f3736b1 --- /dev/null +++ b/dep/process/boost/process/posix/initializers/on_exec_setup.hpp @@ -0,0 +1,42 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_ON_EXEC_SETUP_HPP +#define BOOST_PROCESS_POSIX_INITIALIZERS_ON_EXEC_SETUP_HPP + +#include <boost/process/config.hpp> +#include <boost/process/posix/initializers/initializer_base.hpp> + +namespace boost { namespace process { namespace posix { namespace initializers { + +template <class Handler> +class on_exec_setup_ : public initializer_base +{ +public: + explicit on_exec_setup_(Handler handler) : handler_(handler) {} + + template <class PosixExecutor> + void on_exec_setup(PosixExecutor &e) const + { + handler_(e); + } + +private: + Handler handler_; +}; + +template <class Handler> +on_exec_setup_<Handler> on_exec_setup(Handler handler) +{ + return on_exec_setup_<Handler>(handler); +} + +}}}} + +#endif diff --git a/dep/process/boost/process/posix/initializers/on_fork_error.hpp b/dep/process/boost/process/posix/initializers/on_fork_error.hpp new file mode 100644 index 00000000000..42ecf1aac91 --- /dev/null +++ b/dep/process/boost/process/posix/initializers/on_fork_error.hpp @@ -0,0 +1,42 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_ON_FORK_ERROR_HPP +#define BOOST_PROCESS_POSIX_INITIALIZERS_ON_FORK_ERROR_HPP + +#include <boost/process/config.hpp> +#include <boost/process/posix/initializers/initializer_base.hpp> + +namespace boost { namespace process { namespace posix { namespace initializers { + +template <class Handler> +class on_fork_error_ : public initializer_base +{ +public: + explicit on_fork_error_(Handler handler) : handler_(handler) {} + + template <class PosixExecutor> + void on_fork_error(PosixExecutor &e) const + { + handler_(e); + } + +private: + Handler handler_; +}; + +template <class Handler> +on_fork_error_<Handler> on_fork_error(Handler handler) +{ + return on_fork_error_<Handler>(handler); +} + +}}}} + +#endif diff --git a/dep/process/boost/process/posix/initializers/on_fork_setup.hpp b/dep/process/boost/process/posix/initializers/on_fork_setup.hpp new file mode 100644 index 00000000000..c0c5b0682f2 --- /dev/null +++ b/dep/process/boost/process/posix/initializers/on_fork_setup.hpp @@ -0,0 +1,42 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_ON_FORK_SETUP_HPP +#define BOOST_PROCESS_POSIX_INITIALIZERS_ON_FORK_SETUP_HPP + +#include <boost/process/config.hpp> +#include <boost/process/posix/initializers/initializer_base.hpp> + +namespace boost { namespace process { namespace posix { namespace initializers { + +template <class Handler> +class on_fork_setup_ : public initializer_base +{ +public: + explicit on_fork_setup_(Handler handler) : handler_(handler) {} + + template <class PosixExecutor> + void on_fork_setup(PosixExecutor &e) const + { + handler_(e); + } + +private: + Handler handler_; +}; + +template <class Handler> +on_fork_setup_<Handler> on_fork_setup(Handler handler) +{ + return on_fork_setup_<Handler>(handler); +} + +}}}} + +#endif diff --git a/dep/process/boost/process/posix/initializers/on_fork_success.hpp b/dep/process/boost/process/posix/initializers/on_fork_success.hpp new file mode 100644 index 00000000000..01c9b12db06 --- /dev/null +++ b/dep/process/boost/process/posix/initializers/on_fork_success.hpp @@ -0,0 +1,42 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_ON_FORK_SUCCESS_HPP +#define BOOST_PROCESS_POSIX_INITIALIZERS_ON_FORK_SUCCESS_HPP + +#include <boost/process/config.hpp> +#include <boost/process/posix/initializers/initializer_base.hpp> + +namespace boost { namespace process { namespace posix { namespace initializers { + +template <class Handler> +class on_fork_success_ : public initializer_base +{ +public: + explicit on_fork_success_(Handler handler) : handler_(handler) {} + + template <class PosixExecutor> + void on_fork_success(PosixExecutor &e) const + { + handler_(e); + } + +private: + Handler handler_; +}; + +template <class Handler> +on_fork_success_<Handler> on_fork_success(Handler handler) +{ + return on_fork_success_<Handler>(handler); +} + +}}}} + +#endif diff --git a/dep/process/boost/process/posix/initializers/run_exe.hpp b/dep/process/boost/process/posix/initializers/run_exe.hpp new file mode 100644 index 00000000000..6cceeea8c15 --- /dev/null +++ b/dep/process/boost/process/posix/initializers/run_exe.hpp @@ -0,0 +1,59 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_RUN_EXE_HPP +#define BOOST_PROCESS_POSIX_INITIALIZERS_RUN_EXE_HPP + +#include <boost/process/posix/initializers/initializer_base.hpp> +#include <boost/filesystem.hpp> +#include <boost/shared_array.hpp> +#include <string> + +namespace boost { namespace process { namespace posix { namespace initializers { + +class run_exe_ : public initializer_base +{ +public: + explicit run_exe_(const std::string &s) : s_(s), cmd_line_(new char*[2]) + { + cmd_line_[0] = const_cast<char*>(s_.c_str()); + cmd_line_[1] = 0; + } + + template <class PosixExecutor> + void on_exec_setup(PosixExecutor &e) const + { + e.exe = s_.c_str(); + if (!e.cmd_line) + e.cmd_line = cmd_line_.get(); + } + +private: + std::string s_; + boost::shared_array<char*> cmd_line_; +}; + +inline run_exe_ run_exe(const char *s) +{ + return run_exe_(s); +} + +inline run_exe_ run_exe(const std::string &s) +{ + return run_exe_(s); +} + +inline run_exe_ run_exe(const boost::filesystem::path &p) +{ + return run_exe_(p.string()); +} + +}}}} + +#endif diff --git a/dep/process/boost/process/posix/initializers/set_args.hpp b/dep/process/boost/process/posix/initializers/set_args.hpp new file mode 100644 index 00000000000..294926dc222 --- /dev/null +++ b/dep/process/boost/process/posix/initializers/set_args.hpp @@ -0,0 +1,57 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_SET_ARGS_HPP +#define BOOST_PROCESS_POSIX_INITIALIZERS_SET_ARGS_HPP + +#include <boost/process/posix/initializers/initializer_base.hpp> +#include <boost/range/algorithm/transform.hpp> +#include <boost/shared_array.hpp> +#include <string> + +namespace boost { namespace process { namespace posix { namespace initializers { + +template <class Range> +class set_args_ : public initializer_base +{ +private: + static char *c_str(const std::string &s) + { + return const_cast<char*>(s.c_str()); + } + +public: + explicit set_args_(const Range &args) + { + args_.reset(new char*[args.size() + 1]); + boost::transform(args, args_.get(), c_str); + args_[args.size()] = 0; + } + + template <class PosixExecutor> + void on_exec_setup(PosixExecutor &e) const + { + e.cmd_line = args_.get(); + if (!e.exe && *args_[0]) + e.exe = args_[0]; + } + +private: + boost::shared_array<char*> args_; +}; + +template <class Range> +set_args_<Range> set_args(const Range &range) +{ + return set_args_<Range>(range); +} + +}}}} + +#endif diff --git a/dep/process/boost/process/posix/initializers/set_cmd_line.hpp b/dep/process/boost/process/posix/initializers/set_cmd_line.hpp new file mode 100644 index 00000000000..0f59d253594 --- /dev/null +++ b/dep/process/boost/process/posix/initializers/set_cmd_line.hpp @@ -0,0 +1,54 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_SET_CMD_LINE_HPP +#define BOOST_PROCESS_POSIX_INITIALIZERS_SET_CMD_LINE_HPP + +#include <boost/process/posix/initializers/initializer_base.hpp> +#include <boost/tokenizer.hpp> +#include <boost/shared_array.hpp> +#include <string> +#include <vector> + +namespace boost { namespace process { namespace posix { namespace initializers { + +class set_cmd_line : public initializer_base +{ +private: + static char *c_str(const std::string &s) + { + return const_cast<char*>(s.c_str()); + } + +public: + explicit set_cmd_line(const std::string &s) + { + typedef boost::tokenizer<boost::escaped_list_separator<char> > tokenizer; + boost::escaped_list_separator<char> sep('\\', ' ', '\"'); + tokenizer tok(s, sep); + args_.assign(tok.begin(), tok.end()); + cmd_line_.reset(new char*[args_.size() + 1]); + boost::transform(args_, cmd_line_.get(), c_str); + cmd_line_[args_.size()] = 0; + } + + template <class PosixExecutor> + void on_exec_setup(PosixExecutor &e) const + { + e.cmd_line = cmd_line_.get(); + } + +private: + std::vector<std::string> args_; + boost::shared_array<char*> cmd_line_; +}; + +}}}} + +#endif diff --git a/dep/process/boost/process/posix/initializers/set_env.hpp b/dep/process/boost/process/posix/initializers/set_env.hpp new file mode 100644 index 00000000000..76649184f34 --- /dev/null +++ b/dep/process/boost/process/posix/initializers/set_env.hpp @@ -0,0 +1,54 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_SET_ENV_HPP +#define BOOST_PROCESS_POSIX_INITIALIZERS_SET_ENV_HPP + +#include <boost/process/posix/initializers/initializer_base.hpp> +#include <boost/range/algorithm/transform.hpp> +#include <boost/shared_array.hpp> +#include <string> + +namespace boost { namespace process { namespace posix { namespace initializers { + +template <class Range> +class set_env_ : public initializer_base +{ +private: + static char *get_ptr(const std::string &s) + { + return const_cast<char*>(s.c_str()); + } + +public: + explicit set_env_(const Range &envs) : env_(new char*[envs.size() + 1]) + { + boost::transform(envs, env_.get(), get_ptr); + env_[envs.size()] = 0; + } + + template <class PosixExecutor> + void on_fork_setup(PosixExecutor &e) const + { + e.env = env_.get(); + } + +private: + boost::shared_array<char*> env_; +}; + +template <class Range> +set_env_<Range> set_env(const Range &envs) +{ + return set_env_<Range>(envs); +} + +}}}} + +#endif diff --git a/dep/process/boost/process/posix/initializers/set_on_error.hpp b/dep/process/boost/process/posix/initializers/set_on_error.hpp new file mode 100644 index 00000000000..c01a816e603 --- /dev/null +++ b/dep/process/boost/process/posix/initializers/set_on_error.hpp @@ -0,0 +1,95 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_SET_ON_ERROR_HPP +#define BOOST_PROCESS_POSIX_INITIALIZERS_SET_ON_ERROR_HPP + +#include <boost/process/config.hpp> +#include <boost/process/posix/initializers/initializer_base.hpp> +#include <boost/system/error_code.hpp> +#include <unistd.h> +#include <fcntl.h> +#include <errno.h> + +namespace boost { namespace process { namespace posix { namespace initializers { + +class set_on_error : public initializer_base +{ +public: + explicit set_on_error(boost::system::error_code &ec) : ec_(ec) {} + + template <class PosixExecutor> + void on_fork_setup(PosixExecutor&) const + { + if (::pipe(fds_) == -1) + BOOST_PROCESS_RETURN_LAST_SYSTEM_ERROR(ec_); + if (::fcntl(fds_[1], F_SETFD, FD_CLOEXEC) == -1) + { + BOOST_PROCESS_RETURN_LAST_SYSTEM_ERROR(ec_); + ::close(fds_[0]); + ::close(fds_[1]); + } + } + + template <class PosixExecutor> + void on_fork_error(PosixExecutor&) const + { + if (!ec_) + { + BOOST_PROCESS_RETURN_LAST_SYSTEM_ERROR(ec_); + ::close(fds_[0]); + ::close(fds_[1]); + } + } + + template <class PosixExecutor> + void on_fork_success(PosixExecutor&) const + { + if (!ec_) + { + ::close(fds_[1]); + int code; + if (::read(fds_[0], &code, sizeof(int)) > 0) + { + ec_ = boost::system::error_code(code, + boost::system::system_category()); + } + ::close(fds_[0]); + } + } + + template <class PosixExecutor> + void on_exec_setup(PosixExecutor&) const + { + if (!ec_) + { + ::close(fds_[0]); + } + } + + template <class PosixExecutor> + void on_exec_error(PosixExecutor&) const + { + if (!ec_) + { + int e = errno; + while (::write(fds_[1], &e, sizeof(int)) == -1 && errno == EINTR) + ; + ::close(fds_[1]); + } + } + +private: + boost::system::error_code &ec_; + mutable int fds_[2]; +}; + +}}}} + +#endif diff --git a/dep/process/boost/process/posix/initializers/start_in_dir.hpp b/dep/process/boost/process/posix/initializers/start_in_dir.hpp new file mode 100644 index 00000000000..187b5a31f44 --- /dev/null +++ b/dep/process/boost/process/posix/initializers/start_in_dir.hpp @@ -0,0 +1,36 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_START_IN_DIR_HPP +#define BOOST_PROCESS_POSIX_INITIALIZERS_START_IN_DIR_HPP + +#include <boost/process/posix/initializers/initializer_base.hpp> +#include <string> +#include <unistd.h> + +namespace boost { namespace process { namespace posix { namespace initializers { + +class start_in_dir : public initializer_base +{ +public: + explicit start_in_dir(const std::string &s) : s_(s) {} + + template <class PosixExecutor> + void on_exec_setup(PosixExecutor&) const + { + ::chdir(s_.c_str()); + } + +private: + std::string s_; +}; + +}}}} + +#endif diff --git a/dep/process/boost/process/posix/initializers/throw_on_error.hpp b/dep/process/boost/process/posix/initializers/throw_on_error.hpp new file mode 100644 index 00000000000..7734c19e30b --- /dev/null +++ b/dep/process/boost/process/posix/initializers/throw_on_error.hpp @@ -0,0 +1,90 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_INITIALIZERS_THROW_ON_ERROR_HPP +#define BOOST_PROCESS_POSIX_INITIALIZERS_THROW_ON_ERROR_HPP + +#include <boost/process/config.hpp> +#include <boost/process/posix/initializers/initializer_base.hpp> +#include <boost/system/error_code.hpp> +#include <boost/system/system_error.hpp> +#include <unistd.h> +#include <fcntl.h> +#include <errno.h> + +namespace boost { namespace process { namespace posix { namespace initializers { + +class throw_on_error : public initializer_base +{ +public: + template <class PosixExecutor> + void on_fork_setup(PosixExecutor&) const + { + if (::pipe(fds_) == -1) + BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("pipe(2) failed"); + if (::fcntl(fds_[1], F_SETFD, FD_CLOEXEC) == -1) + { + int e = errno; + ::close(fds_[0]); + ::close(fds_[1]); + BOOST_PROCESS_THROW(boost::system::system_error( + boost::system::error_code(e, boost::system::system_category()), + BOOST_PROCESS_SOURCE_LOCATION "fcntl(2) failed")); + } + } + + template <class PosixExecutor> + void on_fork_error(PosixExecutor&) const + { + int e = errno; + ::close(fds_[0]); + ::close(fds_[1]); + BOOST_PROCESS_THROW(boost::system::system_error( + boost::system::error_code(e, boost::system::system_category()), + BOOST_PROCESS_SOURCE_LOCATION "fork(2) failed")); + } + + template <class PosixExecutor> + void on_fork_success(PosixExecutor&) const + { + ::close(fds_[1]); + int code; + if (::read(fds_[0], &code, sizeof(int)) > 0) + { + ::close(fds_[0]); + BOOST_PROCESS_THROW(boost::system::system_error( + boost::system::error_code(code, + boost::system::system_category()), + BOOST_PROCESS_SOURCE_LOCATION "execve(2) failed")); + } + ::close(fds_[0]); + } + + template <class PosixExecutor> + void on_exec_setup(PosixExecutor&) const + { + ::close(fds_[0]); + } + + template <class PosixExecutor> + void on_exec_error(PosixExecutor&) const + { + int e = errno; + while (::write(fds_[1], &e, sizeof(int)) == -1 && errno == EINTR) + ; + ::close(fds_[1]); + } + +private: + mutable int fds_[2]; +}; + +}}}} + +#endif diff --git a/dep/process/boost/process/posix/pipe.hpp b/dep/process/boost/process/posix/pipe.hpp new file mode 100644 index 00000000000..ca5b29447ab --- /dev/null +++ b/dep/process/boost/process/posix/pipe.hpp @@ -0,0 +1,30 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_PIPE_HPP +#define BOOST_PROCESS_POSIX_PIPE_HPP + +namespace boost { namespace process { namespace posix { + +struct pipe +{ + int source; + int sink; + + pipe(int source, int sink) : source(source), sink(sink) {} +}; + +inline pipe make_pipe(int source, int sink) +{ + return pipe(source, sink); +} + +}}} + +#endif diff --git a/dep/process/boost/process/posix/search_path.hpp b/dep/process/boost/process/posix/search_path.hpp new file mode 100644 index 00000000000..6dc2bea063d --- /dev/null +++ b/dep/process/boost/process/posix/search_path.hpp @@ -0,0 +1,53 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_SEARCH_PATH_HPP +#define BOOST_PROCESS_POSIX_SEARCH_PATH_HPP + +#include <boost/process/config.hpp> +#include <boost/filesystem.hpp> +#include <boost/tokenizer.hpp> +#include <string> +#include <stdexcept> +#include <stdlib.h> +#include <unistd.h> + +namespace boost { namespace process { namespace posix { + +inline std::string search_path(const std::string &filename, + std::string path = "") +{ + if (path.empty()) + { + path = ::getenv("PATH"); + if (path.empty()) + BOOST_PROCESS_THROW(std::runtime_error( + "Environment variable PATH not found")); + } + + std::string result; + typedef boost::tokenizer<boost::char_separator<char> > tokenizer; + boost::char_separator<char> sep(":"); + tokenizer tok(path, sep); + for (tokenizer::iterator it = tok.begin(); it != tok.end(); ++it) + { + boost::filesystem::path p = *it; + p /= filename; + if (!::access(p.c_str(), X_OK)) + { + result = p.string(); + break; + } + } + return result; +} + +}}} + +#endif diff --git a/dep/process/boost/process/posix/shell_path.hpp b/dep/process/boost/process/posix/shell_path.hpp new file mode 100644 index 00000000000..3e21e757591 --- /dev/null +++ b/dep/process/boost/process/posix/shell_path.hpp @@ -0,0 +1,32 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_SHELL_PATH_HPP +#define BOOST_PROCESS_POSIX_SHELL_PATH_HPP + +#include <boost/process/config.hpp> +#include <boost/system/error_code.hpp> +#include <boost/filesystem/path.hpp> + +namespace boost { namespace process { namespace posix { + +inline boost::filesystem::path shell_path() +{ + return "/bin/sh"; +} + +inline boost::filesystem::path shell_path(boost::system::error_code &ec) +{ + ec.clear(); + return "/bin/sh"; +} + +}}} + +#endif diff --git a/dep/process/boost/process/posix/terminate.hpp b/dep/process/boost/process/posix/terminate.hpp new file mode 100644 index 00000000000..9be087df253 --- /dev/null +++ b/dep/process/boost/process/posix/terminate.hpp @@ -0,0 +1,37 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_TERMINATE_HPP +#define BOOST_PROCESS_POSIX_TERMINATE_HPP + +#include <boost/process/config.hpp> +#include <boost/system/error_code.hpp> +#include <signal.h> + +namespace boost { namespace process { namespace posix { + +template <class Process> +void terminate(const Process &p) +{ + if (::kill(p.pid, SIGKILL) == -1) + BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("kill(2) failed"); +} + +template <class Process> +void terminate(const Process &p, boost::system::error_code &ec) +{ + if (::kill(p.pid, SIGKILL) == -1) + BOOST_PROCESS_RETURN_LAST_SYSTEM_ERROR(ec); + else + ec.clear(); +} + +}}} + +#endif diff --git a/dep/process/boost/process/posix/wait_for_exit.hpp b/dep/process/boost/process/posix/wait_for_exit.hpp new file mode 100644 index 00000000000..d2b946c262a --- /dev/null +++ b/dep/process/boost/process/posix/wait_for_exit.hpp @@ -0,0 +1,52 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_POSIX_WAIT_FOR_EXIT_HPP +#define BOOST_PROCESS_POSIX_WAIT_FOR_EXIT_HPP + +#include <boost/process/config.hpp> +#include <boost/system/error_code.hpp> +#include <sys/types.h> +#include <sys/wait.h> + +namespace boost { namespace process { namespace posix { + +template <class Process> +inline int wait_for_exit(const Process &p) +{ + pid_t ret; + int status; + do + { + ret = ::waitpid(p.pid, &status, 0); + } while ((ret == -1 && errno == EINTR) || (ret != -1 && !WIFEXITED(status))); + if (ret == -1) + BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("waitpid(2) failed"); + return status; +} + +template <class Process> +inline int wait_for_exit(const Process &p, boost::system::error_code &ec) +{ + pid_t ret; + int status; + do + { + ret = ::waitpid(p.pid, &status, 0); + } while ((ret == -1 && errno == EINTR) || (ret != -1 && !WIFEXITED(status))); + if (ret == -1) + BOOST_PROCESS_RETURN_LAST_SYSTEM_ERROR(ec); + else + ec.clear(); + return status; +} + +}}} + +#endif diff --git a/dep/process/boost/process/search_path.hpp b/dep/process/boost/process/search_path.hpp new file mode 100644 index 00000000000..20bff060b62 --- /dev/null +++ b/dep/process/boost/process/search_path.hpp @@ -0,0 +1,51 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +/** + * \file boost/process/search_path.hpp + * + * Defines a function to search for an executable in path. + */ + +#ifndef BOOST_PROCESS_SEARCH_PATH_HPP +#define BOOST_PROCESS_SEARCH_PATH_HPP + +#include <boost/process/config.hpp> + +#include BOOST_PROCESS_PLATFORM_PROMOTE_PATH(search_path) +BOOST_PROCESS_PLATFORM_PROMOTE_NAMESPACE(search_path) + +#if defined(BOOST_PROCESS_DOXYGEN) +namespace boost { namespace process { + +/** + * Searches for an executable in path. + * + * filename must be a basename including the file extension. + * It must not include any directory separators (like a slash). + * On Windows the file extension may be omitted. The function + * will then try the various file extensions for executables on + * Windows to find filename. + * + * path must be a set of directories. Directories must be + * separated by colons on POSIX and by semicolons on Windows. + * If path is empty, the environment variable PATH is used. + * + * \returns the absolute path to the executable filename or an + * empty string if filename isn't found + * + * \throws std::runtime_error if path is empty and no environment + * variable PATH exists + */ +string_type search_path(const string_type &filename, string_type path = ""); + +}} +#endif + +#endif diff --git a/dep/process/boost/process/shell_path.hpp b/dep/process/boost/process/shell_path.hpp new file mode 100644 index 00000000000..92e9f0814b0 --- /dev/null +++ b/dep/process/boost/process/shell_path.hpp @@ -0,0 +1,46 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +/** + * \file boost/process/shell_path.hpp + * + * Defines a function to return the absolute path to a shell executable. + */ + +#ifndef BOOST_PROCESS_SHELL_PATH_HPP +#define BOOST_PROCESS_SHELL_PATH_HPP + +#include <boost/process/config.hpp> + +#include BOOST_PROCESS_PLATFORM_PROMOTE_PATH(shell_path) +BOOST_PROCESS_PLATFORM_PROMOTE_NAMESPACE(shell_path) + +#if defined(BOOST_PROCESS_DOXYGEN) +namespace boost { namespace process { + +/** + * Returns the absolute path to a shell executable. + * + * \returns the path to cmd.exe on Windows and /bin/sh on POSIX. + * + * \throws boost::system::system_error in case of an error + */ +boost::filesystem::path shell_path(); + +/** + * Returns the absolute path to a shell executable. + * + * \returns the path to cmd.exe on Windows and /bin/sh on POSIX. + */ +boost::filesystem::path shell_path(boost::system::error_code &ec); + +}} +#endif + +#endif diff --git a/dep/process/boost/process/terminate.hpp b/dep/process/boost/process/terminate.hpp new file mode 100644 index 00000000000..140eba7e8dd --- /dev/null +++ b/dep/process/boost/process/terminate.hpp @@ -0,0 +1,52 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +/** + * \file boost/process/terminate.hpp + * + * Defines a function to terminate a process. + */ + +#ifndef BOOST_PROCESS_TERMINATE_HPP +#define BOOST_PROCESS_TERMINATE_HPP + +#include <boost/process/config.hpp> + +#include BOOST_PROCESS_PLATFORM_PROMOTE_PATH(terminate) +BOOST_PROCESS_PLATFORM_PROMOTE_NAMESPACE(terminate) + +#if defined(BOOST_PROCESS_DOXYGEN) +namespace boost { namespace process { + +/** + * Terminates a process. + * + * \warning Call this function only as a last resort. The process + * is terminated immediately and forcefully and has no + * chance to close or clean up resources properly. + * + * \throws boost::system::system_error in case of an error + */ +template <class Process> +void terminate(const Process &p); + +/** + * Terminates a process. + * + * \warning Call this function only as a last resort. The process + * is terminated immediately and forcefully and has no + * chance to close or clean up resources properly. + */ +template <class Process> +void terminate(const Process &p, boost::system::error_code &ec); + +}} +#endif + +#endif diff --git a/dep/process/boost/process/wait_for_exit.hpp b/dep/process/boost/process/wait_for_exit.hpp new file mode 100644 index 00000000000..d9b118695d7 --- /dev/null +++ b/dep/process/boost/process/wait_for_exit.hpp @@ -0,0 +1,58 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +/** + * \file boost/process/wait_for_exit.hpp + * + * Defines a function to wait for a process to exit. + */ + +#ifndef BOOST_PROCESS_WAIT_FOR_EXIT_HPP +#define BOOST_PROCESS_WAIT_FOR_EXIT_HPP + +#include <boost/process/config.hpp> + +#include BOOST_PROCESS_PLATFORM_PROMOTE_PATH(wait_for_exit) +BOOST_PROCESS_PLATFORM_PROMOTE_NAMESPACE(wait_for_exit) + +#if defined(BOOST_PROCESS_DOXYGEN) +namespace boost { namespace process { + +/** + * Waits for a process to exit. + * + * On Window boost::process::wait_for_exit returns the exit code + * of the process. On POSIX the exit status is returned. You must + * use the macro \c WEXITSTATUS (defined in sys/wait.h) to fetch + * the exit code from the exit status. + * + * \note This is a blocking function. + * + * \throws boost::system::system_error in case of an error + */ +template <class Process> +int_type wait_for_exit(const Process &p); + +/** + * Waits for a process to exit. + * + * On Window boost::process::wait_for_exit returns the exit code + * of the process. On POSIX the exit status is returned. You must + * use the macro \c WEXITSTATUS (defined in sys/wait.h) to fetch + * the exit code from the exit status. + * + * \note This is a blocking function. + */ +template <class Process> +int_type wait_for_exit(const Process &p, boost::system::error_code &ec); + +}} +#endif + +#endif diff --git a/dep/process/boost/process/windows/child.hpp b/dep/process/boost/process/windows/child.hpp new file mode 100644 index 00000000000..083cd29da0e --- /dev/null +++ b/dep/process/boost/process/windows/child.hpp @@ -0,0 +1,55 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_CHILD_HPP +#define BOOST_PROCESS_WINDOWS_CHILD_HPP + +#include <boost/move/move.hpp> +#include <Windows.h> + +namespace boost { namespace process { namespace windows { + +class child +{ +public: + PROCESS_INFORMATION proc_info; + + explicit child(const PROCESS_INFORMATION &pi) : proc_info(pi) {} + + ~child() + { + ::CloseHandle(proc_info.hProcess); + ::CloseHandle(proc_info.hThread); + } + + child(BOOST_RV_REF(child) c) : proc_info(c.proc_info) + { + c.proc_info.hProcess = INVALID_HANDLE_VALUE; + c.proc_info.hThread = INVALID_HANDLE_VALUE; + } + + child &operator=(BOOST_RV_REF(child) c) + { + ::CloseHandle(proc_info.hProcess); + ::CloseHandle(proc_info.hThread); + proc_info = c.proc_info; + c.proc_info.hProcess = INVALID_HANDLE_VALUE; + c.proc_info.hThread = INVALID_HANDLE_VALUE; + return *this; + } + + HANDLE process_handle() const { return proc_info.hProcess; } + +private: + BOOST_MOVABLE_BUT_NOT_COPYABLE(child); +}; + +}}} + +#endif diff --git a/dep/process/boost/process/windows/create_pipe.hpp b/dep/process/boost/process/windows/create_pipe.hpp new file mode 100644 index 00000000000..fe1e49751d8 --- /dev/null +++ b/dep/process/boost/process/windows/create_pipe.hpp @@ -0,0 +1,40 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_CREATE_PIPE_HPP +#define BOOST_PROCESS_WINDOWS_CREATE_PIPE_HPP + +#include <boost/process/config.hpp> +#include <boost/process/windows/pipe.hpp> +#include <boost/system/error_code.hpp> +#include <Windows.h> + +namespace boost { namespace process { namespace windows { + +inline pipe create_pipe() +{ + HANDLE handles[2]; + if (!::CreatePipe(&handles[0], &handles[1], NULL, 0)) + BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("CreatePipe() failed"); + return make_pipe(handles[0], handles[1]); +} + +inline pipe create_pipe(boost::system::error_code &ec) +{ + HANDLE handles[2]; + if (!::CreatePipe(&handles[0], &handles[1], NULL, 0)) + BOOST_PROCESS_RETURN_LAST_SYSTEM_ERROR(ec); + else + ec.clear(); + return make_pipe(handles[0], handles[1]); +} + +}}} + +#endif diff --git a/dep/process/boost/process/windows/execute.hpp b/dep/process/boost/process/windows/execute.hpp new file mode 100644 index 00000000000..43067521ead --- /dev/null +++ b/dep/process/boost/process/windows/execute.hpp @@ -0,0 +1,82 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_EXECUTE_HPP +#define BOOST_PROCESS_WINDOWS_EXECUTE_HPP + +#include <boost/process/windows/executor.hpp> +#include <boost/process/windows/child.hpp> +#include <boost/fusion/tuple/make_tuple.hpp> +#include <boost/ref.hpp> + +namespace boost { namespace process { namespace windows { + +template <class I0> +child execute(const I0 &i0) +{ + return executor()(boost::fusion::make_tuple(boost::cref(i0))); +} + +template <class I0, class I1> +child execute(const I0 &i0, const I1 &i1) +{ + return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1))); +} + +template <class I0, class I1, class I2> +child execute(const I0 &i0, const I1 &i1, const I2 &i2) +{ + return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2))); +} + +template <class I0, class I1, class I2, class I3> +child execute(const I0 &i0, const I1 &i1, const I2 &i2, const I3 &i3) +{ + return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2), boost::cref(i3))); +} + +template <class I0, class I1, class I2, class I3, class I4> +child execute(const I0 &i0, const I1 &i1, const I2 &i2, const I3 &i3, const I4 &i4) +{ + return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2), boost::cref(i3), boost::cref(i4))); +} + +template <class I0, class I1, class I2, class I3, class I4, class I5> +child execute(const I0 &i0, const I1 &i1, const I2 &i2, const I3 &i3, const I4 &i4, const I5 &i5) +{ + return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2), boost::cref(i3), boost::cref(i4), boost::cref(i5))); +} + +template <class I0, class I1, class I2, class I3, class I4, class I5, class I6> +child execute(const I0 &i0, const I1 &i1, const I2 &i2, const I3 &i3, const I4 &i4, const I5 &i5, const I6 &i6) +{ + return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2), boost::cref(i3), boost::cref(i4), boost::cref(i5), boost::cref(i6))); +} + +template <class I0, class I1, class I2, class I3, class I4, class I5, class I6, class I7> +child execute(const I0 &i0, const I1 &i1, const I2 &i2, const I3 &i3, const I4 &i4, const I5 &i5, const I6 &i6, const I7 &i7) +{ + return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2), boost::cref(i3), boost::cref(i4), boost::cref(i5), boost::cref(i6), boost::cref(i7))); +} + +template <class I0, class I1, class I2, class I3, class I4, class I5, class I6, class I7, class I8> +child execute(const I0 &i0, const I1 &i1, const I2 &i2, const I3 &i3, const I4 &i4, const I5 &i5, const I6 &i6, const I7 &i7, const I8 &i8) +{ + return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2), boost::cref(i3), boost::cref(i4), boost::cref(i5), boost::cref(i6), boost::cref(i7), boost::cref(i8))); +} + +template <class I0, class I1, class I2, class I3, class I4, class I5, class I6, class I7, class I8, class I9> +child execute(const I0 &i0, const I1 &i1, const I2 &i2, const I3 &i3, const I4 &i4, const I5 &i5, const I6 &i6, const I7 &i7, const I8 &i8, const I9 &i9) +{ + return executor()(boost::fusion::make_tuple(boost::cref(i0), boost::cref(i1), boost::cref(i2), boost::cref(i3), boost::cref(i4), boost::cref(i5), boost::cref(i6), boost::cref(i7), boost::cref(i8), boost::cref(i9))); +} + +}}} + +#endif diff --git a/dep/process/boost/process/windows/executor.hpp b/dep/process/boost/process/windows/executor.hpp new file mode 100644 index 00000000000..1560f30793d --- /dev/null +++ b/dep/process/boost/process/windows/executor.hpp @@ -0,0 +1,130 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_EXECUTOR_HPP +#define BOOST_PROCESS_WINDOWS_EXECUTOR_HPP + +#include <boost/process/windows/child.hpp> +#include <boost/fusion/algorithm/iteration/for_each.hpp> +#include <Windows.h> + +namespace boost { namespace process { namespace windows { + +struct executor +{ + executor() : exe(0), cmd_line(0), proc_attrs(0), thread_attrs(0), + inherit_handles(FALSE), +#if (_WIN32_WINNT >= 0x0600) + creation_flags(EXTENDED_STARTUPINFO_PRESENT), +#else + creation_flags(0), +#endif + env(0), work_dir(0) +#if (_WIN32_WINNT >= 0x0600) + ,startup_info(startup_info_ex.StartupInfo) +#endif + { +#if (_WIN32_WINNT >= 0x0600) + ZeroMemory(&startup_info_ex, sizeof(STARTUPINFOEX)); + startup_info.cb = sizeof(STARTUPINFOEX); +#else + ZeroMemory(&startup_info, sizeof(STARTUPINFO)); + startup_info.cb = sizeof(STARTUPINFO); +#endif + startup_info.hStdInput = INVALID_HANDLE_VALUE; + startup_info.hStdOutput = INVALID_HANDLE_VALUE; + startup_info.hStdError = INVALID_HANDLE_VALUE; + } + + struct call_on_CreateProcess_setup + { + executor &e_; + + call_on_CreateProcess_setup(executor &e) : e_(e) {} + + template <class Arg> + void operator()(Arg &arg) const + { + arg.on_CreateProcess_setup(e_); + } + }; + + struct call_on_CreateProcess_error + { + executor &e_; + + call_on_CreateProcess_error(executor &e) : e_(e) {} + + template <class Arg> + void operator()(Arg &arg) const + { + arg.on_CreateProcess_error(e_); + } + }; + + struct call_on_CreateProcess_success + { + executor &e_; + + call_on_CreateProcess_success(executor &e) : e_(e) {} + + template <class Arg> + void operator()(Arg &arg) const + { + arg.on_CreateProcess_success(e_); + } + }; + + template <class InitializerSequence> + child operator()(const InitializerSequence &seq) + { + boost::fusion::for_each(seq, call_on_CreateProcess_setup(*this)); + + if (!::CreateProcess( + exe, + cmd_line, + proc_attrs, + thread_attrs, + inherit_handles, + creation_flags, + env, + work_dir, + &startup_info, + &proc_info)) + { + boost::fusion::for_each(seq, call_on_CreateProcess_error(*this)); + } + else + { + boost::fusion::for_each(seq, call_on_CreateProcess_success(*this)); + } + + return child(proc_info); + } + + LPCTSTR exe; + LPTSTR cmd_line; + LPSECURITY_ATTRIBUTES proc_attrs; + LPSECURITY_ATTRIBUTES thread_attrs; + BOOL inherit_handles; + DWORD creation_flags; + LPVOID env; + LPCTSTR work_dir; +#if (_WIN32_WINNT >= 0x0600) + STARTUPINFOEX startup_info_ex; + STARTUPINFO &startup_info; +#else + STARTUPINFO startup_info; +#endif + PROCESS_INFORMATION proc_info; +}; + +}}} + +#endif diff --git a/dep/process/boost/process/windows/initializers.hpp b/dep/process/boost/process/windows/initializers.hpp new file mode 100644 index 00000000000..2d7098c034c --- /dev/null +++ b/dep/process/boost/process/windows/initializers.hpp @@ -0,0 +1,33 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_HPP +#define BOOST_PROCESS_WINDOWS_INITIALIZERS_HPP + +#include <boost/process/windows/initializers/bind_stderr.hpp> +#include <boost/process/windows/initializers/bind_stdin.hpp> +#include <boost/process/windows/initializers/bind_stdout.hpp> +#include <boost/process/windows/initializers/close_stderr.hpp> +#include <boost/process/windows/initializers/close_stdin.hpp> +#include <boost/process/windows/initializers/close_stdout.hpp> +#include <boost/process/windows/initializers/hide_console.hpp> +#include <boost/process/windows/initializers/inherit_env.hpp> +#include <boost/process/windows/initializers/on_CreateProcess_error.hpp> +#include <boost/process/windows/initializers/on_CreateProcess_setup.hpp> +#include <boost/process/windows/initializers/on_CreateProcess_success.hpp> +#include <boost/process/windows/initializers/run_exe.hpp> +#include <boost/process/windows/initializers/set_args.hpp> +#include <boost/process/windows/initializers/set_cmd_line.hpp> +#include <boost/process/windows/initializers/set_env.hpp> +#include <boost/process/windows/initializers/set_on_error.hpp> +#include <boost/process/windows/initializers/show_window.hpp> +#include <boost/process/windows/initializers/start_in_dir.hpp> +#include <boost/process/windows/initializers/throw_on_error.hpp> + +#endif diff --git a/dep/process/boost/process/windows/initializers/bind_stderr.hpp b/dep/process/boost/process/windows/initializers/bind_stderr.hpp new file mode 100644 index 00000000000..de3ee30dc53 --- /dev/null +++ b/dep/process/boost/process/windows/initializers/bind_stderr.hpp @@ -0,0 +1,39 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_BIND_STDERR_HPP +#define BOOST_PROCESS_WINDOWS_INITIALIZERS_BIND_STDERR_HPP + +#include <boost/process/windows/initializers/initializer_base.hpp> +#include <boost/iostreams/device/file_descriptor.hpp> +#include <Windows.h> + +namespace boost { namespace process { namespace windows { namespace initializers { + +class bind_stderr : public initializer_base +{ +public: + explicit bind_stderr(const boost::iostreams::file_descriptor_sink &sink) : sink_(sink) {} + + template <class WindowsExecutor> + void on_CreateProcess_setup(WindowsExecutor &e) const + { + ::SetHandleInformation(sink_.handle(), HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT); + e.startup_info.hStdError = sink_.handle(); + e.startup_info.dwFlags |= STARTF_USESTDHANDLES; + e.inherit_handles = true; + } + +private: + boost::iostreams::file_descriptor_sink sink_; +}; + +}}}} + +#endif diff --git a/dep/process/boost/process/windows/initializers/bind_stdin.hpp b/dep/process/boost/process/windows/initializers/bind_stdin.hpp new file mode 100644 index 00000000000..54c942ab639 --- /dev/null +++ b/dep/process/boost/process/windows/initializers/bind_stdin.hpp @@ -0,0 +1,39 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_BIND_STDIN_HPP +#define BOOST_PROCESS_WINDOWS_INITIALIZERS_BIND_STDIN_HPP + +#include <boost/process/windows/initializers/initializer_base.hpp> +#include <boost/iostreams/device/file_descriptor.hpp> +#include <Windows.h> + +namespace boost { namespace process { namespace windows { namespace initializers { + +class bind_stdin : public initializer_base +{ +public: + explicit bind_stdin(const boost::iostreams::file_descriptor_source &source) : source_(source) {} + + template <class WindowsExecutor> + void on_CreateProcess_setup(WindowsExecutor &e) const + { + ::SetHandleInformation(source_.handle(), HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT); + e.startup_info.hStdInput = source_.handle(); + e.startup_info.dwFlags |= STARTF_USESTDHANDLES; + e.inherit_handles = true; + } + +private: + boost::iostreams::file_descriptor_source source_; +}; + +}}}} + +#endif diff --git a/dep/process/boost/process/windows/initializers/bind_stdout.hpp b/dep/process/boost/process/windows/initializers/bind_stdout.hpp new file mode 100644 index 00000000000..c72c05f1bfb --- /dev/null +++ b/dep/process/boost/process/windows/initializers/bind_stdout.hpp @@ -0,0 +1,39 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_BIND_STDOUT_HPP +#define BOOST_PROCESS_WINDOWS_INITIALIZERS_BIND_STDOUT_HPP + +#include <boost/process/windows/initializers/initializer_base.hpp> +#include <boost/iostreams/device/file_descriptor.hpp> +#include <Windows.h> + +namespace boost { namespace process { namespace windows { namespace initializers { + +class bind_stdout : public initializer_base +{ +public: + explicit bind_stdout(const boost::iostreams::file_descriptor_sink &sink) : sink_(sink) {} + + template <class WindowsExecutor> + void on_CreateProcess_setup(WindowsExecutor &e) const + { + ::SetHandleInformation(sink_.handle(), HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT); + e.startup_info.hStdOutput = sink_.handle(); + e.startup_info.dwFlags |= STARTF_USESTDHANDLES; + e.inherit_handles = true; + } + +private: + boost::iostreams::file_descriptor_sink sink_; +}; + +}}}} + +#endif diff --git a/dep/process/boost/process/windows/initializers/close_stderr.hpp b/dep/process/boost/process/windows/initializers/close_stderr.hpp new file mode 100644 index 00000000000..373c097f3ab --- /dev/null +++ b/dep/process/boost/process/windows/initializers/close_stderr.hpp @@ -0,0 +1,31 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_CLOSE_STDERR_HPP +#define BOOST_PROCESS_WINDOWS_INITIALIZERS_CLOSE_STDERR_HPP + +#include <boost/process/windows/initializers/initializer_base.hpp> +#include <Windows.h> + +namespace boost { namespace process { namespace windows { namespace initializers { + +class close_stderr : public initializer_base +{ +public: + template <class WindowsExecutor> + void on_CreateProcess_setup(WindowsExecutor &e) const + { + e.startup_info.hStdError = INVALID_HANDLE_VALUE; + e.startup_info.dwFlags |= STARTF_USESTDHANDLES; + } +}; + +}}}} + +#endif diff --git a/dep/process/boost/process/windows/initializers/close_stdin.hpp b/dep/process/boost/process/windows/initializers/close_stdin.hpp new file mode 100644 index 00000000000..036b0bb4ce9 --- /dev/null +++ b/dep/process/boost/process/windows/initializers/close_stdin.hpp @@ -0,0 +1,31 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_CLOSE_STDIN_HPP +#define BOOST_PROCESS_WINDOWS_INITIALIZERS_CLOSE_STDIN_HPP + +#include <boost/process/windows/initializers/initializer_base.hpp> +#include <Windows.h> + +namespace boost { namespace process { namespace windows { namespace initializers { + +class close_stdin : public initializer_base +{ +public: + template <class WindowsExecutor> + void on_CreateProcess_setup(WindowsExecutor &e) const + { + e.startup_info.hStdInput = INVALID_HANDLE_VALUE; + e.startup_info.dwFlags |= STARTF_USESTDHANDLES; + } +}; + +}}}} + +#endif diff --git a/dep/process/boost/process/windows/initializers/close_stdout.hpp b/dep/process/boost/process/windows/initializers/close_stdout.hpp new file mode 100644 index 00000000000..b58a6000f9c --- /dev/null +++ b/dep/process/boost/process/windows/initializers/close_stdout.hpp @@ -0,0 +1,31 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_CLOSE_STDOUT_HPP +#define BOOST_PROCESS_WINDOWS_INITIALIZERS_CLOSE_STDOUT_HPP + +#include <boost/process/windows/initializers/initializer_base.hpp> +#include <Windows.h> + +namespace boost { namespace process { namespace windows { namespace initializers { + +class close_stdout : public initializer_base +{ +public: + template <class WindowsExecutor> + void on_CreateProcess_setup(WindowsExecutor &e) const + { + e.startup_info.hStdOutput = INVALID_HANDLE_VALUE; + e.startup_info.dwFlags |= STARTF_USESTDHANDLES; + } +}; + +}}}} + +#endif diff --git a/dep/process/boost/process/windows/initializers/hide_console.hpp b/dep/process/boost/process/windows/initializers/hide_console.hpp new file mode 100644 index 00000000000..b01aa026f0e --- /dev/null +++ b/dep/process/boost/process/windows/initializers/hide_console.hpp @@ -0,0 +1,31 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_HIDE_CONSOLE_HPP +#define BOOST_PROCESS_WINDOWS_INITIALIZERS_HIDE_CONSOLE_HPP + +#include <boost/process/windows/initializers/initializer_base.hpp> +#include <Windows.h> + +namespace boost { namespace process { namespace windows { namespace initializers { + +class hide_console : public initializer_base +{ +public: + template <class WindowsExecutor> + void on_CreateProcess_setup(WindowsExecutor &e) const + { + e.startup_info.dwFlags |= STARTF_USESHOWWINDOW; + e.startup_info.wShowWindow |= SW_HIDE; + } +}; + +}}}} + +#endif diff --git a/dep/process/boost/process/windows/initializers/inherit_env.hpp b/dep/process/boost/process/windows/initializers/inherit_env.hpp new file mode 100644 index 00000000000..a2b2eda00a3 --- /dev/null +++ b/dep/process/boost/process/windows/initializers/inherit_env.hpp @@ -0,0 +1,24 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_INHERIT_ENV_HPP +#define BOOST_PROCESS_WINDOWS_INITIALIZERS_INHERIT_ENV_HPP + +#include <boost/process/windows/initializers/initializer_base.hpp> + +namespace boost { namespace process { namespace windows { namespace initializers { + +class inherit_env : public initializer_base +{ +public: +}; + +}}}} + +#endif diff --git a/dep/process/boost/process/windows/initializers/initializer_base.hpp b/dep/process/boost/process/windows/initializers/initializer_base.hpp new file mode 100644 index 00000000000..b98da7b21b9 --- /dev/null +++ b/dep/process/boost/process/windows/initializers/initializer_base.hpp @@ -0,0 +1,29 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_INITIALIZER_BASE_HPP +#define BOOST_PROCESS_WINDOWS_INITIALIZERS_INITIALIZER_BASE_HPP + +namespace boost { namespace process { namespace windows { namespace initializers { + +struct initializer_base +{ + template <class WindowsExecutor> + void on_CreateProcess_setup(WindowsExecutor&) const {} + + template <class WindowsExecutor> + void on_CreateProcess_error(WindowsExecutor&) const {} + + template <class WindowsExecutor> + void on_CreateProcess_success(WindowsExecutor&) const {} +}; + +}}}} + +#endif diff --git a/dep/process/boost/process/windows/initializers/on_CreateProcess_error.hpp b/dep/process/boost/process/windows/initializers/on_CreateProcess_error.hpp new file mode 100644 index 00000000000..71eeada0720 --- /dev/null +++ b/dep/process/boost/process/windows/initializers/on_CreateProcess_error.hpp @@ -0,0 +1,42 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_ON_CREATEPROCESS_ERROR_HPP +#define BOOST_PROCESS_WINDOWS_INITIALIZERS_ON_CREATEPROCESS_ERROR_HPP + +#include <boost/process/config.hpp> +#include <boost/process/windows/initializers/initializer_base.hpp> + +namespace boost { namespace process { namespace windows { namespace initializers { + +template <class Handler> +class on_CreateProcess_error_ : public initializer_base +{ +public: + explicit on_CreateProcess_error_(Handler handler) : handler_(handler) {} + + template <class WindowsExecutor> + void on_CreateProcess_error(WindowsExecutor &e) const + { + handler_(e); + } + +private: + Handler handler_; +}; + +template <class Handler> +on_CreateProcess_error_<Handler> on_CreateProcess_error(Handler handler) +{ + return on_CreateProcess_error_<Handler>(handler); +} + +}}}} + +#endif diff --git a/dep/process/boost/process/windows/initializers/on_CreateProcess_setup.hpp b/dep/process/boost/process/windows/initializers/on_CreateProcess_setup.hpp new file mode 100644 index 00000000000..671fc9ac5c2 --- /dev/null +++ b/dep/process/boost/process/windows/initializers/on_CreateProcess_setup.hpp @@ -0,0 +1,42 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_ON_CREATEPROCESS_SETUP_HPP +#define BOOST_PROCESS_WINDOWS_INITIALIZERS_ON_CREATEPROCESS_SETUP_HPP + +#include <boost/process/config.hpp> +#include <boost/process/windows/initializers/initializer_base.hpp> + +namespace boost { namespace process { namespace windows { namespace initializers { + +template <class Handler> +class on_CreateProcess_setup_ : public initializer_base +{ +public: + explicit on_CreateProcess_setup_(Handler handler) : handler_(handler) {} + + template <class WindowsExecutor> + void on_CreateProcess_setup(WindowsExecutor &e) const + { + handler_(e); + } + +private: + Handler handler_; +}; + +template <class Handler> +on_CreateProcess_setup_<Handler> on_CreateProcess_setup(Handler handler) +{ + return on_CreateProcess_setup_<Handler>(handler); +} + +}}}} + +#endif diff --git a/dep/process/boost/process/windows/initializers/on_CreateProcess_success.hpp b/dep/process/boost/process/windows/initializers/on_CreateProcess_success.hpp new file mode 100644 index 00000000000..67b3b2bdcf7 --- /dev/null +++ b/dep/process/boost/process/windows/initializers/on_CreateProcess_success.hpp @@ -0,0 +1,42 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_ON_CREATEPROCESS_SUCCESS_HPP +#define BOOST_PROCESS_WINDOWS_INITIALIZERS_ON_CREATEPROCESS_SUCCESS_HPP + +#include <boost/process/config.hpp> +#include <boost/process/windows/initializers/initializer_base.hpp> + +namespace boost { namespace process { namespace windows { namespace initializers { + +template <class Handler> +class on_CreateProcess_success_ : public initializer_base +{ +public: + explicit on_CreateProcess_success_(Handler handler) : handler_(handler) {} + + template <class WindowsExecutor> + void on_CreateProcess_sucess(WindowsExecutor &e) const + { + handler_(e); + } + +private: + Handler handler_; +}; + +template <class Handler> +on_CreateProcess_success_<Handler> on_CreateProcess_success(Handler handler) +{ + return on_CreateProcess_success_<Handler>(handler); +} + +}}}} + +#endif diff --git a/dep/process/boost/process/windows/initializers/run_exe.hpp b/dep/process/boost/process/windows/initializers/run_exe.hpp new file mode 100644 index 00000000000..bfa2b790b17 --- /dev/null +++ b/dep/process/boost/process/windows/initializers/run_exe.hpp @@ -0,0 +1,69 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_RUN_EXE_HPP +#define BOOST_PROCESS_WINDOWS_INITIALIZERS_RUN_EXE_HPP + +#include <boost/process/windows/initializers/initializer_base.hpp> +#include <boost/filesystem.hpp> +#include <string> + +namespace boost { namespace process { namespace windows { namespace initializers { + +template <class String> +class run_exe_ : public initializer_base +{ +public: + explicit run_exe_(const String &s) : s_(s) {} + + template <class WindowsExecutor> + void on_CreateProcess_setup(WindowsExecutor &e) const + { + e.exe = s_.c_str(); + } + +private: + String s_; +}; + +#if defined(_UNICODE) || defined(UNICODE) +inline run_exe_<std::wstring> run_exe(const wchar_t *ws) +{ + return run_exe_<std::wstring>(ws); +} + +inline run_exe_<std::wstring> run_exe(const std::wstring &ws) +{ + return run_exe_<std::wstring>(ws); +} + +inline run_exe_<std::wstring> run_exe(const boost::filesystem::path &p) +{ + return run_exe_<std::wstring>(p.wstring()); +} +#else +inline run_exe_<std::string> run_exe(const char *s) +{ + return run_exe_<std::string>(s); +} + +inline run_exe_<std::string> run_exe(const std::string &s) +{ + return run_exe_<std::string>(s); +} + +inline run_exe_<std::string> run_exe(const boost::filesystem::path &p) +{ + return run_exe_<std::string>(p.string()); +} +#endif + +}}}} + +#endif diff --git a/dep/process/boost/process/windows/initializers/set_args.hpp b/dep/process/boost/process/windows/initializers/set_args.hpp new file mode 100644 index 00000000000..4b3c5b6249e --- /dev/null +++ b/dep/process/boost/process/windows/initializers/set_args.hpp @@ -0,0 +1,87 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_SET_ARGS_HPP +#define BOOST_PROCESS_WINDOWS_INITIALIZERS_SET_ARGS_HPP + +#include <boost/process/windows/initializers/initializer_base.hpp> +#include <boost/range/begin.hpp> +#include <boost/range/end.hpp> +#include <boost/range/algorithm/copy.hpp> +#include <boost/algorithm/string/predicate.hpp> +#include <boost/shared_array.hpp> +#include <sstream> + +namespace boost { namespace process { namespace windows { namespace initializers { + +template <class Range> +class set_args_ : public initializer_base +{ +private: + typedef typename Range::const_iterator ConstIterator; + typedef typename Range::value_type String; + typedef typename String::value_type Char; + typedef std::basic_ostringstream<Char> OStringStream; + +public: + explicit set_args_(const Range &args) + { + ConstIterator it = boost::const_begin(args); + ConstIterator end = boost::const_end(args); + if (it != end) + { + exe_ = *it; + OStringStream os; + for (; it != end; ++it) + { + if (boost::algorithm::contains(*it, + String(1, static_cast<Char>(' ')))) + { + os << static_cast<Char>('"') << *it << + static_cast<Char>('"'); + } + else + { + os << *it; + } + os << static_cast<Char>(' '); + } + String s = os.str(); + cmd_line_.reset(new Char[s.size() + 1]); + boost::copy(s, cmd_line_.get()); + cmd_line_[s.size()] = 0; + } + else + { + cmd_line_.reset(new Char[1]()); + } + } + + template <class WindowsExecutor> + void on_CreateProcess_setup(WindowsExecutor &e) const + { + e.cmd_line = cmd_line_.get(); + if (!e.exe && !exe_.empty()) + e.exe = exe_.c_str(); + } + +private: + boost::shared_array<Char> cmd_line_; + String exe_; +}; + +template <class Range> +set_args_<Range> set_args(const Range &range) +{ + return set_args_<Range>(range); +} + +}}}} + +#endif diff --git a/dep/process/boost/process/windows/initializers/set_cmd_line.hpp b/dep/process/boost/process/windows/initializers/set_cmd_line.hpp new file mode 100644 index 00000000000..a3d9f6f7615 --- /dev/null +++ b/dep/process/boost/process/windows/initializers/set_cmd_line.hpp @@ -0,0 +1,68 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_SET_CMD_LINE_HPP +#define BOOST_PROCESS_WINDOWS_INITIALIZERS_SET_CMD_LINE_HPP + +#include <boost/process/windows/initializers/initializer_base.hpp> +#include <boost/range/algorithm/copy.hpp> +#include <boost/shared_array.hpp> +#include <memory> + +namespace boost { namespace process { namespace windows { namespace initializers { + +template <class String> +class set_cmd_line_ : public initializer_base +{ +private: + typedef typename String::value_type Char; + +public: + explicit set_cmd_line_(const String &s) + : cmd_line_(new Char[s.size() + 1]) + { + boost::copy(s, cmd_line_.get()); + cmd_line_[s.size()] = 0; + } + + template <class WindowsExecutor> + void on_CreateProcess_setup(WindowsExecutor &e) const + { + e.cmd_line = cmd_line_.get(); + } + +private: + boost::shared_array<Char> cmd_line_; +}; + +#if defined(_UNICODE) || defined(UNICODE) +inline set_cmd_line_<std::wstring> set_cmd_line(const wchar_t *ws) +{ + return set_cmd_line_<std::wstring>(ws); +} + +inline set_cmd_line_<std::wstring> set_cmd_line(const std::wstring &ws) +{ + return set_cmd_line_<std::wstring>(ws); +} +#else +inline set_cmd_line_<std::string> set_cmd_line(const char *s) +{ + return set_cmd_line_<std::string>(s); +} + +inline set_cmd_line_<std::string> set_cmd_line(const std::string &s) +{ + return set_cmd_line_<std::string>(s); +} +#endif + +}}}} + +#endif diff --git a/dep/process/boost/process/windows/initializers/set_env.hpp b/dep/process/boost/process/windows/initializers/set_env.hpp new file mode 100644 index 00000000000..6dfdfc58a48 --- /dev/null +++ b/dep/process/boost/process/windows/initializers/set_env.hpp @@ -0,0 +1,88 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_SET_ENV_HPP +#define BOOST_PROCESS_WINDOWS_INITIALIZERS_SET_ENV_HPP + +#include <Windows.h> +#include <boost/process/windows/initializers/initializer_base.hpp> +#include <boost/range/numeric.hpp> +#include <boost/range/algorithm/copy.hpp> +#include <boost/range/algorithm/for_each.hpp> +#include <boost/shared_array.hpp> +#include <iterator> +#include <cstddef> + +namespace boost { namespace process { namespace windows { namespace initializers { + +template <class Range, bool Unicode> +class set_env_ : public initializer_base +{ +private: + typedef typename Range::value_type String; + typedef typename String::value_type Char; + + static std::size_t add_size(std::size_t size, const String &s) + { + return size + s.size() + 1u; + } + + struct copy + { + Char *it_; + + copy(Char *it) : it_(it) {} + + void operator()(const String &s) + { + it_ = boost::copy(s, it_); + *it_ = 0; + ++it_; + } + }; + +public: + set_env_(const Range &envs) + : size_(boost::accumulate(envs, 0, add_size) + 1), + env_(new Char[size_]) + { + boost::for_each(envs, copy(env_.get())); + env_[size_ - 1] = 0; + } + + template <class WindowsExecutor> + void on_CreateProcess_setup(WindowsExecutor &e) const + { + e.env = env_.get(); + if (Unicode) + e.creation_flags |= CREATE_UNICODE_ENVIRONMENT; + } + +private: + std::size_t size_; + boost::shared_array<Char> env_; +}; + +#if defined(_UNICODE) || defined(UNICODE) +template <class Range> +set_env_<Range, true> set_env(const Range &envs) +{ + return set_env_<Range, true>(envs); +} +#else +template <class Range> +set_env_<Range, false> set_env(const Range &envs) +{ + return set_env_<Range, false>(envs); +} +#endif + +}}}} + +#endif diff --git a/dep/process/boost/process/windows/initializers/set_on_error.hpp b/dep/process/boost/process/windows/initializers/set_on_error.hpp new file mode 100644 index 00000000000..695ea5904d7 --- /dev/null +++ b/dep/process/boost/process/windows/initializers/set_on_error.hpp @@ -0,0 +1,36 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_SET_ON_ERROR_HPP +#define BOOST_PROCESS_WINDOWS_INITIALIZERS_SET_ON_ERROR_HPP + +#include <boost/process/config.hpp> +#include <boost/process/windows/initializers/initializer_base.hpp> +#include <boost/system/error_code.hpp> + +namespace boost { namespace process { namespace windows { namespace initializers { + +class set_on_error : public initializer_base +{ +public: + explicit set_on_error(boost::system::error_code &ec) : ec_(ec) {} + + template <class WindowsExecutor> + void on_CreateProcess_error(WindowsExecutor&) const + { + BOOST_PROCESS_RETURN_LAST_SYSTEM_ERROR(ec_); + } + +private: + boost::system::error_code &ec_; +}; + +}}}} + +#endif diff --git a/dep/process/boost/process/windows/initializers/show_window.hpp b/dep/process/boost/process/windows/initializers/show_window.hpp new file mode 100644 index 00000000000..3046179205a --- /dev/null +++ b/dep/process/boost/process/windows/initializers/show_window.hpp @@ -0,0 +1,36 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_SHOW_WINDOW_HPP +#define BOOST_PROCESS_WINDOWS_INITIALIZERS_SHOW_WINDOW_HPP + +#include <boost/process/windows/initializers/initializer_base.hpp> +#include <Windows.h> + +namespace boost { namespace process { namespace windows { namespace initializers { + +class show_window : public initializer_base +{ +public: + explicit show_window(WORD flags) : flags_(flags) {} + + template <class WindowsExecutor> + void on_CreateProcess_setup(WindowsExecutor &e) const + { + e.startup_info.dwFlags |= STARTF_USESHOWWINDOW; + e.startup_info.wShowWindow |= flags_; + } + +private: + WORD flags_; +}; + +}}}} + +#endif diff --git a/dep/process/boost/process/windows/initializers/start_in_dir.hpp b/dep/process/boost/process/windows/initializers/start_in_dir.hpp new file mode 100644 index 00000000000..8dc952abcc0 --- /dev/null +++ b/dep/process/boost/process/windows/initializers/start_in_dir.hpp @@ -0,0 +1,69 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_START_IN_DIR_HPP +#define BOOST_PROCESS_WINDOWS_INITIALIZERS_START_IN_DIR_HPP + +#include <boost/process/windows/initializers/initializer_base.hpp> +#include <boost/filesystem/path.hpp> +#include <string> + +namespace boost { namespace process { namespace windows { namespace initializers { + +template <class String> +class start_in_dir_ : public initializer_base +{ +public: + explicit start_in_dir_(const String &s) : s_(s) {} + + template <class WindowsExecutor> + void on_CreateProcess_setup(WindowsExecutor &e) const + { + e.work_dir = s_.c_str(); + } + +private: + String s_; +}; + +#if defined(_UNICODE) || defined(UNICODE) +inline start_in_dir_<std::wstring> start_in_dir(const wchar_t *ws) +{ + return start_in_dir_<std::wstring>(ws); +} + +inline start_in_dir_<std::wstring> start_in_dir(const std::wstring &ws) +{ + return start_in_dir_<std::wstring>(ws); +} + +inline start_in_dir_<std::wstring> start_in_dir(const boost::filesystem::path &p) +{ + return start_in_dir_<std::wstring>(p.wstring()); +} +#else +inline start_in_dir_<std::string> start_in_dir(const char *s) +{ + return start_in_dir_<std::string>(s); +} + +inline start_in_dir_<std::string> start_in_dir(const std::string &s) +{ + return start_in_dir_<std::string>(s); +} + +inline start_in_dir_<std::string> start_in_dir(const boost::filesystem::path &p) +{ + return start_in_dir_<std::string>(p.string()); +} +#endif + +}}}} + +#endif diff --git a/dep/process/boost/process/windows/initializers/throw_on_error.hpp b/dep/process/boost/process/windows/initializers/throw_on_error.hpp new file mode 100644 index 00000000000..044fa004177 --- /dev/null +++ b/dep/process/boost/process/windows/initializers/throw_on_error.hpp @@ -0,0 +1,30 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_INITIALIZERS_THROW_ON_ERROR_HPP +#define BOOST_PROCESS_WINDOWS_INITIALIZERS_THROW_ON_ERROR_HPP + +#include <boost/process/config.hpp> +#include <boost/process/windows/initializers/initializer_base.hpp> + +namespace boost { namespace process { namespace windows { namespace initializers { + +class throw_on_error : public initializer_base +{ +public: + template <class WindowsExecutor> + void on_CreateProcess_error(WindowsExecutor&) const + { + BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("CreateProcess() failed"); + } +}; + +}}}} + +#endif diff --git a/dep/process/boost/process/windows/pipe.hpp b/dep/process/boost/process/windows/pipe.hpp new file mode 100644 index 00000000000..fd912afcc9e --- /dev/null +++ b/dep/process/boost/process/windows/pipe.hpp @@ -0,0 +1,32 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_PIPE_HPP +#define BOOST_PROCESS_WINDOWS_PIPE_HPP + +#include <Windows.h> + +namespace boost { namespace process { namespace windows { + +struct pipe +{ + HANDLE source; + HANDLE sink; + + pipe(HANDLE source, HANDLE sink) : source(source), sink(sink) {} +}; + +inline pipe make_pipe(HANDLE source, HANDLE sink) +{ + return pipe(source, sink); +} + +}}} + +#endif diff --git a/dep/process/boost/process/windows/search_path.hpp b/dep/process/boost/process/windows/search_path.hpp new file mode 100644 index 00000000000..62bb5f27454 --- /dev/null +++ b/dep/process/boost/process/windows/search_path.hpp @@ -0,0 +1,104 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_SEARCH_PATH_HPP +#define BOOST_PROCESS_WINDOWS_SEARCH_PATH_HPP + +#include <boost/process/config.hpp> +#include <boost/filesystem.hpp> +#include <boost/tokenizer.hpp> +#include <boost/array.hpp> +#include <boost/system/error_code.hpp> +#include <string> +#include <stdexcept> +#include <stdlib.h> +#include <Shellapi.h> + +namespace boost { namespace process { namespace windows { + +#if defined(_UNICODE) || defined(UNICODE) +inline std::wstring search_path(const std::wstring &filename, + std::wstring path = L"") +{ + if (path.empty()) + { + path = ::_wgetenv(L"PATH"); + if (path.empty()) + BOOST_PROCESS_THROW(std::runtime_error( + "Environment variable PATH not found")); + } + + typedef boost::tokenizer<boost::char_separator<wchar_t>, + std::wstring::const_iterator, std::wstring> tokenizer; + boost::char_separator<wchar_t> sep(L";"); + tokenizer tok(path, sep); + for (tokenizer::iterator it = tok.begin(); it != tok.end(); ++it) + { + boost::filesystem::path p = *it; + p /= filename; + boost::array<std::wstring, 4> extensions = + { L"", L".exe", L".com", L".bat" }; + for (boost::array<std::wstring, 4>::iterator it2 = extensions.begin(); + it2 != extensions.end(); ++it2) + { + boost::filesystem::path p2 = p; + p2 += *it2; + boost::system::error_code ec; + bool file = boost::filesystem::is_regular_file(p2, ec); + if (!ec && file && + SHGetFileInfoW(p2.c_str(), 0, 0, 0, SHGFI_EXETYPE)) + { + return p2.wstring(); + } + } + } + return L""; +} +#else +inline std::string search_path(const std::string &filename, + std::string path = "") +{ + if (path.empty()) + { + path = ::getenv("PATH"); + if (path.empty()) + BOOST_PROCESS_THROW(std::runtime_error( + "Environment variable PATH not found")); + } + + typedef boost::tokenizer<boost::char_separator<char> > tokenizer; + boost::char_separator<char> sep(";"); + tokenizer tok(path, sep); + for (tokenizer::iterator it = tok.begin(); it != tok.end(); ++it) + { + boost::filesystem::path p = *it; + p /= filename; + boost::array<std::string, 4> extensions = + { "", ".exe", ".com", ".bat" }; + for (boost::array<std::string, 4>::iterator it2 = extensions.begin(); + it2 != extensions.end(); ++it2) + { + boost::filesystem::path p2 = p; + p2 += *it2; + boost::system::error_code ec; + bool file = boost::filesystem::is_regular_file(p2, ec); + if (!ec && file && + SHGetFileInfoA(p2.string().c_str(), 0, 0, 0, SHGFI_EXETYPE)) + { + return p2.string(); + } + } + } + return ""; +} +#endif + +}}} + +#endif diff --git a/dep/process/boost/process/windows/shell_path.hpp b/dep/process/boost/process/windows/shell_path.hpp new file mode 100644 index 00000000000..ace15b96e10 --- /dev/null +++ b/dep/process/boost/process/windows/shell_path.hpp @@ -0,0 +1,50 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_SHELL_PATH_HPP +#define BOOST_PROCESS_WINDOWS_SHELL_PATH_HPP + +#include <boost/process/config.hpp> +#include <boost/system/error_code.hpp> +#include <boost/filesystem/path.hpp> +#include <Windows.h> + +namespace boost { namespace process { namespace windows { + +inline boost::filesystem::path shell_path() +{ + TCHAR sysdir[MAX_PATH]; + UINT size = ::GetSystemDirectory(sysdir, sizeof(sysdir)); + if (!size) + BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("GetSystemDirectory() failed"); + boost::filesystem::path p = sysdir; + return p / "cmd.exe"; +} + +inline boost::filesystem::path shell_path(boost::system::error_code &ec) +{ + TCHAR sysdir[MAX_PATH]; + UINT size = ::GetSystemDirectory(sysdir, sizeof(sysdir)); + boost::filesystem::path p; + if (!size) + { + BOOST_PROCESS_RETURN_LAST_SYSTEM_ERROR(ec); + } + else + { + ec.clear(); + p = sysdir; + p /= "cmd.exe"; + } + return p; +} + +}}} + +#endif diff --git a/dep/process/boost/process/windows/terminate.hpp b/dep/process/boost/process/windows/terminate.hpp new file mode 100644 index 00000000000..43afe250a6a --- /dev/null +++ b/dep/process/boost/process/windows/terminate.hpp @@ -0,0 +1,38 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_TERMINATE_HPP +#define BOOST_PROCESS_WINDOWS_TERMINATE_HPP + +#include <boost/process/config.hpp> +#include <boost/system/error_code.hpp> +#include <cstdlib> +#include <Windows.h> + +namespace boost { namespace process { namespace windows { + +template <class Process> +void terminate(const Process &p) +{ + if (!::TerminateProcess(p.process_handle(), EXIT_FAILURE)) + BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("TerminateProcess() failed"); +} + +template <class Process> +void terminate(const Process &p, boost::system::error_code &ec) +{ + if (!::TerminateProcess(p.process_handle(), EXIT_FAILURE)) + BOOST_PROCESS_RETURN_LAST_SYSTEM_ERROR(ec); + else + ec.clear(); +} + +}}} + +#endif diff --git a/dep/process/boost/process/windows/wait_for_exit.hpp b/dep/process/boost/process/windows/wait_for_exit.hpp new file mode 100644 index 00000000000..23a8b9a9f18 --- /dev/null +++ b/dep/process/boost/process/windows/wait_for_exit.hpp @@ -0,0 +1,49 @@ +// Copyright (c) 2006, 2007 Julio M. Merino Vidal +// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling +// Copyright (c) 2009 Boris Schaeling +// Copyright (c) 2010 Felipe Tanus, Boris Schaeling +// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_PROCESS_WINDOWS_WAIT_FOR_EXIT_HPP +#define BOOST_PROCESS_WINDOWS_WAIT_FOR_EXIT_HPP + +#include <boost/process/config.hpp> +#include <boost/system/error_code.hpp> +#include <Windows.h> + +namespace boost { namespace process { namespace windows { + +template <class Process> +inline DWORD wait_for_exit(const Process &p) +{ + if (::WaitForSingleObject(p.process_handle(), INFINITE) == WAIT_FAILED) + BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("WaitForSingleObject() failed"); + + DWORD exit_code; + if (!::GetExitCodeProcess(p.process_handle(), &exit_code)) + BOOST_PROCESS_THROW_LAST_SYSTEM_ERROR("GetExitCodeProcess() failed"); + + return exit_code; +} + +template <class Process> +inline DWORD wait_for_exit(const Process &p, boost::system::error_code &ec) +{ + DWORD exit_code = 1; + + if (::WaitForSingleObject(p.process_handle(), INFINITE) == WAIT_FAILED) + BOOST_PROCESS_RETURN_LAST_SYSTEM_ERROR(ec); + else if (!::GetExitCodeProcess(p.process_handle(), &exit_code)) + BOOST_PROCESS_RETURN_LAST_SYSTEM_ERROR(ec); + else + ec.clear(); + + return exit_code; +} + +}}} + +#endif diff --git a/revision.h.in.cmake b/revision.h.in.cmake index f50c8022062..eab0437c600 100644 --- a/revision.h.in.cmake +++ b/revision.h.in.cmake @@ -3,6 +3,9 @@ #define _HASH "@rev_hash@" #define _DATE "@rev_date@" #define _BRANCH "@rev_branch@" + #define _SOURCE_DIRECTORY "@CMAKE_SOURCE_DIR@" + #define _MYSQL_EXECUTABLE "@MYSQL_EXECUTABLE@" + #define _FULL_DATABASE "TDB_full_335.58_2015_03_21.sql" #define VER_COMPANYNAME_STR "TrinityCore Developers" #define VER_LEGALCOPYRIGHT_STR "(c)2008-2015 TrinityCore" #define VER_FILEVERSION 0,0,0 diff --git a/sql/base/auth_database.sql b/sql/base/auth_database.sql index 706404f0029..2ad3b17b9f9 100644 --- a/sql/base/auth_database.sql +++ b/sql/base/auth_database.sql @@ -1,8 +1,8 @@ --- MySQL dump 10.15 Distrib 10.0.15-MariaDB, for Win64 (x86) +-- MySQL dump 10.13 Distrib 5.6.9-rc, for Win64 (x86_64) -- --- Host: localhost Database: auth +-- Host: localhost Database: auth335 -- ------------------------------------------------------ --- Server version 10.0.15-MariaDB +-- Server version 5.6.9-rc /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; @@ -347,7 +347,7 @@ CREATE TABLE `rbac_default_permissions` ( LOCK TABLES `rbac_default_permissions` WRITE; /*!40000 ALTER TABLE `rbac_default_permissions` DISABLE KEYS */; -INSERT INTO `rbac_default_permissions` VALUES (0,195,-1),(1,194,-1),(2,193,-1),(3,192,-1); +INSERT INTO `rbac_default_permissions` VALUES (3,192,-1),(2,193,-1),(1,194,-1),(0,195,-1); /*!40000 ALTER TABLE `rbac_default_permissions` ENABLE KEYS */; UNLOCK TABLES; @@ -459,11 +459,62 @@ CREATE TABLE `realmlist` ( LOCK TABLES `realmlist` WRITE; /*!40000 ALTER TABLE `realmlist` DISABLE KEYS */; -INSERT INTO `realmlist` VALUES (1,'Trinity','127.0.0.1','127.0.0.1','255.255.255.0',8085,1,0,1,0,0,12340); +INSERT INTO `realmlist` VALUES (1,'Trinity','127.0.0.1','127.0.0.1','255.255.255.0',8085,0,0,1,0,0,12340); /*!40000 ALTER TABLE `realmlist` ENABLE KEYS */; UNLOCK TABLES; -- +-- Table structure for table `updates` +-- + +DROP TABLE IF EXISTS `updates`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `updates` ( + `name` varchar(200) NOT NULL COMMENT 'filename with extension of the update.', + `hash` char(40) DEFAULT '' COMMENT 'sha1 hash of the sql file.', + `state` enum('RELEASED','ARCHIVED') NOT NULL DEFAULT 'RELEASED' COMMENT 'defines if an update is released or archived.', + `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'timestamp when the query was applied.', + `speed` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'time the query takes to apply in ms.', + PRIMARY KEY (`name`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='List of all applied updates in this database.'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `updates` +-- + +LOCK TABLES `updates` WRITE; +/*!40000 ALTER TABLE `updates` DISABLE KEYS */; +INSERT INTO `updates` VALUES ('2014_11_10_00_auth.sql','0E3CB119442D09DD88E967015319BBC8DAFBBFE0','ARCHIVED','2015-03-21 21:44:12',0),('2014_11_10_01_auth.sql','327E77A1DA3546D5275AB249915DD57EDD6FDD3D','ARCHIVED','2015-03-21 21:44:12',0),('2014_12_10_00_auth.sql','821703A96D80F9080074852B5A46E2909C9562EA','ARCHIVED','2015-03-21 21:44:12',0),('2014_12_21_00_auth.sql','CE2E5D2CD82E79C25294539ADED27A1429105B43','ARCHIVED','2015-03-21 21:44:12',0),('2015_03_20_00_auth.sql','E8C5B74BB45F0F35DEC182C72BACF435C7066FB0','ARCHIVED','2015-03-21 21:44:12',0),('2015_03_20_01_auth.sql','862961815354DA2746F5F71FBC8155F57CBE75AB','ARCHIVED','2015-03-21 21:44:12',0),('2015_03_20_02_auth.sql','33E4F94086590768EF5D4855DD43D7DE7C06ADA4','ARCHIVED','2015-03-21 21:44:51',0); +/*!40000 ALTER TABLE `updates` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `updates_include` +-- + +DROP TABLE IF EXISTS `updates_include`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `updates_include` ( + `path` varchar(200) NOT NULL COMMENT 'directory to include. $ means relative to the source directory.', + `state` enum('RELEASED','ARCHIVED') NOT NULL DEFAULT 'RELEASED' COMMENT 'defines if the directory contains released or archived updates.', + PRIMARY KEY (`path`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='List of directories where we want to include sql updates.'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `updates_include` +-- + +LOCK TABLES `updates_include` WRITE; +/*!40000 ALTER TABLE `updates_include` DISABLE KEYS */; +INSERT INTO `updates_include` VALUES ('$/sql/updates/auth','RELEASED'),('$/sql/custom/auth','RELEASED'),('$/sql/old/3.3.5a/auth','ARCHIVED'); +/*!40000 ALTER TABLE `updates_include` ENABLE KEYS */; +UNLOCK TABLES; + +-- -- Table structure for table `uptime` -- @@ -498,4 +549,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2014-12-21 20:42:33 +-- Dump completed on 2015-03-21 21:48:22 diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql index 096cd0424e1..a85591767d4 100644 --- a/sql/base/characters_database.sql +++ b/sql/base/characters_database.sql @@ -1,8 +1,8 @@ --- MySQL dump 10.13 Distrib 5.5.40, for debian-linux-gnu (x86_64) +-- MySQL dump 10.13 Distrib 5.6.9-rc, for Win64 (x86_64) -- --- Host: localhost Database: characters +-- Host: localhost Database: characters335 -- ------------------------------------------------------ --- Server version 5.5.40-0ubuntu0.14.04.1 +-- Server version 5.6.9-rc /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; @@ -2489,6 +2489,57 @@ LOCK TABLES `reserved_name` WRITE; UNLOCK TABLES; -- +-- Table structure for table `updates` +-- + +DROP TABLE IF EXISTS `updates`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `updates` ( + `name` varchar(200) NOT NULL COMMENT 'filename with extension of the update.', + `hash` char(40) DEFAULT '' COMMENT 'sha1 hash of the sql file.', + `state` enum('RELEASED','ARCHIVED') NOT NULL DEFAULT 'RELEASED' COMMENT 'defines if an update is released or archived.', + `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'timestamp when the query was applied.', + `speed` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'time the query takes to apply in ms.', + PRIMARY KEY (`name`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='List of all applied updates in this database.'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `updates` +-- + +LOCK TABLES `updates` WRITE; +/*!40000 ALTER TABLE `updates` DISABLE KEYS */; +INSERT INTO `updates` VALUES ('2015_03_20_00_characters.sql','B761760804EA73BD297F296C5C1919687DF7191C','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_01_characters.sql','894F08B70449A5481FFAF394EE5571D7FC4D8A3A','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_02_characters.sql','97D7BE0CAADC79F3F11B9FD296B8C6CD40FE593B','ARCHIVED','2015-03-21 21:44:51',0); +/*!40000 ALTER TABLE `updates` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `updates_include` +-- + +DROP TABLE IF EXISTS `updates_include`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `updates_include` ( + `path` varchar(200) NOT NULL COMMENT 'directory to include. $ means relative to the source directory.', + `state` enum('RELEASED','ARCHIVED') NOT NULL DEFAULT 'RELEASED' COMMENT 'defines if the directory contains released or archived updates.', + PRIMARY KEY (`path`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='List of directories where we want to include sql updates.'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `updates_include` +-- + +LOCK TABLES `updates_include` WRITE; +/*!40000 ALTER TABLE `updates_include` DISABLE KEYS */; +INSERT INTO `updates_include` VALUES ('$/sql/updates/characters','RELEASED'),('$/sql/custom/characters','RELEASED'),('$/sql/old/3.3.5a/characters','ARCHIVED'); +/*!40000 ALTER TABLE `updates_include` ENABLE KEYS */; +UNLOCK TABLES; + +-- -- Table structure for table `warden_action` -- @@ -2545,4 +2596,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2014-10-18 18:02:06 +-- Dump completed on 2015-03-21 21:48:11 diff --git a/sql/base/dev/world_database.sql b/sql/base/dev/world_database.sql index 82d08621789..6f65e52a784 100644 --- a/sql/base/dev/world_database.sql +++ b/sql/base/dev/world_database.sql @@ -2736,7 +2736,7 @@ CREATE TABLE `quest_template` ( `RewardSpell` mediumint(8) unsigned NOT NULL DEFAULT '0', `RewardSpellCast` int(11) NOT NULL DEFAULT '0', `RewardHonor` int(11) NOT NULL DEFAULT '0', - `RewardHonorMultiplier` float NOT NULL DEFAULT '1', + `RewardHonorMultiplier` float NOT NULL DEFAULT '0', `RewardMailTemplateId` mediumint(8) unsigned NOT NULL DEFAULT '0', `RewardMailDelay` int(11) unsigned NOT NULL DEFAULT '0', `SourceItemId` mediumint(8) unsigned NOT NULL DEFAULT '0', @@ -3528,6 +3528,37 @@ CREATE TABLE `trinity_string` ( /*!40101 SET character_set_client = @saved_cs_client */; -- +-- Table structure for table `updates` +-- + +DROP TABLE IF EXISTS `updates`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `updates` ( + `name` varchar(200) NOT NULL COMMENT 'filename with extension of the update.', + `hash` char(40) DEFAULT '' COMMENT 'sha1 hash of the sql file.', + `state` enum('RELEASED','ARCHIVED') NOT NULL DEFAULT 'RELEASED' COMMENT 'defines if an update is released or archived.', + `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'timestamp when the query was applied.', + `speed` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'time the query takes to apply in ms.', + PRIMARY KEY (`name`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='List of all applied updates in this database.'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `updates_include` +-- + +DROP TABLE IF EXISTS `updates_include`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `updates_include` ( + `path` varchar(200) NOT NULL COMMENT 'directory to include. $ means relative to the source directory.', + `state` enum('RELEASED','ARCHIVED') NOT NULL DEFAULT 'RELEASED' COMMENT 'defines if the directory contains released or archived updates.', + PRIMARY KEY (`path`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='List of directories where we want to include sql updates.'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- -- Table structure for table `vehicle_accessory` -- @@ -3674,4 +3705,4 @@ CREATE TABLE `waypoints` ( /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2014-10-30 13:28:50 +-- Dump completed on 2015-03-22 20:02:11 diff --git a/sql/custom/auth/.gitignore b/sql/custom/auth/.gitignore new file mode 100644 index 00000000000..d1b811b7de5 --- /dev/null +++ b/sql/custom/auth/.gitignore @@ -0,0 +1 @@ +*.sql diff --git a/sql/custom/characters/.gitignore b/sql/custom/characters/.gitignore new file mode 100644 index 00000000000..d1b811b7de5 --- /dev/null +++ b/sql/custom/characters/.gitignore @@ -0,0 +1 @@ +*.sql diff --git a/sql/custom/world/.gitignore b/sql/custom/world/.gitignore new file mode 100644 index 00000000000..d1b811b7de5 --- /dev/null +++ b/sql/custom/world/.gitignore @@ -0,0 +1 @@ +*.sql diff --git a/sql/updates/auth/2014_11_10_00_auth.sql b/sql/old/3.3.5a/auth/57_2014_10_19/2014_11_10_00_auth.sql index 088c5cc71b5..088c5cc71b5 100644 --- a/sql/updates/auth/2014_11_10_00_auth.sql +++ b/sql/old/3.3.5a/auth/57_2014_10_19/2014_11_10_00_auth.sql diff --git a/sql/updates/auth/2014_11_10_01_auth.sql b/sql/old/3.3.5a/auth/57_2014_10_19/2014_11_10_01_auth.sql index 0f89140ecf4..0f89140ecf4 100644 --- a/sql/updates/auth/2014_11_10_01_auth.sql +++ b/sql/old/3.3.5a/auth/57_2014_10_19/2014_11_10_01_auth.sql diff --git a/sql/updates/auth/2014_12_10_00_auth.sql b/sql/old/3.3.5a/auth/57_2014_10_19/2014_12_10_00_auth.sql index 8068fd3c459..8068fd3c459 100644 --- a/sql/updates/auth/2014_12_10_00_auth.sql +++ b/sql/old/3.3.5a/auth/57_2014_10_19/2014_12_10_00_auth.sql diff --git a/sql/updates/auth/2014_12_21_00_auth.sql b/sql/old/3.3.5a/auth/57_2014_10_19/2014_12_21_00_auth.sql index ddea3d335ff..ddea3d335ff 100644 --- a/sql/updates/auth/2014_12_21_00_auth.sql +++ b/sql/old/3.3.5a/auth/57_2014_10_19/2014_12_21_00_auth.sql diff --git a/sql/old/3.3.5a/auth/57_2014_10_19/2015_03_20_00_auth.sql b/sql/old/3.3.5a/auth/57_2014_10_19/2015_03_20_00_auth.sql new file mode 100644 index 00000000000..69e4d38f0d2 --- /dev/null +++ b/sql/old/3.3.5a/auth/57_2014_10_19/2015_03_20_00_auth.sql @@ -0,0 +1,36 @@ +-- Updates base tables +DROP TABLE IF EXISTS `updates`; +CREATE TABLE `updates` ( + `name` VARCHAR(200) NOT NULL COMMENT 'filename with extension of the update.', + `hash` CHAR(40) NULL DEFAULT '' COMMENT 'sha1 hash of the sql file.', + `state` ENUM('RELEASED','ARCHIVED') NOT NULL DEFAULT 'RELEASED' COMMENT 'defines if an update is released or archived.', + `timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'timestamp when the query was applied.', + `speed` INT(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'time the query takes to apply in ms.', + PRIMARY KEY (`name`) +) +COMMENT='List of all applied updates in this database.' +COLLATE='utf8_general_ci' +ENGINE=MyISAM; + +DROP TABLE IF EXISTS `updates_include`; +CREATE TABLE `updates_include` ( + `path` VARCHAR(200) NOT NULL COMMENT 'directory to include. $ means relative to the source directory.', + `state` ENUM('RELEASED','ARCHIVED') NOT NULL DEFAULT 'RELEASED' COMMENT 'defines if the directory contains released or archived updates.', + PRIMARY KEY (`path`) +) +COMMENT='List of directories where we want to include sql updates.' +COLLATE='utf8_general_ci' +ENGINE=MyISAM; + +-- Auth database update data +TRUNCATE TABLE `updates_include`; +INSERT INTO `updates_include` (`path`, `state`) VALUES +('$/sql/updates/auth', 'RELEASED'), +('$/sql/custom/auth', 'RELEASED'), +('$/sql/old/3.3.5a/auth', 'ARCHIVED'); + +INSERT IGNORE INTO `updates` (`name`, `hash`) VALUES +('2015_03_20_00_auth.sql', ''), +('2015_03_20_01_auth.sql', ''), +('2015_03_20_02_auth.sql', ''); + diff --git a/sql/old/3.3.5a/auth/57_2014_10_19/2015_03_20_01_auth.sql b/sql/old/3.3.5a/auth/57_2014_10_19/2015_03_20_01_auth.sql new file mode 100644 index 00000000000..970243fd278 --- /dev/null +++ b/sql/old/3.3.5a/auth/57_2014_10_19/2015_03_20_01_auth.sql @@ -0,0 +1,6 @@ +-- Auth database update data +TRUNCATE TABLE `updates_include`; +INSERT INTO `updates_include` (`path`, `state`) VALUES +('$/sql/updates/auth', 'RELEASED'), +('$/sql/custom/auth', 'RELEASED'), +('$/sql/old/3.3.5a/auth', 'ARCHIVED'); diff --git a/sql/old/3.3.5a/auth/57_2014_10_19/2015_03_20_02_auth.sql b/sql/old/3.3.5a/auth/57_2014_10_19/2015_03_20_02_auth.sql new file mode 100644 index 00000000000..71abadebf60 --- /dev/null +++ b/sql/old/3.3.5a/auth/57_2014_10_19/2015_03_20_02_auth.sql @@ -0,0 +1,8 @@ +INSERT IGNORE INTO `updates` (`name`, `hash`) VALUES +('2014_11_10_00_auth.sql', '0E3CB119442D09DD88E967015319BBC8DAFBBFE0'), +('2014_11_10_01_auth.sql', '327E77A1DA3546D5275AB249915DD57EDD6FDD3D'), +('2014_12_10_00_auth.sql', '821703A96D80F9080074852B5A46E2909C9562EA'), +('2014_12_21_00_auth.sql', 'CE2E5D2CD82E79C25294539ADED27A1429105B43'), +('2015_03_20_00_auth.sql', 'E8C5B74BB45F0F35DEC182C72BACF435C7066FB0'), +('2015_03_20_01_auth.sql', '862961815354DA2746F5F71FBC8155F57CBE75AB'), +('2015_03_20_02_auth.sql', ''); diff --git a/sql/old/3.3.5a/characters/57_2014_10_19/2015_03_20_00_characters.sql b/sql/old/3.3.5a/characters/57_2014_10_19/2015_03_20_00_characters.sql new file mode 100644 index 00000000000..05c120274da --- /dev/null +++ b/sql/old/3.3.5a/characters/57_2014_10_19/2015_03_20_00_characters.sql @@ -0,0 +1,23 @@ +-- Updates base tables +DROP TABLE IF EXISTS `updates`; +CREATE TABLE `updates` ( + `name` VARCHAR(200) NOT NULL COMMENT 'filename with extension of the update.', + `hash` CHAR(40) NULL DEFAULT '' COMMENT 'sha1 hash of the sql file.', + `state` ENUM('RELEASED','ARCHIVED') NOT NULL DEFAULT 'RELEASED' COMMENT 'defines if an update is released or archived.', + `timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'timestamp when the query was applied.', + `speed` INT(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'time the query takes to apply in ms.', + PRIMARY KEY (`name`) +) +COMMENT='List of all applied updates in this database.' +COLLATE='utf8_general_ci' +ENGINE=MyISAM; + +DROP TABLE IF EXISTS `updates_include`; +CREATE TABLE `updates_include` ( + `path` VARCHAR(200) NOT NULL COMMENT 'directory to include. $ means relative to the source directory.', + `state` ENUM('RELEASED','ARCHIVED') NOT NULL DEFAULT 'RELEASED' COMMENT 'defines if the directory contains released or archived updates.', + PRIMARY KEY (`path`) +) +COMMENT='List of directories where we want to include sql updates.' +COLLATE='utf8_general_ci' +ENGINE=MyISAM; diff --git a/sql/old/3.3.5a/characters/57_2014_10_19/2015_03_20_01_characters.sql b/sql/old/3.3.5a/characters/57_2014_10_19/2015_03_20_01_characters.sql new file mode 100644 index 00000000000..2655d4884a5 --- /dev/null +++ b/sql/old/3.3.5a/characters/57_2014_10_19/2015_03_20_01_characters.sql @@ -0,0 +1,6 @@ +-- Characters database update data +TRUNCATE TABLE `updates_include`; +INSERT INTO `updates_include` (`path`, `state`) VALUES +('$/sql/updates/characters', 'RELEASED'), +('$/sql/custom/characters', 'RELEASED'), +('$/sql/old/3.3.5a/characters', 'ARCHIVED'); diff --git a/sql/old/3.3.5a/characters/57_2014_10_19/2015_03_20_02_characters.sql b/sql/old/3.3.5a/characters/57_2014_10_19/2015_03_20_02_characters.sql new file mode 100644 index 00000000000..5fcc42d4614 --- /dev/null +++ b/sql/old/3.3.5a/characters/57_2014_10_19/2015_03_20_02_characters.sql @@ -0,0 +1,4 @@ +INSERT IGNORE INTO `updates` (`name`, `hash`) VALUES +('2015_03_20_00_characters.sql', 'B761760804EA73BD297F296C5C1919687DF7191C'), +('2015_03_20_01_characters.sql', '894F08B70449A5481FFAF394EE5571D7FC4D8A3A'), +('2015_03_20_02_characters.sql', ''); diff --git a/sql/updates/world/2014_10_19_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_19_00_world.sql index b5a7cd31e60..b5a7cd31e60 100644 --- a/sql/updates/world/2014_10_19_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_19_00_world.sql diff --git a/sql/updates/world/2014_10_19_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_19_01_world.sql index b5048704717..b5048704717 100644 --- a/sql/updates/world/2014_10_19_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_19_01_world.sql diff --git a/sql/updates/world/2014_10_20_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_20_00_world.sql index 89a6eb089d6..89a6eb089d6 100644 --- a/sql/updates/world/2014_10_20_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_20_00_world.sql diff --git a/sql/updates/world/2014_10_21_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_21_00_world.sql index 9a8b68bd99c..9a8b68bd99c 100644 --- a/sql/updates/world/2014_10_21_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_21_00_world.sql diff --git a/sql/updates/world/2014_10_22_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_22_00_world.sql index d82916f71b8..d82916f71b8 100644 --- a/sql/updates/world/2014_10_22_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_22_00_world.sql diff --git a/sql/updates/world/2014_10_23_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_23_00_world.sql index ae441b6bee5..ae441b6bee5 100644 --- a/sql/updates/world/2014_10_23_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_23_00_world.sql diff --git a/sql/updates/world/2014_10_23_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_23_01_world.sql index a5070a473da..a5070a473da 100644 --- a/sql/updates/world/2014_10_23_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_23_01_world.sql diff --git a/sql/updates/world/2014_10_24_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_24_00_world.sql index b4a3087b89d..b4a3087b89d 100644 --- a/sql/updates/world/2014_10_24_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_24_00_world.sql diff --git a/sql/updates/world/2014_10_24_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_24_01_world.sql index 8a3a9c8be3d..8a3a9c8be3d 100644 --- a/sql/updates/world/2014_10_24_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_24_01_world.sql diff --git a/sql/updates/world/2014_10_26_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_26_00_world.sql index 2d9c9c57d50..2d9c9c57d50 100644 --- a/sql/updates/world/2014_10_26_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_26_00_world.sql diff --git a/sql/updates/world/2014_10_27_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_27_00_world.sql index d4526804133..d4526804133 100644 --- a/sql/updates/world/2014_10_27_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_27_00_world.sql diff --git a/sql/updates/world/2014_10_27_01_world_335.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_27_01_world_335.sql index 443603fca24..443603fca24 100644 --- a/sql/updates/world/2014_10_27_01_world_335.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_27_01_world_335.sql diff --git a/sql/updates/world/2014_10_27_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_27_02_world.sql index 8bc4564b2f3..8bc4564b2f3 100644 --- a/sql/updates/world/2014_10_27_02_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_27_02_world.sql diff --git a/sql/updates/world/2014_10_28_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_28_00_world.sql index bdb90e47854..bdb90e47854 100644 --- a/sql/updates/world/2014_10_28_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_28_00_world.sql diff --git a/sql/updates/world/2014_10_29_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_29_00_world.sql index f29b6745133..f29b6745133 100644 --- a/sql/updates/world/2014_10_29_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_29_00_world.sql diff --git a/sql/updates/world/2014_10_30_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_30_00_world.sql index 30c528cf3f0..30c528cf3f0 100644 --- a/sql/updates/world/2014_10_30_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_30_00_world.sql diff --git a/sql/updates/world/2014_10_30_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_30_02_world.sql index a3de351d578..a3de351d578 100644 --- a/sql/updates/world/2014_10_30_02_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_10_30_02_world.sql diff --git a/sql/updates/world/2014_11_01_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_01_00_world.sql index 6623f1e00b1..6623f1e00b1 100644 --- a/sql/updates/world/2014_11_01_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_01_00_world.sql diff --git a/sql/updates/world/2014_11_01_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_01_01_world.sql index 4f1b4f738db..4f1b4f738db 100644 --- a/sql/updates/world/2014_11_01_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_01_01_world.sql diff --git a/sql/updates/world/2014_11_01_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_01_02_world.sql index 3bb7e3a033b..3bb7e3a033b 100644 --- a/sql/updates/world/2014_11_01_02_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_01_02_world.sql diff --git a/sql/updates/world/2014_11_01_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_01_03_world.sql index dad3773f912..dad3773f912 100644 --- a/sql/updates/world/2014_11_01_03_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_01_03_world.sql diff --git a/sql/updates/world/2014_11_02_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_02_00_world.sql index adf9c036723..adf9c036723 100644 --- a/sql/updates/world/2014_11_02_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_02_00_world.sql diff --git a/sql/updates/world/2014_11_02_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_02_01_world.sql index 9003dd15c74..9003dd15c74 100644 --- a/sql/updates/world/2014_11_02_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_02_01_world.sql diff --git a/sql/updates/world/2014_11_04_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_04_00_world.sql index 8fdd922f8f9..8fdd922f8f9 100644 --- a/sql/updates/world/2014_11_04_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_04_00_world.sql diff --git a/sql/updates/world/2014_11_05_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_05_00_world.sql index e6969ee08ab..e6969ee08ab 100644 --- a/sql/updates/world/2014_11_05_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_05_00_world.sql diff --git a/sql/updates/world/2014_11_07_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_07_00_world.sql index f10ca6690e0..f10ca6690e0 100644 --- a/sql/updates/world/2014_11_07_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_07_00_world.sql diff --git a/sql/updates/world/2014_11_07_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_07_01_world.sql index 9586e499b69..9586e499b69 100644 --- a/sql/updates/world/2014_11_07_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_07_01_world.sql diff --git a/sql/updates/world/2014_11_07_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_07_02_world.sql index 9b6f625e1e4..9b6f625e1e4 100644 --- a/sql/updates/world/2014_11_07_02_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_07_02_world.sql diff --git a/sql/updates/world/2014_11_07_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_07_03_world.sql index 8516c42d5f9..8516c42d5f9 100644 --- a/sql/updates/world/2014_11_07_03_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_07_03_world.sql diff --git a/sql/updates/world/2014_11_08_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_08_00_world.sql index 08f64d64bd3..08f64d64bd3 100644 --- a/sql/updates/world/2014_11_08_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_08_00_world.sql diff --git a/sql/updates/world/2014_11_09_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_09_00_world.sql index 3cb00316183..3cb00316183 100644 --- a/sql/updates/world/2014_11_09_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_09_00_world.sql diff --git a/sql/updates/world/2014_11_10_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_00_world.sql index e4397cd6bde..e4397cd6bde 100644 --- a/sql/updates/world/2014_11_10_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_00_world.sql diff --git a/sql/updates/world/2014_11_10_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_01_world.sql index a00c24ab57b..a00c24ab57b 100644 --- a/sql/updates/world/2014_11_10_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_01_world.sql diff --git a/sql/updates/world/2014_11_10_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_02_world.sql index dd854fea9be..dd854fea9be 100644 --- a/sql/updates/world/2014_11_10_02_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_02_world.sql diff --git a/sql/updates/world/2014_11_10_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_03_world.sql index 41044e8c7ef..41044e8c7ef 100644 --- a/sql/updates/world/2014_11_10_03_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_03_world.sql diff --git a/sql/updates/world/2014_11_10_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_04_world.sql index 1b4857e4724..1b4857e4724 100644 --- a/sql/updates/world/2014_11_10_04_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_04_world.sql diff --git a/sql/updates/world/2014_11_10_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_05_world.sql index 2ffd85afa5e..2ffd85afa5e 100644 --- a/sql/updates/world/2014_11_10_05_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_10_05_world.sql diff --git a/sql/updates/world/2014_11_11_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_11_00_world.sql index addb4092f44..addb4092f44 100644 --- a/sql/updates/world/2014_11_11_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_11_00_world.sql diff --git a/sql/updates/world/2014_11_11_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_11_01_world.sql index 346459b9556..346459b9556 100644 --- a/sql/updates/world/2014_11_11_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_11_01_world.sql diff --git a/sql/updates/world/2014_11_13_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_13_00_world.sql index baa87a86e7e..baa87a86e7e 100644 --- a/sql/updates/world/2014_11_13_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_13_00_world.sql diff --git a/sql/updates/world/2014_11_16_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_16_00_world.sql index 939c43f7056..939c43f7056 100644 --- a/sql/updates/world/2014_11_16_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_16_00_world.sql diff --git a/sql/updates/world/2014_11_17_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_17_00_world.sql index f96248d0f64..f96248d0f64 100644 --- a/sql/updates/world/2014_11_17_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_17_00_world.sql diff --git a/sql/updates/world/2014_11_19_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_19_00_world.sql index d2b188cbf69..d2b188cbf69 100644 --- a/sql/updates/world/2014_11_19_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_19_00_world.sql diff --git a/sql/updates/world/2014_11_19_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_19_01_world.sql index d034a50789f..d034a50789f 100644 --- a/sql/updates/world/2014_11_19_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_19_01_world.sql diff --git a/sql/updates/world/2014_11_19_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_19_02_world.sql index 635c31be96c..635c31be96c 100644 --- a/sql/updates/world/2014_11_19_02_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_19_02_world.sql diff --git a/sql/updates/world/2014_11_20_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_00_world.sql index 5425c1acad0..5425c1acad0 100644 --- a/sql/updates/world/2014_11_20_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_00_world.sql diff --git a/sql/updates/world/2014_11_20_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_01_world.sql index 75474e72596..75474e72596 100644 --- a/sql/updates/world/2014_11_20_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_01_world.sql diff --git a/sql/updates/world/2014_11_20_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_02_world.sql index c96d6dd9100..c96d6dd9100 100644 --- a/sql/updates/world/2014_11_20_02_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_02_world.sql diff --git a/sql/updates/world/2014_11_20_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_03_world.sql index eab63880696..eab63880696 100644 --- a/sql/updates/world/2014_11_20_03_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_03_world.sql diff --git a/sql/updates/world/2014_11_20_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_04_world.sql index aa5b1641320..aa5b1641320 100644 --- a/sql/updates/world/2014_11_20_04_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_04_world.sql diff --git a/sql/updates/world/2014_11_20_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_05_world.sql index 1a8ac671e94..1a8ac671e94 100644 --- a/sql/updates/world/2014_11_20_05_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_20_05_world.sql diff --git a/sql/updates/world/2014_11_21_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_21_00_world.sql index f8b1962bf1d..f8b1962bf1d 100644 --- a/sql/updates/world/2014_11_21_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_21_00_world.sql diff --git a/sql/updates/world/2014_11_21_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_21_01_world.sql index ad93939dd52..ad93939dd52 100644 --- a/sql/updates/world/2014_11_21_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_21_01_world.sql diff --git a/sql/updates/world/2014_11_21_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_21_02_world.sql index 52a6ddc10f2..52a6ddc10f2 100644 --- a/sql/updates/world/2014_11_21_02_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_21_02_world.sql diff --git a/sql/updates/world/2014_11_22_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_22_00_world.sql index 0fa71070aef..0fa71070aef 100644 --- a/sql/updates/world/2014_11_22_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_22_00_world.sql diff --git a/sql/updates/world/2014_11_23_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_23_00_world.sql index 3e1d466583f..3e1d466583f 100644 --- a/sql/updates/world/2014_11_23_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_23_00_world.sql diff --git a/sql/updates/world/2014_11_23_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_23_01_world.sql index 193795acf99..193795acf99 100644 --- a/sql/updates/world/2014_11_23_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_23_01_world.sql diff --git a/sql/updates/world/2014_11_23_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_23_02_world.sql index d5263274bdc..d5263274bdc 100644 --- a/sql/updates/world/2014_11_23_02_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_23_02_world.sql diff --git a/sql/updates/world/2014_11_23_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_23_03_world.sql index f8dbb95dbf7..f8dbb95dbf7 100644 --- a/sql/updates/world/2014_11_23_03_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_23_03_world.sql diff --git a/sql/updates/world/2014_11_23_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_23_04_world.sql index 6dc657b39e9..6dc657b39e9 100644 --- a/sql/updates/world/2014_11_23_04_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_23_04_world.sql diff --git a/sql/updates/world/2014_11_24_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_24_00_world.sql index 0c6d5735165..0c6d5735165 100644 --- a/sql/updates/world/2014_11_24_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_24_00_world.sql diff --git a/sql/updates/world/2014_11_24_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_24_01_world.sql index 77f8ca71f5e..77f8ca71f5e 100644 --- a/sql/updates/world/2014_11_24_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_24_01_world.sql diff --git a/sql/updates/world/2014_11_24_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_24_02_world.sql index 97e5a9abaa4..97e5a9abaa4 100644 --- a/sql/updates/world/2014_11_24_02_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_24_02_world.sql diff --git a/sql/updates/world/2014_11_24_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_24_03_world.sql index afde0f04e51..afde0f04e51 100644 --- a/sql/updates/world/2014_11_24_03_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_24_03_world.sql diff --git a/sql/updates/world/2014_11_24_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_24_04_world.sql index bbca1631efe..bbca1631efe 100644 --- a/sql/updates/world/2014_11_24_04_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_24_04_world.sql diff --git a/sql/updates/world/2014_11_25_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_25_00_world.sql index 584a96f9511..584a96f9511 100644 --- a/sql/updates/world/2014_11_25_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_25_00_world.sql diff --git a/sql/updates/world/2014_11_25_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_25_01_world.sql index 8e06833d54d..8e06833d54d 100644 --- a/sql/updates/world/2014_11_25_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_25_01_world.sql diff --git a/sql/updates/world/2014_11_26_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_26_00_world.sql index e2aae9d8249..e2aae9d8249 100644 --- a/sql/updates/world/2014_11_26_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_26_00_world.sql diff --git a/sql/updates/world/2014_11_27_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_27_00_world.sql index c114aa6e848..c114aa6e848 100644 --- a/sql/updates/world/2014_11_27_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_27_00_world.sql diff --git a/sql/updates/world/2014_11_27_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_27_01_world.sql index df6a3f69c5e..df6a3f69c5e 100644 --- a/sql/updates/world/2014_11_27_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_27_01_world.sql diff --git a/sql/updates/world/2014_11_28_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_28_00_world.sql index fbcca049d0b..fbcca049d0b 100644 --- a/sql/updates/world/2014_11_28_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_28_00_world.sql diff --git a/sql/updates/world/2014_11_28_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_28_01_world.sql index f89267d71b6..f89267d71b6 100644 --- a/sql/updates/world/2014_11_28_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_28_01_world.sql diff --git a/sql/updates/world/2014_11_29_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_29_00_world.sql index 066ee2c2610..066ee2c2610 100644 --- a/sql/updates/world/2014_11_29_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_11_29_00_world.sql diff --git a/sql/updates/world/2014_12_02_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_02_00_world.sql index 780315fc9d8..780315fc9d8 100644 --- a/sql/updates/world/2014_12_02_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_02_00_world.sql diff --git a/sql/updates/world/2014_12_03_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_03_00_world.sql index c6a38c49220..c6a38c49220 100644 --- a/sql/updates/world/2014_12_03_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_03_00_world.sql diff --git a/sql/updates/world/2014_12_04_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_04_00_world.sql index 50b5d63d4b6..50b5d63d4b6 100644 --- a/sql/updates/world/2014_12_04_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_04_00_world.sql diff --git a/sql/updates/world/2014_12_05_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_05_00_world.sql index 6bce51ddb2b..6bce51ddb2b 100644 --- a/sql/updates/world/2014_12_05_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_05_00_world.sql diff --git a/sql/updates/world/2014_12_05_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_05_01_world.sql index 913ae3552a2..913ae3552a2 100644 --- a/sql/updates/world/2014_12_05_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_05_01_world.sql diff --git a/sql/updates/world/2014_12_09_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_09_00_world.sql index 92a6caabb4c..92a6caabb4c 100644 --- a/sql/updates/world/2014_12_09_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_09_00_world.sql diff --git a/sql/updates/world/2014_12_09_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_09_01_world.sql index 80bb200d19b..80bb200d19b 100644 --- a/sql/updates/world/2014_12_09_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_09_01_world.sql diff --git a/sql/updates/world/2014_12_09_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_09_02_world.sql index c5e9d832266..c5e9d832266 100644 --- a/sql/updates/world/2014_12_09_02_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_09_02_world.sql diff --git a/sql/updates/world/2014_12_09_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_09_03_world.sql index 2d4d7454b09..2d4d7454b09 100644 --- a/sql/updates/world/2014_12_09_03_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_09_03_world.sql diff --git a/sql/updates/world/2014_12_09_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_09_04_world.sql index db6fd4dc8c4..db6fd4dc8c4 100644 --- a/sql/updates/world/2014_12_09_04_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_09_04_world.sql diff --git a/sql/updates/world/2014_12_11_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_11_00_world.sql index cf0b3f80eb0..cf0b3f80eb0 100644 --- a/sql/updates/world/2014_12_11_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_11_00_world.sql diff --git a/sql/updates/world/2014_12_11_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_11_01_world.sql index 9306d27f68b..9306d27f68b 100644 --- a/sql/updates/world/2014_12_11_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_11_01_world.sql diff --git a/sql/updates/world/2014_12_12_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_12_00_world.sql index bf1854689b3..bf1854689b3 100644 --- a/sql/updates/world/2014_12_12_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_12_00_world.sql diff --git a/sql/updates/world/2014_12_12_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_12_01_world.sql index 740e6e962aa..740e6e962aa 100644 --- a/sql/updates/world/2014_12_12_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_12_01_world.sql diff --git a/sql/updates/world/2014_12_13_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_13_00_world.sql index 3be9f73a293..3be9f73a293 100644 --- a/sql/updates/world/2014_12_13_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_13_00_world.sql diff --git a/sql/updates/world/2014_12_14_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_14_00_world.sql index 3d6bf2d473d..3d6bf2d473d 100644 --- a/sql/updates/world/2014_12_14_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_14_00_world.sql diff --git a/sql/updates/world/2014_12_14_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_14_01_world.sql index 3a66e2ce72f..3a66e2ce72f 100644 --- a/sql/updates/world/2014_12_14_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_14_01_world.sql diff --git a/sql/updates/world/2014_12_14_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_14_02_world.sql index 25f4ed66880..25f4ed66880 100644 --- a/sql/updates/world/2014_12_14_02_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_14_02_world.sql diff --git a/sql/updates/world/2014_12_15_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_15_00_world.sql index 8ed026454c6..8ed026454c6 100644 --- a/sql/updates/world/2014_12_15_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_15_00_world.sql diff --git a/sql/updates/world/2014_12_16_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_16_00_world.sql index b67691cee8d..b67691cee8d 100644 --- a/sql/updates/world/2014_12_16_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_16_00_world.sql diff --git a/sql/updates/world/2014_12_17_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_17_00_world.sql index fd1e88f9c1a..fd1e88f9c1a 100644 --- a/sql/updates/world/2014_12_17_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_17_00_world.sql diff --git a/sql/updates/world/2014_12_18_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_18_00_world.sql index 18ab9f47256..18ab9f47256 100644 --- a/sql/updates/world/2014_12_18_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_18_00_world.sql diff --git a/sql/updates/world/2014_12_21_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_21_00_world.sql index 857d7286352..857d7286352 100644 --- a/sql/updates/world/2014_12_21_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_21_00_world.sql diff --git a/sql/updates/world/2014_12_22_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_22_00_world.sql index ec1776e5c5b..ec1776e5c5b 100644 --- a/sql/updates/world/2014_12_22_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_22_00_world.sql diff --git a/sql/updates/world/2014_12_26_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_26_00_world.sql index 101ed3c08be..101ed3c08be 100644 --- a/sql/updates/world/2014_12_26_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_26_00_world.sql diff --git a/sql/updates/world/2014_12_26_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_26_01_world.sql index 90ee138a237..90ee138a237 100644 --- a/sql/updates/world/2014_12_26_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_26_01_world.sql diff --git a/sql/updates/world/2014_12_27_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_00_world.sql index d1273193738..d1273193738 100644 --- a/sql/updates/world/2014_12_27_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_00_world.sql diff --git a/sql/updates/world/2014_12_27_01_world_335.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_01_world_335.sql index 961e9a0523d..961e9a0523d 100644 --- a/sql/updates/world/2014_12_27_01_world_335.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_01_world_335.sql diff --git a/sql/updates/world/2014_12_27_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_02_world.sql index 3ce1d97df0e..3ce1d97df0e 100644 --- a/sql/updates/world/2014_12_27_02_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_02_world.sql diff --git a/sql/updates/world/2014_12_27_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_03_world.sql index ba883f29e66..ba883f29e66 100644 --- a/sql/updates/world/2014_12_27_03_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_03_world.sql diff --git a/sql/updates/world/2014_12_27_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_04_world.sql index 3ca4f69f591..3ca4f69f591 100644 --- a/sql/updates/world/2014_12_27_04_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_04_world.sql diff --git a/sql/updates/world/2014_12_27_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_05_world.sql index 01743ff30c3..01743ff30c3 100644 --- a/sql/updates/world/2014_12_27_05_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_05_world.sql diff --git a/sql/updates/world/2014_12_27_06_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_06_world.sql index bc19a755a9b..bc19a755a9b 100644 --- a/sql/updates/world/2014_12_27_06_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_06_world.sql diff --git a/sql/updates/world/2014_12_27_07_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_07_world.sql index 78d9ee848a5..78d9ee848a5 100644 --- a/sql/updates/world/2014_12_27_07_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_07_world.sql diff --git a/sql/updates/world/2014_12_27_08_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_08_world.sql index ac4a228c154..ac4a228c154 100644 --- a/sql/updates/world/2014_12_27_08_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_08_world.sql diff --git a/sql/updates/world/2014_12_27_09_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_09_world.sql index 89371fff954..89371fff954 100644 --- a/sql/updates/world/2014_12_27_09_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_09_world.sql diff --git a/sql/updates/world/2014_12_27_10_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_10_world.sql index 590be4a9adc..590be4a9adc 100644 --- a/sql/updates/world/2014_12_27_10_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_10_world.sql diff --git a/sql/updates/world/2014_12_27_11_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_11_world.sql index 8474f056f5e..8474f056f5e 100644 --- a/sql/updates/world/2014_12_27_11_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_11_world.sql diff --git a/sql/updates/world/2014_12_27_12_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_12_world.sql index acc0a8fb619..acc0a8fb619 100644 --- a/sql/updates/world/2014_12_27_12_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_27_12_world.sql diff --git a/sql/updates/world/2014_12_28_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_00_world.sql index 467115a2de2..467115a2de2 100644 --- a/sql/updates/world/2014_12_28_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_00_world.sql diff --git a/sql/updates/world/2014_12_28_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_01_world.sql index e580a29f1f0..e580a29f1f0 100644 --- a/sql/updates/world/2014_12_28_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_01_world.sql diff --git a/sql/updates/world/2014_12_28_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_02_world.sql index bc44ddd1cd1..bc44ddd1cd1 100644 --- a/sql/updates/world/2014_12_28_02_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_02_world.sql diff --git a/sql/updates/world/2014_12_28_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_03_world.sql index fe3b786b23a..fe3b786b23a 100644 --- a/sql/updates/world/2014_12_28_03_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_03_world.sql diff --git a/sql/updates/world/2014_12_28_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_04_world.sql index 8a1b29a8169..8a1b29a8169 100644 --- a/sql/updates/world/2014_12_28_04_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_04_world.sql diff --git a/sql/updates/world/2014_12_28_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_05_world.sql index f3fd0021214..f3fd0021214 100644 --- a/sql/updates/world/2014_12_28_05_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_28_05_world.sql diff --git a/sql/updates/world/2014_12_29_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_29_00_world.sql index f58c76137b1..f58c76137b1 100644 --- a/sql/updates/world/2014_12_29_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_29_00_world.sql diff --git a/sql/updates/world/2014_12_29_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_29_01_world.sql index 06af046dc68..06af046dc68 100644 --- a/sql/updates/world/2014_12_29_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_29_01_world.sql diff --git a/sql/updates/world/2014_12_29_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_29_02_world.sql index 2872d26acd1..2872d26acd1 100644 --- a/sql/updates/world/2014_12_29_02_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_29_02_world.sql diff --git a/sql/updates/world/2014_12_30_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_30_00_world.sql index c977412e5d3..c977412e5d3 100644 --- a/sql/updates/world/2014_12_30_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_30_00_world.sql diff --git a/sql/updates/world/2014_12_30_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_30_01_world.sql index 51c93e32be9..51c93e32be9 100644 --- a/sql/updates/world/2014_12_30_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_30_01_world.sql diff --git a/sql/updates/world/2014_12_31_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_31_00_world.sql index 62d9c4e8f94..62d9c4e8f94 100644 --- a/sql/updates/world/2014_12_31_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2014_12_31_00_world.sql diff --git a/sql/updates/world/2015_01_01_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_01_00_world.sql index 3d78439fed5..3d78439fed5 100644 --- a/sql/updates/world/2015_01_01_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_01_00_world.sql diff --git a/sql/updates/world/2015_01_07_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_07_00_world.sql index 3cf6056964d..3cf6056964d 100644 --- a/sql/updates/world/2015_01_07_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_07_00_world.sql diff --git a/sql/updates/world/2015_01_08_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_08_00_world.sql index 7d5a19751e3..7d5a19751e3 100644 --- a/sql/updates/world/2015_01_08_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_08_00_world.sql diff --git a/sql/updates/world/2015_01_09_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_09_00_world.sql index 861584cab4d..861584cab4d 100644 --- a/sql/updates/world/2015_01_09_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_09_00_world.sql diff --git a/sql/updates/world/2015_01_09_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_09_01_world.sql index d07bd8b4162..6c7f42580d3 100644 --- a/sql/updates/world/2015_01_09_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_09_01_world.sql @@ -1,5 +1,5 @@ --- Replace the previously spawned chests with sniffed ones
-DELETE FROM `gameobject` WHERE `id` IN (185168, 185169) AND `guid` IN (20499, 20496);
-INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `VerifiedBuild`) VALUES
-(20496, 185168, 543, 3, 1, -1429.81, 1772.916, 82.0765, 5.044002, 0, 0, 0, 1, 7200, 255, 1, 19243), -- 185168 (Area: 3562)
-(20499, 185169, 543, 3, 1, -1429.81, 1772.916, 82.0765, 5.044002, 0, 0, 0, 1, 7200, 255, 1, 19243); -- 185169 (Area: 3562)
+-- Replace the previously spawned chests with sniffed ones +DELETE FROM `gameobject` WHERE `id` IN (185168, 185169) AND `guid` IN (20499, 20496); +INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `VerifiedBuild`) VALUES +(20496, 185168, 543, 3, 1, -1429.81, 1772.916, 82.0765, 5.044002, 0, 0, 0, 1, 7200, 255, 1, 19243), -- 185168 (Area: 3562) +(20499, 185169, 543, 3, 1, -1429.81, 1772.916, 82.0765, 5.044002, 0, 0, 0, 1, 7200, 255, 1, 19243); -- 185169 (Area: 3562) diff --git a/sql/updates/world/2015_01_11_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_11_00_world.sql index 8fa014fa744..8fa014fa744 100644 --- a/sql/updates/world/2015_01_11_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_11_00_world.sql diff --git a/sql/updates/world/2015_01_11_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_11_01_world.sql index dca46b515bc..dca46b515bc 100644 --- a/sql/updates/world/2015_01_11_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_11_01_world.sql diff --git a/sql/updates/world/2015_01_12_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_12_00_world.sql index deaff903974..deaff903974 100644 --- a/sql/updates/world/2015_01_12_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_12_00_world.sql diff --git a/sql/updates/world/2015_01_12_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_12_01_world.sql index c5513f01c1d..c5513f01c1d 100644 --- a/sql/updates/world/2015_01_12_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_12_01_world.sql diff --git a/sql/updates/world/2015_01_12_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_12_02_world.sql index 154c6e2596a..154c6e2596a 100644 --- a/sql/updates/world/2015_01_12_02_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_12_02_world.sql diff --git a/sql/updates/world/2015_01_16_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_16_00_world.sql index 3488d508a2f..3488d508a2f 100644 --- a/sql/updates/world/2015_01_16_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_16_00_world.sql diff --git a/sql/updates/world/2015_01_17_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_17_00_world.sql index 0509dba10f2..0509dba10f2 100644 --- a/sql/updates/world/2015_01_17_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_17_00_world.sql diff --git a/sql/updates/world/2015_01_18_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_18_00_world.sql index 0a9e3e38aad..fe054c39cda 100644 --- a/sql/updates/world/2015_01_18_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_18_00_world.sql @@ -1,3 +1,3 @@ ---
-UPDATE `gameobject` SET `spawnMask` = 1 WHERE `guid` = 20496 AND `id` = 185168;
-UPDATE `gameobject` SET `spawnMask` = 2 WHERE `guid` = 20499 AND `id` = 185169;
+-- +UPDATE `gameobject` SET `spawnMask` = 1 WHERE `guid` = 20496 AND `id` = 185168; +UPDATE `gameobject` SET `spawnMask` = 2 WHERE `guid` = 20499 AND `id` = 185169; diff --git a/sql/updates/world/2015_01_21_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_21_00_world.sql index 2a63274ce1e..2a63274ce1e 100644 --- a/sql/updates/world/2015_01_21_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_21_00_world.sql diff --git a/sql/updates/world/2015_01_22_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_22_00_world.sql index 6392ea2abe6..6392ea2abe6 100644 --- a/sql/updates/world/2015_01_22_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_22_00_world.sql diff --git a/sql/updates/world/2015_01_25_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_25_00_world.sql index d089fff4cc5..d089fff4cc5 100644 --- a/sql/updates/world/2015_01_25_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_25_00_world.sql diff --git a/sql/updates/world/2015_01_27_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_27_00_world.sql index 5b964110846..5b964110846 100644 --- a/sql/updates/world/2015_01_27_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_27_00_world.sql diff --git a/sql/updates/world/2015_01_30_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_30_00_world.sql index 4393b38ddd2..4393b38ddd2 100644 --- a/sql/updates/world/2015_01_30_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_30_00_world.sql diff --git a/sql/updates/world/2015_01_31_00_335.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_31_00_335.sql index 8aaa026154a..8aaa026154a 100644 --- a/sql/updates/world/2015_01_31_00_335.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_01_31_00_335.sql diff --git a/sql/updates/world/2015_02_02_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_02_00_world.sql index 84d31ef7be1..84d31ef7be1 100644 --- a/sql/updates/world/2015_02_02_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_02_00_world.sql diff --git a/sql/updates/world/2015_02_05_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_05_00_world.sql index 77bc4fd8b53..77bc4fd8b53 100644 --- a/sql/updates/world/2015_02_05_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_05_00_world.sql diff --git a/sql/updates/world/2015_02_06_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_00_world.sql index 96eb6a65f28..96eb6a65f28 100644 --- a/sql/updates/world/2015_02_06_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_00_world.sql diff --git a/sql/updates/world/2015_02_06_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_01_world.sql index 3b16d7a367c..3b16d7a367c 100644 --- a/sql/updates/world/2015_02_06_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_01_world.sql diff --git a/sql/updates/world/2015_02_06_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_02_world.sql index 4c514ea95d4..4c514ea95d4 100644 --- a/sql/updates/world/2015_02_06_02_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_02_world.sql diff --git a/sql/updates/world/2015_02_06_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_03_world.sql index 83aedd75069..83aedd75069 100644 --- a/sql/updates/world/2015_02_06_03_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_03_world.sql diff --git a/sql/updates/world/2015_02_06_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_04_world.sql index 1a4484df5a3..1a4484df5a3 100644 --- a/sql/updates/world/2015_02_06_04_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_04_world.sql diff --git a/sql/updates/world/2015_02_06_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_05_world.sql index bd04efd9c66..bd04efd9c66 100644 --- a/sql/updates/world/2015_02_06_05_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_05_world.sql diff --git a/sql/updates/world/2015_02_06_06_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_06_world.sql index 0d7b75a72cc..0d7b75a72cc 100644 --- a/sql/updates/world/2015_02_06_06_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_06_world.sql diff --git a/sql/updates/world/2015_02_06_07_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_07_world.sql index ab3eb6ae454..ab3eb6ae454 100644 --- a/sql/updates/world/2015_02_06_07_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_07_world.sql diff --git a/sql/updates/world/2015_02_06_08_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_08_world.sql index e05c5e15c8e..e05c5e15c8e 100644 --- a/sql/updates/world/2015_02_06_08_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_08_world.sql diff --git a/sql/updates/world/2015_02_06_09_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_09_world.sql index 94696444dd4..94696444dd4 100644 --- a/sql/updates/world/2015_02_06_09_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_09_world.sql diff --git a/sql/updates/world/2015_02_06_10_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_10_world.sql index 428a0c7e8ca..428a0c7e8ca 100644 --- a/sql/updates/world/2015_02_06_10_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_10_world.sql diff --git a/sql/updates/world/2015_02_06_11_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_11_world.sql index 5a385218931..5a385218931 100644 --- a/sql/updates/world/2015_02_06_11_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_11_world.sql diff --git a/sql/updates/world/2015_02_06_12_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_12_world.sql index f6a95a7c010..f6a95a7c010 100644 --- a/sql/updates/world/2015_02_06_12_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_12_world.sql diff --git a/sql/updates/world/2015_02_06_13_world_335.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_13_world_335.sql index 8cd8df2147e..8cd8df2147e 100644 --- a/sql/updates/world/2015_02_06_13_world_335.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_06_13_world_335.sql diff --git a/sql/updates/world/2015_02_07_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_07_00_world.sql index c0616f833ea..c0616f833ea 100644 --- a/sql/updates/world/2015_02_07_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_07_00_world.sql diff --git a/sql/updates/world/2015_02_07_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_07_01_world.sql index 742d833352e..742d833352e 100644 --- a/sql/updates/world/2015_02_07_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_07_01_world.sql diff --git a/sql/updates/world/2015_02_09_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_00_world.sql index dcfd5ddf029..dcfd5ddf029 100644 --- a/sql/updates/world/2015_02_09_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_00_world.sql diff --git a/sql/updates/world/2015_02_09_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_01_world.sql index f844fcce5d0..f844fcce5d0 100644 --- a/sql/updates/world/2015_02_09_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_01_world.sql diff --git a/sql/updates/world/2015_02_09_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_02_world.sql index 46ff767997f..46ff767997f 100644 --- a/sql/updates/world/2015_02_09_02_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_02_world.sql diff --git a/sql/updates/world/2015_02_09_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_03_world.sql index 2bef0c6b1f5..2bef0c6b1f5 100644 --- a/sql/updates/world/2015_02_09_03_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_03_world.sql diff --git a/sql/updates/world/2015_02_09_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_04_world.sql index 7ad7c3411af..7ad7c3411af 100644 --- a/sql/updates/world/2015_02_09_04_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_04_world.sql diff --git a/sql/updates/world/2015_02_09_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_05_world.sql index 2486927a2cf..2486927a2cf 100644 --- a/sql/updates/world/2015_02_09_05_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_05_world.sql diff --git a/sql/updates/world/2015_02_09_06_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_06_world.sql index f4dd026d790..f4dd026d790 100644 --- a/sql/updates/world/2015_02_09_06_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_06_world.sql diff --git a/sql/updates/world/2015_02_09_07_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_07_world.sql index 89c125a9c2e..89c125a9c2e 100644 --- a/sql/updates/world/2015_02_09_07_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_07_world.sql diff --git a/sql/updates/world/2015_02_09_08_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_08_world.sql index 4699da2c181..4699da2c181 100644 --- a/sql/updates/world/2015_02_09_08_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_08_world.sql diff --git a/sql/updates/world/2015_02_09_09_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_09_world.sql index ef2b8bb9b1d..ef2b8bb9b1d 100644 --- a/sql/updates/world/2015_02_09_09_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_09_world.sql diff --git a/sql/updates/world/2015_02_09_10_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_10_world.sql index 67fd1112e47..67fd1112e47 100644 --- a/sql/updates/world/2015_02_09_10_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_10_world.sql diff --git a/sql/updates/world/2015_02_09_11_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_11_world.sql index d0838a1b31d..d0838a1b31d 100644 --- a/sql/updates/world/2015_02_09_11_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_11_world.sql diff --git a/sql/updates/world/2015_02_09_12_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_12_world.sql index 0306b11fa79..0306b11fa79 100644 --- a/sql/updates/world/2015_02_09_12_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_12_world.sql diff --git a/sql/updates/world/2015_02_09_13_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_13_world.sql index 96d4237bd0d..96d4237bd0d 100644 --- a/sql/updates/world/2015_02_09_13_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_13_world.sql diff --git a/sql/updates/world/2015_02_09_14_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_14_world.sql index 4a2d1bba7df..4a2d1bba7df 100644 --- a/sql/updates/world/2015_02_09_14_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_14_world.sql diff --git a/sql/updates/world/2015_02_09_15_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_15_world.sql index d2495cf0270..d2495cf0270 100644 --- a/sql/updates/world/2015_02_09_15_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_09_15_world.sql diff --git a/sql/updates/world/2015_02_10_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_00_world.sql index bfa25d8982b..bfa25d8982b 100644 --- a/sql/updates/world/2015_02_10_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_00_world.sql diff --git a/sql/updates/world/2015_02_10_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_01_world.sql index 835ac05343b..835ac05343b 100644 --- a/sql/updates/world/2015_02_10_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_01_world.sql diff --git a/sql/updates/world/2015_02_10_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_02_world.sql index 62c0f960123..62c0f960123 100644 --- a/sql/updates/world/2015_02_10_02_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_02_world.sql diff --git a/sql/updates/world/2015_02_10_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_03_world.sql index 6b2ed183c1d..6b2ed183c1d 100644 --- a/sql/updates/world/2015_02_10_03_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_03_world.sql diff --git a/sql/updates/world/2015_02_10_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_04_world.sql index 27debf9fb46..27debf9fb46 100644 --- a/sql/updates/world/2015_02_10_04_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_04_world.sql diff --git a/sql/updates/world/2015_02_10_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_05_world.sql index 20c36c24585..20c36c24585 100644 --- a/sql/updates/world/2015_02_10_05_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_05_world.sql diff --git a/sql/updates/world/2015_02_10_06_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_06_world.sql index bcd42994ee2..bcd42994ee2 100644 --- a/sql/updates/world/2015_02_10_06_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_06_world.sql diff --git a/sql/updates/world/2015_02_10_07_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_07_world.sql index 87a59e4440e..87a59e4440e 100644 --- a/sql/updates/world/2015_02_10_07_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_07_world.sql diff --git a/sql/updates/world/2015_02_10_08_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_08_world.sql index 647e89253f5..647e89253f5 100644 --- a/sql/updates/world/2015_02_10_08_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_08_world.sql diff --git a/sql/updates/world/2015_02_10_09_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_09_world.sql index 9ba05c77e41..9ba05c77e41 100644 --- a/sql/updates/world/2015_02_10_09_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_10_09_world.sql diff --git a/sql/updates/world/2015_02_11_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_00_world.sql index 271a5b8be94..271a5b8be94 100644 --- a/sql/updates/world/2015_02_11_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_00_world.sql diff --git a/sql/updates/world/2015_02_11_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_01_world.sql index 5932d48ef5e..5932d48ef5e 100644 --- a/sql/updates/world/2015_02_11_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_01_world.sql diff --git a/sql/updates/world/2015_02_11_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_02_world.sql index 8db79bc0c8f..8db79bc0c8f 100644 --- a/sql/updates/world/2015_02_11_02_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_02_world.sql diff --git a/sql/updates/world/2015_02_11_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_03_world.sql index d748355d624..d748355d624 100644 --- a/sql/updates/world/2015_02_11_03_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_03_world.sql diff --git a/sql/updates/world/2015_02_11_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_04_world.sql index f94edb80882..f94edb80882 100644 --- a/sql/updates/world/2015_02_11_04_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_04_world.sql diff --git a/sql/updates/world/2015_02_11_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_05_world.sql index 3f0d52d3054..3f0d52d3054 100644 --- a/sql/updates/world/2015_02_11_05_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_11_05_world.sql diff --git a/sql/updates/world/2015_02_12_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_00_world.sql index ee05a6eb020..ee05a6eb020 100644 --- a/sql/updates/world/2015_02_12_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_00_world.sql diff --git a/sql/updates/world/2015_02_12_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_01_world.sql index 8ce5742c7a3..8ce5742c7a3 100644 --- a/sql/updates/world/2015_02_12_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_01_world.sql diff --git a/sql/updates/world/2015_02_12_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_02_world.sql index 8b9ed71efea..8b9ed71efea 100644 --- a/sql/updates/world/2015_02_12_02_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_02_world.sql diff --git a/sql/updates/world/2015_02_12_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_03_world.sql index e8759e9037a..e8759e9037a 100644 --- a/sql/updates/world/2015_02_12_03_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_03_world.sql diff --git a/sql/updates/world/2015_02_12_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_04_world.sql index d841e98f914..d841e98f914 100644 --- a/sql/updates/world/2015_02_12_04_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_04_world.sql diff --git a/sql/updates/world/2015_02_12_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_05_world.sql index 1d7d3bb3cf7..1d7d3bb3cf7 100644 --- a/sql/updates/world/2015_02_12_05_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_05_world.sql diff --git a/sql/updates/world/2015_02_12_06_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_06_world.sql index d6eaf64d14e..d6eaf64d14e 100644 --- a/sql/updates/world/2015_02_12_06_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_06_world.sql diff --git a/sql/updates/world/2015_02_12_07_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_07_world.sql index 7fc438ed015..7fc438ed015 100644 --- a/sql/updates/world/2015_02_12_07_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_07_world.sql diff --git a/sql/updates/world/2015_02_12_08_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_08_world.sql index 70c51199c8c..70c51199c8c 100644 --- a/sql/updates/world/2015_02_12_08_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_08_world.sql diff --git a/sql/updates/world/2015_02_12_09_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_09_world.sql index 36c11d35ee8..36c11d35ee8 100644 --- a/sql/updates/world/2015_02_12_09_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_09_world.sql diff --git a/sql/updates/world/2015_02_12_10_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_10_world.sql index cb8f0e95b39..cb8f0e95b39 100644 --- a/sql/updates/world/2015_02_12_10_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_12_10_world.sql diff --git a/sql/updates/world/2015_02_13_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_00_world.sql index c36958c180d..c36958c180d 100644 --- a/sql/updates/world/2015_02_13_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_00_world.sql diff --git a/sql/updates/world/2015_02_13_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_01_world.sql index 03b117efc12..03b117efc12 100644 --- a/sql/updates/world/2015_02_13_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_01_world.sql diff --git a/sql/updates/world/2015_02_13_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_02_world.sql index 1780a238dca..1780a238dca 100644 --- a/sql/updates/world/2015_02_13_02_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_02_world.sql diff --git a/sql/updates/world/2015_02_13_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_03_world.sql index 0b0548c3f78..0b0548c3f78 100644 --- a/sql/updates/world/2015_02_13_03_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_03_world.sql diff --git a/sql/updates/world/2015_02_13_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_04_world.sql index 96db7cbf845..96db7cbf845 100644 --- a/sql/updates/world/2015_02_13_04_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_04_world.sql diff --git a/sql/updates/world/2015_02_13_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_05_world.sql index ca9b648d5eb..ca9b648d5eb 100644 --- a/sql/updates/world/2015_02_13_05_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_05_world.sql diff --git a/sql/updates/world/2015_02_13_06_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_06_world.sql index 8cc87843ad1..8cc87843ad1 100644 --- a/sql/updates/world/2015_02_13_06_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_06_world.sql diff --git a/sql/updates/world/2015_02_13_07_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_07_world.sql index a46884162f4..a46884162f4 100644 --- a/sql/updates/world/2015_02_13_07_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_07_world.sql diff --git a/sql/updates/world/2015_02_13_08_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_08_world.sql index 7043a9cdff8..7043a9cdff8 100644 --- a/sql/updates/world/2015_02_13_08_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_08_world.sql diff --git a/sql/updates/world/2015_02_13_09_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_09_world.sql index 7ed85568830..7ed85568830 100644 --- a/sql/updates/world/2015_02_13_09_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_13_09_world.sql diff --git a/sql/updates/world/2015_02_14_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_00_world.sql index 727aaf91e6f..727aaf91e6f 100644 --- a/sql/updates/world/2015_02_14_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_00_world.sql diff --git a/sql/updates/world/2015_02_14_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_01_world.sql index 460f6b1a76f..460f6b1a76f 100644 --- a/sql/updates/world/2015_02_14_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_01_world.sql diff --git a/sql/updates/world/2015_02_14_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_02_world.sql index 1978c7ff184..1978c7ff184 100644 --- a/sql/updates/world/2015_02_14_02_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_02_world.sql diff --git a/sql/updates/world/2015_02_14_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_03_world.sql index e4add1c22bf..e4add1c22bf 100644 --- a/sql/updates/world/2015_02_14_03_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_03_world.sql diff --git a/sql/updates/world/2015_02_14_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_04_world.sql index be552ca6125..be552ca6125 100644 --- a/sql/updates/world/2015_02_14_04_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_04_world.sql diff --git a/sql/updates/world/2015_02_14_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_05_world.sql index bb81873bf4b..bb81873bf4b 100644 --- a/sql/updates/world/2015_02_14_05_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_14_05_world.sql diff --git a/sql/updates/world/2015_02_15_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_00_world.sql index ba302a01484..ba302a01484 100644 --- a/sql/updates/world/2015_02_15_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_00_world.sql diff --git a/sql/updates/world/2015_02_15_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_01_world.sql index 63deab73f54..63deab73f54 100644 --- a/sql/updates/world/2015_02_15_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_01_world.sql diff --git a/sql/updates/world/2015_02_15_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_02_world.sql index 34a27d468b7..34a27d468b7 100644 --- a/sql/updates/world/2015_02_15_02_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_02_world.sql diff --git a/sql/updates/world/2015_02_15_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_03_world.sql index 64e7fe6c50a..64e7fe6c50a 100644 --- a/sql/updates/world/2015_02_15_03_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_03_world.sql diff --git a/sql/updates/world/2015_02_15_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_04_world.sql index 56212e2873c..56212e2873c 100644 --- a/sql/updates/world/2015_02_15_04_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_04_world.sql diff --git a/sql/updates/world/2015_02_15_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_05_world.sql index 033d6f1d4b6..033d6f1d4b6 100644 --- a/sql/updates/world/2015_02_15_05_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_05_world.sql diff --git a/sql/updates/world/2015_02_15_06_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_06_world.sql index 84d6730666f..84d6730666f 100644 --- a/sql/updates/world/2015_02_15_06_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_06_world.sql diff --git a/sql/updates/world/2015_02_15_07_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_07_world.sql index afbbc3817ef..afbbc3817ef 100644 --- a/sql/updates/world/2015_02_15_07_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_07_world.sql diff --git a/sql/updates/world/2015_02_15_08_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_08_world.sql index db2f5e1b59a..db2f5e1b59a 100644 --- a/sql/updates/world/2015_02_15_08_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_08_world.sql diff --git a/sql/updates/world/2015_02_15_09_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_09_world.sql index 1e2ca3b9f1c..1e2ca3b9f1c 100644 --- a/sql/updates/world/2015_02_15_09_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_09_world.sql diff --git a/sql/updates/world/2015_02_15_10_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_10_world.sql index d9506211550..d9506211550 100644 --- a/sql/updates/world/2015_02_15_10_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_10_world.sql diff --git a/sql/updates/world/2015_02_15_11_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_11_world.sql index 458a23a77cf..458a23a77cf 100644 --- a/sql/updates/world/2015_02_15_11_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_11_world.sql diff --git a/sql/updates/world/2015_02_15_12_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_12_world.sql index cb4c2b9150c..cb4c2b9150c 100644 --- a/sql/updates/world/2015_02_15_12_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_12_world.sql diff --git a/sql/updates/world/2015_02_15_13_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_13_world.sql index 8e1b4629085..8e1b4629085 100644 --- a/sql/updates/world/2015_02_15_13_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_13_world.sql diff --git a/sql/updates/world/2015_02_15_14_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_14_world.sql index 7e387b9df5a..7e387b9df5a 100644 --- a/sql/updates/world/2015_02_15_14_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_15_14_world.sql diff --git a/sql/updates/world/2015_02_16_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_00_world.sql index f6ea0ed5a0e..f6ea0ed5a0e 100644 --- a/sql/updates/world/2015_02_16_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_00_world.sql diff --git a/sql/updates/world/2015_02_16_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_01_world.sql index 0d130f32f7b..0d130f32f7b 100644 --- a/sql/updates/world/2015_02_16_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_01_world.sql diff --git a/sql/updates/world/2015_02_16_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_02_world.sql index 3f67ae7ac1b..3f67ae7ac1b 100644 --- a/sql/updates/world/2015_02_16_02_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_02_world.sql diff --git a/sql/updates/world/2015_02_16_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_03_world.sql index 35f17a761cd..35f17a761cd 100644 --- a/sql/updates/world/2015_02_16_03_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_03_world.sql diff --git a/sql/updates/world/2015_02_16_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_04_world.sql index b358aad4eb2..b358aad4eb2 100644 --- a/sql/updates/world/2015_02_16_04_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_04_world.sql diff --git a/sql/updates/world/2015_02_16_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_05_world.sql index beb4e14f3af..beb4e14f3af 100644 --- a/sql/updates/world/2015_02_16_05_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_05_world.sql diff --git a/sql/updates/world/2015_02_16_06_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_06_world.sql index b8f7294216d..b8f7294216d 100644 --- a/sql/updates/world/2015_02_16_06_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_16_06_world.sql diff --git a/sql/updates/world/2015_02_17_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_00_world.sql index 11f5eca484e..11f5eca484e 100644 --- a/sql/updates/world/2015_02_17_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_00_world.sql diff --git a/sql/updates/world/2015_02_17_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_01_world.sql index bcd15597b70..bcd15597b70 100644 --- a/sql/updates/world/2015_02_17_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_01_world.sql diff --git a/sql/updates/world/2015_02_17_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_02_world.sql index 4bbcde642e7..4bbcde642e7 100644 --- a/sql/updates/world/2015_02_17_02_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_02_world.sql diff --git a/sql/updates/world/2015_02_17_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_03_world.sql index 5ef13948b75..5ef13948b75 100644 --- a/sql/updates/world/2015_02_17_03_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_03_world.sql diff --git a/sql/updates/world/2015_02_17_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_04_world.sql index 68c1268eec2..68c1268eec2 100644 --- a/sql/updates/world/2015_02_17_04_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_04_world.sql diff --git a/sql/updates/world/2015_02_17_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_05_world.sql index 807f4f81a5d..807f4f81a5d 100644 --- a/sql/updates/world/2015_02_17_05_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_17_05_world.sql diff --git a/sql/updates/world/2015_02_18_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_18_00_world.sql index edf6aae06f0..edf6aae06f0 100644 --- a/sql/updates/world/2015_02_18_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_18_00_world.sql diff --git a/sql/updates/world/2015_02_18_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_18_01_world.sql index 5c6c879a83a..5c6c879a83a 100644 --- a/sql/updates/world/2015_02_18_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_18_01_world.sql diff --git a/sql/updates/world/2015_02_18_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_18_02_world.sql index 66d7951d719..66d7951d719 100644 --- a/sql/updates/world/2015_02_18_02_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_18_02_world.sql diff --git a/sql/updates/world/2015_02_18_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_18_03_world.sql index 6a4c12347a3..6a4c12347a3 100644 --- a/sql/updates/world/2015_02_18_03_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_18_03_world.sql diff --git a/sql/updates/world/2015_02_19_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_19_00_world.sql index d0411d68c66..d0411d68c66 100644 --- a/sql/updates/world/2015_02_19_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_19_00_world.sql diff --git a/sql/updates/world/2015_02_20_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_00_world.sql index 918ed39cba1..918ed39cba1 100644 --- a/sql/updates/world/2015_02_20_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_00_world.sql diff --git a/sql/updates/world/2015_02_20_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_01_world.sql index b4702d55177..b4702d55177 100644 --- a/sql/updates/world/2015_02_20_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_01_world.sql diff --git a/sql/updates/world/2015_02_20_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_02_world.sql index 2fc118ac1f3..2fc118ac1f3 100644 --- a/sql/updates/world/2015_02_20_02_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_02_world.sql diff --git a/sql/updates/world/2015_02_20_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_03_world.sql index 225719a435d..225719a435d 100644 --- a/sql/updates/world/2015_02_20_03_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_03_world.sql diff --git a/sql/updates/world/2015_02_20_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_04_world.sql index 1560b983859..1560b983859 100644 --- a/sql/updates/world/2015_02_20_04_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_20_04_world.sql diff --git a/sql/updates/world/2015_02_21_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_21_00_world.sql index 7e71235703c..7e71235703c 100644 --- a/sql/updates/world/2015_02_21_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_21_00_world.sql diff --git a/sql/updates/world/2015_02_22_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_22_00_world.sql index fef42379e0b..fef42379e0b 100644 --- a/sql/updates/world/2015_02_22_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_22_00_world.sql diff --git a/sql/updates/world/2015_02_23_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_00_world.sql index c84da7b2c84..c84da7b2c84 100644 --- a/sql/updates/world/2015_02_23_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_00_world.sql diff --git a/sql/updates/world/2015_02_23_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_01_world.sql index e475f2f2f6b..e475f2f2f6b 100644 --- a/sql/updates/world/2015_02_23_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_01_world.sql diff --git a/sql/updates/world/2015_02_23_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_02_world.sql index 51d998b98b4..51d998b98b4 100644 --- a/sql/updates/world/2015_02_23_02_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_02_world.sql diff --git a/sql/updates/world/2015_02_23_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_03_world.sql index 468af7088b4..468af7088b4 100644 --- a/sql/updates/world/2015_02_23_03_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_03_world.sql diff --git a/sql/updates/world/2015_02_23_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_04_world.sql index b4e68f47825..b4e68f47825 100644 --- a/sql/updates/world/2015_02_23_04_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_04_world.sql diff --git a/sql/updates/world/2015_02_23_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_05_world.sql index 41b0a9f120d..41b0a9f120d 100644 --- a/sql/updates/world/2015_02_23_05_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_05_world.sql diff --git a/sql/updates/world/2015_02_23_06_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_06_world.sql index 7bb0e20cc14..7bb0e20cc14 100644 --- a/sql/updates/world/2015_02_23_06_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_06_world.sql diff --git a/sql/updates/world/2015_02_23_07_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_07_world.sql index 01ab70e6981..01ab70e6981 100644 --- a/sql/updates/world/2015_02_23_07_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_07_world.sql diff --git a/sql/updates/world/2015_02_23_08_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_08_world.sql index 28f50fde9dd..28f50fde9dd 100644 --- a/sql/updates/world/2015_02_23_08_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_08_world.sql diff --git a/sql/updates/world/2015_02_23_09_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_09_world.sql index f96d3d42a1b..f96d3d42a1b 100644 --- a/sql/updates/world/2015_02_23_09_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_09_world.sql diff --git a/sql/updates/world/2015_02_23_10_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_10_world.sql index e5b7bf5242d..e5b7bf5242d 100644 --- a/sql/updates/world/2015_02_23_10_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_23_10_world.sql diff --git a/sql/updates/world/2015_02_24_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_24_00_world.sql index e0b1a44286e..e0b1a44286e 100644 --- a/sql/updates/world/2015_02_24_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_24_00_world.sql diff --git a/sql/updates/world/2015_02_24_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_24_01_world.sql index 3db370ac965..3db370ac965 100644 --- a/sql/updates/world/2015_02_24_01_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_24_01_world.sql diff --git a/sql/updates/world/2015_02_25_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_25_00_world.sql index 0d72b108502..0d72b108502 100644 --- a/sql/updates/world/2015_02_25_00_world.sql +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_25_00_world.sql diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_27_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_27_00_world.sql new file mode 100644 index 00000000000..92d1bd55c8a --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_27_00_world.sql @@ -0,0 +1,5 @@ +-- +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=9900; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15,9900,0,0,0,9,0,13010,0,0,0,0,'','Show gossip if player has quest completed'), +(15,9900,0,0,0,5,0,1119,240,0,0,0,'','Show gossip if player is at least friendly'); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_27_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_27_01_world.sql new file mode 100644 index 00000000000..30f02d9900e --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_27_01_world.sql @@ -0,0 +1,3 @@ +-- +Update `smart_scripts` SET `action_type`=85, `target_type`=7 WHERE `entryorguid`= 3177300 AND `source_type`=9 AND `id`=0; +Update `smart_scripts` SET `action_type`=85, `target_type`=7 WHERE `entryorguid`= 3244200 AND `source_type`=9 AND `id`=0; diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_02_27_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_27_02_world.sql new file mode 100644 index 00000000000..1298bc54674 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_02_27_02_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `smart_scripts` SET `action_type`=85 WHERE `entryorguid`=28298 AND `source_type`=0 AND `id` =0; diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_01_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_01_00_world.sql new file mode 100644 index 00000000000..5fa2dc8de28 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_01_00_world.sql @@ -0,0 +1,30 @@ +-- +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id` = 2586); +DELETE FROM `creature_template_addon` WHERE `entry`=2586; +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES +(2586, 0, 0, 131072, 1, 0, ""); + +UPDATE `creature_template_addon` SET `bytes1`=131072, `bytes2`=1 WHERE `entry` IN ( 6035, 22060, 18116, 16928, 16170, 11792, 6886, 4798, 2522, 25484, 4850, 1040, 579, 4834, 215, 1713, 938, 768, 17949); + +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id` = 11792); +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id` = 4798); + +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id` = 2242); +DELETE FROM `creature_template_addon` WHERE `entry`=2242; +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES +(2242, 0, 0, 131072, 1, 0, ""); + +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id` = 2246); +DELETE FROM `creature_template_addon` WHERE `entry`=2246; +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES +(2246, 0, 0, 131072, 1, 0, ""); + +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id` = 2926); +DELETE FROM `creature_template_addon` WHERE `entry`=2926; +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES +(2926, 0, 0, 131072, 1, 0, ""); + +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id` = 7110); +DELETE FROM `creature_template_addon` WHERE `entry`=7110; +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES +(7110, 0, 0, 131072, 1, 0, ""); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_00_world.sql new file mode 100644 index 00000000000..a76b40e2212 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_00_world.sql @@ -0,0 +1,15 @@ +UPDATE `quest_template` SET `PrevQuestId`=0 WHERE `Id`=13308; +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN(19,20) AND `SourceEntry`=13308; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(19, 0, 13308, 0, 0, 8, 0, 13224, 0, 0, 0, 0, 0, '', 'Mind Tricks Requires Orgrims Hammer Rewarded or'), +(20, 0, 13308, 0, 0, 8, 0, 13224, 0, 0, 0, 0, 0, '', 'Mind Tricks Requires Orgrims Hammer Rewarded or'), +(19, 0, 13308, 0, 1, 9, 0, 13224, 0, 0, 0, 0, 0, '', 'Mind Tricks Requires Orgrims Hammer Taken or'), +(20, 0, 13308, 0, 1, 9, 0, 13224, 0, 0, 0, 0, 0, '', 'Mind Tricks Requires Orgrims Hammer Taken or'), +(19, 0, 13308, 0, 2, 28, 0, 13224, 0, 0, 0, 0, 0, '', 'Mind Tricks Requires Orgrims Hammer Complete or'), +(20, 0, 13308, 0, 2, 28, 0, 13224, 0, 0, 0, 0, 0, '', 'Mind Tricks Requires Orgrims Hammer Complete or'), +(19, 0, 13308, 0, 3, 8, 0, 13225, 0, 0, 0, 0, 0, '', 'Mind Tricks Requires The Skybreaker Rewarded or'), +(20, 0, 13308, 0, 3, 8, 0, 13225, 0, 0, 0, 0, 0, '', 'Mind Tricks Requires The Skybreaker Rewarded or'), +(19, 0, 13308, 0, 4, 9, 0, 13225, 0, 0, 0, 0, 0, '', 'Mind Tricks Requires The Skybreaker Taken or'), +(20, 0, 13308, 0, 4, 9, 0, 13225, 0, 0, 0, 0, 0, '', 'Mind Tricks Requires The Skybreaker Taken or'), +(19, 0, 13308, 0, 5, 28, 0, 13225, 0, 0, 0, 0, 0, '', 'Mind Tricks Requires The Skybreaker Complete or'), +(20, 0, 13308, 0, 5, 28, 0, 13225, 0, 0, 0, 0, 0, '', 'Mind Tricks Requires The Skybreaker Complete or'); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_01_world.sql new file mode 100644 index 00000000000..45c43161ac9 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_01_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `gameobject` SET `position_z`=402.410004 WHERE `guid`=99956; diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_02_world.sql new file mode 100644 index 00000000000..99f00a1be47 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_02_world.sql @@ -0,0 +1,25 @@ +-- Quest - Iron Rune Constructs and You: Collecting Data + +SET @GUID := 49220; -- Set by TC +SET @SUMMON := 49986; +SET @GOLEM := 24821; +SET @BENCH := 186958; +DELETE FROM `spell_target_position` WHERE `id` in (49988); +INSERT INTO `spell_target_position` (`id`,`target_map`,`target_position_x`,`target_position_y`,`target_position_z`,`target_orientation`) VALUES +(49988, 571, 478.951782, -5941.529297, 308.749969, 0.419872); + +UPDATE `creature_template` SET `spell1`=44550, `AIName`='SmartAI' WHERE `entry`=@GOLEM; + +DELETE FROM `smart_scripts` WHERE `entryorguid`=@GOLEM AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@BENCH AND `source_type`=1 AND `id` IN (2,3); +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@BENCH,1,2,3,62,0,100,0,9024,1,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Work Bench - Gossip select - Close gossip'), +(@BENCH,1,3,0,61,0,100,0,0,0,0,0,85,@SUMMON,2,0,0,0,0,7,0,0,0,0,0,0,0,'Work Bench - Gossip select - Summon Iron Rune Construct'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=44550; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, 44550, 0, 31, 3, 24820, 0, 0, '', 'Collect Data target'); + +DELETE FROM `creature` WHERE `id`=24820; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`) VALUES +(@GUID, 24820, 571, 1, 1, 466.754089, -5921.273926, 309.139404, 0.751123, 120); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_03_world.sql new file mode 100644 index 00000000000..00240288b25 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_03_world.sql @@ -0,0 +1,48 @@ +SET @SUMMON := 49989; +SET @GOLEM := 24823; +SET @BENCH := 186958; +SET @Lebronski := 24718; + +DELETE FROM `spell_target_position` WHERE `id` IN (49990); +INSERT INTO `spell_target_position` (`id`,`target_map`,`target_position_x`,`target_position_y`,`target_position_z`,`target_orientation`) VALUES +(49990, 571, 478.951782, -5941.529297, 308.749969, 0.419872); + +UPDATE `creature_template` SET `spell1`=44562, `AIName`='SmartAI' WHERE `entry`=@GOLEM; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@Lebronski; + +DELETE FROM `smart_scripts` WHERE `entryorguid`=@GOLEM*100 AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Lebronski AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Lebronski*100 AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Lebronski*100+1 AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@BENCH AND `source_type`=1 AND `id` IN (4,5); +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@BENCH,1,4,5,62,0,100,0,9024,2,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Work Bench - Gossip select - Close gossip'), +(@BENCH,1,5,0,61,0,100,0,0,0,0,0,85,@SUMMON,2,0,0,0,0,7,0,0,0,0,0,0,0,'Work Bench - Gossip select - Summon Iron Rune Construct'), +(@Lebronski,0,0,0,10,0,100,0,1,5,60000,60000,80,@Lebronski*100,0,0,0,0,0,1,0,0,0,0,0,0,0,'Turd - LOS - Action list'), +(@Lebronski*100,9,0,0,0,0,100,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Stanwad - Action list - TALK'), +(@Lebronski*100,9,1,0,0,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Stanwad - Action list - Set Event phase1'), +(@Lebronski*100,9,2,0,0,0,100,0,0,0,0,0,103,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Stanwad - Action list - Root'), +(@Lebronski*100,9,3,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,19,@GOLEM,20,0,0,0,0,0,'Stanwad - Action list - Set Orientation'), +(@Lebronski*100,9,4,0,0,0,100,0,30000,30000,0,0,103,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Stanwad - Action list - remove root'), +(@Lebronski,0,1,0,8,1,100,0,44562,0,0,0,80,@Lebronski*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Lebronski - spell hit - action list'), +(@Lebronski*100+1,9,0,0,0,0,100,0,0,0,0,0,22,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Stanwad - Action list - Set Event phase 0'), +(@Lebronski*100+1,9,1,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,19,@GOLEM,20,0,0,0,0,0,'Stanwad - Action list - TALK'), +(@Lebronski*100+1,9,2,0,0,0,100,0,5000,5000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Stanwad - Action list - TALK'), +(@Lebronski*100+1,9,3,0,0,0,100,0,0,0,0,0,80,@GOLEM*100,0,0,0,0,0,19,@GOLEM,20,0,0,0,0,0,'Stanwad - Action list - Action list'), +(@Lebronski*100+1,9,4,0,0,0,100,0,10000,10000,0,0,103,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Stanwad - Action list - Pause wp'), +(@GOLEM*100,9,0,0,0,0,100,0,0,0,0,0,11,44569,0,0,0,0,0,23,0,0,0,0,0,0,0,'Stanwad - Action list - Cast Credit'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=1 AND `SourceEntry`=@Lebronski; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`, `ErrorTextId`,`ScriptName`,`Comment`) VALUES +(22,1,@Lebronski,0,31,3,24823,0,0,'','event require npc 24823'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=44562; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, 44562, 0, 31, 3, 24718, 0, 0, '', 'Bluff target'); + +DELETE FROM `creature_text` WHERE `entry`IN (@GOLEM); +DELETE FROM `creature_text` WHERE `entry`IN (@Lebronski) AND `groupid` IN (1, 2); +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextID`) VALUES +(@GOLEM,0,0,"Model U-9207 Iron Rune Construct does not appreciate your tone of voice. Commencing total annihilation of your rug, Lebronski.",12,0,100,0,0,0,'Iron Rune Construct', 23892), +(@Lebronski,1,0,"What do you think you're doing, man? Lebronski does NOT appreciate you dragging your loose metal parts all over his rug.",12,7,100,0,0,0,'Lebronski', 23890), +(@Lebronski,2,0,"Far out, man. This bucket of bolts might make it after all...",12,7,100,0,0,0,'Lebronski', 23891); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_04_world.sql new file mode 100644 index 00000000000..557d6cb6792 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_04_world.sql @@ -0,0 +1,65 @@ +-- Quest - Iron Rune Constructs and You: Rocket Jumping +SET @SUMMON := 49985; +SET @GOLEM := 24806; +SET @RUNE := 186956; +SET @BENCH := 186958; +SET @Stanwad := 24717; +SET @Gwendolyn := 24719; +SET @Needlemeyer := 24720; +SET @Walt := 24807; +SET @Lebronski := 24718; + +DELETE FROM `spell_target_position` WHERE `id` in (49984); +INSERT INTO `spell_target_position` (`id`,`target_map`,`target_position_x`,`target_position_y`,`target_position_z`,`target_orientation`) VALUES +(49984, 571, 478.951782, -5941.529297, 308.749969, 0.419872); + +UPDATE `creature_template` SET `spell1`=44498, `AIName`='SmartAI', `InhabitType`=5 WHERE `entry`=@GOLEM; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@Stanwad; +UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry`=@BENCH; + +DELETE FROM `smart_scripts` WHERE `entryorguid`=@GOLEM AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Stanwad*100 AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@BENCH AND `source_type`=1 AND `id` IN (0,1); +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@BENCH,1,0,1,62,0,100,0,9024,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Work Bench - Gossip select - Close gossip'), +(@BENCH,1,1,0,61,0,100,0,0,0,0,0,85,@SUMMON,2,0,0,0,0,7,0,0,0,0,0,0,0,'Work Bench - Gossip select - Summon Iron Rune Construct'), +(@GOLEM,0,0,1,25,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - Just Summoned - Set phase 1'), +(@GOLEM,0,1,0,61,0,100,0,0,0,0,0,50,186952,60,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - Just Summoned - SummonGob'), +(@GOLEM,0,2,3,8,1,100,0,44498,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - spell hit - Say text'), +(@GOLEM,0,3,4,61,0,100,0,0,0,0,0,22,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - spell hit - Set phase 2'), +(@GOLEM,0,4,5,61,0,100,0,0,0,0,0,60,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - spell hit - Set fly'), +(@GOLEM,0,5,6,61,0,100,0,0,0,0,0,53,1,@GOLEM,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - spell hit - WP start'), +(@GOLEM,0,6,7,61,0,100,0,0,0,0,0,9,0,0,0,0,0,0,14,65653,@RUNE,0,0,0,0,0,'Iron Rune Construct - spell hit - Activate Gobject'), +(@GOLEM,0,7,0,61,0,100,0,0,0,0,0,80,@Stanwad*100,0,0,0,0,0,19,@Stanwad,30,0,0,0,0,0,'Iron Rune Construct - spell hit - ActionList'), +(@GOLEM,0,8,9,40,0,100,0,5,@GOLEM,0,0,11,44499,0,0,0,0,0,23,0,0,0,0,0,0,0,'Iron Rune Construct - Waypoint reached - cast credit spell'), +(@GOLEM,0,9,10,61,0,100,0,0,0,0,0,22,3,0,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - Waypoint reached - Set phase 3'), +(@GOLEM,0,10,0,61,0,100,0,0,0,0,0,9,0,0,0,0,0,0,14,65654,186957,0,0,0,0,0,'Iron Rune Construct - Just Summoned - Activate gob'), +(@GOLEM,0,11,0,1,4,100,1,7000,7000,0,0,28,46598,0,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - OOC (phase 3) - Remove Vehicle aura'), +(@Stanwad*100,9,0,0,0,0,100,0,3000,3000,0,0,1,0,0,0,0,0,0,19,@Walt,20,0,0,0,0,0,'Stanwad - Action list - TALK'), +(@Stanwad*100,9,1,0,0,0,100,0,3000,3000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Stanwad - Action list - TALK'), +(@Stanwad*100,9,2,0,0,0,100,0,12000,12000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Stanwad - Action list - TALK'), +(@Stanwad*100,9,3,0,0,0,100,0,1000,1000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Stanwad - Action list - TALK'), +(@Stanwad*100,9,4,0,0,0,100,0,6000,6000,0,0,1,0,0,0,0,0,0,19,@Gwendolyn,20,0,0,0,0,0,'Stanwad - Action list - TALK'), +(@Stanwad*100,9,5,0,0,0,100,0,6000,6000,0,0,1,0,0,0,0,0,0,19,@Needlemeyer,20,0,0,0,0,0,'Stanwad - Action list - TALK'), +(@Stanwad*100,9,6,0,0,0,100,0,6000,6000,0,0,1,0,0,0,0,0,0,19,@Lebronski,20,0,0,0,0,0,'Stanwad - Action list - TALK'), +(@Stanwad*100,9,7,0,0,0,100,0,7000,7000,0,0,1,1,0,0,0,0,0,19,@Walt,20,0,0,0,0,0,'Stanwad - Action list - TALK'); + +DELETE FROM `creature_text` WHERE `entry`IN (@GOLEM, @Walt, @Stanwad, @Gwendolyn, @Needlemeyer, @Lebronski); +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextID`) VALUES +(@GOLEM,0,0,"Launching.",12,0,100,0,0,0,'Iron Rune Construct', 23860), +(@Walt,0,0,"Behold my perfect creation!",12,7,100,0,0,0,'Walt', 23873), +(@Stanwad,0,0,"WHOA, WHOA, WHOA! Hold everything fellas!",12,7,100,0,0,0,'Stanwad', 23875), +(@Stanwad,1,0,"Oh dear lords of stone and steel, what... I repeat... WHAT are ya gonna do with that?",12,7,100,0,0,0,'Stanwad', 23878), +(@Stanwad,2,0,"The dwarves all burst out in laughter.",16,7,100,0,0,0,'Stanwad', 23876), +(@Gwendolyn,0,0,"I'm cryin' here! Please, make the funny stop!",12,7,100,0,0,0,'Gwendolyn', 23885), +(@Needlemeyer,0,0,"If only our pappy were alive to see this!",12,0,100,0,0,0,'Needlemeyer', 23889), +(@Lebronski,0,0,"Man, that will never work. The iron dwarves are never gonna fall for that hunk o' junk!",12,7,100,0,0,0,'Lebronski', 23880), +(@Walt,1,0,"You're out of your element, Lebronski! Uncalled for! Those iron dwarves won't know what hit 'em! Now why don't you get back to uncovering the mystery of the gigantic turd on your rug and leave the real scientists to their work! ",12,7,100,0,0,0,'Walt', 23883); + +DELETE FROM `waypoints` WHERE `entry`=@GOLEM; +INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES +(@GOLEM,1, 479.1233, -5941.48, 316.7,'Iron Rune Construct'), +(@GOLEM,2, 479.1461, -5941.515, 339.7554,'Iron Rune Construct'), +(@GOLEM,3, 496.1333, -5940.065, 344.5331,'Iron Rune Construct'), +(@GOLEM,4, 511.516, -5936.729, 339.7554,'Iron Rune Construct'), +(@GOLEM,5, 514.5781, -5936.898, 314.1444,'Iron Rune Construct'); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_05_world.sql new file mode 100644 index 00000000000..31eca7f0310 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_05_world.sql @@ -0,0 +1,136 @@ +UPDATE `creature_addon` SET `mount`=0 WHERE `guid`=97508; + +/* questgiver */ +-- Warmage Anzim SAI +SET @ENTRY := 25356; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,1,19,0,100,0,11681,0,0,0,85,45883,0,0,0,0,0,7,0,0,0,0,0,0,0,"Warmage Anzim - On Quest 'Rescuing Evanor' Taken - Invoker Cast 'Amber Ledge to Beryl Point'"), +(@ENTRY,0,1,0,61,0,100,0,11681,0,0,0,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Anzim - On Quest 'Rescuing Evanor' Taken - Run Script"); + +-- Actionlist SAI +SET @ENTRY := 2535600; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,83,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Anzim - On Script - Remove Npc Flag Questgiver"), +(@ENTRY,9,1,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,118574,27888,0,0,0,0,0,"Warmage Anzim - On Script - Set Data 1 1"), +(@ENTRY,9,2,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,107998,25732,0,0,0,0,0,"Warmage Anzim - On Script - Set Data 1 1"), +(@ENTRY,9,3,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,108027,25733,0,0,0,0,0,"Warmage Anzim - On Script - Set Data 1 1"), +(@ENTRY,9,4,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,107602,25727,0,0,0,0,0,"Warmage Anzim - On Script - Set Data 1 1"), +(@ENTRY,9,5,0,0,0,100,0,180000,180000,0,0,82,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Anzim - On Script - Add Npc Flag Questgiver"); + +/* dragons */ + +-- Warmage Archus SAI +SET @ENTRY := 27888; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,1,38,0,100,0,1,1,0,0,53,1,@ENTRY,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Archus - On Data Set 1 1 - Start Waypoint"), +(@ENTRY,0,1,0,61,0,100,0,1,1,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Archus - On Data Set 1 1 - Set Active On"), +(@ENTRY,0,2,0,40,0,100,0,1,@ENTRY,0,0,54,10000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Moran - On Waypoint 1 Reached - Pause Waypoint"); + +-- Warmage Preston SAI +SET @ENTRY := 25732; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,1,38,0,100,0,1,1,0,0,53,1,@ENTRY,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Preston - On Data Set 1 1 - Start Waypoint"), +(@ENTRY,0,1,0,61,0,100,0,1,1,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Preston - On Data Set 1 1 - Set Active On"), +(@ENTRY,0,2,0,40,0,100,0,1,@ENTRY,0,0,54,10000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Moran - On Waypoint 1 Reached - Pause Waypoint"); + +-- Warmage Austin SAI +SET @ENTRY := 25733; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,1,38,0,100,0,1,1,0,0,53,1,@ENTRY,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Austin - On Data Set 1 1 - Start Waypoint"), +(@ENTRY,0,1,0,61,0,100,0,1,1,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Austin - On Data Set 1 1 - Set Active On"), +(@ENTRY,0,2,0,40,0,100,0,1,@ENTRY,0,0,54,10000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Moran - On Waypoint 1 Reached - Pause Waypoint"); + +-- Warmage Moran SAI +SET @ENTRY := 25727; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,1,38,0,100,0,1,1,0,0,53,1,25727,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Moran - On Data Set 1 1 - Start Waypoint"), +(@ENTRY,0,1,0,61,0,100,0,1,1,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Moran - On Data Set 1 1 - Set Active On"), +(@ENTRY,0,2,3,40,0,100,0,1,25727,0,0,54,10000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmage Moran - On Waypoint 1 Reached - Pause Waypoint"), +(@ENTRY,0,3,0,61,0,100,0,1,25727,0,0,75,42726,0,0,0,0,0,9,25724,0,100,0,0,0,0,"Warmage Moran - On Waypoint 1 Reached - Add Aura 'Cosmetic - Immolation (Whole Body)'"); + +-- Ascended Mage Hunter SAI +SET @ENTRY := 25724; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,11,0,100,0,0,0,0,0,8,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ascended Mage Hunter - On Respawn - Set Reactstate Passive"), +(@ENTRY,0,1,0,1,0,100,1,1000,1000,1000,1000,11,45940,0,0,0,0,0,9,25594,0,10,0,0,0,0,"Ascended Mage Hunter - Out of Combat - Cast 'Evanor's Prison Chains' (No Repeat)"), +(@ENTRY,0,2,3,23,0,100,1,42726,1,0,0,89,5,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ascended Mage Hunter - On Has Aura 'Cosmetic - Immolation (Whole Body)' - Start Random Movement (No Repeat)"), +(@ENTRY,0,3,0,61,0,100,1,42726,1,0,0,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Ascended Mage Hunter - On Has Aura 'Cosmetic - Immolation (Whole Body)' - Run Script (No Repeat)"), +(@ENTRY,0,4,0,6,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,114368,24771,0,0,0,0,0,"Ascended Mage Hunter - On Just Died - Set Data 1 1"); + +-- Actionlist SAI +SET @ENTRY := 2572400; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,3000,3000,0,0,37,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Kill Self"); + +-- Coldarra Invisman SAI +SET @ENTRY := 24771; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,38,0,100,0,1,1,0,0,80,@ENTRY*100+00,0,0,0,0,0,1,0,0,0,0,0,0,0,"Coldarra Invisman - On Data Set 1 1 - Run Script (No Repeat)"); + +-- Actionlist SAI +SET @ENTRY := 2477100; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,4000,4000,0,0,9,0,0,0,0,0,0,20,187884,20,0,0,0,0,0,"Coldarra Invisman - On Script - activate Game Object"), +(@ENTRY,9,1,0,0,0,100,0,4000,4000,0,0,11,46013,2,0,0,0,0,1,0,0,0,0,0,0,0,"Coldarra Invisman - On Script - Cast 'Summon Lady Evanor'"); + +-- Archmage Evanor SAI +SET @ENTRY := 25784; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,54,0,100,0,0,0,0,0,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Archmage Evanor - On Just Summoned - Run Script"); + +-- Actionlist SAI +SET @ENTRY := 2578400; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,1000,1000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Archmage Evanor - On Script - Say Line 0"), +(@ENTRY,9,1,0,0,0,100,0,3000,3000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Archmage Evanor - On Script - Say Line 1"), +(@ENTRY,9,2,0,0,0,100,0,0,0,0,0,11,46018,0,0,0,0,0,1,0,0,0,0,0,0,0,"Archmage Evanor - On Script - Cast 'Teleport'"), +(@ENTRY,9,3,0,0,0,100,0,8000,8000,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Archmage Evanor - On Script - Despawn Instant"); + +DELETE FROM `creature_text` WHERE `entry`=25784; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(25784, 0, 0, 'I thank you, friend of Dalaran.', 12, 0, 100, 0, 0, 0, 24995, 0, 'Archmage Evanor'), +(25784, 1, 0, 'We mustn''t tarry here... stay close - I''ll take us somewhere safe.', 12, 0, 100, 0, 0, 0, 24996, 0, 'Archmage Evanor'); + +DELETE FROM `spell_target_position` WHERE `id`=46018; +INSERT INTO `spell_target_position` (`id`, `effIndex`, `target_map`, `target_position_x`, `target_position_y`, `target_position_z`, `target_orientation`, `VerifiedBuild`) VALUES +(46018, 0, 571, 3646.895, 5893.2773, 174.48, 0.674, 0); + +/* waypoint datas */ +DELETE FROM `waypoints` WHERE `entry`=25727; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(25727, 1,3195.641,6102.673,147.5568, 'Warmage Moran'), +(25727, 2,3437.590576,5915.928711,145.554291, 'Warmage Moran'); +DELETE FROM `waypoints` WHERE `entry`=25733; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(25733, 1,3224.336,6105.71,146.7791, 'Warmage Austin'), +(25733, 2,3435.270,5889.899,151.063, 'Warmage Austin'); +DELETE FROM `waypoints` WHERE `entry`=25732; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(25732, 1,3224.749,6083.038,147.5568, 'Warmage Preston'), +(25732, 2,3460.500,5877.4399,149.537, 'Warmage Preston'); +DELETE FROM `waypoints` WHERE `entry`=27888; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(27888, 1,3200.99,6074.898,144.9736, 'Warmage Archus'), +(27888, 2,3457.750,5892.669,147.380, 'Warmage Archus'); + +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry` IN (25727, 25733, 25732, 27888); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_06_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_06_world.sql new file mode 100644 index 00000000000..585c6482366 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_02_06_world.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=20 AND `SourceEntry`=1789; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(20, 0, 1789, 0, 9, 1783, 0, 0, 0, '', 'Show the quest if 1783 is taken'); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_07_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_07_00_world.sql new file mode 100644 index 00000000000..4cc5d647e1a --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_07_00_world.sql @@ -0,0 +1 @@ +DELETE FROM `spell_linked_spell` WHERE `spell_effect`=69706; diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_07_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_07_01_world.sql new file mode 100644 index 00000000000..40df9138eb4 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_07_01_world.sql @@ -0,0 +1,2 @@ +-- 3.3.5 - 6.x +DELETE FROM `spell_linked_spell` WHERE `spell_trigger`=49889; diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_07_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_07_02_world.sql new file mode 100644 index 00000000000..5b48fd9779e --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_07_02_world.sql @@ -0,0 +1,5 @@ +-- +DELETE FROM `creature_addon` WHERE `guid` IN (26310,54733); +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES +(26310, 263100), +(54733, 547330); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_07_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_07_03_world.sql new file mode 100644 index 00000000000..8d8fe3be881 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_07_03_world.sql @@ -0,0 +1,2 @@ +UPDATE `creature_template` SET `AIName`='', `ScriptName`='boss_nexus_commanders' WHERE `entry` IN(26796,26798); +DELETE FROM `smart_scripts` WHERE `entryorguid` IN(26796,26798) AND `source_type`=0; diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_08_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_08_00_world.sql new file mode 100644 index 00000000000..3bf1b2410ce --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_08_00_world.sql @@ -0,0 +1,3 @@ +DELETE FROM `spell_bonus_data` WHERE `entry`=3607; +INSERT INTO `spell_bonus_data` (`entry`, `direct_bonus`, `dot_bonus`, `ap_bonus`, `ap_dot_bonus`, `comments`) VALUES +(3607, 0, 0, 0, 0, 'Yenniku Soul Gem'); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_08_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_08_01_world.sql new file mode 100644 index 00000000000..ddbc46739b1 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_08_01_world.sql @@ -0,0 +1 @@ +DELETE FROM `creature` WHERE `id`=23450; diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_00_world.sql new file mode 100644 index 00000000000..ade4e39c13b --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_00_world.sql @@ -0,0 +1,4 @@ +UPDATE `creature_template` SET `vehicleid`=60 WHERE `entry`=30159; +UPDATE `smart_scripts` SET `action_param2`=0 WHERE `entryorguid`=31242 AND `source_type`=0 AND `id`=14; +UPDATE `creature_template_addon` SET `mount`=0 WHERE `entry`=31242; +UPDATE `creature_text` SET `BroadcastTextId`=16227 WHERE `entry`=18292 AND `groupid`=0 AND `id`=0; diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_01_world.sql new file mode 100644 index 00000000000..e2e945eb86d --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_01_world.sql @@ -0,0 +1,3 @@ +-- +UPDATE `creature_template` SET `faction`=2007 WHERE `entry` IN (35496,35498); +UPDATE `creature` SET `position_x`=5957.267, `position_y`=566.4926 WHERE `guid`=116668 AND `id` = 29657; diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_02_world.sql new file mode 100644 index 00000000000..c692d88825f --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_02_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `npc_trainer` SET `spell`=2154 WHERE `entry`=201029 AND `spell`=3104; diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_03_world.sql new file mode 100644 index 00000000000..4028abb8fdc --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_03_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `quest_template` SET `SpecialFlags`=2 WHERE `Id`=1560; diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_04_world.sql new file mode 100644 index 00000000000..9fa686c09ec --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_04_world.sql @@ -0,0 +1,33 @@ +-- +SET @Geant:=24385; +SET @Megalithe:=24381; + +UPDATE `event_scripts` SET `x`=2406.492188 , `y`=-5738.995605, `z`=274.020172 , `o`=0.703918 WHERE `id`=15939; +UPDATE `creature_template` SET `unit_flags`=33600, `AIName`='SmartAI' WHERE `entry` IN (@Geant,@Megalithe); + +DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid` IN (@Geant,@Megalithe); +DELETE FROM `smart_scripts` WHERE `source_type`=9 AND `entryorguid` IN (@Geant*100,@Megalithe*100); + +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(@Megalithe, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 80, @Megalithe*100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Megalithe - On Just summoned - action list'), +(@Megalithe*100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 12, 24385, 7, 0, 0, 0, 0, 8, 0, 0, 0, 2410.138184, -5727.264648, 270.985870, 4.287692, 'Megalithe - action liste -Summon'), +(@Megalithe*100, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 12, 24385, 7, 0, 0, 0, 0, 8, 0, 0, 0, 2414.860596, -5729.499512, 272.095459, 3.982957, 'Megalithe - action liste -Summon'), +(@Megalithe*100, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 12, 24385, 7, 0, 0, 0, 0, 8, 0, 0, 0, 2417.339844, -5733.230957, 273.028992, 3.603609, 'Megalithe - action liste -Summon'), +(@Megalithe*100, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 12, 24385, 7, 0, 0, 0, 0, 8, 0, 0, 0, 2419.397705, -5738.032227, 274.121246, 3.241538, 'Megalithe - action liste -Summon'), +(@Megalithe*100, 9, 4, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Megalithe - action liste - Talk'), +(@Megalithe*100, 9, 5, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Megalithe - action liste - Talk'), +(@Megalithe*100, 9, 6, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Megalithe - action liste - Talk'), +(@Megalithe*100, 9, 7, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 80, @Geant*100, 0, 0, 0, 0, 0, 11, @Geant, 30, 0, 0, 0, 0, 0, 'Megalithe - action liste - Action List'), +(@Megalithe*100, 9, 8, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 43693, 0, 0, 0, 0, 0, 21, 40, 0, 0, 0, 0, 0, 0, 'Megalithe - action liste - Cast Credit Quest'), +(@Megalithe*100, 9, 9, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 1, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Megalithe - action liste - Talk'), +(@Megalithe*100, 9, 10, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Megalithe - action liste - Talk'), +(@Geant*100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Geant - action liste - Run off'), +(@Geant*100, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 2515.453369, -5670.358398, 298.778076, 0.618311, 'Geant - action liste - Gotopos'), +(@Geant*100, 9, 2, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Geant - action liste - Despawnn'); + +DELETE FROM `creature_text` WHERE `entry` IN (@Megalithe); +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextID`) VALUES +(@Megalithe, 0, 0, 'Arise from the earth, my brothers!', 12, 0, 100, 0, 0, 0, 'Megalithe', 23311), +(@Megalithe, 1, 0, 'Our iron masters have a mission for us!', 12, 0, 100, 0, 0, 0, 'Megalithe', 23312), +(@Megalithe, 2, 0, 'Follow me into the mountains to carry out the plan of the masters!', 12, 0, 100, 0, 0, 0, 'Megalithe', 23315), +(@Megalithe, 3, 0, 'We will not fail!', 12, 0, 100, 0, 0, 0, 'Megalithe', 23332); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_05_world.sql new file mode 100644 index 00000000000..55cb5f9006a --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_05_world.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `smart_scripts` WHERE `entryorguid`=20234 AND `source_type`=0 AND `id`=3; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(20234,0,3,0,19,0,100,0,10344,0,0,0,11,35237,0,0,0,0,0,7,0,0,0,0,0,0,0,"Runetog Wildhammer - On Quest accept - Cast spell"); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_06_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_06_world.sql new file mode 100644 index 00000000000..2a943f00037 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_06_world.sql @@ -0,0 +1,5 @@ +-- +DELETE FROM `smart_scripts` WHERE `entryorguid`= 39712 AND `source_type`=0 AND `id` IN (6, 7); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(39712, 0, 6, 7, 63, 0, 100, 0, 0, 0, 0, 0, 11, 74206, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'High Tinker Mekkatorque - Just created - cast spell'), +(39712, 0, 7, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 44816, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'High Tinker Mekkatorque - Just created - cast spell'); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_07_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_07_world.sql new file mode 100644 index 00000000000..cd2023ea5b8 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_07_world.sql @@ -0,0 +1,12 @@ +-- +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (4331, 4329); +DELETE FROM `smart_scripts` WHERE `entryorguid`= 4328 AND `source_type`=0 AND `id` IN (3); +DELETE FROM `smart_scripts` WHERE `entryorguid`= 4331 AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`= 4329 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(4328, 0, 3, 0, 8, 0, 100, 0, 42411, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Firemane Scalebane - On spell hit - Despawn'), +(4331, 0, 0, 0, 8, 0, 100, 0, 42411, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Firemane Ash Tail - On spell hit - Despawn'), +(4331, 0, 1, 0, 0, 0, 100, 0, 4000, 6000, 6000, 8000, 11, 11969, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Firemane Ash Tail - Icc - Cast Fire Nova'), +(4331, 0, 2, 0, 4, 0, 100, 0, 0, 0, 0, 0, 11, 18968, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Firemane Ash Tail - On aggr - cast Fire Shield'), +(4329, 0, 0, 0, 8, 0, 100, 0, 42411, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Firemane Scout - On spell hit - Despawn'), +(4329, 0, 1, 0, 4, 0, 100, 0, 0, 0, 0, 0, 11, 18968, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Firemane Scout - On aggr - cast Fire Shield'); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_08_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_08_world.sql new file mode 100644 index 00000000000..2992a858dc6 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_08_world.sql @@ -0,0 +1,8 @@ +-- Add missing gossip for entry 7766 +DELETE FROM `gossip_menu` WHERE `entry`=1761; +INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (1761,2393),(1761,2394); +UPDATE `creature_template` SET `gossip_menu_id`=1761 WHERE entry=7766; + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=14 AND `SourceGroup`=1761; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`, `NegativeCondition`, `ErrorTextId`,`ScriptName`,`Comment`) VALUES +(14,1761,2394,0,9,434,0,0,0,0,'','Show gossip menu text if quest 434 is taken'); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_09_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_09_world.sql new file mode 100644 index 00000000000..fd50bbb5037 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_09_world.sql @@ -0,0 +1,7 @@ +-- +UPDATE creature_template SET InhabitType=4, unit_flags=64 WHERE Entry=17592; +DELETE FROM `smart_scripts` WHERE `entryorguid`=17592 AND `source_type`=0 AND `id`IN(5, 6, 7); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(17592, 0, 5, 6, 40, 0, 100, 0, 10, 17592, 0, 0, 101, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Razormaw - On Waypoint 10 Reached - Set Home Position'), +(17592, 0, 6, 0, 61, 0, 100, 0, 0, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Razormaw - On Waypoint 10 Reached - Set Agressive'), +(17592, 0, 7, 0, 11, 0, 100, 0, 0, 0, 0, 0, 18, 256, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Razormaw - On Respawn - Add unit_flag'); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_10_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_10_world.sql new file mode 100644 index 00000000000..d3e1220006e --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_10_10_world.sql @@ -0,0 +1,55 @@ +-- Anton waypoints + +DELETE FROM `creature_addon` WHERE `guid`=117689; +INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES +(117689, 1176890, 0, 131072, 1, 0, ""); +UPDATE `creature` SET `MovementType`=2 WHERE `guid`=117689; +DELETE FROM `waypoint_data` WHERE `id`=1176890; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(1176890, 1, 153.249817, -4549.366211, 261.364685, 0, 0, 0, 0, 100, 0), +(1176890, 2, 156.098114, -4532.821289, 258.803101, 0, 0, 0, 0, 100, 0), +(1176890, 3, 156.068008, -4517.755371, 257.193939, 0, 0, 0, 0, 100, 0), +(1176890, 4, 144.178497, -4462.812500, 253.617325, 0, 0, 0, 0, 100, 0), +(1176890, 5, 141.329361, -4455.471191, 253.578766, 0, 0, 0, 0, 100, 0), +(1176890, 6, 125.436966, -4434.860840, 254.323639, 0, 0, 0, 0, 100, 0), +(1176890, 7, 122.155800, -4418.455566, 255.509537, 0, 0, 0, 0, 100, 0), +(1176890, 8, 121.316132, -4389.046387, 257.141205, 0, 0, 0, 0, 100, 0), +(1176890, 9, 124.869438, -4371.796875, 258.335938, 0, 0, 0, 0, 100, 0), +(1176890, 10, 128.642212, -4362.238281, 258.747375, 0, 0, 0, 0, 100, 0), +(1176890, 11, 141.832169, -4345.334473, 257.867676, 0, 0, 0, 0, 100, 0), +(1176890, 12, 150.246857, -4335.993652, 257.498810, 0, 0, 0, 0, 100, 0), +(1176890, 13, 160.376022, -4316.970703, 256.535919, 0, 0, 0, 0, 100, 0), +(1176890, 14, 168.596313, -4308.797363, 254.645386, 0, 0, 0, 0, 100, 0), +(1176890, 15, 178.860077, -4304.438477, 252.472916, 0, 0, 0, 0, 100, 0), +(1176890, 16, 195.836517, -4286.464355, 248.749603, 0, 0, 0, 0, 100, 0), +(1176890, 17, 213.626450, -4276.384766, 248.502441, 0, 0, 0, 0, 100, 0), +(1176890, 18, 238.895004, -4276.655762, 248.606018, 0, 0, 0, 0, 100, 0), +(1176890, 19, 245.764877, -4272.171387, 248.920975, 0, 0, 0, 0, 100, 0), +(1176890, 20, 264.235840, -4250.840332, 250.916733, 0, 0, 0, 0, 100, 0), +(1176890, 21, 282.604492, -4236.683594, 252.033737, 0, 0, 0, 0, 100, 0), +(1176890, 22, 288.971344, -4223.116211, 252.916443, 0, 0, 0, 0, 100, 0), +(1176890, 23, 291.303375, -4196.310547, 254.307571, 0, 0, 0, 0, 100, 0), +(1176890, 24, 294.156342, -4189.324707, 254.992859, 0, 0, 0, 0, 100, 0), +(1176890, 25, 291.303375, -4196.310547, 254.307571, 0, 0, 0, 0, 100, 0), +(1176890, 26, 288.971344, -4223.116211, 252.916443, 0, 0, 0, 0, 100, 0), +(1176890, 27, 282.604492, -4236.683594, 252.033737, 0, 0, 0, 0, 100, 0), +(1176890, 28, 264.235840, -4250.840332, 250.916733, 0, 0, 0, 0, 100, 0), +(1176890, 29, 245.764877, -4272.171387, 248.920975, 0, 0, 0, 0, 100, 0), +(1176890, 30, 238.895004, -4276.655762, 248.606018, 0, 0, 0, 0, 100, 0), +(1176890, 31, 213.626450, -4276.384766, 248.502441, 0, 0, 0, 0, 100, 0), +(1176890, 32, 195.836517, -4286.464355, 248.749603, 0, 0, 0, 0, 100, 0), +(1176890, 33, 178.860077, -4304.438477, 252.472916, 0, 0, 0, 0, 100, 0), +(1176890, 34, 168.596313, -4308.797363, 254.645386, 0, 0, 0, 0, 100, 0), +(1176890, 35, 160.376022, -4316.970703, 256.535919, 0, 0, 0, 0, 100, 0), +(1176890, 36, 150.246857, -4335.993652, 257.498810, 0, 0, 0, 0, 100, 0), +(1176890, 37, 141.832169, -4345.334473, 257.867676, 0, 0, 0, 0, 100, 0), +(1176890, 38, 128.642212, -4362.238281, 258.747375, 0, 0, 0, 0, 100, 0), +(1176890, 39, 124.869438, -4371.796875, 258.335938, 0, 0, 0, 0, 100, 0), +(1176890, 40, 121.316132, -4389.046387, 257.141205, 0, 0, 0, 0, 100, 0), +(1176890, 41, 122.155800, -4418.455566, 255.509537, 0, 0, 0, 0, 100, 0), +(1176890, 42, 125.436966, -4434.860840, 254.323639, 0, 0, 0, 0, 100, 0), +(1176890, 43, 141.329361, -4455.471191, 253.578766, 0, 0, 0, 0, 100, 0), +(1176890, 44, 144.178497, -4462.812500, 253.617325, 0, 0, 0, 0, 100, 0), +(1176890, 45, 156.068008, -4517.755371, 257.193939, 0, 0, 0, 0, 100, 0), +(1176890, 46, 156.098114, -4532.821289, 258.803101, 0, 0, 0, 0, 100, 0), +(1176890, 47, 153.249817, -4549.366211, 261.364685, 0, 0, 0, 0, 100, 0); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_12_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_12_00_world.sql new file mode 100644 index 00000000000..f8251f9b2b4 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_12_00_world.sql @@ -0,0 +1,18 @@ +UPDATE `creature_template` SET `gossip_menu_id`=8443 WHERE `entry`=21769; +DELETE FROM `gossip_menu` WHERE `entry`=8443; +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES +(8443, 10549); -- 21769 +DELETE FROM `gossip_menu_option` WHERE `menu_id`=8443; +INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `OptionBroadcastTextID`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`, `BoxBroadcastTextID`) VALUES +(8443, 0, 0, 'I''ve lost my Kor''kron Flare Gun, sir. May I have another?', 19708, 1, 1, 0, 0, 0, 0, '', 0); + +DELETE FROM `smart_scripts` WHERE `entryorguid`=21769 AND `source_type`=0 AND `id` IN(3,4); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(21769, 0, 3, 4, 62, 0, 100, 0, 8443, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Overlord Or\'barokh - On Gossip Option 0 Selected - Close Gossip'), +(21769, 0, 4, 0, 61, 0, 100, 0, 0, 0, 0, 0, 85, 38172, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Overlord Or\'barokh - On Gossip Option 0 Selected - Cast Create Kor''kron Flare Gun'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=8443; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15, 8443, 0, 0, 0, 8, 0, 10750, 0, 0, 0, 0, 0, '', 'Show gossip option if player has the path of conquest rewarded'), +(15, 8443, 0, 0, 0, 8, 0, 10769, 0, 0, 1, 0, 0, '', 'Show gossip option if player does not have Dissension Amongst the Ranks rewarded'), +(15, 8443, 0, 0, 0, 2, 0, 31108, 1, 0, 1, 0, 0, '', 'Show gossip option if player does not have Kor''Kron Flare Gun'); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_12_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_12_01_world.sql new file mode 100644 index 00000000000..8c6dc8fe248 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_12_01_world.sql @@ -0,0 +1,14 @@ +DELETE FROM `gossip_menu_option` WHERE `menu_id`=8457; +INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `OptionBroadcastTextID`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`, `BoxBroadcastTextID`) VALUES +(8457, 0, 0, 'I need another Wildhammer Flare Gun, Thane.', 19747, 1, 1, 0, 0, 0, 0, '', 0); + +DELETE FROM `smart_scripts` WHERE `entryorguid`=21773 AND `source_type`=0 AND `id` IN(1,2); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(21773, 0, 1, 2, 62, 0, 100, 0, 8457, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Thane Yoregar - On Gossip Option 0 Selected - Close Gossip'), +(21773, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 85, 38251, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Thane Yoregar - On Gossip Option 0 Selected - Cast Create Wildhammer Flare Gun'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=8457; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15, 8457, 0, 0, 0, 8, 0, 10772, 0, 0, 0, 0, 0, '', 'Show gossip option if player has the path of conquest rewarded'), +(15, 8457, 0, 0, 0, 8, 0, 10776, 0, 0, 1, 0, 0, '', 'Show gossip option if player does not have Dissension Amongst the Ranks rewarded'), +(15, 8457, 0, 0, 0, 2, 0, 31310, 1, 0, 1, 0, 0, '', 'Show gossip option if player does not have Wildhammer Flare Gun'); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_14_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_14_00_world.sql new file mode 100644 index 00000000000..71a17359756 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_14_00_world.sql @@ -0,0 +1,43 @@ +SET @CGUID := 76001; +UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry`=177746; +UPDATE `gameobject` SET `position_x`=-2288.696777, `position_y`=1345.580078, `position_z`=66.123787 WHERE `guid`=99892; + +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (11560); +DELETE FROM `creature_template_addon` WHERE `entry`=11560; +INSERT INTO `creature_template_addon` (`entry`,`bytes2`,`auras`) VALUES +(11560,1,17327); + +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (11560, 1156000, 177746, 17774600); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(177746, 1, 0, 0, 1, 0, 100, 1, 6000, 6000, 6000, 6000, 50, 177749, 180000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ghost Magnet - OOC no repeat - Summon gob'), -- A gob cannot summon a gob +(177746, 1, 1, 0, 1, 0, 100, 0, 6000, 6000, 6000, 6000, 45, 0, 1, 0, 0, 0, 0, 19, 11560, 70, 0, 0, 0, 0, 0, 'Ghost Magnet - ActionList - Set data 0'), +(11560, 0, 0, 1, 38, 0, 100, 1, 0, 1, 0, 0, 28, 34426, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Magrami Spectre - On dataset 0 1 - remove aura'), +(11560, 0, 1, 2, 61, 0, 100, 1, 0, 0, 0, 0, 80, 1156000, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Magrami Spectre - on link - Start script'), +(1156000, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Magrami Spectre - On script - Set run off'), +(1156000, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 20, 177746, 70, 0, 0, 0, 0, 0, 'Magrami Spectre - On script - move to pos'), +(1156000, 9, 2, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 49, 0, 0, 0, 0, 0, 0, 21, 30, 0, 0, 0, 0, 0, 0, 'Magrami Spectre - On script - ATTACK'), +(11560, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 41, 70000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Magrami Spectre - On Link - Despawn'), +(11560, 0, 2, 3, 25, 0, 100, 1, 0, 0, 0, 0, 11, 34426, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Magrami Spectre - on Reset - add aura'), +(11560, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 17327, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Magrami Spectre - on Reset - add aura'), +(11560, 0, 4, 0, 0, 0, 100, 1, 5000, 5000, 0, 0, 11, 18159, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Magrami Spectre - on script - add aura'), +(11560, 0, 5, 0, 0, 0, 100, 0, 2000, 2000, 7000, 7000, 11, 12531, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Magrami Spectre - on script - add aura'); + +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+16; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@CGUID+0, 11560, 1, 1, 1, -2254.859, 1330.685, 63.67144, 5.253441, 120, 0, 0), +(@CGUID+1, 11560, 1, 1, 1, -2288.117, 1333.648, 63.67144, 5.427974, 120, 0, 0), +(@CGUID+2, 11560, 1, 1, 1, -2317.772, 1378.803, 63.67144, 2.548181, 120, 0, 0), +(@CGUID+3, 11560, 1, 1, 1, -2245.802, 1315.414, 63.67144, 3.176499, 120, 0, 0), +(@CGUID+4, 11560, 1, 1, 1, -2276.162, 1328.752, 63.82001, 5.811946, 120, 0, 0), +(@CGUID+5, 11560, 1, 1, 1, -2281.066, 1339.434, 63.67144, 2.426008, 120, 0, 0), +(@CGUID+6, 11560, 1, 1, 1, -2265.949, 1334.62, 63.67144, 3.874631, 120, 0, 0), +(@CGUID+7, 11560, 1, 1, 1, -2266.548, 1308.922, 64.06808, 2.09432, 120, 0, 0), +(@CGUID+8, 11560, 1, 1, 1, -2275.962, 1315.779, 63.94889, 5.846853, 120, 0, 0), +(@CGUID+9, 11560, 1, 1, 1, -2285.754, 1323.675, 63.68898, 5.707227, 120, 0, 0), +(@CGUID+10, 11560, 1, 1, 1, -2311.181, 1387.165, 63.67143, 4.39823, 120, 0, 0), +(@CGUID+11, 11560, 1, 1, 1, -2255.519, 1311.52, 63.72472, 5.969026, 120, 0, 0), +(@CGUID+12, 11560, 1, 1, 1, -2292.626, 1380.353, 63.68015, 3.001966, 120, 0, 0), +(@CGUID+13, 11560, 1, 1, 1, -2309.959, 1347.675, 63.67144, 1.216367, 120, 0, 0), +(@CGUID+14, 11560, 1, 1, 1, -2295.897, 1361.538, 63.6894, 2.80998, 120, 0, 0), +(@CGUID+15, 11560, 1, 1, 1, -2305.648, 1359.731, 63.69492, 4.485496, 120, 0, 0), +(@CGUID+16, 11560, 1, 1, 1, -2256.498, 1321.57, 63.67144, 5.148721, 120, 0, 0); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_14_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_14_01_world.sql new file mode 100644 index 00000000000..f99651da7b9 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_14_01_world.sql @@ -0,0 +1,3 @@ +UPDATE `creature_template` SET `gossip_menu_id`=1285 WHERE `entry`=8436; +UPDATE `smart_scripts` SET `event_param1`=1286 WHERE `entryorguid`=8436 AND `source_type`=0 AND `id`=0; +UPDATE `gossip_menu_option` SET `action_menu_id`=0 WHERE `menu_id`=1286; diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_14_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_14_02_world.sql new file mode 100644 index 00000000000..0c9f0154dec --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_14_02_world.sql @@ -0,0 +1,17 @@ +UPDATE `creature` SET `guid`=76001 WHERE `guid`=214003; +UPDATE `creature` SET `guid`=76002 WHERE `guid`=214004; +UPDATE `creature` SET `guid`=76003 WHERE `guid`=214005; +UPDATE `creature` SET `guid`=76004 WHERE `guid`=214006; +UPDATE `creature` SET `guid`=76005 WHERE `guid`=214007; +UPDATE `creature` SET `guid`=76006 WHERE `guid`=214008; +UPDATE `creature` SET `guid`=76007 WHERE `guid`=214009; +UPDATE `creature` SET `guid`=76008 WHERE `guid`=214010; +UPDATE `creature` SET `guid`=76009 WHERE `guid`=214011; +UPDATE `creature` SET `guid`=76010 WHERE `guid`=214012; +UPDATE `creature` SET `guid`=76011 WHERE `guid`=214013; +UPDATE `creature` SET `guid`=76012 WHERE `guid`=214014; +UPDATE `creature` SET `guid`=76013 WHERE `guid`=214015; +UPDATE `creature` SET `guid`=76014 WHERE `guid`=214016; +UPDATE `creature` SET `guid`=76015 WHERE `guid`=214017; +UPDATE `creature` SET `guid`=76016 WHERE `guid`=214018; +UPDATE `creature` SET `guid`=76017 WHERE `guid`=214019; diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_00_world.sql new file mode 100644 index 00000000000..659d167e552 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_00_world.sql @@ -0,0 +1,316 @@ +SET @GUID:=14830; -- 6 free GO guid required (spell focus) +SET @SUMMON := 49991; +SET @GOLEM := 24825; +SET @BENCH := 186958; +SET @Relic := 24824; +SET @Triggger :=24845; +SET @IronDwarf :=24846; +SET @LOKEN := 24847; +SET @Ouvrier:= 23672; +SET @Maitre:=23675; +SET @Garde:=23673; +SET @IRONGolem:=24271; +SET @Earth:=24340; +SET @A1A2:=24826; +SET @B1B2:=24827; +SET @C1C2:=24828; +SET @D1:=24831; +SET @D2:=24829; +SET @D3:=24832; + +DELETE FROM `spell_target_position` WHERE `id` in (49992); +INSERT INTO `spell_target_position` (`id`,`target_map`,`target_position_x`,`target_position_y`,`target_position_z`,`target_orientation`) VALUES +(49992, 571, 478.951782, -5941.529297, 308.749969, 0.419872); + +UPDATE `creature_template` SET `spell1`=44608, `spell2`=44610, `spell3`=44609,`AIName`='SmartAI', `InhabitType`=5 WHERE `entry`=@GOLEM; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (@LOKEN, @IronDwarf, @Triggger, @Relic, @Ouvrier, @Maitre, @Garde, @IRONGolem, @Earth, @A1A2, @B1B2, @C1C2, @D1, @D2, @D3); +UPDATE `creature_template` SET `faction`= 1954 WHERE `entry`=@LOKEN; +UPDATE `creature_template` SET `flags_extra`= 0 WHERE `entry`=@Triggger; + +DELETE FROM `creature` WHERE `id` IN (24846, 24847); +DELETE FROM `creature_addon` WHERE `guid` =97731; +UPDATE `creature` SET `spawndist`=0, `MovementType`=0 WHERE `id`= @Triggger; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@GOLEM AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Relic AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@BENCH AND `source_type`=1 AND `id` IN (6,7); +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Triggger AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Triggger*100 AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@IronDwarf AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@IronDwarf*100 AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@LOKEN AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@LOKEN*100 AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Garde AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Garde*100 AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Garde*100+1 AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Ouvrier AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Ouvrier*100 AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Ouvrier*100+1 AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Earth AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Maitre AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Maitre*100 AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Maitre*100+1 AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@IRONGolem AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@IRONGolem*100 AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@IRONGolem*100+1 AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@A1A2*100 AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@B1B2*100 AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@C1C2*100 AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@D1*100 AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@D2*100 AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@D3*100 AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@BENCH,1,6,7,62,0,100,0,9024,3,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Work Bench - Gossip select - Close gossip'), +(@BENCH,1,7,0,61,0,100,0,0,0,0,0,85,@SUMMON,2,0,0,0,0,7,0,0,0,0,0,0,0,'Work Bench - Gossip select - Summon Iron Rune Construct'), +(@GOLEM,0,0,0,54,0,100,0,0,0,0,0,75,44643,0,0,0,0,0,23,0,0,0,0,0,0,0,'Iron Rune Construct - Just Summoned - Add aura to owner'), +(@GOLEM,0,1,0,28,0,100,0,0,0,0,0,28,44643,0,0,0,0,0,23,0,0,0,0,0,0,0,'Iron Rune Construct - Passenger removed - remove aura from owner'), +(@Relic,0,0,0,8,0,100,0,44610,0,0,0,41,5000,0,0,0,0,0,1,0,0,0,0,0,0,0,'Relict - SpellHit - Despawn'), +(@Triggger,0,0,0,10,0,100,0,1,20,180000,180000,80,@Triggger*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'Triggger - LOS - Action list'), +(@Triggger*100,9,0,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,306.098907, -5706.150391, 102.435051, 4.96977,'Triggger - Action list - Summon'), +(@Triggger*100,9,1,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,311.025482, -5702.801270, 101.934959, 5.187225,'Triggger - Action list - Summon'), +(@Triggger*100,9,2,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,309.754456, -5703.156250, 102.070854, 5.187225,'Triggger - Action list - Summon'), +(@Triggger*100,9,3,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,308.222504, -5703.797363, 102.231758, 5.187225,'Triggger - Action list - Summon'), +(@Triggger*100,9,4,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,307.043610, -5704.315430, 102.356087, 5.187225,'Triggger - Action list - Summon'), +(@Triggger*100,9,5,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,304.169464, -5706.838379, 102.696602, 5.187225,'Triggger - Action list - Summon'), +(@Triggger*100,9,6,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,303.129547, -5707.277344, 102.978165, 5.187225,'Triggger - Action list - Summon'), +(@Triggger*100,9,7,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,297.246,-5726.82,96.2681,0.347607,'Triggger - Action list - Summon'), +(@Triggger*100,9,8,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,292.82,-5726.04,96.5843,0.347607,'Triggger - Action list - Summon'), +(@Triggger*100,9,9,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,292.562,-5728.57,96.5857,0.347607,'Triggger - Action list - Summon'), +(@Triggger*100,9,10,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,292.15,-5727.42,96.5874,0.347607,'Triggger - Action list - Summon'), +(@Triggger*100,9,11,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,294.578,-5730.09,96.2958,0.347607,'Triggger - Action list - Summon'), +(@Triggger*100,9,12,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,296.196,-5730.17,96.0082,0.347607,'Triggger - Action list - Summon'), +(@Triggger*100,9,13,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,297.603,-5730.79,95.6955,0.347607,'Triggger - Action list - Summon'), +(@Triggger*100,9,14,0,0,0,100,0,0,0,0,0,12,@IronDwarf,5,0,0,0,0,8,0,0,0,299.397,-5729.56,95.7274,0.347607,'Triggger - Action list - Summon'), +(@Triggger*100,9,15,0,0,0,100,0,0,0,0,0,12,@LOKEN,5,0,0,0,0,8,0,0,0,315.101,-5723.06,96.2541,3.05433,'Triggger - Action list - Summon'), +(@Triggger*100,9,16,0,0,0,100,0,70000,70000,0,0,41,0,0,0,0,0,0,11,@IronDwarf,40,0,0,0,0,0,'Triggger - Action List - Despawn'), +(@Triggger,0,1,0,25,0,100,0,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Triggger - On reset - set Invisible'), +(@IronDwarf,0,0,0,54,0,100,0,0,0,0,0,80,@IronDwarf*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'IronDwarf - Just Summoned - Action List'), +(@IronDwarf*100,9,0,0,0,0,100,0,0,0,0,0,59,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'IronDwarf - Action List - Set run off'), +(@IronDwarf*100,9,1,0,0,0,100,0,0,0,0,0,46,8,0,0,0,0,0,1,0,0,0,0,0,0,0,'IronDwarf - Action List - Move forward'), +(@IronDwarf*100,9,2,0,0,0,100,0,4000,4000,0,0,11,68442,0,0,0,0,0,1,0,0,0,0,0,0,0,'IronDwarf - Action List - Cast Kneels'), +(@LOKEN,0,0,0,54,0,100,0,0,0,0,0,80,@LOKEN*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'LOKEN - Just Summoned - Action List'), +(@LOKEN*100,9,0,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'LOKEN - Action List - Talk'), +(@LOKEN*100,9,1,0,0,0,100,0,6000,6000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'LOKEN - Action List - Talk'), +(@LOKEN*100,9,2,0,0,0,100,0,6000,6000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'LOKEN - Action List - Talk'), +(@LOKEN*100,9,3,0,0,0,100,0,8000,8000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,'LOKEN - Action List - Talk'), +(@LOKEN*100,9,4,0,0,0,100,0,9000,9000,0,0,1,4,0,0,0,0,0,1,0,0,0,0,0,0,0,'LOKEN - Action List - Talk'), +(@LOKEN*100,9,5,0,0,0,100,0,9000,9000,0,0,1,5,0,0,0,0,0,1,0,0,0,0,0,0,0,'LOKEN - Action List - Talk'), +(@LOKEN*100,9,6,0,0,0,100,0,7000,7000,0,0,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,'LOKEN - Action List - Talk'), +(@LOKEN*100,9,7,0,0,0,100,0,0,0,0,0,11,44682,0,0,0,0,0,21,30,0,0,0,0,0,0,'LOKEN - Action List - Cast Credit'), +(@LOKEN*100,9,8,0,0,0,100,0,2000,2000,0,0,41,0,0,0,0,0,0,11,@IronDwarf,40,0,0,0,0,0,'LOKEN - Action List - Despawn Dwarfs'), +(@LOKEN*100,9,9,0,0,0,100,0,0,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'LOKEN - Action List - Despawn'), +(@IronDwarf,0,1,0,4,0,100,0,0,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'IronDwarf - On aggro - despawn'), +(@LOKEN,0,1,0,4,0,100,0,0,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'LOKEN - On aggro - despawn'), +(@Garde,0,0,0,10,0,20,0,1,9,60000,60000,80,@Garde*100,0,0,0,0,0,1,0,0,0,0,0,0,0,'Garde - LOS - Action list'), +(@Garde*100,9,0,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Garde - Action list - TALK'), +(@Garde*100,9,1,0,0,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Garde - Action list - Set Event phase1'), +(@Garde*100,9,2,0,0,0,100,0,0,0,0,0,103,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Garde - Action list - Root'), +(@Garde*100,9,3,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,19,@GOLEM,20,0,0,0,0,0,'Garde - Action list - Set Orientation'), +(@Garde*100,9,4,0,0,0,100,0,10000,10000,0,0,103,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Garde - Action list - remove root'), +(@Garde*100,9,5,0,0,1,100,0,0,0,0,0,28,44643,0,0,0,0,0,21,50,0,0,0,0,0,0,'Garde - Action list - remove Aura'), +(@Garde*100,9,6,0,0,1,100,0,0,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,'Garde - Action list - Talk'), +(@Garde,0,1,0,8,1,100,0,44609,0,0,0,80,@Garde*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Garde - spell hit - action list'), +(@Garde*100+1,9,0,0,0,0,100,0,0,0,0,0,22,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Garde - Action list - Set Event phase 0'), +(@Garde*100+1,9,1,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,19,@GOLEM,20,0,0,0,0,0,'Garde - Action list - TALK'), +(@Garde*100+1,9,2,0,0,0,100,0,5000,5000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Garde - Action list - TALK'), +(@Garde,0,2,0,0,0,100,0,5000,5000,30000,30000,11,42580,0,0,0,0,0,2,0,0,0,0,0,0,0,'Garde - IC - Cast'), +(@Garde,0,3,0,4,0,100,0,0,0,0,0,11,49758,0,0,0,0,0,2,0,0,0,0,0,0,0,'Garde - On aggro - Cast'), +(@Ouvrier,0,0,0,10,0,20,0,1,9,60000,60000,80,@Ouvrier*100,0,0,0,0,0,1,0,0,0,0,0,0,0,'Ouvrier - LOS - Action list'), +(@Ouvrier*100,9,0,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Ouvrier - Action list - TALK'), +(@Ouvrier*100,9,1,0,0,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Ouvrier - Action list - Set Event phase1'), +(@Ouvrier*100,9,2,0,0,0,100,0,0,0,0,0,103,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Ouvrier - Action list - Root'), +(@Ouvrier*100,9,3,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,19,@GOLEM,20,0,0,0,0,0,'Ouvrier - Action list - Set Orientation'), +(@Ouvrier*100,9,4,0,0,0,100,0,10000,10000,0,0,103,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Ouvrier - Action list - remove root'), +(@Ouvrier*100,9,5,0,0,1,100,0,0,0,0,0,28,44643,0,0,0,0,0,21,50,0,0,0,0,0,0,'Ouvrier - Action list - remove Aura'), +(@Ouvrier*100,9,6,0,0,1,100,0,0,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,'Ouvrier - Action list - Talk'), +(@Ouvrier,0,1,0,8,1,100,0,44609,0,0,0,80,@Ouvrier*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Ouvrier - spell hit - action list'), +(@Ouvrier*100+1,9,0,0,0,0,100,0,0,0,0,0,22,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Ouvrier - Action list - Set Event phase 0'), +(@Ouvrier*100+1,9,1,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,19,@GOLEM,20,0,0,0,0,0,'Ouvrier - Action list - TALK'), +(@Ouvrier*100+1,9,2,0,0,0,100,0,5000,5000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Ouvrier - Action list - TALK'), +(@Ouvrier,0,2,0,0,0,100,0,5000,5000,5000,8000,11,49749,0,0,0,0,0,2,0,0,0,0,0,0,0,'Ouvrier - IC - Cast'), +(@Maitre,0,0,0,10,0,20,0,1,9,60000,60000,80,@Maitre*100,0,0,0,0,0,1,0,0,0,0,0,0,0,'Maitre - LOS - Action list'), +(@Maitre*100,9,0,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Maitre - Action list - TALK'), +(@Maitre*100,9,1,0,0,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Maitre - Action list - Set Event phase1'), +(@Maitre*100,9,2,0,0,0,100,0,0,0,0,0,103,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Maitre - Action list - Root'), +(@Maitre*100,9,3,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,19,@GOLEM,20,0,0,0,0,0,'Maitre - Action list - Set Orientation'), +(@Maitre*100,9,4,0,0,0,100,0,10000,10000,0,0,103,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Maitre - Action list - remove root'), +(@Maitre*100,9,5,0,0,1,100,0,0,0,0,0,28,44643,0,0,0,0,0,21,50,0,0,0,0,0,0,'Maitre - Action list - remove Aura'), +(@Maitre*100,9,6,0,0,1,100,0,0,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,'Maitre - Action list - Talk'), +(@Maitre,0,1,0,8,1,100,0,44609,0,0,0,80,@Maitre*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Maitre - spell hit - action list'), +(@Maitre*100+1,9,0,0,0,0,100,0,0,0,0,0,22,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Maitre - Action list - Set Event phase 0'), +(@Maitre*100+1,9,1,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,19,@GOLEM,20,0,0,0,0,0,'Maitre - Action list - TALK'), +(@Maitre*100+1,9,2,0,0,0,100,0,5000,5000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Maitre - Action list - TALK'), +(@Maitre,0,2,0,0,0,100,0,5000,5000,7000,10000,11,49753,0,0,0,0,0,2,0,0,0,0,0,0,0,'Garde - IC - Cast'), +(@IRONGolem,0,0,0,10,0,20,0,1,9,60000,60000,80,@IRONGolem*100,0,0,0,0,0,1,0,0,0,0,0,0,0,'IRONGolem - LOS - Action list'), +(@IRONGolem*100,9,0,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'IRONGolem - Action list - TALK'), +(@IRONGolem*100,9,1,0,0,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'IRONGolem - Action list - Set Event phase1'), +(@IRONGolem*100,9,2,0,0,0,100,0,0,0,0,0,103,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'IRONGolem - Action list - Root'), +(@IRONGolem*100,9,3,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,19,@GOLEM,20,0,0,0,0,0,'IRONGolem - Action list - Set Orientation'), +(@IRONGolem*100,9,4,0,0,0,100,0,10000,10000,0,0,103,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'IRONGolem - Action list - remove root'), +(@IRONGolem*100,9,5,0,0,1,100,0,0,0,0,0,28,44643,0,0,0,0,0,21,50,0,0,0,0,0,0,'IRONGolem - Action list - remove Aura'), +(@IRONGolem*100,9,6,0,0,1,100,0,0,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,'IRONGolem - Action list - talk'), +(@IRONGolem,0,1,0,8,1,100,0,44609,0,0,0,80,@IRONGolem*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,'IRONGolem - spell hit - action list'), +(@IRONGolem*100+1,9,0,0,0,0,100,0,0,0,0,0,22,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'IRONGolem - Action list - Set Event phase 0'), +(@IRONGolem*100+1,9,1,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,19,@GOLEM,20,0,0,0,0,0,'IRONGolem - Action list - TALK'), +(@IRONGolem*100+1,9,2,0,0,0,100,0,5000,5000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'IRONGolem - Action list - TALK'), +(@IRONGolem,0,2,0,0,0,100,0,5000,5000,7000,10000,11,49729,0,0,0,0,0,2,0,0,0,0,0,0,0,'IRONGolem - IC - Cast'), +(@IRONGolem,0,3,0,1,0,100,0,50000,60000,60000,90000,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,'IRONGolem - ooc - talk'), +(@Earth,0,0,0,0,0,100,0,2000,5000,6000,8000,11,49742,0,0,0,0,0,2,0,0,0,0,0,0,0,'IRONGolem - IC - Cast'), +(@GOLEM,0,2,0,8,0,100,0,44626,0,5000,5000,80,@A1A2*100,0,0,0,0,0,19,@A1A2,1,0,0,0,0,0,'Iron Rune Construct - On spellhit - Action List'), +(@A1A2*100,9,0,0,0,0,100,0,0,0,0,0,9,0,0,0,0,0,0,14,57776,186953,0,0,0,0,0,'A1A2 - Action list - Activate Gobject'), +(@A1A2*100,9,1,0,0,0,100,0,0,0,0,0,45,0,1,0,0,0,0,19,@GOLEM,10,0,0,0,0,0,'A1A2 - Action list - SetData'), +(@GOLEM,0,3,0,8,0,100,0,44626,0,5000,5000,80,@B1B2*100,0,0,0,0,0,19,@B1B2,1,0,0,0,0,0,'Iron Rune Construct - On spellhit - Action List'), +(@B1B2*100,9,0,0,0,0,100,0,0,0,0,0,9,0,0,0,0,0,0,14,57915,186960,0,0,0,0,0,'B1B2 - Action list - Activate Gobject'), +(@B1B2*100,9,1,0,0,0,100,0,0,0,0,0,45,0,2,0,0,0,0,19,@GOLEM,10,0,0,0,0,0,'B1B2 - Action list - SetData'), +(@GOLEM,0,4,0,8,0,100,0,44626,0,5000,5000,80,@C1C2*100,0,0,0,0,0,19,@C1C2,1,0,0,0,0,0,'Iron Rune Construct - On spellhit - Action List'), +(@C1C2*100,9,0,0,0,0,100,0,0,0,0,0,9,0,0,0,0,0,0,14,57963,186961,0,0,0,0,0,'C1C2 - Action list - Activate Gobject'), +(@C1C2*100,9,1,0,0,0,100,0,0,0,0,0,45,0,3,0,0,0,0,19,@GOLEM,10,0,0,0,0,0,'C1C2 - Action list - SetData'), +(@GOLEM,0,5,0,8,0,100,0,44626,0,5000,5000,80,@D1*100,0,0,0,0,0,19,@D1,1,0,0,0,0,0,'Iron Rune Construct - On spellhit - Action List'), +(@D1*100,9,0,0,0,0,100,0,0,0,0,0,9,0,0,0,0,0,0,14,57972,186962,0,0,0,0,0,'D1 - Action list - Activate Gobject'), +(@D1*100,9,1,0,0,0,100,0,0,0,0,0,45,0,4,0,0,0,0,19,@GOLEM,10,0,0,0,0,0,'D1 - Action list - SetData'), +(@GOLEM,0,6,0,8,0,100,0,44626,0,5000,5000,80,@D2*100,0,0,0,0,0,19,@D2,1,0,0,0,0,0,'Iron Rune Construct - On spellhit - Action List'), +(@D2*100,9,0,0,0,0,100,0,0,0,0,0,9,0,0,0,0,0,0,14,57988,186963,0,0,0,0,0,'D2 - Action list - Activate Gobject'), +(@D2*100,9,1,0,0,0,100,0,0,0,0,0,45,0,5,0,0,0,0,19,@GOLEM,10,0,0,0,0,0,'D2 - Action list - SetData'), +(@GOLEM,0,7,0,8,0,100,0,44626,0,5000,5000,80,@D3*100,0,0,0,0,0,19,@D3,1,0,0,0,0,0,'Iron Rune Construct - On spellhit - Action List'), +(@D3*100,9,0,0,0,0,100,0,0,0,0,0,9,0,0,0,0,0,0,14,66097,186964,0,0,0,0,0,'D3 - Action list - Activate Gobject'), +(@D3*100,9,1,0,0,0,100,0,0,0,0,0,45,0,6,0,0,0,0,19,@GOLEM,10,0,0,0,0,0,'D3 - Action list - SetData'), +(@GOLEM,0,8,0,38,0,100,0,0,1,0,0,53,1,@A1A2,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - On data set - Start waypoint'), +(@GOLEM,0,9,0,38,0,100,0,0,2,0,0,53,1,@B1B2,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - On data set - Start waypoint'), +(@GOLEM,0,10,0,38,0,100,0,0,3,0,0,53,1,@C1C2,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - On data set - Start waypoint'), +(@GOLEM,0,11,0,38,0,100,0,0,4,0,0,53,1,@D1,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - On data set - Start waypoint'), +(@GOLEM,0,12,0,38,0,100,0,0,5,0,0,53,1,@D2,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - On data set - Start waypoint'), +(@GOLEM,0,13,0,38,0,100,0,0,6,0,0,53,1,@D3,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - On data set - Start waypoint'), +(@GOLEM,0,14,0,58,0,100,0,0,0,0,0,28,44626,0,0,0,0,0,1,0,0,0,0,0,0,0,'Iron Rune Construct - On waypoint end - Remove aura'); + +DELETE FROM `waypoints` WHERE `entry` IN (@C1C2, @B1B2, @A1A2, @D1, @D2, @D3); +INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES +(@C1C2,1, 250.667023, -5770.241699, 252.249847,'Iron Rune Construct'), +(@C1C2,2, 158.802368, -5823.064941, 7.080285,'Iron Rune Construct'), +(@B1B2,1, 268.167053, -5814.819824, 282.507080,'Iron Rune Construct'), +(@B1B2,2, 255.435913, -5891.186035, 83.068146,'Iron Rune Construct'), +(@A1A2,1, 221.699432, -5736.851074, 289.626099,'Iron Rune Construct'), +(@A1A2,2, 157.139877, -5712.004883, 189.551346,'Iron Rune Construct'), +(@D1,1, 212.711884, -5808.783691, 297.261902,'Iron Rune Construct'), +(@D1,2, 276.179016, -5755.332031, 268.456543,'Iron Rune Construct'), +(@D2,1, 228.848938, -5740.563477, 283.448700,'Iron Rune Construct'), +(@D2,2, 278.266785, -5758.165039, 268.454834,'Iron Rune Construct'), +(@D3,1, 266.918884, -5837.802246, 304.154144,'Iron Rune Construct'), +(@D3,2, 280.913208, -5761.616699, 268.456696,'Iron Rune Construct'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=1 AND `SourceEntry`=@Triggger; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`, `ErrorTextId`,`ScriptName`,`Comment`) VALUES +(22,1,@Triggger,0,31,3,24825,0,0,'','event require npc 24825'); +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=1 AND `SourceEntry`=@IRONGolem; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`, `ErrorTextId`,`ScriptName`,`Comment`) VALUES +(22,1,@IRONGolem,0,31,3,24825,0,0,'','event require npc 24825'); +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=1 AND `SourceEntry`=@Garde; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`, `ErrorTextId`,`ScriptName`,`Comment`) VALUES +(22,1,@Garde,0,31,3,24825,0,0,'','event require npc 24825'); +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=1 AND `SourceEntry`=@Maitre; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`, `ErrorTextId`,`ScriptName`,`Comment`) VALUES +(22,1,@Maitre,0,31,3,24825,0,0,'','event require npc 24825'); +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=1 AND `SourceEntry`=@Ouvrier; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`, `ErrorTextId`,`ScriptName`,`Comment`) VALUES +(22,1,@Ouvrier,0,31,3,24825,0,0,'','event require npc 24825'); + +DELETE FROM `creature_text` WHERE `entry`IN (@LOKEN, @GOLEM, @Garde, @Ouvrier, @Maitre, @IRONGolem); +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextID`) VALUES +(@LOKEN,0,0,"The sound of thunder roars throughout the cavern.",41,9,100,0,0,0,'LOKEN', 23927), +(@LOKEN,1,0,"Come, minions! Your master calls!",14,9,100,0,0,0,'LOKEN', 23922), +(@LOKEN,2,0,"The work of your brothers in the Storm Peaks has reached a frenzied pace. Soon, Father will be freed.",14,9,100,0,0,0,'LOKEN', 23923), +(@LOKEN,3,0,"Your brothers to the north have subjugated the stone behemoths and set them on the path to Ulduar. Soon, the remaining defenses of the Pantheon will be neutralized.",14,9,100,0,0,0,'LOKEN', 23924), +(@LOKEN,4,0,"The three fissures opened by the mortals of this region must be silenced. The earth hears and sees what we do and will continue to interfere with our efforts if the way is not closed.",14,9,100,0,0,0,'LOKEN', 23925), +(@LOKEN,5,0,"Bury this place! Your master demands it!",14,9,100,0,0,0,'LOKEN', 23926), +(@LOKEN,6,0,"The sound of thunder dissipates.",41,9,100,0,0,0,'LOKEN', 23928), +(@GOLEM,0,0,"Alert! Alert! Construct senses that enemies have breeched our defenses. Increase pace.",12,9,100,0,0,0,'GOLEM', 23895), +(@GOLEM,0,1,"Construct class carrier reporting for duty. Primary function: Overseeing.",12,9,100,0,0,0,'GOLEM', 23896), +(@GOLEM,0,2,"There is nothing to see here. Proceed with your mandated duties.",12,9,100,0,0,0,'GOLEM', 23897), +(@GOLEM,0,3,"To interfere with construct's function results in termination. Move along.",12,9,100,0,0,0,'GOLEM', 23899), +(@GOLEM,0,4,"Construct must not be questioned by iron dwarf servant. Commence deconstruction.",12,9,100,0,0,0,'GOLEM', 23900), +(@GOLEM,0,5,"Construct is not authorized to communicate with lesser beings. Being must double their efforts.",12,9,100,0,0,0,'GOLEM', 23901), +(@GOLEM,0,6,"Did you lose your wallet? Construct has found wallet with overabundance of currency.",12,9,100,0,0,0,'GOLEM', 23902), +(@Garde,0,0,"Halt! Identify yourself immediately!",12,9,100,0,0,0,'Garde', 23903), +(@Garde,0,1,"This section is off-limits!",12,9,100,0,0,0,'Garde', 23904), +(@Garde,0,2,"I've never seen one of you around here.",12,9,100,0,0,0,'Garde', 23905), +(@Garde,0,3,"Hold it! Stop!",12,9,100,0,0,0,'Garde', 23906), +(@Garde,0,4,"Stop!! Stop!!! Scrap metal moves itself now?",12,9,100,0,0,0,'Garde', 23907), +(@Garde,1,2,"Right... my bad. Now where was I?",12,9,100,0,0,0,'Garde', 23910), +(@Garde,1,3,"All hail the great creator!",12,9,100,0,0,0,'Garde', 23911), +(@Garde,1,4,"You're right, of course. Carry on.",12,9,100,0,0,0,'Garde', 23912), +(@Garde,1,5,"Forgive my insolence!",12,9,100,0,0,0,'Garde', 23913), +(@Garde,1,6,"We will double our efforts!",12,9,100,0,0,0,'Garde', 23915), +(@Garde,2,0,"Destroy earthen infestation.",12,9,100,0,0,0,'Garde', 23921), +(@Garde,2,1,"Wrong answer!",12,9,100,0,0,0,'Garde', 23908), +(@Ouvrier,0,0,"Halt! Identify yourself immediately!",12,9,100,0,0,0,'Garde', 23903), +(@Ouvrier,0,1,"This section is off-limits!",12,9,100,0,0,0,'Garde', 23904), +(@Ouvrier,0,2,"I've never seen one of you around here.",12,9,100,0,0,0,'Garde', 23905), +(@Ouvrier,0,3,"Hold it! Stop!",12,9,100,0,0,0,'Garde', 23906), +(@Ouvrier,0,4,"Stop!! Stop!!! Scrap metal moves itself now?",12,9,100,0,0,0,'Garde', 23907), +(@Ouvrier,1,2,"Right... my bad. Now where was I?",12,9,100,0,0,0,'Garde', 23910), +(@Ouvrier,1,3,"All hail the great creator!",12,9,100,0,0,0,'Garde', 23911), +(@Ouvrier,1,4,"You're right, of course. Carry on.",12,9,100,0,0,0,'Garde', 23912), +(@Ouvrier,1,5,"Forgive my insolence!",12,9,100,0,0,0,'Garde', 23913), +(@Ouvrier,1,6,"We will double our efforts!",12,9,100,0,0,0,'Garde', 23915), +(@Ouvrier,2,0,"Destroy earthen infestation.",12,9,100,0,0,0,'Garde', 23921), +(@Ouvrier,2,1,"Wrong answer!",12,9,100,0,0,0,'Garde', 23908), +(@Maitre,0,0,"Halt! Identify yourself immediately!",12,9,100,0,0,0,'Garde', 23903), +(@Maitre,0,1,"This section is off-limits!",12,9,100,0,0,0,'Garde', 23904), +(@Maitre,0,2,"I've never seen one of you around here.",12,9,100,0,0,0,'Garde', 23905), +(@Maitre,0,3,"Hold it! Stop!",12,9,100,0,0,0,'Garde', 23906), +(@Maitre,0,4,"Stop!! Stop!!! Scrap metal moves itself now?",12,9,100,0,0,0,'Garde', 23907), +(@Maitre,1,2,"Right... my bad. Now where was I?",12,9,100,0,0,0,'Garde', 23910), +(@Maitre,1,3,"All hail the great creator!",12,9,100,0,0,0,'Garde', 23911), +(@Maitre,1,4,"You're right, of course. Carry on.",12,9,100,0,0,0,'Garde', 23912), +(@Maitre,1,5,"Forgive my insolence!",12,9,100,0,0,0,'Garde', 23913), +(@Maitre,1,6,"We will double our efforts!",12,9,100,0,0,0,'Garde', 23915), +(@Maitre,2,0,"Destroy earthen infestation.",12,9,100,0,0,0,'Garde', 23921), +(@Maitre,2,1,"Wrong answer!",12,9,100,0,0,0,'Garde', 23908), +(@IRONGolem,0,0,"Halt! Identify yourself immediately!",12,9,100,0,0,0,'Garde', 23903), +(@IRONGolem,0,1,"This section is off-limits!",12,9,100,0,0,0,'Garde', 23904), +(@IRONGolem,0,2,"I've never seen one of you around here.",12,9,100,0,0,0,'Garde', 23905), +(@IRONGolem,0,3,"Hold it! Stop!",12,9,100,0,0,0,'Garde', 23906), +(@IRONGolem,0,4,"Stop!! Stop!!! Scrap metal moves itself now?",12,9,100,0,0,0,'Garde', 23907), +(@IRONGolem,1,2,"Right... my bad. Now where was I?",12,9,100,0,0,0,'Garde', 23910), +(@IRONGolem,1,3,"All hail the great creator!",12,9,100,0,0,0,'Garde', 23911), +(@IRONGolem,1,4,"You're right, of course. Carry on.",12,9,100,0,0,0,'Garde', 23912), +(@IRONGolem,1,5,"Forgive my insolence!",12,9,100,0,0,0,'Garde', 23913), +(@IRONGolem,1,6,"We will double our efforts!",12,9,100,0,0,0,'Garde', 23915), +(@IRONGolem,2,0,"Destroy earthen infestation.",12,9,100,0,0,0,'Garde', 23921), +(@IRONGolem,2,1,"Wrong answer!",12,9,100,0,0,0,'Garde', 23908), +(@IRONGolem,3,0,"Continue deconstruction.",12,9,100,0,0,0,'Garde', 23919), +(@IRONGolem,3,1,"Do not loiter.",12,9,100,0,0,0,'Garde', 23918), +(@IRONGolem,3,2,"Work must continue. Double your efforts.",12,9,100,0,0,0,'Garde', 23916), +(@IRONGolem,3,3,"Brontes sees all.",12,9,100,0,0,0,'Garde', 23917), +(@IRONGolem,3,4,"Reinforcements en route. Function must be unabated.",12,9,100,0,0,0,'Garde', 23920), +(@IRONGolem,3,5,"Do you bring word from the creator?",12,9,100,0,0,0,'Garde', 23914), +(@IRONGolem,3,6,"All hail the great creator.",12,9,100,0,0,0,'Garde', 23898); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=44609; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, 44609, 0, 31, 3, 24271, 0, 0, '', 'Bluff target'), +(13, 1, 44609, 1, 31, 3, 23673, 0, 0, '', 'Bluff target'), +(13, 1, 44609, 2, 31, 3, 23672, 0, 0, '', 'Bluff target'), +(13, 1, 44609, 3, 31, 3, 23675, 0, 0, '', 'Bluff target'); + +SET @ID := 9024; +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=@ID AND `SourceEntry`=3; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(15,@ID,3,0,9,11495,0,0,0,'','Show gossip option if player has quest The Delicate Sound of Thunder'), +(15,@ID,3,1,9,11494,0,0,0,'','Show gossip option if player has quest Lightning Infused Relics'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=44610; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, 44610, 0, 31, 3, 24824, 0, 0, '', 'Collect Data target'); + +DELETE FROM `gameobject` WHERE `guid` in (@GUID+0, @GUID+1, @GUID+2, @GUID+3, @GUID+4, @GUID+5); +INSERT INTO `gameobject` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`animprogress`,`state`) VALUES +(@GUID+0,186959,571,1,1,276.169006, -5755.250000, 268.455994,0,0,0,0,1,120,255,1), +(@GUID+1,186959,571,1,1,278.528992, -5758.350098, 268.455994,0,0,0,0,1,120,255,1), +(@GUID+2,186959,571,1,1,280.851990, -5761.399902, 268.455994,0,0,0,0,1,120,255,1), +(@GUID+3,186959,571,1,1,158.707001, -5823.319824, 7.006820,0,0,0,0,1,120,255,1), +(@GUID+4,186959,571,1,1,157.201996, -5712.160156, 189.315002,0,0,0,0,1,120,255,1), +(@GUID+5,186959,571,1,1,255.533997, -5891.359863, 82.992897,0,0,0,0,1,120,255,1); + +UPDATE `creature` SET `spawndist`=0, `MovementType`=0 WHERE `id` IN (24828, 24829, 24831, 24832, 24826, 24827); + +DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = 44608; +INSERT INTO `spell_linked_spell` VALUES (44608, 44626, 0, 'Rocket Jump'); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_01_world.sql new file mode 100644 index 00000000000..3df79d26dad --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_01_world.sql @@ -0,0 +1,32 @@ +-- scriptsupport for questaccept of [Q] Eranikus, Tyrant of the Dream +-- Malfurion Stormrage SAI +SET @ENTRY := 15362; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,1,54,0,100,0,0,0,0,0,83,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Malfurion Stormrage - On Just Summoned - Remove Npc Flag Questgiver"), +(@ENTRY,0,1,0,61,0,100,0,0,0,0,0,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Malfurion Stormrage - On Just Summoned - Run Script"); + +-- Actionlist SAI +SET @ENTRY := 1536200; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,3000,3000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Say Line 0"), +(@ENTRY,9,1,0,0,0,100,0,1500,1500,0,0,5,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Play Emote 2"), +(@ENTRY,9,2,0,0,0,100,0,2000,2000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Say Line 1"), +(@ENTRY,9,3,0,0,0,100,0,1000,1000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Say Line 2"), +(@ENTRY,9,4,0,0,0,100,0,2000,2000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Say Line 3"), +(@ENTRY,9,5,0,0,0,100,0,2000,2000,0,0,1,4,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Say Line 4"), +(@ENTRY,9,6,0,0,0,100,0,0,0,0,0,82,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Add Npc Flag Questgiver"); + +DELETE FROM `creature_text` WHERE `entry`=15362; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(15362, 0, 0, 'The walls of the chamber tremble. Something is happening...', 16, 0, 100, 0, 0, 0, 11191, 0, 'Malfurion Stormrage'), +(15362, 1, 0, 'Be steadfast, champion. I know why it is that you are here and I know what it is that you seek. Eranikus will not give up the shard freely. He has been twisted... twisted by the same force that you seek to destroy.', 12, 0, 100, 0, 0, 0, 11193, 0, 'Malfurion Stormrage'), +(15362, 2, 0, 'Are you really surprised? Is it hard to believe that the power of an Old God could reach even inside the Dream? It is true - Eranikus, Tyrant of the Dream, wages a battle against us all. The Nightmare follows in his wake of destruction.', 12, 0, 100, 0, 0, 0, 11194, 0, 'Malfurion Stormrage'), +(15362, 3, 0, 'Understand this, Eranikus wants nothing more than to be brought to Azeroth from the Dream. Once he is out, he will stop at nothing to destroy my physical manifestation. This, however, is the only way in which you could recover the scepter shard.', 12, 0, 100, 0, 0, 0, 11195, 0, 'Malfurion Stormrage'), +(15362, 4, 0, 'You will bring him back into this world, champion.', 12, 0, 100, 0, 0, 0, 11196, 0, 'Malfurion Stormrage'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=1 AND `SourceEntry`=15362; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22, 1, 15362, 0, 0, 23, 0, 1477, 0, 0, 0, 0, 0, '', 'Malfurion Stormrage - Only run SAI in the Sunken Temple'); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_02_world.sql new file mode 100644 index 00000000000..0038b6a8927 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_02_world.sql @@ -0,0 +1,37 @@ +-- +-- William Pestle SAI +SET @ENTRY := 253; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,20,0,100,0,112,0,0,0,80,@ENTRY*100+00,0,2,0,0,0,1,0,0,0,0,0,0,0,"William Pestle - On Quest 'Collecting Kelp' Finished - Run Script"); + +-- Actionlist SAI +SET @ENTRY := 25300; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"William Pestle - On Script - Say Line 0"), +(@ENTRY,9,1,0,0,0,100,0,1000,1000,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,1.45219,"William Pestle - On Script - Set Orientation 1,45219"), +(@ENTRY,9,2,0,0,0,100,0,1000,1000,0,0,5,69,0,0,0,0,0,1,0,0,0,0,0,0,0,"William Pestle - On Script - Play Emote 69"), +(@ENTRY,9,3,0,0,0,100,0,3000,3000,0,0,66,0,0,0,0,0,0,21,10,0,0,0,0,0,0,"William Pestle - On Script - Set Orientation Closest Player"), +(@ENTRY,9,4,0,0,0,100,0,1000,1000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"William Pestle - On Script - Say Line 1"); + +-- Maybell Maclure SAI +SET @ENTRY := 251; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,20,0,100,0,114,0,0,0,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Maybell Maclure - On Quest 'The Escape' Finished - Run Script"); + +-- Actionlist SAI +SET @ENTRY := 25100; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,5.39307,"On Script - Set Orientation 5,39307"), +(@ENTRY,9,1,0,0,0,100,0,2000,2000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Say Line 0"), +(@ENTRY,9,2,0,0,0,100,0,2000,2000,0,0,5,7,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Play Emote 7"), +(@ENTRY,9,3,0,0,0,100,0,4000,4000,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Despawn Instant"); + +DELETE FROM `creature_text` WHERE `entry`=251; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(251, 0, 0, 'Here goes nothing...', 12, 0, 100, 0, 0, 0, 1862, 0, 'Maybell Maclure'); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_03_world.sql new file mode 100644 index 00000000000..b9b4ea7a247 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_03_world.sql @@ -0,0 +1,7 @@ +-- +-- Tortured Skeleton SAI +SET @ENTRY := 18797; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,4,0,100,0,0,0,0,0,91,7,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tortured Skeleton - On Aggro - Remove Flag Standstate Dead"); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_04_world.sql new file mode 100644 index 00000000000..b439d0f3a78 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_04_world.sql @@ -0,0 +1,48 @@ +-- +-- Senetil Selarin spawn after completition of quest=995 or quest=994 +UPDATE `creature_template` SET `speed_walk`=1 WHERE `entry`=3694; +UPDATE `quest_template` SET `PrevQuestId`=0 WHERE `Id`=990; +-- Terenthis SAI +SET @ENTRY := 3693; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,20,0,100,0,995,0,0,0,12,3694,6,180000,0,0,0,8,0,0,0,6339.14,341.764,24.3387,0.498114,"Terenthis - On Quest 'Escape Through Stealth' Finished - Summon Creature 'Sentinel Selarin'"), +(@ENTRY,0,1,0,20,0,100,0,994,0,0,0,12,3694,6,180000,0,0,0,8,0,0,0,6339.14,341.764,24.3387,0.498114,"Terenthis - On Quest 'Escape Through Force' Finished - Summon Creature 'Sentinel Selarin'"); + +-- Sentinel Selarin SAI +SET @ENTRY := 3694; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,2,54,0,100,0,0,0,0,0,53,1,3694,0,0,0,0,1,0,0,0,0,0,0,0,"Sentinel Selarin - On Just Summoned - Start Waypoint"), +(@ENTRY,0,1,0,40,0,100,0,23,3694,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sentinel Selarin - On Waypoint 23 Reached - Despawn Instant"), +(@ENTRY,0,2,0,61,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sentinel Selarin - On Just Summoned - Set Active On"), +(@ENTRY,0,3,0,40,0,100,0,1,3694,0,0,54,1000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sentinel Selarin - On Waypoint 1 Reached - Pause Waypoint"), +(@ENTRY,0,4,0,40,0,100,0,12,3694,0,0,54,120000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sentinel Selarin - On Waypoint 12 Reached - Pause Waypoint"); + +DELETE FROM `waypoints` WHERE `entry`=3694; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(3694, 1, 6339.14,341.764,24.3387, 'Sentinel Selarin'), +(3694, 2, 6353.39,354.557,22.3779, 'Sentinel Selarin'), +(3694, 3, 6368.99,357.894,21.5712, 'Sentinel Selarin'), +(3694, 4, 6387.81,359.455,18.9899, 'Sentinel Selarin'), +(3694, 5, 6398.12,363.588,17.366, 'Sentinel Selarin'), +(3694, 6, 6403.68,370.92,15.6815, 'Sentinel Selarin'), +(3694, 7, 6416.57,392.998,12.0215, 'Sentinel Selarin'), +(3694, 8, 6424.95,399.193,10.9586, 'Sentinel Selarin'), +(3694, 9, 6428.93,396.971,11.1736, 'Sentinel Selarin'), +(3694, 10, 6432,388.708,13.7662, 'Sentinel Selarin'), +(3694, 11, 6436.71,375.264,13.9403, 'Sentinel Selarin'), +(3694, 12, 6434.92,367.203,13.9403, 'Sentinel Selarin'), +(3694, 13, 6436.9,374.833,13.9403, 'Sentinel Selarin'), +(3694, 14, 6431.63,389.723,13.5875, 'Sentinel Selarin'), +(3694, 15, 6428.84,397.45,11.0941, 'Sentinel Selarin'), +(3694, 16, 6424,400.084,10.9784, 'Sentinel Selarin'), +(3694, 17, 6413.76,392.804,12.2825, 'Sentinel Selarin'), +(3694, 18, 6401.4,368.195,16.4249, 'Sentinel Selarin'), +(3694, 19, 6393.69,360.887,18.1549, 'Sentinel Selarin'), +(3694, 20, 6377.21,357.731,20.6589, 'Sentinel Selarin'), +(3694, 21, 6358.35,357.353,22.2106, 'Sentinel Selarin'), +(3694, 22, 6348.45,352.662,22.6056, 'Sentinel Selarin'), +(3694, 23, 6322.42,326.649,25.3338, 'Sentinel Selarin'); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_05_world.sql new file mode 100644 index 00000000000..8aed78b7305 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_05_world.sql @@ -0,0 +1,234 @@ +-- Dread Tactician +-- Pathing for Entry: 16959 'TDB FORMAT' +SET @NPC := 59170; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-306.8688,`position_y`=1556.233,`position_z`=41.73843 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-306.8688,1556.233,41.73843,0,0,0,0,100,0), +(@PATH,2,-303.8688,1555.983,40.73843,0,0,0,0,100,0), +(@PATH,3,-299.8688,1555.483,40.23843,0,0,0,0,100,0), +(@PATH,4,-297.8688,1555.233,39.48843,0,0,0,0,100,0), +(@PATH,5,-295.1188,1554.983,38.73843,0,0,0,0,100,0), +(@PATH,6,-292.1188,1554.483,38.48843,0,0,0,0,100,0), +(@PATH,7,-289.1188,1554.233,37.73843,0,0,0,0,100,0), +(@PATH,8,-287.1188,1553.983,37.23843,0,0,0,0,100,0), +(@PATH,9,-284.1188,1553.983,36.48843,0,0,0,0,100,0), +(@PATH,10,-283.8904,1553.79,36.20832,0,0,0,0,100,0), +(@PATH,11,-281.8904,1553.54,35.95832,0,0,0,0,100,0), +(@PATH,12,-275.6404,1556.04,35.70832,0,0,0,0,100,0), +(@PATH,13,-269.0029,1558.513,35.23201,0,0,0,0,100,0), +(@PATH,14,-270.5029,1562.263,35.98201,0,0,0,0,100,0), +(@PATH,15,-271.7529,1565.013,36.48201,0,0,0,0,100,0), +(@PATH,16,-272.7529,1567.513,36.98201,0,0,0,0,100,0), +(@PATH,17,-274.0029,1570.263,37.73201,0,0,0,0,100,0), +(@PATH,18,-275.0029,1573.013,38.48201,0,0,0,0,100,0), +(@PATH,19,-276.4716,1576.198,39.42199,0,0,0,0,100,0), +(@PATH,20,-278.2216,1576.948,39.92199,0,0,0,0,100,0), +(@PATH,21,-280.9716,1578.448,40.92199,0,0,0,0,100,0), +(@PATH,22,-283.7216,1579.698,41.67199,0,0,0,0,100,0), +(@PATH,23,-285.4716,1580.448,42.17199,0,0,0,0,100,0), +(@PATH,24,-287.9716,1581.698,42.92199,0,0,0,0,100,0), +(@PATH,25,-289.7216,1582.448,43.67199,0,0,0,0,100,0), +(@PATH,26,-291.4716,1583.448,44.42199,0,0,0,0,100,0), +(@PATH,27,-294.2216,1584.698,45.17199,0,0,0,0,100,0), +(@PATH,28,-294.3971,1584.785,45.42167,0,0,0,0,100,0), +(@PATH,29,-295.1471,1585.035,45.42167,0,0,0,0,100,0), +(@PATH,30,-304.3971,1576.535,45.92167,0,0,0,0,100,0), +(@PATH,31,-312.2731,1568.967,46.45709,0,0,0,0,100,0), +(@PATH,32,-318.7731,1561.467,45.70709,0,0,0,0,100,0), +(@PATH,33,-333.8887,1543.732,45.3224,0,0,0,0,100,0), +(@PATH,34,-333.6387,1540.732,44.5724,0,0,0,0,100,0), +(@PATH,35,-333.3887,1538.732,43.8224,0,0,0,0,100,0), +(@PATH,36,-333.3887,1536.732,43.3224,0,0,0,0,100,0), +(@PATH,37,-333.1387,1533.732,42.5724,0,0,0,0,100,0), +(@PATH,38,-332.8887,1531.732,41.8224,0,0,0,0,100,0), +(@PATH,39,-332.8887,1529.732,41.0724,0,0,0,0,100,0), +(@PATH,40,-332.6387,1527.732,40.5724,0,0,0,0,100,0), +(@PATH,41,-332.3887,1525.732,39.8224,0,0,0,0,100,0), +(@PATH,42,-332.3887,1523.732,39.3224,0,0,0,0,100,0), +(@PATH,43,-332.1387,1521.982,38.8224,0,0,0,0,100,0), +(@PATH,44,-331.8887,1518.982,38.3224,0,0,0,0,100,0), +(@PATH,45,-331.8887,1516.982,37.5724,0,0,0,0,100,0), +(@PATH,46,-331.8887,1513.982,36.8224,0,0,0,0,100,0), +(@PATH,47,-331.6387,1510.982,36.3224,0,0,0,0,100,0), +(@PATH,48,-331.3887,1508.232,35.5724,0,0,0,0,100,0), +(@PATH,49,-331.1387,1505.232,34.8224,0,0,0,0,100,0), +(@PATH,50,-330.8887,1502.232,34.3224,0,0,0,0,100,0), +(@PATH,51,-330.4729,1499.82,33.45189,0,0,0,0,100,0), +(@PATH,52,-325.4729,1496.82,32.70189,0,0,0,0,100,0), +(@PATH,53,-320.9729,1494.32,31.95189,0,0,0,0,100,0), +(@PATH,54,-316.2229,1491.57,31.45189,0,0,0,0,100,0), +(@PATH,55,-311.7229,1489.07,30.95189,0,0,0,0,100,0), +(@PATH,56,-307.4729,1486.57,30.20189,0,0,0,0,100,0), +(@PATH,57,-307.3154,1486.395,29.88731,0,0,0,0,100,0), +(@PATH,58,-305.8154,1485.645,29.63731,0,0,0,0,100,0), +(@PATH,59,-299.8154,1485.645,28.88731,0,0,0,0,100,0), +(@PATH,60,-294.0654,1485.395,28.38731,0,0,0,0,100,0), +(@PATH,61,-287.0654,1485.395,27.88731,0,0,0,0,100,0), +(@PATH,62,-281.0654,1485.395,27.38731,0,0,0,0,100,0), +(@PATH,63,-280.6106,1485.449,27.23963,0,0,0,0,100,0), +(@PATH,64,-278.6106,1485.199,27.23963,0,0,0,0,100,0), +(@PATH,65,-270.6106,1498.699,27.48963,0,0,0,0,100,0), +(@PATH,66,-268.6106,1502.199,27.98963,0,0,0,0,100,0), +(@PATH,67,-268.5272,1502.318,28.20654,0,0,0,0,100,0), +(@PATH,68,-267.5272,1503.818,28.20654,0,0,0,0,100,0), +(@PATH,69,-270.5272,1504.568,28.70654,0,0,0,0,100,0), +(@PATH,70,-274.2772,1505.568,29.20654,0,0,0,0,100,0), +(@PATH,71,-278.5582,1506.635,29.73862,0,0,0,0,100,0), +(@PATH,72,-290.8082,1500.885,30.23862,0,0,0,0,100,0), +(@PATH,73,-296.4533,1498.203,30.9129,0,0,0,0,100,0), +(@PATH,74,-300.2033,1498.953,31.4129,0,0,0,0,100,0), +(@PATH,75,-304.2033,1499.703,31.9129,0,0,0,0,100,0), +(@PATH,76,-307.9533,1500.453,32.4129,0,0,0,0,100,0), +(@PATH,77,-313.7033,1501.203,33.1629,0,0,0,0,100,0), +(@PATH,78,-317.4067,1502.011,33.47455,0,0,0,0,100,0), +(@PATH,79,-319.6567,1504.011,33.97455,0,0,0,0,100,0), +(@PATH,80,-322.1567,1506.511,34.47455,0,0,0,0,100,0), +(@PATH,81,-325.2614,1509.541,35.46749,0,0,0,0,100,0), +(@PATH,82,-325.7614,1512.541,35.96749,0,0,0,0,100,0), +(@PATH,83,-326.0114,1515.541,36.71749,0,0,0,0,100,0), +(@PATH,84,-326.2614,1517.541,37.21749,0,0,0,0,100,0), +(@PATH,85,-326.2614,1520.541,38.21749,0,0,0,0,100,0), +(@PATH,86,-326.5114,1522.541,38.71749,0,0,0,0,100,0), +(@PATH,87,-326.7614,1525.291,39.46749,0,0,0,0,100,0), +(@PATH,88,-327.0114,1527.291,39.96749,0,0,0,0,100,0), +(@PATH,89,-327.2614,1529.291,40.71749,0,0,0,0,100,0), +(@PATH,90,-327.7614,1533.291,41.46749,0,0,0,0,100,0), +(@PATH,91,-328.0114,1535.041,41.96749,0,0,0,0,100,0), +(@PATH,92,-328.2614,1538.041,42.71749,0,0,0,0,100,0); +-- 0x1C39AC4240108FC00000210000037184 .go -306.8688 1556.233 41.73843 + + +-- Pathing for Entry: 16959 'TDB FORMAT' +SET @NPC := 59171; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-110.5204,`position_y`=1566.893,`position_z`=42.31397 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-110.5204,1566.893,42.31397,0,0,0,0,100,0), +(@PATH,2,-120.2704,1568.393,41.81397,0,0,0,0,100,0), +(@PATH,3,-127.0204,1569.893,41.31397,0,0,0,0,100,0), +(@PATH,4,-134.6927,1571.43,40.71382,0,0,0,0,100,0), +(@PATH,5,-139.6927,1571.68,40.21382,0,0,0,0,100,0), +(@PATH,6,-144.6927,1571.93,39.46382,0,0,0,0,100,0), +(@PATH,7,-149.4427,1572.18,38.71382,0,0,0,0,100,0), +(@PATH,8,-152.4427,1572.43,38.21382,0,0,0,0,100,0), +(@PATH,9,-155.4427,1572.68,37.71382,0,0,0,0,100,0), +(@PATH,10,-158.4427,1572.68,36.96382,0,0,0,0,100,0), +(@PATH,11,-161.4427,1572.93,36.46382,0,0,0,0,100,0), +(@PATH,12,-163.4427,1573.18,35.71382,0,0,0,0,100,0), +(@PATH,13,-163.4854,1573.449,35.89986,0,0,0,0,100,0), +(@PATH,14,-164.2354,1573.449,35.64986,0,0,0,0,100,0), +(@PATH,15,-163.9854,1576.449,36.39986,0,0,0,0,100,0), +(@PATH,16,-163.7824,1580.185,36.84877,0,0,0,0,100,0), +(@PATH,17,-161.7824,1580.435,37.59877,0,0,0,0,100,0), +(@PATH,18,-159.0324,1580.935,38.34877,0,0,0,0,100,0), +(@PATH,19,-155.0324,1581.935,38.84877,0,0,0,0,100,0), +(@PATH,20,-152.2824,1582.685,39.59877,0,0,0,0,100,0), +(@PATH,21,-148.5324,1583.435,40.34877,0,0,0,0,100,0), +(@PATH,22,-145.5324,1584.185,41.09877,0,0,0,0,100,0), +(@PATH,23,-145.3761,1584.15,41.32778,0,0,0,0,100,0), +(@PATH,24,-144.1261,1584.4,41.57778,0,0,0,0,100,0), +(@PATH,25,-139.1261,1583.9,42.32778,0,0,0,0,100,0), +(@PATH,26,-135.1261,1583.65,43.07778,0,0,0,0,100,0), +(@PATH,27,-130.1261,1583.15,43.57778,0,0,0,0,100,0), +(@PATH,28,-126.3761,1582.65,44.07778,0,0,0,0,100,0), +(@PATH,29,-123.3761,1582.4,44.82778,0,0,0,0,100,0), +(@PATH,30,-117.3761,1582.15,45.32778,0,0,0,0,100,0), +(@PATH,31,-113.3761,1581.65,46.07778,0,0,0,0,100,0), +(@PATH,32,-109.0603,1580.944,46.36949,0,0,0,0,100,0), +(@PATH,33,-84.0918,1569.51,46.44577,0,0,0,0,100,0), +(@PATH,34,-82.3418,1566.01,45.44577,0,0,0,0,100,0), +(@PATH,35,-81.3418,1564.26,44.94577,0,0,0,0,100,0), +(@PATH,36,-80.0918,1561.51,44.19577,0,0,0,0,100,0), +(@PATH,37,-79.0918,1559.76,43.69577,0,0,0,0,100,0), +(@PATH,38,-78.0918,1558.01,42.94577,0,0,0,0,100,0), +(@PATH,39,-76.5918,1554.76,42.19577,0,0,0,0,100,0), +(@PATH,40,-75.8418,1553.01,41.69577,0,0,0,0,100,0), +(@PATH,41,-74.8418,1551.26,41.19577,0,0,0,0,100,0), +(@PATH,42,-73.3418,1548.51,40.44577,0,0,0,0,100,0), +(@PATH,43,-72.5918,1546.76,39.94577,0,0,0,0,100,0), +(@PATH,44,-71.5918,1545.01,39.19577,0,0,0,0,100,0), +(@PATH,45,-70.3418,1542.26,38.69577,0,0,0,0,100,0), +(@PATH,46,-70.29829,1541.94,38.42153,0,0,0,0,100,0), +(@PATH,47,-69.29829,1540.19,37.67153,0,0,0,0,100,0), +(@PATH,48,-69.54829,1538.19,37.17153,0,0,0,0,100,0), +(@PATH,49,-70.04829,1535.19,36.17153,0,0,0,0,100,0), +(@PATH,50,-70.04829,1533.44,35.67153,0,0,0,0,100,0), +(@PATH,51,-70.54829,1529.44,35.17153,0,0,0,0,100,0), +(@PATH,52,-71.04829,1525.69,34.42153,0,0,0,0,100,0), +(@PATH,53,-71.54829,1521.69,33.92153,0,0,0,0,100,0), +(@PATH,54,-71.54829,1518.69,33.17153,0,0,0,0,100,0), +(@PATH,55,-72.10271,1515.561,32.53027,0,0,0,0,100,0), +(@PATH,56,-73.35271,1512.811,31.53027,0,0,0,0,100,0), +(@PATH,57,-74.35271,1511.061,30.78027,0,0,0,0,100,0), +(@PATH,58,-75.10271,1509.311,30.28027,0,0,0,0,100,0), +(@PATH,59,-76.35271,1506.561,29.78027,0,0,0,0,100,0), +(@PATH,60,-78.10271,1502.811,29.03027,0,0,0,0,100,0), +(@PATH,61,-79.10271,1500.311,30.03027,0,0,0,0,100,0), +(@PATH,62,-82.35271,1493.061,29.28027,0,0,0,0,100,0), +(@PATH,63,-84.10271,1489.561,28.53027,0,0,0,0,100,0), +(@PATH,64,-84.42598,1489.16,28.3833,0,0,0,0,100,0), +(@PATH,65,-85.17598,1487.41,28.1333,0,0,0,0,100,0), +(@PATH,66,-102.3677,1477.751,27.65215,0,0,0,0,100,0), +(@PATH,67,-123.1177,1477.501,26.90215,0,0,0,0,100,0), +(@PATH,68,-137.5984,1477.31,26.80837,0,0,0,0,100,0), +(@PATH,69,-145.5984,1482.56,27.05837,0,0,0,0,100,0), +(@PATH,70,-153.8199,1488.331,27.38618,0,0,0,0,100,0), +(@PATH,71,-178.7361,1511.036,27.3082,0,0,0,0,100,0), +(@PATH,72,-185.2269,1510.27,27.05297,0,0,0,0,100,0), +(@PATH,73,-182.9769,1508.27,27.05297,0,0,0,0,100,0), +(@PATH,74,-172.9769,1500.02,26.80297,0,0,0,0,100,0), +(@PATH,75,-170.7269,1498.27,27.05297,0,0,0,0,100,0), +(@PATH,76,-169.2269,1496.02,27.05297,0,0,0,0,100,0), +(@PATH,77,-167.7269,1494.02,26.80297,0,0,0,0,100,0), +(@PATH,78,-167.7269,1492.02,26.80297,0,0,0,0,100,0), +(@PATH,79,-167.7269,1489.77,26.80297,0,0,0,0,100,0), +(@PATH,80,-167.4919,1489.571,26.64043,0,0,0,0,100,0), +(@PATH,81,-168.4919,1488.071,26.64043,0,0,0,0,100,0), +(@PATH,82,-158.2419,1482.071,26.14043,0,0,0,0,100,0), +(@PATH,83,-147.591,1475.386,26.25293,0,0,0,0,100,0), +(@PATH,84,-139.841,1477.636,27.00293,0,0,0,0,100,0), +(@PATH,85,-132.341,1479.636,27.25293,0,0,0,0,100,0), +(@PATH,86,-125.591,1481.386,28.00293,0,0,0,0,100,0), +(@PATH,87,-121.841,1482.636,28.50293,0,0,0,0,100,0), +(@PATH,88,-120.2695,1483.081,29.04744,0,0,0,0,100,0), +(@PATH,89,-118.5195,1484.081,29.54744,0,0,0,0,100,0), +(@PATH,90,-115.7695,1485.331,30.29744,0,0,0,0,100,0), +(@PATH,91,-115.0195,1485.831,31.04744,0,0,0,0,100,0), +(@PATH,92,-113.0195,1486.831,32.04744,0,0,0,0,100,0), +(@PATH,93,-107.0195,1489.581,31.29744,0,0,0,0,100,0), +(@PATH,94,-95.5195,1495.331,30.79744,0,0,0,0,100,0), +(@PATH,95,-95.16714,1495.663,31.08524,0,0,0,0,100,0), +(@PATH,96,-94.66714,1495.913,31.08524,0,0,0,0,100,0), +(@PATH,97,-93.66714,1499.913,31.33524,0,0,0,0,100,0), +(@PATH,98,-92.16714,1506.413,31.83524,0,0,0,0,100,0), +(@PATH,99,-90.66714,1512.163,32.58524,0,0,0,0,100,0), +(@PATH,100,-89.91714,1514.913,31.83524,0,0,0,0,100,0), +(@PATH,101,-89.75613,1515.401,32.07003,0,0,0,0,100,0), +(@PATH,102,-89.25613,1516.401,31.82003,0,0,0,0,100,0), +(@PATH,103,-89.25613,1523.401,32.57003,0,0,0,0,100,0), +(@PATH,104,-89.25613,1524.401,33.32003,0,0,0,0,100,0), +(@PATH,105,-89.25613,1525.401,34.07003,0,0,0,0,100,0), +(@PATH,106,-89.00613,1526.401,34.57003,0,0,0,0,100,0), +(@PATH,107,-89.00613,1528.401,35.82003,0,0,0,0,100,0), +(@PATH,108,-89.00613,1529.401,36.07003,0,0,0,0,100,0), +(@PATH,109,-88.75613,1533.151,36.82003,0,0,0,0,100,0), +(@PATH,110,-88.75613,1535.151,37.32003,0,0,0,0,100,0), +(@PATH,111,-88.50613,1538.151,38.07003,0,0,0,0,100,0), +(@PATH,112,-88.50613,1541.151,38.82003,0,0,0,0,100,0), +(@PATH,113,-88.25613,1544.151,39.57003,0,0,0,0,100,0), +(@PATH,114,-88.1545,1544.429,39.72079,0,0,0,0,100,0), +(@PATH,115,-88.1545,1545.429,39.97079,0,0,0,0,100,0), +(@PATH,116,-91.1545,1548.179,40.47079,0,0,0,0,100,0), +(@PATH,117,-94.6545,1551.679,40.97079,0,0,0,0,100,0), +(@PATH,118,-99.4045,1556.429,41.72079,0,0,0,0,100,0), +(@PATH,119,-110.481,1566.873,42.2832,0,0,0,0,100,0), +(@PATH,120,-120.231,1568.623,41.7832,0,0,0,0,100,0), +(@PATH,121,-126.981,1569.873,41.2832,0,0,0,0,100,0); +-- 0x1C39AC4240108FC000002100007FC923 .go -110.5204 1566.893 42.31397 diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_06_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_06_world.sql new file mode 100644 index 00000000000..4fc3ab011ab --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_06_world.sql @@ -0,0 +1,24 @@ +-- +DELETE FROM `event_scripts` WHERE `id`=2313; +INSERT INTO `event_scripts` (`id`, `delay`, `command`, `datalong`, `datalong2`, `dataint`, `x`, `y`, `z`, `o`) VALUES +(2313, 0, 10, 7411, 3000000, 0, 9639.5,2528.97,1331.72,5.28395); + +-- Spirit of Sathrah SAI +SET @ENTRY := 7411; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,54,0,100,0,0,0,0,0,53,0,7411,0,0,0,0,1,0,0,0,0,0,0,0,"Spirit of Sathrah - On Just Summoned - Start Waypoint"), +(@ENTRY,0,1,0,40,0,100,0,9,7411,0,0,41,3000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Spirit of Sathrah - On Waypoint 9 Reached - Despawn In 3000 ms"); + +DELETE FROM `waypoints` WHERE `entry`=7411; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(7411, 1, 9642.47,2523.25,1331.54, 'Spirit of Sathrah'), +(7411, 2, 9640.32,2517.43,1331.57, 'Spirit of Sathrah'), +(7411, 3, 9635.62,2514.35,1331.4, 'Spirit of Sathrah'), +(7411, 4, 9630.91,2515.59,1331.72, 'Spirit of Sathrah'), +(7411, 5, 9626.52,2520.1,1331.73, 'Spirit of Sathrah'), +(7411, 6, 9625.02,2526.36,1331.61, 'Spirit of Sathrah'), +(7411, 7, 9630.56,2532.58,1331.39, 'Spirit of Sathrah'), +(7411, 8, 9636.59,2532.65,1331.73, 'Spirit of Sathrah'), +(7411, 9, 9640.05,2529.06,1331.77, 'Spirit of Sathrah'); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_07_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_07_world.sql new file mode 100644 index 00000000000..64f813d2c59 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_07_world.sql @@ -0,0 +1,29 @@ +-- +-- Portal Burn Action +-- Portal Kruul SAI +SET @ENTRY := 184289; +UPDATE `gameobject_template` SET `AIName`="SmartGameObjectAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=1; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,1,0,0,70,0,100,0,2,0,0,0,50,183816,30,0,0,0,0,8,0,0,0,147.0184, 1717.341, 37.46404,0,"Portal Kruul - On Gameobject State Changed - Summon Gameobject 'Hellfire Fire'"); + +-- Portal Xilus SAI +SET @ENTRY := 184290; +UPDATE `gameobject_template` SET `AIName`="SmartGameObjectAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=1; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,1,0,0,70,0,100,0,2,0,0,0,50,183816,30,0,0,0,0,8,0,0,0,-84.5415, 1881.739, 73.82645,5.782852,"Portal Xilus - On Gameobject State Changed - Summon Gameobject 'Hellfire Fire'"); + +-- Portal Grimh SAI +SET @ENTRY := 184414; +UPDATE `gameobject_template` SET `AIName`="SmartGameObjectAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=1; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,1,0,0,70,0,100,0,2,0,0,0,50,183816,30,0,0,0,0,8,0,0,0,-418.627, 1847.49, 80.7808,0,"Portal Grimh - On Gameobject State Changed - Summon Gameobject 'Hellfire Fire'"); + +-- Portal Kaalez SAI +SET @ENTRY := 184415; +UPDATE `gameobject_template` SET `AIName`="SmartGameObjectAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=1; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,1,0,0,70,0,100,0,2,0,0,0,50,183816,30,0,0,0,0,8,0,0,0,-545.2587, 1781.167, 56.22634,0,"Portal Kaalez - On Gameobject State Changed - Summon Gameobject 'Hellfire Fire'"); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_08_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_08_world.sql new file mode 100644 index 00000000000..e7acf61bbd6 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_08_world.sql @@ -0,0 +1,81 @@ +-- +-- Pathing for Entry: 22410 'TDB FORMAT' +SET @NPC := 78754; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3009.127,`position_y`=5920.842,`position_z`=130.9854 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,14332,0,4097,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3009.127,5920.842,130.9854,0,0,1,0,100,0), +(@PATH,2,3018.56,5944.067,131.0012,0,0,1,0,100,0), +(@PATH,3,3028.687,5971.723,131.0047,0,0,1,0,100,0), +(@PATH,4,3039.209,5998.325,130.9491,0,0,1,0,100,0), +(@PATH,5,3041.459,6004.325,130.9491,0,0,1,0,100,0), +(@PATH,6,3042.709,6007.575,130.9491,0,0,1,0,100,0), +(@PATH,7,3043.459,6009.825,130.9491,0,0,1,0,100,0), +(@PATH,8,3048.21,6021.786,130.8358,0,0,1,0,100,0), +(@PATH,9,3058.211,6046.689,130.7168,0,0,1,0,100,0), +(@PATH,10,3065.155,6064.995,130.614,0,0,1,0,100,0), +(@PATH,11,3078.91,6073.112,130.3709,0,0,1,0,100,0), +(@PATH,12,3084.571,6056.194,130.4195,0,0,1,0,100,0), +(@PATH,13,3079.821,6040.444,130.6695,0,0,1,0,100,0), +(@PATH,14,3079.655,6040.126,130.764,0,0,1,0,100,0), +(@PATH,15,3079.405,6039.626,130.764,0,0,1,0,100,0), +(@PATH,16,3078.905,6038.126,130.764,0,0,1,0,100,0), +(@PATH,17,3069.25,6014.667,130.9082,0,0,1,0,100,0), +(@PATH,18,3064,6000.667,130.9082,0,0,1,0,100,0), +(@PATH,19,3060.452,5991.971,130.99,0,0,1,0,100,0), +(@PATH,20,3050.27,5967.535,130.9908,0,0,1,0,100,0), +(@PATH,21,3045.52,5954.535,130.9908,0,0,1,0,100,0), +(@PATH,22,3039.294,5938.282,130.9514,0,0,1,0,100,0), +(@PATH,23,3028.456,5913.517,130.8795,0,0,1,0,100,0), +(@PATH,24,3019.764,5891.665,130.7868,0,0,1,0,100,0), +(@PATH,25,3016.764,5884.415,130.7868,0,0,1,0,100,0), +(@PATH,26,3012.264,5873.915,130.7868,0,0,1,0,100,0), +(@PATH,27,3009.264,5866.915,130.7868,0,0,1,0,100,0), +(@PATH,28,3012.196,5873.788,130.7515,0,0,1,0,100,0), +(@PATH,29,3008.946,5866.788,130.7515,0,0,1,0,100,0), +(@PATH,30,3008.446,5865.038,130.7515,0,0,1,0,100,0), +(@PATH,31,2995.446,5836.038,130.5015,0,0,1,0,100,0), +(@PATH,32,2995.104,5835.657,130.3808,0,0,1,0,100,0), +(@PATH,33,2991.854,5828.407,130.6308,0,0,1,0,100,0), +(@PATH,34,2990.604,5827.907,130.3808,0,0,1,0,100,0), +(@PATH,35,2976.186,5821.571,130.1743,0,0,1,0,100,0), +(@PATH,36,2970.518,5837.316,130.481,0,0,1,0,100,0), +(@PATH,37,2971.768,5840.066,130.481,0,0,1,0,100,0), +(@PATH,38,2980.487,5859.262,131.0515,0,0,1,0,100,0), +(@PATH,39,2983.987,5866.762,131.0515,0,0,1,0,100,0), +(@PATH,40,2989.237,5876.512,131.3015,0,0,1,0,100,0); +-- 0x1C3998424015E28000002300007FC920 .go 3009.127 5920.842 130.9854 + +DELETE FROM `creature_formations` WHERE `leaderGUID`=78754; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES +(78754, 78754, 0, 0, 2, 0, 0), +(78754, 78755, 7, 0, 0, 0, 0); + +-- Expedition Warden SAI +SET @GUID := -63549; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=17855; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@GUID,0,0,0,1,0,100,0,100,200,5000,10000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Expedition Warden - Out of Combat - Play Emote 1"); + +-- Expedition Warden SAI +SET @GUID := -63548; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=17855; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@GUID,0,0,0,1,0,100,0,100,200,10000,40000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Expedition Warden - Out of Combat - Play Emote 1"); + +-- Pathing for Entry: 17855 'TDB FORMAT' +SET @NPC := 63550; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3022.651,`position_y`=5963.609,`position_z`=130.7766 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3022.651,5963.609,130.7766,0,6000,0,0,100,0), +(@PATH,2,3032.096,5959.558,130.6869,0,6000,0,0,100,0); +-- 0x1C39984240116FC000002300027FC920 .go 3022.651 5963.609 130.7766 diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_09_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_09_world.sql new file mode 100644 index 00000000000..cb453b9b4a6 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_09_world.sql @@ -0,0 +1,59 @@ +-- +-- Pathing for Entry: 2802 'TDB FORMAT' +SET @NPC := 38101; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1442.487,`position_y`=36.32697,`position_z`=-62.02626 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1442.487,36.32697,-62.02626,0,0,0,0,100,0), +(@PATH,2,1435.487,32.07697,-62.02626,0,0,0,0,100,0), +(@PATH,3,1416.445,21.46703,-62.02588,0,0,0,0,100,0), +(@PATH,4,1405.551,23.91475,-62.0261,0,0,0,0,100,0), +(@PATH,5,1402.301,26.41475,-62.0261,0,0,0,0,100,0), +(@PATH,6,1387.127,36.88569,-62.02647,0,0,0,0,100,0), +(@PATH,7,1381.627,49.88569,-62.02647,0,0,0,0,100,0), +(@PATH,8,1379.005,56.32278,-62.02669,0,0,0,0,100,0), +(@PATH,9,1379.755,60.82278,-62.02669,0,0,0,0,100,0), +(@PATH,10,1383.399,83.51677,-62.03289,0,0,0,0,100,0), +(@PATH,11,1388.399,87.51677,-62.03289,0,0,0,0,100,0), +(@PATH,12,1395.899,94.01677,-62.28289,0,0,0,0,100,0), +(@PATH,13,1400.163,97.49232,-62.05746,0,0,0,0,100,0), +(@PATH,14,1412.663,127.9923,-62.05746,0,0,0,0,100,0), +(@PATH,15,1413.663,130.2423,-62.05746,0,0,0,0,100,0), +(@PATH,16,1415.163,134.2423,-62.05746,0,0,0,0,100,0), +(@PATH,17,1418.154,141.2391,-62.04066,0,0,0,0,100,0), +(@PATH,18,1423.404,143.7391,-62.04066,0,0,0,0,100,0), +(@PATH,19,1434.169,149.9652,-62.03992,0,0,0,0,100,0), +(@PATH,20,1435.669,148.4652,-62.03992,0,0,0,0,100,0), +(@PATH,21,1445.419,139.4652,-62.03992,0,0,0,0,100,0), +(@PATH,22,1447.836,137.2073,-61.75176,0,0,0,0,100,0), +(@PATH,23,1450.836,133.7073,-61.75176,0,0,0,0,100,0), +(@PATH,24,1452.086,132.4573,-61.75176,0,0,0,0,100,0), +(@PATH,25,1453.836,130.4573,-60.00176,0,0,0,0,100,0), +(@PATH,26,1456.336,127.4573,-60.00176,0,0,0,0,100,0), +(@PATH,27,1462.008,120.8724,-59.94119,0,0,0,0,100,0), +(@PATH,28,1465.152,111.2505,-59.94151,0,0,0,0,100,0), +(@PATH,29,1471.402,105.7505,-59.94151,0,0,0,0,100,0), +(@PATH,30,1479.847,98.11646,-59.9706,0,0,0,0,100,0), +(@PATH,31,1480.847,97.36646,-59.9706,0,0,0,0,100,0), +(@PATH,32,1482.847,96.11646,-61.4706,0,0,0,0,100,0), +(@PATH,33,1484.347,95.11646,-61.7206,0,0,0,0,100,0), +(@PATH,34,1483.158,95.78064,-61.62843,0,0,0,0,100,0), +(@PATH,35,1484.658,94.78064,-61.87843,0,0,0,0,100,0), +(@PATH,36,1485.158,94.53064,-61.87843,0,0,0,0,100,0), +(@PATH,37,1489.658,90.78064,-61.87843,0,0,0,0,100,0), +(@PATH,38,1499.658,82.28064,-61.87843,0,0,0,0,100,0), +(@PATH,39,1499.686,82.06802,-62.047,0,0,0,0,100,0), +(@PATH,40,1500.436,81.31802,-62.047,0,0,0,0,100,0), +(@PATH,41,1494.936,71.31802,-62.047,0,0,0,0,100,0), +(@PATH,42,1481.826,47.66472,-62.03592,0,0,0,0,100,0), +(@PATH,43,1469.576,44.16472,-62.03592,0,0,0,0,100,0), +(@PATH,44,1466.576,43.41472,-62.03592,0,0,0,0,100,0), +(@PATH,45,1464.826,42.91472,-62.03592,0,0,0,0,100,0), +(@PATH,46,1452.326,39.16472,-62.03592,0,0,0,0,100,0), +(@PATH,47,1442.51,36.29097,-62.02619,0,0,0,0,100,0), +(@PATH,48,1435.51,32.29097,-62.02619,0,0,0,0,100,0), +(@PATH,49,1416.5,21.42531,-62.02593,0,0,0,0,100,0); +-- 0x1C191C000002BC80000028000002D330 .go 1442.487 36.32697 -62.02626 diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_10_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_10_world.sql new file mode 100644 index 00000000000..b639c813766 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_10_world.sql @@ -0,0 +1,3 @@ +-- +DELETE FROM `gossip_menu` WHERE `entry`=5004; +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (5004, 6062); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_11_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_11_world.sql new file mode 100644 index 00000000000..3330613ef6c --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_11_world.sql @@ -0,0 +1,8 @@ +-- +-- Scarlet Initiate SAI +SET @ENTRY := 1507; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,7,0,0,0,100,0,0,0,3500,5000,11,20793,64,0,0,0,0,2,0,0,0,0,0,0,0,"Scarlet Initiate - In Combat - Cast 'Fireball'"), +(@ENTRY,0,10,0,23,0,100,0,12544,0,5000,10000,11,12544,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Initiate - On Has Aura 'Frost Armor' - Cast 'Frost Armor'"); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_12_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_12_world.sql new file mode 100644 index 00000000000..7eb2c704211 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_12_world.sql @@ -0,0 +1,13 @@ +-- +-- Keryn Sylvius SAI +SET @ENTRY := 917; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,62,0,100,0,381,4,0,0,11,21100,0,0,0,0,0,7,0,0,0,0,0,0,0,"Keryn Sylvius - On Gossip Option 4 Selected - Cast 'Conjure Elegant Letter'"); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=381 AND `SourceEntry`=4; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15, 381, 4, 0, 0, 15, 0, 8, 0, 0, 0, 0, 0, '', 'Show gossip text if player is a rogue'), +(15, 381, 4, 0, 0, 27, 0, 24, 3, 0, 0, 0, 0, '', 'Show gossip text if level >= 24'), +(15, 381, 4, 0, 0, 2, 0, 17126, 1, 0, 1, 0, 0, '', 'Show gossip option if player does not have Elegant Letter'); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_13_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_13_world.sql new file mode 100644 index 00000000000..f88dd641542 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_13_world.sql @@ -0,0 +1,153 @@ +-- A Crew Under Fire +UPDATE `creature_template` SET `ScriptName`='' WHERE `entry`=8380; +UPDATE `quest_template` SET `SpecialFlags`=2 WHERE `Id`=3382; +UPDATE `creature_template` SET `ScriptName`='' WHERE `entry` IN (12205, 12204); +UPDATE `creature` SET orientation = 2.43043 WHERE guid = 35899; + +-- Captain Vanessa Beltis SAI +SET @ENTRY := 8380; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,1,19,0,100,0,3382,0,0,0,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Captain Vanessa Beltis - On Quest 'A Crew Under Fire' Taken - Run Script"), +(@ENTRY,0,1,4,61,0,100,0,3382,0,0,0,2,250,0,0,0,0,0,1,0,0,0,0,0,0,0,"Captain Vanessa Beltis - On Quest 'A Crew Under Fire' Taken - Set Faction 250"), +(@ENTRY,0,2,5,11,0,100,0,0,0,0,0,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,"Captain Vanessa Beltis - On Respawn - Set Faction 35"), +(@ENTRY,0,3,0,6,0,100,0,0,0,0,0,6,3382,0,0,0,0,0,17,0,50,0,0,0,0,0,"Captain Vanessa Beltis - On Just Died - Fail Quest 'A Crew Under Fire'"), +(@ENTRY,0,4,0,61,0,100,0,3382,0,0,0,82,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Captain Vanessa Beltis - On Quest 'A Crew Under Fire' Taken - Add Npc Flag "), +(@ENTRY,0,5,0,61,0,100,0,0,0,0,0,82,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Captain Vanessa Beltis - On Respawn - Add Npc Flags Gossip & Questgiver"); + +-- Spitelash Witch SAI +SET @ENTRY := 12205; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,8,0,100,0,118,0,8000,8000,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Spitelash Witch - On Spellhit 'Polymorph' - Run Script"), +(@ENTRY,0,1,0,8,0,100,0,12824,0,8000,8000,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Spitelash Witch - On Spellhit 'Polymorph' - Run Script"), +(@ENTRY,0,2,0,8,0,100,0,12825,0,8000,8000,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Spitelash Witch - On Spellhit 'Polymorph' - Run Script"), +(@ENTRY,0,3,0,8,0,100,0,12826,0,8000,8000,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Spitelash Witch - On Spellhit 'Polymorph' - Run Script"), +(@ENTRY,0,4,0,54,0,100,0,0,0,0,0,53,1,12205,0,0,0,2,1,0,0,0,0,0,0,0,"Spitelash Witch - On Just Summoned - Start Waypoint"), +(@ENTRY,0,5,0,1,0,100,0,1000,1000,60000,60000,11,12550,2,0,0,0,0,1,0,0,0,0,0,0,0,"Spitelash Witch - Out of Combat - Cast 'Lightning Shield'"), +(@ENTRY,0,6,0,0,0,100,0,2000,2000,4000,5000,11,9672,0,0,0,0,0,2,0,0,0,0,0,0,0,"Spitelash Witch - In Combat - Cast 'Frostbolt'"); + +DELETE FROM `waypoints` WHERE `entry`=12205; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(12205, 1, 2370.83,-5893.06,10.6607, 'Spitelash Witch'), +(12205, 2, 2377.23,-5904.07,11.067, 'Spitelash Witch'), +(12205, 3, 2378.04,-5915.15,10.7378, 'Spitelash Witch'), +(12205, 4, 2374.96,-5932,9.66682, 'Spitelash Witch'), +(12205, 5, 2374.06,-5963.62,9.89577, 'Spitelash Witch'); + +-- Spitelash Raider SAI +SET @ENTRY := 12204; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,8,0,100,0,118,0,8000,8000,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Spitelash Raider - On Spellhit 'Polymorph' - Run Script"), +(@ENTRY,0,1,0,8,0,100,0,12824,0,8000,8000,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Spitelash Raider - On Spellhit 'Polymorph' - Run Script"), +(@ENTRY,0,2,0,8,0,100,0,12825,0,8000,8000,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Spitelash Raider - On Spellhit 'Polymorph' - Run Script"), +(@ENTRY,0,3,0,8,0,100,0,12826,0,8000,8000,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Spitelash Raider - On Spellhit 'Polymorph' - Run Script"), +(@ENTRY,0,4,0,54,0,100,0,0,0,0,0,53,1,12204,0,0,0,2,1,0,0,0,0,0,0,0,"Spitelash Raider - On Just Summoned - Start Waypoint"), +(@ENTRY,0,5,0,0,0,100,0,40,1000,6500,9000,11,12545,0,0,0,0,0,2,0,0,0,0,0,0,0,"Spitelash Raider - In Combat - Cast 'Spitelash'"), +(@ENTRY,0,6,0,0,0,100,0,1000,2500,11000,15000,11,12548,0,0,0,0,0,2,0,0,0,0,0,0,0,"Spitelash Raider - In Combat - Cast 'Frost Shock'"); + +DELETE FROM `waypoints` WHERE `entry`=12204; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(12204, 1, 2370.83,-5893.06,10.6607, 'Spitelash Raider'), +(12204, 2, 2379.97,-5904.9,10.7712, 'Spitelash Raider'), +(12204, 3, 2376.15,-5924.8,9.84824, 'Spitelash Raider'), +(12204, 4, 2373.41,-5962.79,9.70075, 'Spitelash Raider'); + +-- Actionlist SAI +SET @ENTRY := 1220500; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,11,29124,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Cast 'Polymorph'"), +(@ENTRY,9,1,0,0,0,100,0,5000,5000,0,0,11,28406,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Cast 'Polymorph Backfire'"), +(@ENTRY,9,2,0,0,0,100,0,0,0,0,0,11,6924,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Cast 'Remove Polymorph'"), +(@ENTRY,9,3,0,0,0,100,0,1000,1000,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Despawn Instant"); + +-- Actionlist SAI +SET @ENTRY := 838000; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Captain Vanessa Beltis - On Script - Set Active On"), +(@ENTRY,9,1,0,0,0,100,0,1000,1000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Captain Vanessa Beltis - On Script - Say Line 0"), +(@ENTRY,9,2,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,9,0,0,50,0,0,0,0,"Captain Vanessa Beltis - On Script - Set Data 1 1"), +-- 1. wave +(@ENTRY,9,3,0,0,0,100,0,4000,4000,0,0,12,12205,6,300000,0,0,0,8,0,0,0,2370.83,-5893.06,-5893.06,5.45564,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Witch'"), +(@ENTRY,9,4,0,0,0,100,0,0,0,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2367.58,-5889.81,11.3931,5.36209,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"), +(@ENTRY,9,5,0,0,0,100,0,0,0,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2369.53,-5888.84,11.2888,5.23643,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"), +(@ENTRY,9,6,0,0,0,100,0,0,0,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2366.15,-5891.65,11.72,5.46812,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"), +-- 2nd wave +(@ENTRY,9,7,0,0,0,100,0,50000,50000,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2370.83,-5893.06,10.6607,5.45564,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"), +(@ENTRY,9,8,0,0,0,100,0,1000,1000,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2367.58,-5889.81,11.3931,5.36209,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"), +(@ENTRY,9,9,0,0,0,100,0,0,0,0,0,12,12205,6,300000,0,0,0,8,0,0,0,2369.53,-5888.84,11.2888,5.23643,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Witch'"), +(@ENTRY,9,10,0,0,0,100,0,1000,1000,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2366.15,-5891.65,11.72,5.46812,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"), +-- 3. wave +(@ENTRY,9,11,0,0,0,100,0,52000,52000,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2370.83,-5893.06,10.6607,5.45564,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"), +(@ENTRY,9,12,0,0,0,100,0,1000,1000,0,0,12,12205,6,300000,0,0,0,8,0,0,0,2367.58,-5889.81,11.3931,5.36209,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Witch'"), +(@ENTRY,9,13,0,0,0,100,0,0,0,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2369.53,-5888.84,11.2888,5.23643,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"), +(@ENTRY,9,14,0,0,0,100,0,0,0,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2366.15,-5891.65,11.72,5.46812,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"), +-- 4. wave +(@ENTRY,9,15,0,0,0,100,0,54000,54000,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2370.83,-5893.06,10.6607,5.45564,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"), +(@ENTRY,9,16,0,0,0,100,0,1000,1000,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2367.58,-5889.81,11.3931,5.36209,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"), +(@ENTRY,9,17,0,0,0,100,0,0,0,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2369.53,-5888.84,11.2888,5.23643,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"), +(@ENTRY,9,18,0,0,0,100,0,0,0,0,0,12,12205,6,300000,0,0,0,8,0,0,0,2366.15,-5891.65,11.72,5.46812,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Witch'"), +-- 5. wave +(@ENTRY,9,19,0,0,0,100,0,55000,55000,0,0,12,12205,6,300000,0,0,0,8,0,0,0,2370.83,-5893.06,10.6607,5.45564,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Witch'"), +(@ENTRY,9,20,0,0,0,100,0,1000,1000,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2367.58,-5889.81,11.3931,5.36209,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"), +(@ENTRY,9,21,0,0,0,100,0,0,0,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2369.53,-5888.84,11.2888,5.23643,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"), +(@ENTRY,9,22,0,0,0,100,0,0,0,0,0,12,12205,6,300000,0,0,0,8,0,0,0,2366.15,-5891.65,11.72,5.46812,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Witch'"), +-- 6. wave +(@ENTRY,9,23,0,0,0,100,0,55000,55000,0,0,12,12205,6,300000,0,0,0,8,0,0,0,2370.83,-5893.06,10.6607,5.45564,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Witch'"), +(@ENTRY,9,24,0,0,0,100,0,1000,1000,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2367.58,-5889.81,11.3931,5.36209,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"), +(@ENTRY,9,25,0,0,0,100,0,0,0,0,0,12,12204,6,300000,0,0,0,8,0,0,0,2369.53,-5888.84,11.2888,5.23643,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Raider'"), +(@ENTRY,9,26,0,0,0,100,0,0,0,0,0,12,12205,6,300000,0,0,0,8,0,0,0,2366.15,-5891.65,11.72,5.46812,"Captain Vanessa Beltis - On Script - Summon Creature 'Spitelash Witch'"), +(@ENTRY,9,27,0,0,0,100,0,10000,10000,0,0,15,3382,0,0,0,0,0,17,0,30,0,0,0,0,0,"Captain Vanessa Beltis - On Script - Quest Credit 'A Crew Under Fire'"), +(@ENTRY,9,28,0,0,0,100,0,0,0,0,0,48,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Captain Vanessa Beltis - On Script - Set Active Off"), +(@ENTRY,9,29,0,0,0,100,0,0,0,0,0,45,2,2,0,0,0,0,9,0,0,50,0,0,0,0,"Captain Vanessa Beltis - On Script - Set Data 2 2"), +(@ENTRY,9,30,0,0,0,100,0,0,0,0,0,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,"Captain Vanessa Beltis - On Script - Set Faction 35"), +(@ENTRY,9,31,0,0,0,100,0,0,0,0,0,82,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Captain Vanessa Beltis - On Script - set NPC-Flag"); + +DELETE FROM `creature_text` WHERE `entry`=8380; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextId`) VALUES +(8380, 0, 0, 'Stand Prepared! The naga won\'t wait long to press their advantage once they know we\'re alive.', 12, 0, 100, 0, 0, 0, 'Captain Vanessa Beltis', 4658); + +-- Lindros SAI +SET @ENTRY := 8381; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,38,0,100,0,1,1,0,0,2,250,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lindros - On Data Set 1 1 - Set Faction 250"), +(@ENTRY,0,1,0,38,0,100,0,2,2,0,0,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lindros - On Data Set 2 2 - Set Faction 35"), +(@ENTRY,0,2,0,4,0,100,0,0,0,0,0,11,11975,0,0,0,0,0,2,0,0,0,0,0,0,0,"Lindros - On Aggro - Cast 'Arcane Explosion'"), +(@ENTRY,0,3,0,0,0,100,0,1000,4000,3000,4000,11,20823,0,0,0,0,0,2,0,0,0,0,0,0,0,"Lindros - In Combat - Cast 'Fireball'"); + +-- Alexandra Blazen SAI +SET @ENTRY := 8378; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,38,0,100,0,1,1,0,0,2,250,0,0,0,0,0,1,0,0,0,0,0,0,0,"Alexandra Blazen - On Data Set 1 1 - Set Faction 250"), +(@ENTRY,0,1,0,38,0,100,0,2,2,0,0,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,"Alexandra Blazen - On Data Set 2 2 - Set Faction 35"), +(@ENTRY,0,2,0,4,0,100,0,0,0,0,0,11,1006,2,0,0,0,0,1,0,0,0,0,0,0,0,"Alexandra Blazen - On Aggro - Cast 'Inner Fire'"), +(@ENTRY,0,3,0,2,0,100,0,0,0,20000,20000,11,11640,0,0,0,0,0,1,0,0,0,0,0,0,0,"Alexandra Blazen - Between 0-0% Health - Cast 'Renew'"); + +-- Patrick Mills SAI +SET @ENTRY := 8382; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,38,0,100,0,1,1,0,0,2,250,0,0,0,0,0,1,0,0,0,0,0,0,0,"Patrick Mills - On Data Set 1 1 - Set Faction 250"), +(@ENTRY,0,1,0,38,0,100,0,2,2,0,0,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,"Patrick Mills - On Data Set 2 2 - Set Faction 35"), +(@ENTRY,0,2,0,4,0,100,0,0,0,0,0,11,1032,2,0,0,0,0,1,0,0,0,0,0,0,0,"Patrick Mills - On Aggro - Cast 'Devotion Aura'"), +(@ENTRY,0,3,0,0,0,100,0,2000,2000,4000,4000,11,17143,0,0,0,0,0,2,0,0,0,0,0,0,0,"Patrick Mills - In Combat - Cast 'Holy Strike'"); + +-- Horizon Scout Crewman SAI +SET @ENTRY := 8386; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,38,0,100,0,1,1,0,0,2,250,0,0,0,0,0,1,0,0,0,0,0,0,0,"Horizon Scout Crewman - On Data Set 1 1 - Set Faction 250"), +(@ENTRY,0,1,0,38,0,100,0,2,2,0,0,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,"Horizon Scout Crewman - On Data Set 2 2 - Set Faction 35"), +(@ENTRY,0,2,0,0,0,100,0,2000,2000,4000,4000,11,6660,2,0,0,0,0,2,0,0,0,0,0,0,0,"Horizon Scout Crewman - In Combat - Cast 'Shoot'"); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_14_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_14_world.sql new file mode 100644 index 00000000000..a74f3f67554 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_15_14_world.sql @@ -0,0 +1,8 @@ +-- +DELETE FROM `creature_text` WHERE `entry`=18209; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(18209, 0, 0, 'It''s an ambush! Defend yourself!', 12, 0, 100, 0, 0, 0, 15044, 0, 'Kurenai Captive'), +(18209, 1, 0, 'More of them coming! Watch out!', 12, 0, 100, 0, 0, 0, 15000, 0, 'Kurenai Captive'), +(18209, 2, 0, 'Ride the lightning, filth!', 12, 1, 100, 0, 0, 0, 15006, 0, 'Kurenai Captive'), +(18209, 3, 0, 'We are surrounded!', 14, 0, 100, 0, 0, 0, 15047, 0, 'Kurenai Captive'), +(18209, 4, 0, 'Up ahead is the road to Telaar. We will split up when we reach the fork as they will surely send more Murkblood after us. Hopefully one of us makes it back to Telaar alive.', 14, 7, 100, 0, 0, 0, 15048, 0, 'Kurenai Captive'); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_00_world.sql new file mode 100644 index 00000000000..9fc5a435615 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_00_world.sql @@ -0,0 +1,20 @@ +-- Portal Kruul SAI +SET @ENTRY := 184289; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=1; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,1,0,0,70,0,100,0,2,0,0,0,11,34386,0,0,0,0,0,19,19652,10,0,0,0,0,0,"Portal Kruul - On Gameobject State Changed - Cast spell 'Hellfire Fire'"); +-- Portal Xilus SAI +SET @ENTRY := 184290; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=1; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,1,0,0,70,0,100,0,2,0,0,0,11,34386,0,0,0,0,0,19,19717,10,0,0,0,0,0,"Portal Xilus - On Gameobject State Changed - Cast spell 'Hellfire Fire'"); +-- Portal Grimh SAI +SET @ENTRY := 184414; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=1; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,1,0,0,70,0,100,0,2,0,0,0,11,34386,0,0,0,0,0,19,19652,10,0,0,0,0,0,"Portal Grimh - On Gameobject State Changed - Cast spell 'Hellfire Fire'"); +-- Portal Kaalez SAI +SET @ENTRY := 184415; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=1; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,1,0,0,70,0,100,0,2,0,0,0,11,34386,0,0,0,0,0,19,19717,10,0,0,0,0,0,"Portal Kaalez - On Gameobject State Changed - Cast spell 'Hellfire Fire'"); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_01_world_335.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_01_world_335.sql new file mode 100644 index 00000000000..2a0886c6ece --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_01_world_335.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature_template` SET `faction` = 1576 WHERE `entry` = 8564; diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_02_world.sql new file mode 100644 index 00000000000..60b305829cb --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_02_world.sql @@ -0,0 +1,105 @@ +-- Azure Spellweaver SAI +SET @ENTRY := 31403; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,2400,3800,11,34447,64,0,0,0,0,2,0,0,0,0,0,0,0,"Azure Spellweaver - Combat CMC - Cast 'Arcane Missiles'"); + +-- Gatekeeper Melindra SAI +SET @ENTRY := 32373; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,0,1000,1000,1800000,1800000,11,12544,1,0,0,0,0,1,0,0,0,0,0,0,0,"Gatekeeper Melindra - Out of Combat - Cast 'Frost Armor'"), +(@ENTRY,0,1,0,0,0,100,0,0,0,3400,4800,11,17290,64,0,0,0,0,2,0,0,0,0,0,0,0,"Gatekeeper Melindra - Combat CMC - Cast 'Fireball'"), +(@ENTRY,0,2,0,0,0,100,0,8000,11000,19000,25000,11,12738,1,0,0,0,0,2,0,0,0,0,0,0,0,"Gatekeeper Melindra - In Combat - Cast 'Amplify Damage'"); + +-- Syreian the Bonecarver SAI +SET @ENTRY := 32438; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,3,4,0,100,1,0,0,0,0,11,38952,64,0,0,0,0,2,0,0,0,0,0,0,0,"Syreian the Bonecarver - On Aggro CMC - Cast 'Frost Arrow' (No Repeat)"), +(@ENTRY,0,1,0,0,0,100,0,2300,3900,2300,3900,11,50092,64,0,0,0,0,2,0,0,0,0,0,0,0,"Syreian the Bonecarver - Combat CMC - Cast 'Shoot'"), +(@ENTRY,0,2,0,0,0,100,0,12000,15000,11000,14000,11,38952,1,0,0,0,0,2,0,0,0,0,0,0,0,"Syreian the Bonecarver - In Combat - Cast 'Frost Arrow'"), +(@ENTRY,0,3,0,9,0,100,0,0,5,12000,16000,11,47168,1,0,0,0,0,2,0,0,0,0,0,0,0,"Syreian the Bonecarver - Within 0-5 Range - Cast 'Improved Wing Clip'"); + +-- Unbound Seer SAI +SET @ENTRY := 33422; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,3400,4800,11,38204,64,0,0,0,0,2,0,0,0,0,0,0,0,"Unbound Seer - Combat CMC - Cast 'Arcane Bolt'"), +(@ENTRY,0,1,0,0,0,100,0,9000,12000,12000,15000,11,58667,33,0,0,0,0,5,0,0,0,0,0,0,0,"Unbound Seer - In Combat - Cast 'Ley Curse'"); + +-- Mistcaller Yngvar SAI +SET @ENTRY := 34965; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,1,1000,1000,0,0,11,45658,1,0,0,0,0,1,0,0,0,0,0,0,0,"Mistcaller Yngvar - Out of Combat - Cast 'Call of the Mist'"), +(@ENTRY,0,1,0,0,0,100,0,0,0,3400,4800,11,9532,64,0,0,0,0,2,0,0,0,0,0,0,0,"Mistcaller Yngvar - Combat CMC - Cast 'Lightning Bolt'"), +(@ENTRY,0,2,0,0,0,100,0,6000,9000,12000,17000,11,49816,0,0,0,0,0,5,0,0,0,0,0,0,0,"Mistcaller Yngvar - Combat - Cast 'Mist of Strangulation'"), +(@ENTRY,0,3,0,2,0,100,0,0,30,120000,120000,11,49871,1,0,0,0,0,1,0,0,0,0,0,0,0,"Mistcaller Yngvar - 0-30% Health - Cast 'Rune of Retribution'"); + +-- Drottinn Hrothgar SAI +SET @ENTRY := 34980; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,1,0,0,0,0,11,66625,1,0,0,0,0,1,0,0,0,0,0,0,0,"Drottinn Hrothgar - Out of Combat - Cast 'Cloud Aura' (No Repeat)"), +(@ENTRY,0,1,0,1,0,100,1,1500,1500,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Drottinn Hrothgar - Out of Combat - Say Line 0 (No Repeat)"), +(@ENTRY,0,2,0,9,0,100,0,0,5,5000,7000,11,15496,0,0,0,0,0,2,0,0,0,0,0,0,0,"Drottinn Hrothgar - Within 0-5 Range - Cast 'Cleave'"), +(@ENTRY,0,3,0,0,0,100,0,12000,16000,15000,21000,11,67038,1,0,0,0,0,1,0,0,0,0,0,0,0,"Drottinn Hrothgar - In Combat - Cast 'Smash'"); + +-- Ornolf the Scarred SAI +SET @ENTRY := 35012; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,1000,1000,8000,11000,11,38557,0,0,0,0,0,2,0,0,0,0,0,0,0,"Ornolf the Scarred - Combat - Cast 'Throw'"), +(@ENTRY,0,1,0,9,0,100,0,0,5,5000,7000,11,43410,0,0,0,0,0,2,0,0,0,0,0,0,0,"Ornolf the Scarred - Within 0-5 Range - Cast 'Chop'"), +(@ENTRY,0,2,0,0,0,100,0,8000,11000,8000,11000,11,67037,1,0,0,0,0,1,0,0,0,0,0,0,0,"Ornolf the Scarred - Combat - Cast 'Whirlwind'"), +(@ENTRY,0,3,0,2,0,100,0,0,30,40000,40000,11,3019,1,0,0,0,0,1,0,0,0,0,0,0,0,"Ornolf the Scarred - 0-30% Health - Cast 'Frenzy'"); + +-- Kul the Reckless SAI +SET @ENTRY := 34956; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,8,0,100,0,66531,0,0,0,80,3495600,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kul the Reckless - On Spellhit 'Open Black Cage' - Run Script"); + +-- Kvaldir Harpooner SAI +SET @ENTRY := 34907; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,2300,3900,11,66489,64,0,0,0,0,2,0,0,0,0,0,0,0,"Kvaldir Harpooner - Combat CMC - Cast 'Spear Throw'"); + +-- Deep Jormungar SAI +SET @ENTRY := 34920; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,1,1,0,100,1,0,0,500,500,11,56503,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - Out of Combat - Cast 'Submerge' (No Repeat)"), +(@ENTRY,0,1,0,61,0,100,0,0,0,0,0,18,33554434,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - Out of Combat - Set Flags Not Attackable & Not Selectable (No Repeat)"), +(@ENTRY,0,2,3,4,0,100,1,0,0,0,0,28,56503,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - On Aggro - Remove Aura 'Submerge' (No Repeat)"), +(@ENTRY,0,3,4,61,0,100,0,0,0,0,0,28,29147,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - On Aggro - Remove Aura 'Tunnel Bore Passive' (No Repeat)"), +(@ENTRY,0,4,5,61,0,100,0,0,0,0,0,11,37752,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - On Aggro - Cast 'Stand' (No Repeat)"), +(@ENTRY,0,5,6,61,0,100,0,0,0,0,0,21,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - On Aggro - Disable Combat Movement (No Repeat)"), +(@ENTRY,0,6,0,61,0,100,0,0,0,0,0,19,33554434,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - On Aggro - Remove Flags Not Attackable & Not Selectable (No Repeat)"), +(@ENTRY,0,7,0,0,0,100,0,1000,1000,3000,5000,11,61597,64,0,0,0,0,2,0,0,0,0,0,0,0,"Deep Jormungar - In Combat CMC - Cast 'Acid Spit'"), +(@ENTRY,0,8,0,0,0,100,0,11000,16000,15000,20000,11,61598,1,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - In Combat - Cast 'Sweep'"), +(@ENTRY,0,9,0,0,0,100,0,10000,20000,45000,50000,11,32738,0,0,0,0,0,2,0,0,0,0,0,0,0,"Deep Jormungar - In Combat - Cast 'Bore'"), +(@ENTRY,0,10,11,9,0,100,1,30,60,0,0,11,56503,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - Within 30-60 Range - Cast 'Submerge' (No Repeat)"), +(@ENTRY,0,11,0,61,0,100,0,0,0,0,0,11,29147,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - Within 30-60 Range - Cast 'Tunnel Bore Passive' (No Repeat)"), +(@ENTRY,0,12,13,9,0,100,1,0,8,0,0,28,56503,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - Within 0-8 Range - Remove Aura 'Submerge' (No Repeat)"), +(@ENTRY,0,13,14,61,0,100,0,0,0,0,0,28,29147,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - Within 0-8 Range - Remove Aura 'Tunnel Bore Passive' (No Repeat)"), +(@ENTRY,0,14,15,61,0,100,0,0,0,0,0,11,37752,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - Within 0-8 Range - Cast 'Stand' (No Repeat)"), +(@ENTRY,0,15,16,61,0,100,0,0,0,0,0,21,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - Within 0-8 Range - Disable Combat Movement (No Repeat)"), +(@ENTRY,0,16,0,61,0,100,0,0,0,0,0,19,33554434,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - Within 0-8 Range - Remove Flags Not Attackable & Not Selectable (No Repeat)"), +(@ENTRY,0,17,18,7,0,100,1,0,0,0,0,11,56503,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - On Evade - Cast 'Submerge' (No Repeat)"), +(@ENTRY,0,18,19,61,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - On Evade - Set Event Phase 1 (No Repeat)"), +(@ENTRY,0,19,20,61,0,100,0,0,0,0,0,11,29147,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - On Evade - Cast 'Tunnel Bore Passive' (No Repeat)"), +(@ENTRY,0,20,21,61,0,100,0,0,0,0,0,14,0,100,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - On Evade - Set All Threat 0-100 (No Repeat)"), +(@ENTRY,0,21,0,61,0,100,0,0,0,0,0,18,33554434,0,0,0,0,0,1,0,0,0,0,0,0,0,"Deep Jormungar - On Evade - Set Flags Not Attackable & Not Selectable (No Repeat)"); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_03_world.sql new file mode 100644 index 00000000000..98bd8be7da1 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_03_world.sql @@ -0,0 +1,223 @@ +-- Gnarlhide SAI +SET @ENTRY := 30003; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,3400,4800,11,38391,64,0,0,0,0,2,0,0,0,0,0,0,0,"Gnarlhide - Combat CMC - Cast 'Scorch'"), +(@ENTRY,0,1,0,0,0,100,0,3000,6000,20000,25000,11,60290,1,0,0,0,0,2,0,0,0,0,0,0,0,"Gnarlhide - Combat - Cast 'Blast Wave'"), +(@ENTRY,0,2,0,0,0,100,0,9000,12000,19000,24000,11,35250,1,0,0,0,0,1,0,0,0,0,0,0,0,"Gnarlhide - Combat - Cast 'Dragon's Breath'"), +(@ENTRY,0,3,0,0,0,100,0,5000,8000,9000,12000,11,20832,0,0,0,0,0,5,0,0,0,0,0,0,0,"Gnarlhide - Combat - Cast 'Fire Blast'"); + +-- Yulda the Stormspeaker SAI +SET @ENTRY := 30046; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,3400,4800,11,32018,64,0,0,0,0,2,0,0,0,0,0,0,0,"Yulda the Stormspeaker - Combat CMC - Cast 'Call Lightning'"), +(@ENTRY,0,1,0,0,0,100,0,9000,12000,15000,18000,11,55087,0,0,0,0,0,2,0,0,0,0,0,0,0,"Yulda the Stormspeaker - Combat - Cast 'Typhoon'"); + +-- Sigrid Iceborn SAI +SET @ENTRY := 30086; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,3500,4100,11,61168,64,0,0,0,0,2,0,0,0,0,0,0,0,"Sigrid Iceborn - Combat CMC - Cast 'Throw'"), +(@ENTRY,0,1,0,0,0,100,0,3000,7000,13000,16700,11,61164,0,0,0,0,0,2,0,0,0,0,0,0,0,"Sigrid Iceborn - Combat - Cast 'Impale'"), +(@ENTRY,0,2,0,13,0,100,0,12000,18000,0,0,11,57635,0,0,0,0,0,6,1,0,0,0,0,0,0,"Sigrid Iceborn - Target Casting - Cast 'Disengage'"), +(@ENTRY,0,3,0,1,0,100,0,500,1000,600000,600000,11,61165,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sigrid Iceborn - Out of Combat - Cast 'Frostbite Weapon'"), +(@ENTRY,0,4,5,62,0,100,0,9870,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Sigrid Iceborn - On Gossip Option 0 Selected - Close Gossip"), +(@ENTRY,0,5,6,61,0,100,0,0,0,0,0,42,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sigrid Iceborn - On Gossip Option 0 Selected - Set Invincibility Hp 1"), +(@ENTRY,0,6,7,61,0,100,0,0,0,0,0,19,768,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sigrid Iceborn - On Gossip Option 0 Selected - Remove Flags Immune To Players & Immune To NPC's"), +(@ENTRY,0,7,8,61,0,100,0,0,0,0,0,2,14,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sigrid Iceborn - On Gossip Option 0 Selected - Set Faction 14"), +(@ENTRY,0,8,0,61,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sigrid Iceborn - On Gossip Option 0 Selected - Say Line 0"), +(@ENTRY,0,9,10,2,0,100,0,0,1,0,0,33,30086,0,0,0,0,0,7,0,0,0,0,0,0,0,"Sigrid Iceborn - Between 0-1% Health - Quest Credit 'Eliminate the Competition'"), +(@ENTRY,0,10,11,61,0,100,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sigrid Iceborn - Between 0-1% Health - Set Faction 0"), +(@ENTRY,0,11,12,61,0,100,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sigrid Iceborn - Between 0-1% Health - Say Line 1"), +(@ENTRY,0,12,0,61,0,100,0,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sigrid Iceborn - Between 0-1% Health - Evade"); + +-- Twilight Worshipper SAI +SET @ENTRY := 30111; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,2,0,0,3400,4800,11,17290,64,0,0,0,0,2,0,0,0,0,0,0,0,"Twilight Worshipper - Combat CMC - Cast 'Fireball' (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,4,0,0,5000,8000,11,61567,64,0,0,0,0,5,0,0,0,0,0,0,0,"Twilight Worshipper - Combat CMC - Cast 'Fireball' (Heroic Dungeon)"), +(@ENTRY,0,2,0,0,0,100,2,9000,12000,14000,17000,11,56858,1,0,0,0,0,5,0,0,0,0,0,0,0,"Twilight Worshipper - Combat - Cast 'Flamestrike' (Normal Dungeon)"), +(@ENTRY,0,3,0,0,0,100,4,9000,12000,14000,17000,11,61568,1,0,0,0,0,5,0,0,0,0,0,0,0,"Twilight Worshipper - Combat - Cast 'Flamestrike' (Heroic Dungeon)"); + +-- Onu'zun SAI +SET @ENTRY := 30180; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,0,500,1000,600000,600000,11,18100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Onu'zun - Out of Combat - Cast 'Frost Armor'"), +(@ENTRY,0,1,0,0,0,100,0,0,0,3400,4700,11,15242,64,0,0,0,0,2,0,0,0,0,0,0,0,"Onu'zun - Combat CMC - Cast 'Fireball'"), +(@ENTRY,0,2,0,0,0,100,0,5000,5000,14500,17800,11,15244,0,0,0,0,0,2,0,0,0,0,0,0,0,"Onu'zun - Combat - Cast 'Cone of Cold'"), +(@ENTRY,0,3,0,13,0,100,0,12000,18000,0,0,11,15122,0,0,0,0,0,6,1,0,0,0,0,0,0,"Onu'zun - Target Casting - Cast 'Counterspell'"), +(@ENTRY,0,4,5,62,0,100,0,9878,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Onu'zun - On Gossip Option 0 Selected - Close Gossip"), +(@ENTRY,0,5,6,61,0,100,0,0,0,0,0,42,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Onu'zun - On Gossip Option 0 Selected - Set Invincibility Hp 1"), +(@ENTRY,0,6,7,61,0,100,0,0,0,0,0,19,768,0,0,0,0,0,1,0,0,0,0,0,0,0,"Onu'zun - On Gossip Option 0 Selected - Remove Flags Immune To Players & Immune To NPC's"), +(@ENTRY,0,7,8,61,0,100,0,0,0,0,0,2,14,0,0,0,0,0,1,0,0,0,0,0,0,0,"Onu'zun - On Gossip Option 0 Selected - Set Faction 14"), +(@ENTRY,0,8,0,61,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Onu'zun - On Gossip Option 0 Selected - Say Line 0"), +(@ENTRY,0,9,10,2,0,100,0,0,1,0,0,33,30180,0,0,0,0,0,7,0,0,0,0,0,0,0,"Onu'zun - Between 0-1% Health - Quest Credit 'Eliminate the Competition'"), +(@ENTRY,0,10,11,61,0,100,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Onu'zun - Between 0-1% Health - Set Faction 0"), +(@ENTRY,0,11,0,61,0,100,0,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Onu'zun - Between 0-1% Health - Evade"); + +-- Sunreaver Scout SAI +SET @ENTRY := 30233; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Sunreaver Scout - Combat CMC - Cast 'Shoot'"), +(@ENTRY,0,1,0,9,0,100,0,5,30,8000,13000,11,17174,0,0,0,0,0,2,0,0,0,0,0,0,0,"Sunreaver Scout - Within 5-30 Range - Cast 'Concussive Shot'"), +(@ENTRY,0,2,0,9,0,100,0,5,30,15000,25000,11,14443,0,0,0,0,0,2,0,0,0,0,0,0,0,"Sunreaver Scout - Within 5-30 Range - Cast 'Multi-Shot'"); + +-- Silver Covenant Scout SAI +SET @ENTRY := 30238; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Silver Covenant Scout - Combat CMC - Cast 'Shoot'"), +(@ENTRY,0,1,0,9,0,100,0,5,30,8000,13000,11,17174,0,0,0,0,0,2,0,0,0,0,0,0,0,"Silver Covenant Scout - Within 5-30 Range - Cast 'Concussive Shot'"), +(@ENTRY,0,2,0,9,0,100,0,5,30,15000,25000,11,14443,0,0,0,0,0,2,0,0,0,0,0,0,0,"Silver Covenant Scout - Within 5-30 Range - Cast 'Multi-Shot'"); + +-- Silver Covenant Horseman SAI +SET @ENTRY := 30263; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Silver Covenant Horseman - Combat CMC - Cast 'Shoot'"), +(@ENTRY,0,1,0,9,0,100,0,5,30,8000,13000,11,17174,0,0,0,0,0,2,0,0,0,0,0,0,0,"Silver Covenant Horseman - Within 5-30 Range - Cast 'Concussive Shot'"), +(@ENTRY,0,2,0,9,0,100,0,5,30,15000,25000,11,14443,0,0,0,0,0,2,0,0,0,0,0,0,0,"Silver Covenant Horseman - Within 5-30 Range - Cast 'Multi-Shot'"); + +-- Sunreaver Hawkrider SAI +SET @ENTRY := 30265; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Sunreaver Hawkrider - Combat CMC - Cast 'Shoot'"), +(@ENTRY,0,1,0,9,0,100,0,5,30,8000,13000,11,17174,0,0,0,0,0,2,0,0,0,0,0,0,0,"Sunreaver Hawkrider - Within 5-30 Range - Cast 'Concussive Shot'"), +(@ENTRY,0,2,0,9,0,100,0,5,30,15000,25000,11,14443,0,0,0,0,0,2,0,0,0,0,0,0,0,"Sunreaver Hawkrider - Within 5-30 Range - Cast 'Multi-Shot'"); + +-- Ahn'kahar Spell Flinger SAI +SET @ENTRY := 30278; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,2,0,0,23000,27000,11,56698,64,0,0,0,0,2,0,0,0,0,0,0,0,"Ahn'kahar Spell Flinger - Combat CMC - Cast 'Shadow Blast' (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,4,0,0,23000,27000,11,59102,64,0,0,0,0,2,0,0,0,0,0,0,0,"Ahn'kahar Spell Flinger - Combat CMC - Cast 'Shadow Blast' (Heroic Dungeon)"), +(@ENTRY,0,2,0,0,0,100,2,10000,14000,13000,16000,11,56702,65,0,0,0,0,1,0,0,0,0,0,0,0,"Ahn'kahar Spell Flinger - Combat CMC - Cast 'Shadow Sickle' (Normal Dungeon)"), +(@ENTRY,0,3,0,0,0,100,4,10000,14000,13000,16000,11,59103,65,0,0,0,0,1,0,0,0,0,0,0,0,"Ahn'kahar Spell Flinger - Combat CMC - Cast 'Shadow Sickle' (Heroic Dungeon)"); + +-- Eye of Taldaram SAI +SET @ENTRY := 30285; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,2,0,0,3400,4800,11,17439,64,0,0,0,0,2,0,0,0,0,0,0,0,"Eye of Taldaram - Combat CMC - Cast 'Shadow Shock' (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,4,0,0,3400,4800,11,17289,64,0,0,0,0,2,0,0,0,0,0,0,0,"Eye of Taldaram - Combat CMC - Cast 'Shadow Shock' (Heroic Dungeon)"), +(@ENTRY,0,2,0,13,0,100,3,0,0,0,0,11,56730,0,0,0,0,0,7,0,0,0,0,0,0,0,"Eye of Taldaram - Target Casting - Cast 'Dark Counterspell' (No Repeat) (Normal Dungeon)"), +(@ENTRY,0,3,0,13,0,100,5,0,0,0,0,11,59111,0,0,0,0,0,7,0,0,0,0,0,0,0,"Eye of Taldaram - Target Casting - Cast 'Dark Counterspell' (No Repeat) (Heroic Dungeon)"), +(@ENTRY,0,4,0,0,0,100,6,15000,19000,23000,27000,11,56728,1,0,0,0,0,2,0,0,0,0,0,0,0,"Eye of Taldaram - Combat - Cast 'Eyes in the Dark' (Dungeon)"), +(@ENTRY,0,5,0,6,0,100,3,0,0,0,0,11,56733,7,0,0,0,0,2,0,0,0,0,0,0,0,"Eye of Taldaram - Just Died - Cast 'Shadowfury' (No Repeat) (Normal Dungeon)"), +(@ENTRY,0,6,0,6,0,100,5,0,0,0,0,11,61463,7,0,0,0,0,2,0,0,0,0,0,0,0,"Eye of Taldaram - Just Died - Cast 'Shadowfury' (No Repeat) (Heroic Dungeon)"); + +-- Frostbringer SAI +SET @ENTRY := 30286; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,2,0,0,3400,4800,11,57825,64,0,0,0,0,2,0,0,0,0,0,0,0,"Frostbringer - Combat CMC - Cast 'Frostbolt' (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,4,0,0,3400,4800,11,61461,64,0,0,0,0,2,0,0,0,0,0,0,0,"Frostbringer - Combat CMC - Cast 'Frostbolt' (Heroic Dungeon)"), +(@ENTRY,0,2,0,0,0,100,2,9000,12000,15000,18000,11,15063,1,0,0,0,0,1,0,0,0,0,0,0,0,"Frostbringer - Combat - Cast 'Frost Nova' (Normal Dungeon)"), +(@ENTRY,0,3,0,0,0,100,4,9000,12000,15000,18000,11,61462,1,0,0,0,0,1,0,0,0,0,0,0,0,"Frostbringer - Combat - Cast 'Frost Nova' (Heroic Dungeon)"), +(@ENTRY,0,4,0,2,0,100,6,0,30,120000,130000,11,56716,0,0,0,0,0,1,0,0,0,0,0,0,0,"Frostbringer - 0-30% Health - Cast 'Icy Winds' (Dungeon)"); + +-- Stormforged Amplifier SAI +SET @ENTRY := 30591; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,3400,4800,11,9532,64,0,0,0,0,2,0,0,0,0,0,0,0,"Stormforged Amplifier - Combat CMC - Cast 'Lightning Bolt'"); + +-- Veteran Mage Hunter SAI +SET @ENTRY := 30665; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,7,1000,1000,0,0,11,58040,0,0,0,0,0,1,0,0,0,0,0,0,0,"Veteran Mage Hunter - Out of Combat - Cast 'Destroy Door Seal' (Dungeon)"), +(@ENTRY,0,1,0,4,0,100,6,0,0,0,0,30,1,2,3,0,0,0,1,0,0,0,0,0,0,0,"Veteran Mage Hunter - Aggro - Set Random Phase(1, 2, 3) (Dungeon)"), +(@ENTRY,0,2,0,0,1,100,2,0,0,2400,3800,11,15043,64,0,0,0,0,2,0,0,0,0,0,0,0,"Veteran Mage Hunter - Combat CMC - Cast 'Frostbolt' (Phase 1) (Normal Dungeon)"), +(@ENTRY,0,3,0,0,1,100,4,0,0,2400,3800,11,20822,64,0,0,0,0,2,0,0,0,0,0,0,0,"Veteran Mage Hunter - Combat CMC - Cast 'Frostbolt' (Phase 1) (Heroic Dungeon)"), +(@ENTRY,0,4,0,9,2,100,2,0,0,2400,3800,11,12466,64,0,0,0,0,2,0,0,0,0,0,0,0,"Veteran Mage Hunter - Combat CMC - Cast 'Fireball' (Phase 2) (Normal Dungeon)"), +(@ENTRY,0,5,0,9,2,100,4,0,0,2400,3800,11,20823,64,0,0,0,0,2,0,0,0,0,0,0,0,"Veteran Mage Hunter - Combat CMC - Cast 'Fireball' (Phase 2) (Heroic Dungeon)"), +(@ENTRY,0,6,0,9,4,100,2,0,0,2400,3800,11,13748,64,0,0,0,0,2,0,0,0,0,0,0,0,"Veteran Mage Hunter - Combat CMC - Cast 'Arcane Bolt' (Phase 3) (Normal Dungeon)"), +(@ENTRY,0,7,0,9,4,100,4,0,0,2400,3800,11,20829,64,0,0,0,0,2,0,0,0,0,0,0,0,"Veteran Mage Hunter - Combat CMC - Cast 'Arcane Bolt' (Phase 3) (Heroic Dungeon)"), +(@ENTRY,0,8,0,2,0,100,7,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Veteran Mage Hunter - Between 0-15% Health - Flee For Assist (No Repeat) (Dungeon)"); + +-- Portal Keeper SAI +SET @ENTRY := 30695; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,2,0,0,6000,8000,11,58531,64,0,0,0,0,2,0,0,0,0,0,0,0,"Portal Keeper - Combat CMC - Cast 'Arcane Missiles' (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,4,0,0,6000,8000,11,61593,64,0,0,0,0,2,0,0,0,0,0,0,0,"Portal Keeper - Combat CMC - Cast 'Arcane Missiles' (Heroic Dungeon)"), +(@ENTRY,0,2,0,9,0,100,2,0,8,13000,19000,11,58532,1,0,0,0,0,1,0,0,0,0,0,0,0,"Portal Keeper - 0-8 Range - Cast 'Frostbolt Volley' (Normal Dungeon)"), +(@ENTRY,0,3,0,9,0,100,4,0,8,13000,19000,11,61594,1,0,0,0,0,1,0,0,0,0,0,0,0,"Portal Keeper - 0-8 Range - Cast 'Frostbolt Volley' (Heroic Dungeon)"), +(@ENTRY,0,4,0,0,0,100,6,0,8,9000,14000,11,58534,1,0,0,0,0,6,0,0,0,0,0,0,0,"Portal Keeper - Combat - Cast 'Deep Freeze' (Dungeon)"); + +-- Nesingwary Game Warden SAI +SET @ENTRY := 30737; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,2300,3900,11,16100,64,0,0,0,0,2,0,0,0,0,0,0,0,"Nesingwary Game Warden - Combat CMC - Cast 'Shoot'"), +(@ENTRY,0,1,0,9,0,100,0,0,20,9000,13000,11,6533,1,0,0,0,0,2,0,0,0,0,0,0,0,"Nesingwary Game Warden - 0-20 Range - Cast 'Net'"), +(@ENTRY,0,2,0,9,0,100,0,5,30,8000,10000,11,31942,0,0,0,0,0,5,0,0,0,0,0,0,0,"Nesingwary Game Warden - 5-30 Range - Cast 'Multi-Shot'"), +(@ENTRY,0,3,0,9,0,100,0,0,45,7000,9000,11,23337,1,0,0,0,0,6,0,0,0,0,0,0,0,"Nesingwary Game Warden - 0-45 Range - Cast 'Shoot'"); + +-- Unbound Dryad SAI +SET @ENTRY := 30860; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,2300,3900,11,55217,64,0,0,0,0,2,0,0,0,0,0,0,0,"Unbound Dryad - Combat CMC - Cast 'Throw Spear'"), +(@ENTRY,0,1,0,0,0,100,0,3000,9000,9000,13000,11,11976,0,0,0,0,0,2,0,0,0,0,0,0,0,"Unbound Dryad - In Combat - Cast 'Strike'"); + +-- Shandaral Hunter Spirit SAI +SET @ENTRY := 30864; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Shandaral Hunter Spirit - Combat CMC - Cast 'Shoot'"), +(@ENTRY,0,1,0,0,0,100,0,4000,8000,9000,14000,11,54615,1,0,0,0,0,2,0,0,0,0,0,0,0,"Shandaral Hunter Spirit - Combat - Cast 'Aimed Shot'"), +(@ENTRY,0,2,0,0,0,100,0,9000,15000,15000,22000,11,47168,0,0,0,0,0,5,0,0,0,0,0,0,0,"Shandaral Hunter Spirit - Combat - Cast 'Improved Wing Clip'"); + +-- Unbound Corrupter SAI +SET @ENTRY := 30868; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,3400,5400,11,38204,64,0,0,0,0,2,0,0,0,0,0,0,0,"Unbound Corrupter - Combat CMC - Cast 'Arcane Bolt'"), +(@ENTRY,0,1,0,0,0,100,0,20000,30000,45000,60000,11,58667,1,0,0,0,0,2,0,0,0,0,0,0,0,"Unbound Corrupter - Combat - Cast 'Ley Curse'"), +(@ENTRY,0,2,0,2,0,100,0,0,30,30000,35000,11,58270,1,0,0,0,0,1,0,0,0,0,0,0,0,"Unbound Corrupter - 0-30% Health - Cast 'Transferred Power'"); + +-- Portal Keeper SAI +SET @ENTRY := 30893; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,2,0,45,6000,8000,11,58536,64,0,0,0,0,2,0,0,0,0,0,0,0,"Portal Keeper - Combat CMC - Cast 'Arcane Volley' (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,4,0,45,6000,8000,11,61591,64,0,0,0,0,2,0,0,0,0,0,0,0,"Portal Keeper - Combat CMC - Cast 'Arcane Volley' (Heroic Dungeon)"), +(@ENTRY,0,2,0,9,0,100,2,0,45,13000,19000,11,58535,0,0,0,0,0,5,0,0,0,0,0,0,0,"Portal Keeper - 0-45 Range - Cast 'Frostbolt' (Normal Dungeon)"), +(@ENTRY,0,3,0,9,0,100,4,0,45,13000,19000,11,61590,0,0,0,0,0,5,0,0,0,0,0,0,0,"Portal Keeper - 0-45 Range - Cast 'Frostbolt' (Heroic Dungeon)"), +(@ENTRY,0,4,0,0,0,100,6,0,8,9000,14000,11,58537,1,0,0,0,0,6,0,0,0,0,0,0,0,"Portal Keeper - Combat - Cast 'Polymorph' (Dungeon)"); + +-- Azure Binder SAI +SET @ENTRY := 31007; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,6,0,0,3400,4800,11,58456,64,0,0,0,0,2,0,0,0,0,0,0,0,"Azure Binder - Combat CMC - Cast 'Arcane Barrage' (Dungeon)"), +(@ENTRY,0,1,0,9,0,100,2,0,8,9000,15000,11,58455,1,0,0,0,0,1,0,0,0,0,0,0,0,"Azure Binder - 0-8 Range - Cast 'Arcane Explosion' (Normal Dungeon)"), +(@ENTRY,0,2,0,9,0,100,4,0,8,9000,15000,11,59257,1,0,0,0,0,1,0,0,0,0,0,0,0,"Azure Binder - 0-8 Range - Cast 'Arcane Blast' (Heroic Dungeon)"); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_04_world.sql new file mode 100644 index 00000000000..6cd793dd55f --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_04_world.sql @@ -0,0 +1,165 @@ +-- Spirit of Koosu SAI +SET @ENTRY := 29034; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,3500,4100,11,21971,64,0,0,0,0,2,0,0,0,0,0,0,0,"Spirit of Koosu - Combat CMC - Cast 'Poison Bolt'"); + +-- Anub'ar Necromancer SAI +SET @ENTRY := 29064; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,6,0,0,4000,6000,11,53333,64,0,0,0,0,2,0,0,0,0,0,0,0,"Anub'ar Necromancer - Combat CMC - Cast 'Shadow Bolt' (Dungeon)"), +(@ENTRY,0,1,0,0,0,100,6,14000,17000,23000,27000,11,53334,1,0,0,0,0,1,0,0,0,0,0,0,0,"Anub'ar Necromancer - Combat - Cast 'Animate Bones' (Dungeon)"); + +-- Anub'ar Necromancer SAI +SET @ENTRY := 29098; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,6,0,0,4000,6000,11,53333,64,0,0,0,0,2,0,0,0,0,0,0,0,"Anub'ar Necromancer - Combat CMC - Cast 'Shadow Bolt' (Dungeon)"), +(@ENTRY,0,1,0,0,0,100,6,14000,17000,23000,27000,11,53334,1,0,0,0,0,1,0,0,0,0,0,0,0,"Anub'ar Necromancer - Combat - Cast 'Animate Bones' (Dungeon)"); + + +-- Anub'ar Prime Guard SAI +SET @ENTRY := 29128; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,2,0,0,10000,13000,11,54309,64,0,0,0,0,5,0,0,0,0,0,0,0,"Anub'ar Prime Guard - Combat CMC - Cast 'Mark of Darkness' (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,4,0,0,10000,13000,11,59352,64,0,0,0,0,5,0,0,0,0,0,0,0,"Anub'ar Prime Guard - Combat CMC - Cast 'Mark of Darkness' (Heroic Dungeon)"), +(@ENTRY,0,2,0,9,0,100,7,0,5,0,0,11,54314,33,0,0,0,0,1,0,0,0,0,0,0,0,"Anub'ar Prime Guard - 0-5 Range - Cast 'Drain Power' (No Repeat) (Dungeon)"); + + +-- Lost Drakkari Spirit SAI +SET @ENTRY := 29129; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,23,0,100,0,17327,0,2000,2000,11,17327,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lost Drakkari Spirit - On Has Aura 'Spirit Particles' - Cast 'Spirit Particles'"), +(@ENTRY,0,1,0,0,0,100,0,0,0,1500,1500,11,37361,65,0,0,0,0,2,0,0,0,0,0,0,0,"Lost Drakkari Spirit - Combat CMC - Cast 'Arcane Bolt'"), +(@ENTRY,0,2,0,0,0,100,0,10000,16000,15000,18000,11,24050,1,0,0,0,0,2,0,0,0,0,0,0,0,"Lost Drakkari Spirit - In Combat - Cast 'Spirit Burst'"); + +-- Onslaught Harbor Guard SAI +SET @ENTRY := 29330; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,3400,4700,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Onslaught Harbor Guard - Combat CMC - Cast 'Shoot'"), +(@ENTRY,0,1,0,0,0,100,0,8000,8000,12000,14000,11,50750,0,0,0,0,0,1,0,0,0,0,0,0,0,"Onslaught Harbor Guard - Combat - Cast 'Raven Heal'"); + +-- Sifreldar Runekeeper SAI +SET @ENTRY := 29331; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,3400,4800,11,20792,64,0,0,0,0,2,0,0,0,0,0,0,0,"Sifreldar Runekeeper - Combat CMC - Cast 'Frostbolt'"), +(@ENTRY,0,1,0,2,0,100,1,0,30,15000,22000,11,52714,1,0,0,0,0,1,0,0,0,0,0,0,0,"Sifreldar Runekeeper - 0-30% Health - Cast 'Revitalizing Rune' (No Repeat)"); + +-- Onslaught Raven Bishop SAI +SET @ENTRY := 29338; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,3400,4700,11,50740,64,0,0,0,0,2,0,0,0,0,0,0,0,"Onslaught Raven Bishop - Combat CMC - Cast 'Raven Flock'"), +(@ENTRY,0,1,0,2,0,100,1,10,50,2000,8000,11,50750,0,0,0,0,0,2,0,0,0,0,0,0,0,"Onslaught Raven Bishop - 10-50% Health - Cast 'Raven Heal' (No Repeat)"); + +-- Savage Hill Scavenger SAI +SET @ENTRY := 29404; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,5000,8000,11,50403,64,0,0,0,0,5,0,0,0,0,0,0,0,"Savage Hill Scavenger - Combat CMC - Cast 'Bone Toss'"); + +-- Savage Hill Mystic SAI +SET @ENTRY := 29622; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,4400,5800,11,50273,64,0,0,0,0,2,0,0,0,0,0,0,0,"Savage Hill Mystic - Combat CMC - Cast 'Arcane Barrage'"), +(@ENTRY,0,1,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Savage Hill Mystic - 0-15% Health - Flee For Assist"); + +-- Stormforged Tracker SAI +SET @ENTRY := 29652; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Stormforged Tracker - Combat CMC - Cast 'Shoot'"), +(@ENTRY,0,1,0,0,0,100,0,9000,12000,9000,12000,11,46982,1,0,0,0,0,5,0,0,0,0,0,0,0,"Stormforged Tracker - Combat - Cast 'Lightning Gun Shot'"); + +-- Spitting Cobra SAI +SET @ENTRY := 29774; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,2,0,0,12000,15000,11,32860,64,0,0,0,0,2,0,0,0,0,0,0,0,"Spitting Cobra - Combat CMC - Cast 'Shadow Bolt' (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,4,0,0,12000,15000,11,38378,64,0,0,0,0,2,0,0,0,0,0,0,0,"Spitting Cobra - Combat CMC - Cast 'Shadow Bolt' (Heroic Dungeon)"), +(@ENTRY,0,2,0,0,0,100,2,5000,10000,17000,20000,11,55703,64,0,0,0,0,2,0,0,0,0,0,0,0,"Spitting Cobra - Combat CMC - Cast 'Cobra Strike' (Normal Dungeon)"), +(@ENTRY,0,3,0,0,0,100,4,5000,10000,17000,20000,11,59020,64,0,0,0,0,2,0,0,0,0,0,0,0,"Spitting Cobra - Combat CMC - Cast 'Cobra Strike' (Heroic Dungeon)"); + +-- Drakkari God Hunter SAI +SET @ENTRY := 29820; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,2,0,0,2300,5000,11,35946,64,0,0,0,0,2,0,0,0,0,0,0,0,"Drakkari God Hunter - Combat CMC - Cast 'Shoot' (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,4,0,0,2300,5000,11,59146,64,0,0,0,0,2,0,0,0,0,0,0,0,"Drakkari God Hunter - Combat CMC - Cast 'Shoot' (Heroic Dungeon)"), +(@ENTRY,0,2,0,0,0,100,2,7000,10000,12000,15000,11,55624,1,0,0,0,0,5,0,0,0,0,0,0,0,"Drakkari God Hunter - Combat - Cast 'Arcane Shot' (Normal Dungeon)"), +(@ENTRY,0,3,0,0,0,100,4,7000,10000,12000,15000,11,58973,1,0,0,0,0,5,0,0,0,0,0,0,0,"Drakkari God Hunter - Combat - Cast 'Arcane Shot' (Heroic Dungeon)"), +(@ENTRY,0,4,0,0,0,100,6,3000,5000,33000,37000,11,55798,1,0,0,0,0,1,0,0,0,0,0,0,0,"Drakkari God Hunter - Combat - Cast 'Flare' (Dungeon)"), +(@ENTRY,0,5,0,0,0,100,6,18000,21000,19000,23000,11,55625,0,0,0,0,0,5,0,0,0,0,0,0,0,"Drakkari God Hunter - Combat - Cast 'Tranquillizing Shot' (Dungeon)"), +(@ENTRY,0,6,0,2,0,100,6,0,30,12000,15000,11,31567,1,0,0,0,0,1,0,0,0,0,0,0,0,"Drakkari God Hunter - 0-30% Health - Cast 'Deterrence' (Dungeon)"); + +-- Drakkari Fire Weaver SAI +SET @ENTRY := 29822; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,2,0,0,8000,9000,11,55659,64,0,0,0,0,2,0,0,0,0,0,0,0,"Drakkari Fire Weaver - Combat CMC - Cast 'Lava Burst' (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,4,0,0,8000,9000,11,58972,64,0,0,0,0,2,0,0,0,0,0,0,0,"Drakkari Fire Weaver - Combat CMC - Cast 'Lava Burst' (Heroic Dungeon)"), +(@ENTRY,0,2,0,0,0,100,2,4000,7000,12000,15000,11,55613,65,0,0,0,0,5,0,0,0,0,0,0,0,"Drakkari Fire Weaver - Combat CMC - Cast 'Flame Shock' (Normal Dungeon)"), +(@ENTRY,0,3,0,0,0,100,4,4000,7000,10000,14000,11,58971,65,0,0,0,0,5,0,0,0,0,0,0,0,"Drakkari Fire Weaver - Combat CMC - Cast 'Flame Shock' (Heroic Dungeon)"), +(@ENTRY,0,4,0,9,0,100,6,0,5,10000,16000,11,61362,1,0,0,0,0,1,0,0,0,0,0,0,0,"Drakkari Fire Weaver - 0-5 Range - Cast 'Blast Wave' (Dungeon)"); + +-- Drakkari Battle Rider SAI +SET @ENTRY := 29836; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,2,0,0,5000,7000,11,55348,64,0,0,0,0,2,0,0,0,0,0,0,0,"Drakkari Battle Rider - Combat CMC - Cast 'Throw' (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,4,0,0,5000,7000,11,58966,64,0,0,0,0,2,0,0,0,0,0,0,0,"Drakkari Battle Rider - Combat CMC - Cast 'Throw' (Heroic Dungeon)"), +(@ENTRY,0,2,0,0,0,100,2,12000,15000,16000,22000,11,55521,33,0,0,0,0,6,0,0,0,0,0,0,0,"Drakkari Battle Rider - Combat - Cast 'Poisoned Spear' (Normal Dungeon)"), +(@ENTRY,0,3,0,0,0,100,4,12000,15000,16000,22000,11,58967,33,0,0,0,0,6,0,0,0,0,0,0,0,"Drakkari Battle Rider - Combat - Cast 'Poisoned Spear' (Heroic Dungeon)"); + +-- Mildred the Cruel SAI +SET @ENTRY := 29885; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,30,3400,4800,11,15587,64,0,0,0,0,2,0,0,0,0,0,0,0,"Mildred the Cruel - Combat CMC - Cast 'Mind Blast'"), +(@ENTRY,0,1,0,0,0,100,0,7000,11000,12000,15000,11,14032,0,0,0,0,0,5,0,0,0,0,0,0,0,"Mildred the Cruel - Combat - Cast 'Shadow Word: Pain'"), +(@ENTRY,0,2,0,2,0,100,0,0,15,10000,15000,11,47697,1,0,0,0,0,5,0,0,0,0,0,0,0,"Mildred the Cruel - 0-15% Health - Cast 'Shadow Word: Death'"); + +-- K3 Bruiser SAI +SET @ENTRY := 29910; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,9,0,100,1,0,20,11000,16000,11,12024,1,0,0,0,0,2,0,0,0,0,0,0,0,"K3 Bruiser - Within 0-20 Range - Cast 'Net' (No Repeat)"), +(@ENTRY,0,1,0,0,0,100,0,0,0,2300,3900,11,23337,64,0,0,0,0,2,0,0,0,0,0,0,0,"K3 Bruiser - Combat CMC - Cast 'Shoot'"); + +-- Earthen Stoneguard SAI +SET @ENTRY := 29960; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,9,0,100,1,0,20,11000,16000,11,12024,1,0,0,0,0,2,0,0,0,0,0,0,0,"Earthen Stoneguard - Within 0-20 Range - Cast 'Net' (No Repeat)"), +(@ENTRY,0,1,0,0,0,100,0,0,0,2300,3900,11,23337,64,0,0,0,0,2,0,0,0,0,0,0,0,"Earthen Stoneguard - Combat CMC - Cast 'Shoot'"); + +-- Iron Dwarf Magus SAI +SET @ENTRY := 29979; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,30,3400,4800,11,12058,64,0,0,0,0,2,0,0,0,0,0,0,0,"Iron Dwarf Magus - Combat CMC - Cast 'Chain Lightning'"); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_05_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_05_world.sql new file mode 100644 index 00000000000..fa123614224 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_05_world.sql @@ -0,0 +1,173 @@ +-- Wastes Scavenger SAI +SET @ENTRY := 28005; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,3000,5000,11,50403,64,0,0,0,0,2,0,0,0,0,0,0,0,"Wastes Scavenger - Combat CMC - Cast 'Bone Toss'"), +(@ENTRY,0,1,0,8,0,100,0,50430,0,0,0,80,2800500,2,0,0,0,0,1,0,0,0,0,0,0,0,"Wastes Scavenger - On spellhit Devour Ghoul - Run script"); + +-- Emperor Cobra SAI +SET @ENTRY := 28011; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,3400,4800,11,32093,32,0,0,0,0,2,0,0,0,0,0,0,0,"Emperor Cobra - Combat CMC - Cast 'Poison Spit'"); + +-- Rainspeaker Oracle SAI +SET @ENTRY := 28025; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,6000,8000,11,15305,64,0,0,0,0,2,0,0,0,0,0,0,0,"Rainspeaker Oracle - Combat CMC - Cast 'Chain Lightning'"), +(@ENTRY,0,1,0,0,0,100,0,3000,6000,12000,15000,11,54919,1,0,0,0,0,5,0,0,0,0,0,0,0,"Rainspeaker Oracle - Combat - Cast 'Warped Armor'"); + +-- Frenzyheart Tracker SAI +SET @ENTRY := 28077; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,1,54,0,100,0,0,0,0,0,66,0,0,0,0,0,0,21,50,0,0,0,0,0,0,"Frenzyheart Tracker - On Just Summoned - Set Orientation"), +(@ENTRY,0,1,2,61,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Frenzyheart Tracker - On Just Summoned - Say Line 1"), +(@ENTRY,0,2,0,61,0,100,0,0,0,0,0,41,8000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Frenzyheart Tracker - On Just Summoned - Despawn After 8 seconds"), +(@ENTRY,0,3,0,0,0,100,0,0,0,3000,5000,11,22907,64,0,0,0,0,2,0,0,0,0,0,0,0,"Frenzyheart Tracker - Combat CMC - Cast 'Shoot'"), +(@ENTRY,0,4,0,0,0,100,0,10000,14000,60000,65000,11,53432,1,0,0,0,0,1,0,0,0,0,0,0,0,"Frenzyheart Tracker - Combat - Cast 'Bear Trap'"); + +-- Frenzyheart Hunter SAI +SET @ENTRY := 28079; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,2300,3900,11,15547,64,0,0,0,0,2,0,0,0,0,0,0,0,"Frenzyheart Hunter - Combat CMC - Cast 'Shoot'"), +(@ENTRY,0,1,0,0,0,100,0,8000,11000,12000,15000,11,52270,1,0,0,0,0,5,0,0,0,0,0,0,0,"Frenzyheart Hunter - Combat - Cast 'Multi-Shot'"); + +-- Frenzyheart Scavenger SAI +SET @ENTRY := 28081; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,2300,3900,11,54617,64,0,0,0,0,2,0,0,0,0,0,0,0,"Frenzyheart Scavenger - Combat CMC - Cast 'Throw Spear'"); + +-- Sparktouched Oracle SAI +SET @ENTRY := 28112; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,3400,4800,11,54916,64,0,0,0,0,2,0,0,0,0,0,0,0,"Sparktouched Oracle - Combat CMC - Cast 'Lightning Burst'"), +(@ENTRY,0,1,0,9,0,100,0,0,30,9000,12000,11,12549,1,0,0,0,0,2,0,0,0,0,0,0,0,"Sparktouched Oracle - Within 0-30 Range - Cast 'Forked Lightning'"); + +-- Don Carlos SAI +SET @ENTRY := 28132; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,7,1000,1000,0,0,11,50736,1,0,0,0,0,1,0,0,0,0,0,0,0,"Don Carlos - Out of Combat - Cast 'Summon Guerrero' (No Repeat) (Dungeon)"), +(@ENTRY,0,1,0,0,0,100,2,0,0,2300,5000,11,16100,64,0,0,0,0,2,0,0,0,0,0,0,0,"Don Carlos - Combat CMC - Cast 'Shoot' (Normal Dungeon)"), +(@ENTRY,0,2,0,0,0,100,4,0,0,2300,5000,11,16496,64,0,0,0,0,2,0,0,0,0,0,0,0,"Don Carlos - Combat CMC - Cast 'Shoot' (Heroic Dungeon)"), +(@ENTRY,0,3,0,0,0,100,2,9000,14000,22000,26000,11,12024,1,0,0,0,0,5,0,0,0,0,0,0,0,"Don Carlos - In Combat - Cast 'Net' (Normal Dungeon)"), +(@ENTRY,0,4,0,0,0,100,4,9000,14000,22000,26000,11,50762,1,0,0,0,0,5,0,0,0,0,0,0,0,"Don Carlos - In Combat - Cast 'Net' (Heroic Dungeon)"); + +-- Snowflake SAI +SET @ENTRY := 28153; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,2,0,0,3400,4800,11,50721,64,0,0,0,0,2,0,0,0,0,0,0,0,"Snowflake - Combat CMC - Cast 'Frostbolt' (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,4,0,0,3400,4800,11,59280,64,0,0,0,0,2,0,0,0,0,0,0,0,"Snowflake - Combat CMC - Cast 'Frostbolt' (Heroic Dungeon)"), +(@ENTRY,0,2,0,0,0,100,7,5000,9000,0,0,11,44604,0,0,0,0,0,1,0,0,0,0,0,0,0,"Snowflake - In Combat - Cast 'Enchantment of Spell Haste' (No Repeat) (Dungeon)"); + +-- Dark Necromancer SAI +SET @ENTRY := 28200; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,2,0,0,5000,7000,11,15537,64,0,0,0,0,2,0,0,0,0,0,0,0,"Dark Necromancer - Combat CMC - Cast 'Shadow Bolt' (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,4,0,0,5000,7000,11,61558,64,0,0,0,0,2,0,0,0,0,0,0,0,"Dark Necromancer - Combat CMC - Cast 'Shadow Bolt' (Heroic Dungeon)"), +(@ENTRY,0,2,0,0,0,100,2,7000,11000,21000,25000,11,20812,1,0,0,0,0,2,0,0,0,0,0,0,0,"Dark Necromancer - Combat - Cast 'Cripple' (Normal Dungeon)"), +(@ENTRY,0,3,0,0,0,100,4,7000,11000,21000,25000,11,52498,1,0,0,0,0,2,0,0,0,0,0,0,0,"Dark Necromancer - Combat - Cast 'Cripple' (Heroic Dungeon)"), +(@ENTRY,0,4,0,0,0,100,2,14000,18000,15000,21000,11,58772,1,0,0,0,0,6,0,0,0,0,0,0,0,"Dark Necromancer - Combat - Cast 'Drain Mana' (Normal Dungeon)"), +(@ENTRY,0,5,0,0,0,100,4,14000,18000,15000,21000,11,58770,1,0,0,0,0,6,0,0,0,0,0,0,0,"Dark Necromancer - Combat - Cast 'Drain Mana' (Heroic Dungeon)"); + +-- Drakkari Water Binder SAI +SET @ENTRY := 28303; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,2400,3800,11,9532,64,0,0,0,0,2,0,0,0,0,0,0,0,"Drakkari Water Binder - Combat CMC - Cast 'Lightning Bolt'"), +(@ENTRY,0,1,0,0,0,100,0,8000,16000,25000,30000,11,54399,1,0,0,0,0,2,0,0,0,0,0,0,0,"Drakkari Water Binder - Combat - Cast 'Water Bubble'"); + +-- Ymirjar Necromancer SAI +SET @ENTRY := 28368; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,2,0,0,5000,7000,11,51432,64,0,0,0,0,2,0,0,0,0,0,0,0,"Ymirjar Necromancer - Combat CMC - Cast 'Shadow Bolt' (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,4,0,0,5000,7000,11,59254,64,0,0,0,0,2,0,0,0,0,0,0,0,"Ymirjar Necromancer - Combat CMC - Cast 'Shadow Bolt' (Heroic Dungeon)"), +(@ENTRY,0,2,0,0,0,100,2,9000,14000,18000,22000,11,49205,0,0,0,0,0,5,0,0,0,0,0,0,0,"Ymirjar Necromancer - Combat - Cast 'Shadow Bolt Volley' (Normal Dungeon)"), +(@ENTRY,0,3,0,0,0,100,4,9000,14000,18000,22000,11,59255,0,0,0,0,0,5,0,0,0,0,0,0,0,"Ymirjar Necromancer - Combat - Cast 'Shadow Bolt Volley' (Heroic Dungeon)"); + +-- Har'koan Subduer SAI +SET @ENTRY := 28403; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,0,2000,20000,40000,60000,80,2840300,2,0,0,0,0,1,0,0,0,0,0,0,0,"Har'koan Subduer - Out of Combat - Run Script"), +(@ENTRY,0,1,0,0,0,100,0,0,0,2800,3500,11,20822,64,0,0,0,0,2,0,0,0,0,0,0,0,"Har'koan Subduer - Combat CMC - Cast 'Frostbolt'"), +(@ENTRY,0,2,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Har'koan Subduer - 0-15% Health - Flee For Assist (No Repeat)"); + +-- Dragonflayer Spiritualist SAI +SET @ENTRY := 28410; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,6,0,0,2400,3800,11,51587,64,0,0,0,0,2,0,0,0,0,0,0,0,"Dragonflayer Spiritualist - Combat CMC - Cast 'Lightning Bolt' (Dungeon)"), +(@ENTRY,0,1,0,0,0,100,6,1500,4000,8000,10000,11,51588,1,0,0,0,0,2,0,0,0,0,0,0,0,"Dragonflayer Spiritualist - Combat - Cast 'Flame Shock' (Dungeon)"), +(@ENTRY,0,2,0,14,0,100,6,7000,100,7000,7000,11,51586,1,0,0,0,0,7,0,0,0,0,0,0,0,"Dragonflayer Spiritualist - Friendly At 7000 Health - Cast 'Healing Wave' (Dungeon)"); + +-- Hath'ar Broodmaster SAI +SET @ENTRY := 28412; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,2400,3800,11,9613,64,0,0,0,0,2,0,0,0,0,0,0,0,"Hath'ar Broodmaster - Combat CMC - Cast 'Shadow Bolt'"), +(@ENTRY,0,1,0,0,0,100,0,3000,5000,15000,25000,11,54453,1,0,0,0,0,2,0,0,0,0,0,0,0,"Hath'ar Broodmaster - Combat - Cast 'Web Wrap'"); + +-- Hemet Nesingwary SAI +SET @ENTRY := 28451; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,2300,3900,11,51742,64,0,0,0,0,2,0,0,0,0,0,0,0,"Hemet Nesingwary - Combat CMC - Cast 'Arcane Shot'"); + +-- Storming Vortex SAI +SET @ENTRY := 28547; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,2,0,0,3400,4800,11,53044,64,0,0,0,0,2,0,0,0,0,0,0,0,"Storming Vortex - Combat CMC - Cast 'Lightning Bolt' (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,4,0,0,3400,4800,11,59169,64,0,0,0,0,2,0,0,0,0,0,0,0,"Storming Vortex - Combat CMC - Cast 'Lightning Bolt' (Heroic Dungeon)"), +(@ENTRY,0,2,0,9,0,100,6,0,5,9000,18000,11,60236,0,0,0,0,0,6,0,0,0,0,0,0,0,"Storming Vortex - Within 0-5 Range - Cast 'Cyclone' (Dungeon)"); + +-- Hardened Steel Skycaller SAI +SET @ENTRY := 28580; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,2,0,0,2300,5000,11,16100,64,0,0,0,0,2,0,0,0,0,0,0,0,"Hardened Steel Skycaller - Combat CMC - Cast 'Shoot' (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,4,0,0,2300,5000,11,61515,64,0,0,0,0,2,0,0,0,0,0,0,0,"Hardened Steel Skycaller - Combat CMC - Cast 'Shoot' (Heroic Dungeon)"), +(@ENTRY,0,2,0,0,0,100,2,9000,12000,15000,20000,11,52754,0,0,0,0,0,5,0,0,0,0,0,0,0,"Hardened Steel Skycaller - Combat - Cast 'Impact Shot' (Normal Dungeon)"), +(@ENTRY,0,3,0,0,0,100,2,7000,12000,12000,18000,11,52775,0,0,0,0,0,5,0,0,0,0,0,0,0,"Hardened Steel Skycaller - Combat - Cast 'Impact Multi-Shot' (Normal Dungeon)"), +(@ENTRY,0,4,0,0,0,100,4,9000,12000,15000,20000,11,59148,0,0,0,0,0,5,0,0,0,0,0,0,0,"Hardened Steel Skycaller - Combat - Cast 'Impact Shot' (Heroic Dungeon)"), +(@ENTRY,0,5,0,0,0,100,4,7000,12000,12000,18000,11,59147,0,0,0,0,0,5,0,0,0,0,0,0,0,"Hardened Steel Skycaller - Combat - Cast 'Impact Multi-Shot' (Heroic Dungeon)"), +(@ENTRY,0,6,0,9,0,100,6,0,5,6000,9000,11,61507,0,0,0,0,0,1,0,0,0,0,0,0,0,"Hardened Steel Skycaller - 0-5 Range - Cast 'Disengage' (Dungeon)"); + +-- Titanium Vanguard SAI +SET @ENTRY := 28838; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,3,0,0,0,0,11,53059,0,0,0,0,0,2,0,0,0,0,0,0,0,"Titanium Vanguard - On Aggro - Cast 'Poison Tipped Spear' (No Repeat) (Normal Dungeon)"), +(@ENTRY,0,1,0,9,0,100,2,5,30,14000,21000,11,53059,0,0,0,0,0,2,0,0,0,0,0,0,0,"Titanium Vanguard - Within 5-30 Range - Cast 'Poison Tipped Spear' (Normal Dungeon)"), +(@ENTRY,0,2,0,0,0,100,5,0,0,0,0,11,59178,0,0,0,0,0,2,0,0,0,0,0,0,0,"Titanium Vanguard - On Aggro - Cast 'Poison Tipped Spear' (No Repeat) (Heroic Dungeon)"), +(@ENTRY,0,3,0,9,0,100,4,5,30,14000,21000,11,59178,0,0,0,0,0,2,0,0,0,0,0,0,0,"Titanium Vanguard - Within 5-30 Range - Cast 'Poison Tipped Spear' (Heroic Dungeon)"), +(@ENTRY,0,4,0,0,0,100,7,4000,6000,0,0,11,58619,0,0,0,0,0,2,0,0,0,0,0,0,0,"Titanium Vanguard - In Combat - Cast 'Charge' (No Repeat) (Dungeon)"), +(@ENTRY,0,5,0,0,0,100,6,12000,15000,12000,15000,11,58619,0,0,0,0,0,6,0,0,0,0,0,0,0,"Titanium Vanguard - In Combat - Cast 'Charge' (Dungeon)"); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_06_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_06_world.sql new file mode 100644 index 00000000000..237bbe658ce --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_16_06_world.sql @@ -0,0 +1,11 @@ +-- +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=17 AND `SourceEntry`=46104; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(17,0,46104,0,0,31,1,3,25835,0,0,0,0,'','Nesingwary Trapper can be killed by the Trapped!'); + +DELETE FROM `creature_text` WHERE `entry` IN (25835) ; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextID`) VALUES +(25835, 0, 0, 'It''s a miracle! The beast skinned itself!', 12, 0, 100, 0, 0, 0, 'Nesingwary Trapper', 25029), +(25835, 0, 1, 'Jackpot!', 12, 0, 100, 0, 0, 0, 'Nesingwary Trapper', 25034), +(25835, 0, 2, 'Stupid beasts!', 12, 0, 100, 0, 0, 0, 'Nesingwary Trapper', 25030), +(25835, 0, 3, 'This is the last one that I need for the set of Nesingwary steak knives!', 12, 0, 100, 0, 0, 0, 'Nesingwary Trapper', 25031); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_17_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_17_00_world.sql new file mode 100644 index 00000000000..20167f615b6 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_17_00_world.sql @@ -0,0 +1,342 @@ +-- Prince Raze SAI +SET @ENTRY := 10647; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,4700,5800,11,9053,64,0,0,0,0,2,0,0,0,0,0,0,0,"Prince Raze - Combat CMC - Cast 'Fireball'"), +(@ENTRY,0,1,0,9,0,100,0,0,40,13000,16000,11,16570,1,0,0,0,0,5,0,0,0,0,0,0,0,"Prince Raze - 0-40 Range - Cast 'Charged Arcane Bolt'"), +(@ENTRY,0,2,0,9,0,100,0,0,8,12000,18000,11,11969,1,0,0,0,0,1,0,0,0,0,0,0,0,"Prince Raze - 0-8 Range - Cast 'Fire Nova'"), +(@ENTRY,0,3,4,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Prince Raze - 0-15% Health - Flee For Assist (No Repeat)"), +(@ENTRY,0,4,0,61,0,100,0,0,0,0,0,11,6925,1,0,0,0,0,1,0,0,0,0,0,0,0,"Prince Raze - 0-15% Health - Cast 'Gift of the Xavian' (No Repeat)"); + +-- Summoned Blackhand Dreadweaver SAI +SET @ENTRY := 10680; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,3,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Summoned Blackhand Dreadweaver - Out of Combat - Say Line 0 (No Repeat) (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,2,0,0,2400,6400,11,12739,64,0,0,0,0,2,0,0,0,0,0,0,0,"Summoned Blackhand Dreadweaver - Combat CMC - Cast 'Shadow Bolt' (Normal Dungeon)"), +(@ENTRY,0,2,0,0,0,100,2,14500,19200,27600,39600,11,7068,0,0,0,0,0,2,0,0,0,0,0,0,0,"Summoned Blackhand Dreadweaver - Combat - Cast 'Veil of Shadow' (Normal Dungeon)"), +(@ENTRY,0,3,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Summoned Blackhand Dreadweaver - Between 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)"), +(@ENTRY,0,4,0,1,0,100,2,10000,10000,0,0,37,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Summoned Blackhand Dreadweaver - Out of Combat - Kill Self (No Repeat) (Normal Dungeon)"); + +-- Duggan Wildhammer SAI +SET @ENTRY := 10817; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,2300,3900,11,15547,64,0,0,0,0,2,0,0,0,0,0,0,0,"Duggan Wildhammer - Combat CMC - Cast 'Shoot'"), +(@ENTRY,0,1,0,9,0,100,0,0,5,6000,9000,11,15284,1,0,0,0,0,2,0,0,0,0,0,0,0,"Duggan Wildhammer - 0-5 Range - Cast 'Cleave'"), +(@ENTRY,0,2,0,2,0,100,0,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Duggan Wildhammer - 0-15% Health - Flee For Assist"); + +-- Death-Hunter Hawkspear SAI +SET @ENTRY := 10824; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,9,0,100,0,0,5,2300,3900,11,12057,0,0,0,0,0,2,0,0,0,0,0,0,0,"Ranger Lord Hawkspear - 0-5 Range - Cast 'Strike'"), +(@ENTRY,0,1,0,9,0,100,0,0,5,7000,9000,11,11978,1,0,0,0,0,2,0,0,0,0,0,0,0,"Ranger Lord Hawkspear - 0-5 Range - Cast 'Kick'"); + +-- Deathspeaker Selendre SAI +SET @ENTRY := 10827; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,3000,5000,11,12471,64,0,0,0,0,2,0,0,0,0,0,0,0,"Deathspeaker Selendre - Combat CMC - Cast 'Shadow Bolt'"), +(@ENTRY,0,1,0,0,0,100,0,3000,5000,15000,18000,11,12889,1,0,0,0,0,2,0,0,0,0,0,0,0,"Deathspeaker Selendre - Combat - Cast 'Curse of Tongues'"), +(@ENTRY,0,2,0,2,0,100,0,0,30,12000,19000,11,17238,0,0,0,0,0,2,0,0,0,0,0,0,0,"Deathspeaker Selendre - 0-30% Health - Cast 'Drain Life'"); + +-- Risen Rifleman SAI +SET @ENTRY := 11054; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,2,0,0,2300,3900,11,17353,64,0,0,0,0,2,0,0,0,0,0,0,0,"Crimson Rifleman - Combat CMC - Cast 'Shoot' (Normal Dungeon)"); + +-- Ragefire Shaman SAI +SET @ENTRY := 11319; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,2,0,0,2400,3800,11,9532,64,0,0,0,0,2,0,0,0,0,0,0,0,"Ragefire Shaman - Combat CMC - Cast 'Lightning Bolt' (Normal Dungeon)"), +(@ENTRY,0,1,0,74,0,100,3,0,40,30000,35000,11,11986,1,0,0,0,0,9,0,0,0,0,0,0,0,"Ragefire Shaman - On Friendly Between 0-40% Health - Cast 'Healing Wave' (No Repeat) (Normal Dungeon)"), +(@ENTRY,0,2,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ragefire Shaman - Between 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)"); + +-- Searing Blade Warlock SAI +SET @ENTRY := 11324; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,3,1000,1000,0,0,11,12746,0,0,0,0,0,1,0,0,0,0,0,0,0,"Searing Blade Warlock - Out of Combat - Cast 'Summon Voidwalker' (No Repeat) (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,2,0,0,3400,6500,11,20791,64,0,0,0,0,2,0,0,0,0,0,0,0,"Searing Blade Warlock - Combat CMC - Cast 'Shadow Bolt' (Normal Dungeon)"), +(@ENTRY,0,2,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Searing Blade Warlock - Between 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)"); + +-- Gordok Ogre-Mage SAI +SET @ENTRY := 11443; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,4,0,20,1,0,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Gordok Ogre-Mage - On Aggro - Say Line 0 (No Repeat)"), +(@ENTRY,0,1,0,0,0,100,0,0,0,2400,3800,11,20823,64,0,0,0,0,2,0,0,0,0,0,0,0,"Gordok Ogre-Mage - Combat CMC - Cast 'Fireball'"), +(@ENTRY,0,2,0,0,0,100,0,5000,12000,35000,45000,11,6742,1,0,0,0,0,1,0,0,0,0,0,0,0,"Gordok Ogre-Mage - Combat - Cast 'Bloodlust'"), +(@ENTRY,0,3,0,4,0,20,3,0,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Gordok Ogre-Mage - On Aggro - Say Line 0 (No Repeat) (Normal Dungeon)"), +(@ENTRY,0,4,0,0,0,100,2,0,0,2400,3800,11,20823,64,0,0,0,0,2,0,0,0,0,0,0,0,"Gordok Ogre-Mage - Combat CMC - Cast 'Fireball' (Normal Dungeon)"), +(@ENTRY,0,5,0,0,0,100,2,5000,12000,35000,45000,11,6742,1,0,0,0,0,1,0,0,0,0,0,0,0,"Gordok Ogre-Mage - Combat - Cast 'Bloodlust' (Normal Dungeon)"); + +-- Gordok Mage-Lord SAI +SET @ENTRY := 11444; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,4,0,20,3,0,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Gordok Mage-Lord - On Aggro - Say Line 0 (No Repeat) (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,2,0,0,2400,3800,11,15530,64,0,0,0,0,2,0,0,0,0,0,0,0,"Gordok Mage-Lord - Combat CMC - Cast 'Frostbolt' (Normal Dungeon)"), +(@ENTRY,0,2,0,0,0,100,2,7000,14000,12000,15000,11,14145,0,0,0,0,0,2,0,0,0,0,0,0,0,"Gordok Mage-Lord - Combat - Cast 'Fire Blast' (Normal Dungeon)"), +(@ENTRY,0,3,0,0,0,100,2,12000,17000,19000,25000,11,16102,0,0,0,0,0,5,0,0,0,0,0,0,0,"Gordok Mage-Lord - Combat - Cast 'Flamestrike' (Normal Dungeon)"), +(@ENTRY,0,4,0,0,0,100,2,7000,9000,16000,20000,11,13323,1,0,0,0,0,6,0,0,0,0,0,0,0,"Gordok Mage-Lord - Combat - Cast 'Polymorph' (Normal Dungeon)"), +(@ENTRY,0,5,6,2,0,100,3,0,30,0,0,11,16170,1,0,0,0,0,1,0,0,0,0,0,0,0,"Gordok Mage-Lord - Between 0-30% Health - Cast 'Bloodlust' (No Repeat) (Normal Dungeon)"), +(@ENTRY,0,6,0,61,0,100,3,0,30,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Gordok Mage-Lord - Between 0-30% Health - Say Line 1 (No Repeat) (Normal Dungeon)"); + +-- Gordok Warlock SAI +SET @ENTRY := 11448; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,2,1000,1000,1800000,1800000,11,13787,0,0,0,0,0,1,0,0,0,0,0,0,0,"Gordok Warlock - Out of Combat - Cast 'Demon Armor' (Normal Dungeon)"), +(@ENTRY,0,1,0,1,0,100,3,3000,3000,0,0,11,22865,0,0,0,0,0,1,0,0,0,0,0,0,0,"Gordok Warlock - Out of Combat - Cast 'Summon Doomguard' (No Repeat) (Normal Dungeon)"), +(@ENTRY,0,2,0,4,0,20,3,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Gordok Warlock - On Aggro - Say Line 0 (No Repeat) (Normal Dungeon)"), +(@ENTRY,0,3,0,0,0,100,2,0,0,2400,3800,11,15232,64,0,0,0,0,2,0,0,0,0,0,0,0,"Gordok Warlock - Combat CMC - Cast 'Shadow Bolt' (Normal Dungeon)"), +(@ENTRY,0,4,0,0,0,100,2,9000,15000,26000,30000,11,17883,1,0,0,0,0,2,0,0,0,0,0,0,0,"Gordok Warlock - Combat - Cast 'Immolate' (Normal Dungeon)"), +(@ENTRY,0,5,0,0,0,100,2,5000,9000,20000,25000,11,13338,0,0,0,0,0,5,0,0,0,0,0,0,0,"Gordok Warlock - Combat - Cast 'Curse of Tongues' (Normal Dungeon)"), +(@ENTRY,0,6,0,0,0,100,2,7000,15000,20000,26000,11,8994,1,0,0,0,0,6,0,0,0,0,0,0,0,"Gordok Warlock - Combat - Cast 'Banish' (Normal Dungeon)"); + +-- Wildspawn Betrayer SAI +SET @ENTRY := 11454; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,2,0,0,2300,3900,11,16100,64,0,0,0,0,2,0,0,0,0,0,0,0,"Wildspawn Betrayer - Combat CMC - Cast 'Shoot' (Normal Dungeon)"), +(@ENTRY,0,1,0,9,0,100,2,5,30,7800,11400,11,18649,40,0,0,0,0,2,0,0,0,0,0,0,0,"Wildspawn Betrayer - 5-30 Range - Cast 'Shadow Shot' (Normal Dungeon)"), +(@ENTRY,0,2,0,9,0,100,2,5,30,9900,13600,11,7896,40,0,0,0,0,2,0,0,0,0,0,0,0,"Wildspawn Betrayer - 5-30 Range - Cast 'Exploding Shot' (Normal Dungeon)"), +(@ENTRY,0,3,0,9,0,100,2,0,5,6000,11000,11,11428,0,0,0,0,0,2,0,0,0,0,0,0,0,"Wildspawn Betrayer - 0-5 Range - Cast 'Knockdown' (Normal Dungeon)"), +(@ENTRY,0,4,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Wildspawn Betrayer - Between 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)"); + +-- Wildspawn Felsworn SAI +SET @ENTRY := 11455; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,2,1000,1000,1800000,1800000,11,12542,0,0,0,0,0,1,0,0,0,0,0,0,0,"Wildspawn Felsworn - Out of Combat - Cast 'Fear' (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,2,0,0,2400,3800,11,15537,64,0,0,0,0,2,0,0,0,0,0,0,0,"Wildspawn Felsworn - Combat CMC - Cast 'Shadow Bolt' (Normal Dungeon)"), +(@ENTRY,0,2,0,0,0,100,2,7000,12000,38000,45000,11,22417,1,0,0,0,0,1,0,0,0,0,0,0,0,"Wildspawn Felsworn - Combat - Cast 'Shadow Shield' (Normal Dungeon)"), +(@ENTRY,0,3,0,0,1,100,2,11000,17000,23000,30000,11,15654,0,0,0,0,0,2,0,0,0,0,0,0,0,"Wildspawn Felsworn - Combat - Cast 'Shadow Word: Pain' (Normal Dungeon)"), +(@ENTRY,0,4,0,0,0,100,2,6000,10000,10000,15000,11,12542,1,0,0,0,0,5,0,0,0,0,0,0,0,"Wildspawn Felsworn - Combat - Cast 'Fear' (Normal Dungeon)"); + +-- Wildspawn Hellcaller SAI +SET @ENTRY := 11457; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,2,0,0,2400,3800,11,15228,64,0,0,0,0,2,0,0,0,0,0,0,0,"Wildspawn Hellcaller - Combat CMC - Cast 'Fireball' (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,2,8000,14000,18000,25000,11,20754,3,0,0,0,0,2,0,0,0,0,0,0,0,"Wildspawn Hellcaller - Combat - Cast 'Rain of Fire' (Normal Dungeon)"), +(@ENTRY,0,2,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Wildspawn Hellcaller - 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)"); + +-- Highborne Summoner SAI +SET @ENTRY := 11466; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,2,0,0,2400,3800,11,12466,64,0,0,0,0,2,0,0,0,0,0,0,0,"Highborne Summoner - Combat CMC - Cast 'Fireball' (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,2,8000,11000,9000,12000,11,13341,0,0,0,0,0,5,0,0,0,0,0,0,0,"Highborne Summoner - Combat - Cast 'Fire Blast' (Normal Dungeon)"), +(@ENTRY,0,2,0,0,0,100,2,12000,16000,18000,22000,11,15063,1,0,0,0,0,1,0,0,0,0,0,0,0,"Highborne Summoner - Combat - Cast 'Frost Nova' (Normal Dungeon)"); + +-- Eldreth Apparition SAI +SET @ENTRY := 11471; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,2,1000,1000,1800000,1800000,11,18100,1,0,0,0,0,1,0,0,0,0,0,0,0,"Eldreth Apparition - Out of Combat - Cast 'Frost Armor' (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,2,0,0,2400,3800,11,16799,64,0,0,0,0,2,0,0,0,0,0,0,0,"Eldreth Apparition - Combat CMC - Cast 'Frostbolt' (Normal Dungeon)"), +(@ENTRY,0,2,0,0,0,100,2,7000,12000,20000,27500,11,22744,1,0,0,0,0,6,0,0,0,0,0,0,0,"Eldreth Apparition - Combat - Cast 'Chains of Ice' (Normal Dungeon)"), +(@ENTRY,0,3,0,0,0,100,2,11000,14000,20000,30000,11,15244,1,0,0,0,0,2,0,0,0,0,0,0,0,"Eldreth Apparition - Combat - Cast 'Cone of Cold' (Normal Dungeon)"); + +-- Irondeep Shaman SAI +SET @ENTRY := 11600; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,2,0,0,3400,4800,11,15801,64,0,0,0,0,2,0,0,0,0,0,0,0,"Irondeep Shaman - Combat CMC - Cast 'Lightning Bolt' (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,2,7000,9000,55000,65000,11,15786,1,0,0,0,0,1,0,0,0,0,0,0,0,"Irondeep Shaman - Combat - Cast 'Earthbind Totem' (Normal Dungeon)"), +(@ENTRY,0,2,0,2,0,100,2,0,50,15000,20000,11,12492,1,0,0,0,0,1,0,0,0,0,0,0,0,"Irondeep Shaman - 0-50% Health - Cast 'Healing Wave' (Normal Dungeon)"), +(@ENTRY,0,3,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Irondeep Shaman - 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)"); + +-- Whitewhisker Geomancer SAI +SET @ENTRY := 11604; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,2,0,0,3400,4800,11,15228,64,0,0,0,0,2,0,0,0,0,0,0,0,"Whitewhisker Geomancer - Combat CMC - Cast 'Fireball' (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,2,500,1000,600000,600000,11,18968,1,0,0,0,0,1,0,0,0,0,0,0,0,"Whitewhisker Geomancer - Combat - Cast 'Fire Shield' (Normal Dungeon)"), +(@ENTRY,0,2,0,2,0,100,3,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Whitewhisker Geomancer - 0-15% Health - Flee For Assist (No Repeat) (Normal Dungeon)"); + +-- Morloch SAI +SET @ENTRY := 11657; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,2,0,0,3400,4800,11,15537,64,0,0,0,0,2,0,0,0,0,0,0,0,"Morloch - Combat CMC - Cast 'Shadow Bolt' (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,2,6000,9000,120000,130000,11,12741,1,0,0,0,0,2,0,0,0,0,0,0,0,"Morloch - Combat - Cast 'Curse of Weakness' (Normal Dungeon)"), +(@ENTRY,0,2,0,0,0,100,2,11000,14000,9000,15000,11,17228,0,0,0,0,0,2,0,0,0,0,0,0,0,"Morloch - Combat - Cast 'Shadow Bolt Volley' (Normal Dungeon)"); + +-- Snowblind Windcaller SAI +SET @ENTRY := 11675; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,2,0,0,3400,4800,11,9532,64,0,0,0,0,2,0,0,0,0,0,0,0,"Snowblind Windcaller - Combat CMC - Cast 'Lightning Bolt' (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,2,5000,8000,12000,16000,11,9532,1,0,0,0,0,6,0,0,0,0,0,0,0,"Snowblind Windcaller - Combat - Cast 'Lightning Bolt' (Normal Dungeon)"); + +-- Horde Scout SAI +SET @ENTRY := 11680; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,4,0,15,1,0,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Horde Scout - On Aggro - Say Line 0 (No Repeat)"), +(@ENTRY,0,1,0,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Horde Scout - Combat CMC - Cast 'Shoot'"), +(@ENTRY,0,2,0,9,0,100,0,5,30,12000,15000,11,18545,0,0,0,0,0,2,0,0,0,0,0,0,0,"Horde Scout - Within 5-30 Range - Cast 'Scorpid Sting'"), +(@ENTRY,0,3,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Horde Scout - 0-15% Health - Flee For Assist (No Repeat)"); + +-- Warsong Shaman SAI +SET @ENTRY := 11683; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,3400,4800,11,20805,64,0,0,0,0,2,0,0,0,0,0,0,0,"Warsong Shaman - Combat CMC - Cast 'Lightning Bolt'"), +(@ENTRY,0,1,0,2,0,100,0,0,30,30000,35000,11,6742,1,0,0,0,0,1,0,0,0,0,0,0,0,"Warsong Shaman - 0-30% Health - Cast 'Bloodlust'"), +(@ENTRY,0,2,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warsong Shaman - 0-15% Health - Flee For Assist (No Repeat)"); + +-- Wildpaw Mystic SAI +SET @ENTRY := 11838; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,2,0,0,3400,4800,11,37361,64,0,0,0,0,2,0,0,0,0,0,0,0,"Wildpaw Mystic - Combat CMC - Cast 'Arcane Bolt' (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,2,6000,9000,16000,19000,11,12058,1,0,0,0,0,2,0,0,0,0,0,0,0,"Wildpaw Mystic - Combat - Cast 'Chain Lightning' (Normal Dungeon)"), +(@ENTRY,0,2,0,2,0,100,2,0,50,12000,16000,11,11986,1,0,0,0,0,1,0,0,0,0,0,0,0,"Wildpaw Mystic - 0-50% Health - Cast 'Healing Wave' (Normal Dungeon)"); + +-- Nathanos Blightcaller SAI +SET @ENTRY := 11878; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Nathanos Blightcaller - Combat CMC - Cast 'Shoot'"), +(@ENTRY,0,1,0,0,0,100,0,4000,6000,8000,11000,11,18651,0,0,0,0,0,5,0,0,0,0,0,0,0,"Nathanos Blightcaller - Combat - Cast 'Multi-Shot'"), +(@ENTRY,0,2,0,9,0,100,0,0,5,7000,9000,11,6253,1,0,0,0,0,2,0,0,0,0,0,0,0,"Nathanos Blightcaller - 0-5 Range - Cast 'Backhand'"), +(@ENTRY,0,3,0,15,0,100,1,0,0,10,0,11,13704,1,0,0,0,0,1,0,0,0,0,0,0,0,"Nathanos Blightcaller - Friendly Crowd Controlled - Cast 'Psychic Scream'"); + +-- Lord Vyletongue SAI +SET @ENTRY := 12236; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,2,0,0,2300,3900,11,16100,64,0,0,0,0,2,0,0,0,0,0,0,0,"Lord Vyletongue - Combat CMC - Cast 'Shoot'"), +(@ENTRY,0,1,0,9,0,100,2,5,30,7000,9500,11,21390,1,0,0,0,0,2,0,0,0,0,0,0,0,"Lord Vyletongue - 5-30 Range - Cast 'Multi-Shot'"), +(@ENTRY,0,2,0,0,0,100,2,20000,30000,20000,30000,11,21655,1,0,0,0,0,1,0,0,0,0,0,0,0,"Lord Vyletongue - Combat - Cast 'Blink'"), +(@ENTRY,0,3,0,0,0,100,2,8000,12000,14000,18000,11,7964,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lord Vyletongue - Combat - Cast 'Smoke Bomb'"); + +-- Quel'Lithien Protector SAI +SET @ENTRY := 12322; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,2300,3900,11,15547,64,0,0,0,0,2,0,0,0,0,0,0,0,"Quel'Lithien Protector - Combat CMC - Cast 'Shoot'"), +(@ENTRY,0,1,0,9,0,100,0,0,5,5000,7000,11,12057,0,0,0,0,0,2,0,0,0,0,0,0,0,"Quel'Lithien Protector - 0-5 Range - Cast 'Strike'"), +(@ENTRY,0,2,0,9,0,100,0,0,5,8000,13000,11,11978,0,0,0,0,0,2,0,0,0,0,0,0,0,"Quel'Lithien Protector - 0-5 Range - Cast 'Kick'"), +(@ENTRY,0,3,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Quel'Lithien Protector - 0-15% Health - Flee For Assist (No Repeat)"); + +-- Damned Soul SAI +SET @ENTRY := 12378; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,3400,4800,11,20825,64,0,0,0,0,2,0,0,0,0,0,0,0,"Damned Soul - Combat CMC - Cast 'Shadow Bolt'"), +(@ENTRY,0,1,0,0,0,100,0,7000,9000,7000,9000,11,13748,0,0,0,0,0,2,0,0,0,0,0,0,0,"Damned Soul - Combat - Cast 'Arcane Bolt'"); + +-- Mastok Wrilehiss SAI +SET @ENTRY := 12737; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,2300,3900,11,15620,64,0,0,0,0,2,0,0,0,0,0,0,0,"Mastok Wrilehiss - Combat CMC - Cast 'Shoot'"), +(@ENTRY,0,1,0,9,0,100,0,0,5,5000,7000,11,15284,0,0,0,0,0,2,0,0,0,0,0,0,0,"Mastok Wrilehiss - 0-5 Range - Cast 'Cleave'"), +(@ENTRY,0,2,0,0,0,100,0,9000,15000,14000,18000,11,23600,1,0,0,0,0,1,0,0,0,0,0,0,0,"Mastok Wrilehiss - Combat - Cast 'Piercing Howl'"), +(@ENTRY,0,3,4,2,0,100,0,0,30,120000,130000,11,8599,1,0,0,0,0,1,0,0,0,0,0,0,0,"Mastok Wrilehiss - 0-30% Health - Cast 'Enrage'"), +(@ENTRY,0,4,0,61,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mastok Wrilehiss - 0-30% Health - Say 0"); + +DELETE FROM `creature_text` WHERE `entry` IN (12737); +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`BroadcastTextId`,`comment`) VALUES +(12737,0,0,'$s becomes enraged!',16,0,100,0,0,0,24144,'Mastok Wrilehiss enrage at 30%'); + +-- Ashenvale Outrunner SAI +SET @ENTRY := 12856; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Ashenvale Outrunner - Combat CMC - Cast 'Shoot'"), +(@ENTRY,0,1,0,9,0,100,0,5,30,35900,52300,11,18545,1,0,0,0,0,2,0,0,0,0,0,0,0,"Ashenvale Outrunner - Within 5-30 Range - Cast 'Scorpid Sting'"), +(@ENTRY,0,2,0,9,0,100,0,0,5,7100,15300,11,8646,0,0,0,0,0,2,0,0,0,0,0,0,0,"Ashenvale Outrunner - Within 0-5 Range - Cast 'Snap Kick'"); + +-- Warsong Scout SAI +SET @ENTRY := 12862; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Warsong Scout - Combat CMC - Cast 'Shoot'"), +(@ENTRY,0,1,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warsong Scout - 0-15% Health - Flee For Assist (No Repeat)"); + +-- Warsong Runner SAI +SET @ENTRY := 12863; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Warsong Runner - Combat CMC - Cast 'Shoot'"), +(@ENTRY,0,1,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warsong Runner - 0-15% Health - Flee For Assist (No Repeat)"); + +-- Warsong Outrider SAI +SET @ENTRY := 12864; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Warsong Outrider - Combat CMC - Cast 'Shoot'"), +(@ENTRY,0,1,0,9,0,100,0,5,30,35900,52300,11,18545,1,0,0,0,0,2,0,0,0,0,0,0,0,"Warsong Outrider - Within 5-30 Range - Cast 'Scorpid Sting'"); + +-- Ambassador Malcin SAI +SET @ENTRY := 12865; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,2400,3800,11,9613,64,0,0,0,0,2,0,0,0,0,0,0,0,"Ambassador Malcin - Combat CMC - Cast 'Shadow Bolt'"), +(@ENTRY,0,1,0,0,0,100,0,5000,9000,15000,25000,11,8282,32,0,0,0,0,2,0,0,0,0,0,0,0,"Ambassador Malcin - Combat - Cast 'Curse of Blood'"); + +-- Silverwing Sentinel SAI +SET @ENTRY := 12896; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Silverwing Sentinel - Combat CMC - Cast 'Shoot'"), +(@ENTRY,0,1,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Silverwing Sentinel - 0-15% Health - Flee For Assist (No Repeat)"); + +-- Lorgus Jett SAI +SET @ENTRY := 12902; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,2,1000,1000,600000,600000,11,12550,1,0,0,0,0,1,0,0,0,0,0,0,0,"Lorgus Jett - Out of Combat - Cast 'Lightning Shield' (Normal Dungeon)"), +(@ENTRY,0,1,0,0,0,100,2,0,0,2400,3800,11,12167,64,0,0,0,0,2,0,0,0,0,0,0,0,"Lorgus Jett - Combat CMC - Cast 'Lightning Bolt' (Normal Dungeon)"); + +-- Mounted Ironforge Mountaineer SAI +SET @ENTRY := 12996; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Mounted Ironforge Mountaineer - Combat CMC - Cast 'Shoot'"), +(@ENTRY,0,1,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mounted Ironforge Mountaineer - 0-15% Health - Flee For Assist (No Repeat)"); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_17_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_17_01_world.sql new file mode 100644 index 00000000000..8b91179bb48 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_17_01_world.sql @@ -0,0 +1,14 @@ +DELETE FROM `smart_scripts` WHERE `entryorguid`=202443 AND `source_type`=1; +DELETE FROM `smart_scripts` WHERE `entryorguid`=20244300 AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(202443, 1, 0, 1, 64, 0, 100, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Dedication of Honor - On Gossip Hello - Store Targetlist'), +(202443, 1, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 80, 20244300, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Dedication of Honor - On Gossip Hello - Run Script'), +(202443, 1, 2, 0, 1, 0, 100, 1, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 14, 151164, 202616, 0, 0, 0, 0, 0, 'Dedication of Honor - OOC - Activate Go (No Repeat)'), +(20244300, 9, 0, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 68, 16, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Dedication of Honor - On Script - Play Movie 16'); +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry`=202443 and `SourceId`=1; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22, 1, 202443, 1, 0, 17, 0, 4530, 0, 0, 0, 0, 0, '', 'Only run SAI if Player has achievement'), +(22, 1, 202443, 1, 1, 17, 0, 4597, 0, 0, 0, 0, 0, '', 'Only run SAI if Player has achievement'), +(22, 3, 202443, 1, 0, 40, 1, 4576, 0, 0, 0, 0, 0, '', 'Only run SAI if realm first rewarded'); +UPDATE `gameobject` SET `state`=1 WHERE `guid`=151164; +UPDATE `gameobject_template` SET `flags`=32 WHERE `entry`=202616; diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_17_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_17_02_world.sql new file mode 100644 index 00000000000..79d0b382d12 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_17_02_world.sql @@ -0,0 +1,35 @@ +DELETE FROM `creature_text` WHERE `entry` = 16287 AND `groupid`= 0; +DELETE FROM `creature_text` WHERE `entry` = 10181 AND `groupid` = 2; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(16287, 0, 0, 'That could have gone better. $n, come here, please. I have something I need you to take care of for me.', 15, 0, 100, 0, 0, 0, 12157, 0, 'Ambassador Sunsorrow SAY_SUNSORROW_WHISPER'), +(10181, 2, 0, '%s looks down at the discarded necklace. In her sadness, the lady incants a glamour, which beckons forth Highborne spirits. The chamber resonates with their ancient song about the Sin''dorei...', 16, 0, 100, 0, 0, 0, 19197, 0, 'Lady Sylvanas Windrunner EMOTE_LAMENT'); + +DELETE FROM `gossip_menu_option` WHERE `menu_id` = 7178 AND `id`= 0; +INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `OptionBroadcastTextID`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`, `BoxBroadcastTextId`) VALUES +(7178, 0, 0, 'What is it that you have for me, ambassador?', 19205, 1, 1, 7178, 0, 0, 0, '', 0); + +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 16287; +DELETE FROM `smart_scripts` WHERE `entryorguid` = 16287 AND `source_type` = 0 AND `id` IN (0, 1, 2); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(16287,0,0,1,62,0,100,0,7178,0,0,0,11,37084,1,0,0,0,0,7,0,0,0,0,0,0,0,'Ambassador Sunsorrow - On Gossip Option 0 Selected - Create Item \'Lament of the Highborne\''), +(16287,0,1,0,61,0,100,0,0,0,0,0,98,7178,10378,0,0,0,0,7,0,0,0,0,0,0,0,'Ambassador Sunsorrow - On Gossip Option 0 Selected - SEND_GOSSIP_MENU TEXT'), +(16287,0,2,0,64,0,100,0,0,0,0,0,98,7178,8458,0,0,0,0,7,0,0,0,0,0,0,0,'Ambassador Sunsorrow - On Gossip Hello - SEND_GOSSIP_MENU TEXT'); + +DELETE FROM `npc_text` WHERE `id` IN (10378, 8458); +INSERT INTO `npc_text` (`id`, `text0_0`, `text0_1`, `prob0`, `em0_1`, `BroadcastTextID0`) VALUES +(8458, "Greetings, $r. I am Ambassador Sunsorrow of the sin'dorei, or blood elves as we are commonly known. I have high hopes that this new bond between us and the Horde will be mutually beneficial.", "Greetings, $r. I am Ambassador Sunsorrow of the sin'dorei, or blood elves as we are commonly known. I have high hopes that this new bond between us and the Horde will be mutually beneficial.", 1, 2, 12161), +(10378, "Just a small songbook that I thought you might like to have. It contains the lyrics to a song known as the Lament of the Highborne; the one that Lady Sylvanas glamoured from the air.", "", 1, 1, 19206); + +DELETE FROM `gossip_menu` WHERE `entry`=7178 AND `text_id` IN (10378, 8458, 8740); +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES +(7178,10378), +(7178,8740), +(7178,8458); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 15 AND `SourceGroup` = 7178 AND `SourceEntry` = 0 AND `SourceId` = 0; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15, 7178, 0, 0, 0, 8, 0, 9180, 0, 0, 0, 0, 0, '', 'Ambassador Sunsorrow show gossip only if quest Journey to Undercity is rewarded'), +(15, 7178, 0, 0, 0, 16, 0, 512, 0, 0, 0, 0, 0, '', 'Ambassador Sunsorrow show gossip only if player is Blood Elf'), +(15, 7178, 0, 0, 0, 2, 0, 30632, 1, 0, 1, 0, 0, '', 'Ambassador Sunsorrow show gossip only if player doesn\'t have item Lament of Highborn'); + +UPDATE `creature_text` SET `type` = 12 WHERE `entry` = 10181 AND `groupid` = 1; diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_19_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_19_00_world.sql new file mode 100644 index 00000000000..1d87dafb9f1 --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_19_00_world.sql @@ -0,0 +1,4 @@ +UPDATE `trinity_string` SET `content_default` = 'Map: %u (%s) Zone: %u (%s) Area: %u (%s) Phase: %u\nX: %f Y: %f Z: %f Orientation: %f' WHERE `entry` = 101; +DELETE FROM `trinity_string` WHERE `entry` = 178; +INSERT INTO `trinity_string` (`entry`, `content_default`) VALUES +(178, 'grid[%u,%u]cell[%u,%u] InstanceID: %u\n ZoneX: %f ZoneY: %f\nGroundZ: %f FloorZ: %f Have height data (Map: %u VMap: %u MMap: %u)'); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_00_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_00_world.sql new file mode 100644 index 00000000000..93083732c4d --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_00_world.sql @@ -0,0 +1,13 @@ +-- +UPDATE `creature_template` SET `spell1`=49285,`spell2`=29577,`flags_extra`=2,`ainame`='SmartAI' WHERE `entry`=26472; + +DELETE FROM `smart_scripts` WHERE `entryorguid`=26472 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(26472,0,0,0,8,0,100,0,49266,0,0,0,69,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'Highland Mustang - On Spell Hit(Dangle Wild Carrot) - Move To Player'), +(26472,0,1,2,34,0,100,0,0,1,0,0,103,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Highland Mustang - On Movement Inform - Set Root'), +(26472,0,2,0,61,0,100,0,0,0,0,0,85,49282,0,0,0,0,0,1,0,0,0,0,0,0,0,'Highland Mustang - Link With Previous - Invoker Cast Ride Highland Mustang'), +(26472,0,3,0,27,0,100,0,0,0,0,0,103,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Highland Mustang - On Passenger Boarded - Remove Root'); + +DELETE FROM `spell_script_names` WHERE `spell_id`=49285; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(49285,'spell_q12414_hand_over_reins'); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_01_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_01_world.sql new file mode 100644 index 00000000000..a489bcc9a4e --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_01_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `smart_scripts` SET `link`=0, `event_flags`=0, `comment`='Syreian the Bonecarver - On Aggro CMC - Cast \'Frost Arrow\'' WHERE `entryorguid`=32438 AND `source_type`=0 AND `id`=0 AND `link`=3; diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_02_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_02_world.sql new file mode 100644 index 00000000000..05c120274da --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_02_world.sql @@ -0,0 +1,23 @@ +-- Updates base tables +DROP TABLE IF EXISTS `updates`; +CREATE TABLE `updates` ( + `name` VARCHAR(200) NOT NULL COMMENT 'filename with extension of the update.', + `hash` CHAR(40) NULL DEFAULT '' COMMENT 'sha1 hash of the sql file.', + `state` ENUM('RELEASED','ARCHIVED') NOT NULL DEFAULT 'RELEASED' COMMENT 'defines if an update is released or archived.', + `timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'timestamp when the query was applied.', + `speed` INT(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'time the query takes to apply in ms.', + PRIMARY KEY (`name`) +) +COMMENT='List of all applied updates in this database.' +COLLATE='utf8_general_ci' +ENGINE=MyISAM; + +DROP TABLE IF EXISTS `updates_include`; +CREATE TABLE `updates_include` ( + `path` VARCHAR(200) NOT NULL COMMENT 'directory to include. $ means relative to the source directory.', + `state` ENUM('RELEASED','ARCHIVED') NOT NULL DEFAULT 'RELEASED' COMMENT 'defines if the directory contains released or archived updates.', + PRIMARY KEY (`path`) +) +COMMENT='List of directories where we want to include sql updates.' +COLLATE='utf8_general_ci' +ENGINE=MyISAM; diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_03_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_03_world.sql new file mode 100644 index 00000000000..e8f9680dbee --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_03_world.sql @@ -0,0 +1,6 @@ +-- World database update data +TRUNCATE TABLE `updates_include`; +INSERT INTO `updates_include` (`path`, `state`) VALUES +('$/sql/updates/world', 'RELEASED'), +('$/sql/custom/world', 'RELEASED'), +('$/sql/old/3.3.5a/world', 'ARCHIVED'); diff --git a/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_04_world.sql b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_04_world.sql new file mode 100644 index 00000000000..2786dc1ef4e --- /dev/null +++ b/sql/old/3.3.5a/world/57_2014_10_19/2015_03_20_04_world.sql @@ -0,0 +1,339 @@ +INSERT IGNORE INTO `updates` (`name`, `hash`, `state`) VALUES +('2014_10_19_00_world.sql', 'DD3A24E92A894418F58C8AC280CBDAE2AC849B6C', 'ARCHIVED'), +('2014_10_19_01_world.sql', '76D19F7888A41B1B4AB4A5F366AE98057F066128', 'ARCHIVED'), +('2014_10_20_00_world.sql', 'E74390D42EF46218FE189C22A2A68BC454293F30', 'ARCHIVED'), +('2014_10_21_00_world.sql', '0E29A91E897F5EF08BFD09893475B483084F9BB9', 'ARCHIVED'), +('2014_10_22_00_world.sql', 'AD4925A3B6326E0E599693964BAABA38A0ED3FEF', 'ARCHIVED'), +('2014_10_23_00_world.sql', '73AD951F22484AD30C04B1514ECC1DFCB7A764C7', 'ARCHIVED'), +('2014_10_23_01_world.sql', '2D53A8A4A079CDF881CD1B7F142208E6453FF51A', 'ARCHIVED'), +('2014_10_24_00_world.sql', 'E743491473D33A8CCE30D580B1234BBC2E9D46B9', 'ARCHIVED'), +('2014_10_24_01_world.sql', '5A6EFA81F56575F85B27709944371C3E0A75D5D6', 'ARCHIVED'), +('2014_10_26_00_world.sql', 'FA22609D1B1D0B56760595FEA7445B0724A44EE6', 'ARCHIVED'), +('2014_10_27_00_world.sql', 'DA9FF17FA413017913715AAD27AD28F486340085', 'ARCHIVED'), +('2014_10_27_01_world_335.sql', '702C94D55094B6C94548B1357DC0811EBF0B5A45', 'ARCHIVED'), +('2014_10_27_02_world.sql', '3DAEB7EC510D924B37BFAC7D8CA06B8E38D60FEA', 'ARCHIVED'), +('2014_10_28_00_world.sql', 'C59E8BCC1A58FB150B08A6D2F4003E5EC151E696', 'ARCHIVED'), +('2014_10_29_00_world.sql', 'F478D2AE25B9C36E3456DD35884357063556AA36', 'ARCHIVED'), +('2014_10_30_00_world.sql', '46D284FE1E2847CE99FE707ECC0BDAB4C9F7EE06', 'ARCHIVED'), +('2014_10_30_02_world.sql', '6F0FFB389D698B8AFFA723EF55895C6CF2CBF7D3', 'ARCHIVED'), +('2014_11_01_00_world.sql', 'F874E451AD388BB495A6EF18EE9ACCC8A8EE6BAE', 'ARCHIVED'), +('2014_11_01_01_world.sql', '635673300CACA15DBCB955FFF135C626F4839676', 'ARCHIVED'), +('2014_11_01_02_world.sql', '030ABB19FC45B686C1980FA3412C46CC68B11DF0', 'ARCHIVED'), +('2014_11_01_03_world.sql', '43D89B12E9BB1A792683F18094A869F20DFE56AD', 'ARCHIVED'), +('2014_11_02_00_world.sql', 'F30EE29A22CD3109A3A592A6981EA02FF0C3027E', 'ARCHIVED'), +('2014_11_02_01_world.sql', 'C6C572068126299A5D97B5A076220DA2B11AC914', 'ARCHIVED'), +('2014_11_04_00_world.sql', '517BE655C4F39EAAA3025F843B29A0F276559FEF', 'ARCHIVED'), +('2014_11_05_00_world.sql', '0C1F022696DF96302AB62B4A215FC37FAD66FA35', 'ARCHIVED'), +('2014_11_07_00_world.sql', '16A0E153EDE2AB8C63A3BA6656AD71BB237FBCF3', 'ARCHIVED'), +('2014_11_07_01_world.sql', '5DCE2E3A55185587AD2DF83D5FB146C7A7D794A3', 'ARCHIVED'), +('2014_11_07_02_world.sql', '24FF1EA9DFB75FDF0FB0BF639A40BDDDFE2A5FA6', 'ARCHIVED'), +('2014_11_07_03_world.sql', '58D676DB962E4AF5A2B56238F3E54783EBD921AC', 'ARCHIVED'), +('2014_11_08_00_world.sql', '136936E2E16955DCD4B0EEA34AA3D22B6852A031', 'ARCHIVED'), +('2014_11_09_00_world.sql', '1EC2C8EF22A8E7B26D8E30762149C00339B96671', 'ARCHIVED'), +('2014_11_10_00_world.sql', '98E33F8928A52C0FA5CDE00B4C3025923852E42F', 'ARCHIVED'), +('2014_11_10_01_world.sql', '670F0A9C49B5CC59F38E1361855AAAD8AED62FC3', 'ARCHIVED'), +('2014_11_10_02_world.sql', '0E646076699FD04B7AFEE7068212403FF4A55A31', 'ARCHIVED'), +('2014_11_10_03_world.sql', '8734F326B496D24871E16809D167F055B10D6F93', 'ARCHIVED'), +('2014_11_10_04_world.sql', 'F22AB772400FB35B1BFF6F58534CA681BF769281', 'ARCHIVED'), +('2014_11_10_05_world.sql', '4DC43402104F8296FA992C40916036B76F35560C', 'ARCHIVED'), +('2014_11_11_00_world.sql', '8BD5D844D0EDE1ACC72495D368E54702D155B6B9', 'ARCHIVED'), +('2014_11_11_01_world.sql', 'E7A8D259AF4FA21D6433A81FEF6B2A4662D12140', 'ARCHIVED'), +('2014_11_13_00_world.sql', 'F5044137D5AE5F3DF7F8234990E50DDC4836E723', 'ARCHIVED'), +('2014_11_16_00_world.sql', '178BA69418C7784475F36518CEE6D3C0233A3A07', 'ARCHIVED'), +('2014_11_17_00_world.sql', '5BF38AD9646A3282799D036EEABC2097CEF04BA5', 'ARCHIVED'), +('2014_11_19_00_world.sql', '6E1D3D0451297EAE3A85903D4901E824BB4B5E50', 'ARCHIVED'), +('2014_11_19_01_world.sql', 'FF6BA950F542A73EBB000B641B0359CD940E05AF', 'ARCHIVED'), +('2014_11_19_02_world.sql', '9AC0C9130AF6426980611AD319F5052CADB1D8C5', 'ARCHIVED'), +('2014_11_20_00_world.sql', 'AD9D0A6F657F0A3DB2DE5B2D0F304AC8270965B4', 'ARCHIVED'), +('2014_11_20_01_world.sql', '2FC08035F0F09783E228788781D5D492452803F7', 'ARCHIVED'), +('2014_11_20_02_world.sql', '92143904667CDE981DAFF2A2F2FBFB72F9D8D060', 'ARCHIVED'), +('2014_11_20_03_world.sql', '8142DE63DCD1CB415336C73F29BE8D137FD49B48', 'ARCHIVED'), +('2014_11_20_04_world.sql', 'D52B5EF4374EE67FE77D3C1AF004E42E1425DB10', 'ARCHIVED'), +('2014_11_20_05_world.sql', '24A8F2ABEB2165424CE9476562E8B2F7149DD3C4', 'ARCHIVED'), +('2014_11_21_00_world.sql', '3A4461A509B39A3A4F3190F3E131E509C7D1DC62', 'ARCHIVED'), +('2014_11_21_01_world.sql', '4BA6FE2B55D4C83A2D4A7D3BD7D9D7041C6A6D0E', 'ARCHIVED'), +('2014_11_21_02_world.sql', '9853F7519702607305B89AD6AA6A4A116B5FC43F', 'ARCHIVED'), +('2014_11_22_00_world.sql', '9F3DF132A1361293310E3FD0068CFB412681A757', 'ARCHIVED'), +('2014_11_23_00_world.sql', 'A0F6F1ADB3E5EE23ADEB6B62152DAC3A3B824F1D', 'ARCHIVED'), +('2014_11_23_01_world.sql', 'DA7E05D771C87839F9E716264075F973ACDE1F5F', 'ARCHIVED'), +('2014_11_23_02_world.sql', 'F72CAC3E13C989A067F4877F379FE9272E6CD6A0', 'ARCHIVED'), +('2014_11_23_03_world.sql', '88661B16A67F3DA4546CC7869A37BBACA35F8BF2', 'ARCHIVED'), +('2014_11_23_04_world.sql', 'F0E9DDCF540B58123811993D09F61A2EFA34BC8D', 'ARCHIVED'), +('2014_11_24_00_world.sql', '35A5ED435EEA251DCB77EA64EE5AC90A6ADDFC0F', 'ARCHIVED'), +('2014_11_24_01_world.sql', 'A92185C01A2BD5A8749A6046531EE5A2914BF4CE', 'ARCHIVED'), +('2014_11_24_02_world.sql', '5DA05026C4F14BA0AEDC2B2E868485725A0DFC25', 'ARCHIVED'), +('2014_11_24_03_world.sql', 'C03D82E6D66BB958AB4B11E6C72AD0474E894CB2', 'ARCHIVED'), +('2014_11_24_04_world.sql', '8CBA6F45C04490763BF79D481102B2A63A99B450', 'ARCHIVED'), +('2014_11_25_00_world.sql', 'BF84443D6633723C26F35C9F87D34207935A8E46', 'ARCHIVED'), +('2014_11_25_01_world.sql', '36C805A7F35539C215C8D94D2380790E3FF21429', 'ARCHIVED'), +('2014_11_26_00_world.sql', 'A564902A142C6747E7CF334E45B74871EF581879', 'ARCHIVED'), +('2014_11_27_00_world.sql', 'B91B254E548AA0E59B3720BB03074A91F159023A', 'ARCHIVED'), +('2014_11_27_01_world.sql', 'B02FAB47E4FC1209CC97B2854A42807ACB815683', 'ARCHIVED'), +('2014_11_28_00_world.sql', '7215A2E204BACB04DDE4FDC944DDBD981F76DEF5', 'ARCHIVED'), +('2014_11_28_01_world.sql', 'DCF0E0F31CEC5CB12F1DDBA15A5B005A2E91EDD8', 'ARCHIVED'), +('2014_11_29_00_world.sql', '513ABD50C6097E60E5EDC7A9E253AC7B6D50573C', 'ARCHIVED'), +('2014_12_02_00_world.sql', '79D4705344B2B6B5125E5B7CD39DD63241653E94', 'ARCHIVED'), +('2014_12_03_00_world.sql', '1C55F7E222557C2B94A4127BEAFBFC53E10E2267', 'ARCHIVED'), +('2014_12_04_00_world.sql', '92B53420220CFD02B5BB4F1FB87C74EF89A687FF', 'ARCHIVED'), +('2014_12_05_00_world.sql', '00BCE89B80E3F387369AB182D8BABA8BD06738ED', 'ARCHIVED'), +('2014_12_05_01_world.sql', '7A6EB0C29F9E5151A64112A055DB862356C275E3', 'ARCHIVED'), +('2014_12_09_00_world.sql', '4EE336088D6B18CD7036A23D0E8532E471CBD44B', 'ARCHIVED'), +('2014_12_09_01_world.sql', 'D335CA5679B748454A8740B620A2869B6339B9A5', 'ARCHIVED'), +('2014_12_09_02_world.sql', '5A6A84B52CE1D81E5F554A30D05902C3B9FDE87F', 'ARCHIVED'), +('2014_12_09_03_world.sql', '05A557A57010732FB526C7133FB3C7AD088A9B0D', 'ARCHIVED'), +('2014_12_09_04_world.sql', '84080AC56AF1D7878F24DE2E2B533B85F31AAB27', 'ARCHIVED'), +('2014_12_11_00_world.sql', '9BD187258DD3D7AB8BA56176F7AFED913DDC7EA0', 'ARCHIVED'), +('2014_12_11_01_world.sql', '2983BE4BF4FACE83262CE794676C0E66068F4DBC', 'ARCHIVED'), +('2014_12_12_00_world.sql', '3E31732550055B7EB72443C30EA2ED975862215D', 'ARCHIVED'), +('2014_12_12_01_world.sql', 'BFB07C36367BD9A198BB9CC34103EC0C401A09E8', 'ARCHIVED'), +('2014_12_13_00_world.sql', '394CF64309B1BACD7BDF1A6BF7D88DE2A335FFEE', 'ARCHIVED'), +('2014_12_14_00_world.sql', 'E540554C57BFE99D35D0B324F0D8ADA347E81E18', 'ARCHIVED'), +('2014_12_14_01_world.sql', '8DA26FD3DC3056DF34CC6DB7F490C11070D42026', 'ARCHIVED'), +('2014_12_14_02_world.sql', '0930DC3E10808F1E55C42F55B6C9E015BEF16711', 'ARCHIVED'), +('2014_12_15_00_world.sql', '88FF35DC8B665070E96249CA01AA079DBE995BBB', 'ARCHIVED'), +('2014_12_16_00_world.sql', 'A1CEF65E6829841A9A97722D212C5A15AA6BC11B', 'ARCHIVED'), +('2014_12_17_00_world.sql', '545A3022BB1D85E8FCF9BC1086D5C3864BF1F0CA', 'ARCHIVED'), +('2014_12_18_00_world.sql', 'D0AF91CBF2B7AB16EC05AFF45B9E8124A133ACC0', 'ARCHIVED'), +('2014_12_21_00_world.sql', '4F07D137F7628A7DABED5FDD8EDB1B1A83086C0B', 'ARCHIVED'), +('2014_12_22_00_world.sql', 'FD642CF297E2B97325878EF0451EB3020EBBAF91', 'ARCHIVED'), +('2014_12_26_00_world.sql', '1DEED382A0CA4FFDC3329133CDDB718ADA87A27D', 'ARCHIVED'), +('2014_12_26_01_world.sql', '58564849E75F397C8E1C744692191ADE39DFA514', 'ARCHIVED'), +('2014_12_27_00_world.sql', 'E50AD029788BB42019794276C6C031041EBAF1AC', 'ARCHIVED'), +('2014_12_27_01_world_335.sql', '97D824705A26B9839E9CBB0ED6B4B868C2032442', 'ARCHIVED'), +('2014_12_27_02_world.sql', '73CB9DC61F1561C924CF7EB4EE40C33CB8581482', 'ARCHIVED'), +('2014_12_27_03_world.sql', '70C1936BC930000EE5CC3943E0B69F786647174C', 'ARCHIVED'), +('2014_12_27_04_world.sql', '9C376FE601EA95E05DE6DEA7FF9CCF1C10DDA3C9', 'ARCHIVED'), +('2014_12_27_05_world.sql', '40D43FC1B6A5007424A282F6C1E0412A1FD0D17A', 'ARCHIVED'), +('2014_12_27_06_world.sql', '87B1AA417FBA9C2ECFD42FCB8572280455571618', 'ARCHIVED'), +('2014_12_27_07_world.sql', 'F88EAD8F73639240BD87D99DAD9BE9395F8F9B60', 'ARCHIVED'), +('2014_12_27_08_world.sql', '35259FF08825E06EA1C494C321693D5185036F97', 'ARCHIVED'), +('2014_12_27_09_world.sql', 'F56FCF5BBE53DFD5EA2CF64D28EE30573D180EBD', 'ARCHIVED'), +('2014_12_27_10_world.sql', '5343C6F21C31BC930C6615C62175655393E0CC7A', 'ARCHIVED'), +('2014_12_27_11_world.sql', '79386ABE46C96E2ECD639F3E1C20A92F085DAB22', 'ARCHIVED'), +('2014_12_27_12_world.sql', '02812768BC41BE72801909EA06944097138CCF84', 'ARCHIVED'), +('2014_12_28_00_world.sql', '4321A8A3C7FFC24EEE409758D9DA2899FC40465D', 'ARCHIVED'), +('2014_12_28_01_world.sql', '58A8781F79C8968B5A16D6CADC5355483D80A54C', 'ARCHIVED'), +('2014_12_28_02_world.sql', '53E8B3A24AEB4467C5765FFF2B99CB646CC77319', 'ARCHIVED'), +('2014_12_28_03_world.sql', 'AA56071ACFE2F5858C575EA9882713B4C37724AA', 'ARCHIVED'), +('2014_12_28_04_world.sql', '277DFC82FE17489C519001A778ABE17F0FBCC605', 'ARCHIVED'), +('2014_12_28_05_world.sql', '717CF0E7F4795A972096EDFECCAAB561FBD8E987', 'ARCHIVED'), +('2014_12_29_00_world.sql', 'D1240CA18A858174112F403A238DE1811CEF4216', 'ARCHIVED'), +('2014_12_29_01_world.sql', '7F49A01DBC65106150F6F6755A25D0CF0FF3B62C', 'ARCHIVED'), +('2014_12_29_02_world.sql', '31D25589F914F4B6F6A645B70901877839233B98', 'ARCHIVED'), +('2014_12_30_00_world.sql', '9A5BF5AF7928E7F90607AA56972C027EBA3E70B7', 'ARCHIVED'), +('2014_12_30_01_world.sql', '215A8A5870BD6B739C768399E112D6E9374C92B1', 'ARCHIVED'), +('2014_12_31_00_world.sql', '0ECDB859228284ACBB124109F730D0B1AFA62354', 'ARCHIVED'), +('2015_01_01_00_world.sql', '0859CA1CA62DA6D22ADD6A1752657221C400F003', 'ARCHIVED'), +('2015_01_07_00_world.sql', '2E6F5ECB971C6C385C7E407D31E1B354F8D55FD1', 'ARCHIVED'), +('2015_01_08_00_world.sql', '0FB250F5B41C9BFF073A2B26659218F022EC1A4F', 'ARCHIVED'), +('2015_01_09_00_world.sql', '2C2DB1FF3E27595766C8DD49A00CA9CED1F25812', 'ARCHIVED'), +('2015_01_09_01_world.sql', 'D3CB658D8C880BF5988E31D2789DC1188AF12244', 'ARCHIVED'), +('2015_01_11_00_world.sql', 'D82B37FDF21C20D7C4AD901D694DCAEC55FB3F7D', 'ARCHIVED'), +('2015_01_11_01_world.sql', 'D50C7E01233D8E96B0D469D07EF44D88189426D4', 'ARCHIVED'), +('2015_01_12_00_world.sql', '3227E335F9FFA02CDBE02400AAE0BC7BCEEC8A8E', 'ARCHIVED'), +('2015_01_12_01_world.sql', 'CB62D8927520732802B1972EB8FCB939EDDD3001', 'ARCHIVED'), +('2015_01_12_02_world.sql', 'D8CBED7B2E00357E5535B252061DE4935A4F3E29', 'ARCHIVED'), +('2015_01_16_00_world.sql', 'E6471500DB443D29EE2E8A68329138571D766732', 'ARCHIVED'), +('2015_01_17_00_world.sql', '571B36B8FDD658CAD36BB9B98E39F979950534E7', 'ARCHIVED'), +('2015_01_18_00_world.sql', 'F61B99920FDC39EB2121D54AC46D80066AD48223', 'ARCHIVED'), +('2015_01_21_00_world.sql', '5B84E438A8775299182D7608CF3DC67058F2A39B', 'ARCHIVED'), +('2015_01_22_00_world.sql', '0F7F69CD48FA6A82443DB4E43E2A05FE106FB6F4', 'ARCHIVED'), +('2015_01_25_00_world.sql', '3D6B8414B7D47BAAF8E4F1926F70983BCAD31222', 'ARCHIVED'), +('2015_01_27_00_world.sql', '3DBD87A8C21D4998954E9DC1F24620BB7A90C9F8', 'ARCHIVED'), +('2015_01_30_00_world.sql', 'E18282EE743A88D2EDEF677489C6B93817399CA0', 'ARCHIVED'), +('2015_01_31_00_335.sql', 'CEC1C0C4C6A79C8FA2A5F5C2911A89F82BBEEC3D', 'ARCHIVED'), +('2015_02_02_00_world.sql', '4A7F644212D0BC1D8B4BDC7E27BA70BBBCF5C1A8', 'ARCHIVED'), +('2015_02_05_00_world.sql', '38F13F6FC99172DDB4FA2D5784363AD9F2D0C2BB', 'ARCHIVED'), +('2015_02_06_00_world.sql', '94062B928DC098C3BC21ECA381D74C157975BEA0', 'ARCHIVED'), +('2015_02_06_01_world.sql', 'DB4C759DC3FE146C78E5108A3D4C8F7690DE2329', 'ARCHIVED'), +('2015_02_06_02_world.sql', '5DB5CB82FD4B545440380AE2875F36A8965B87C8', 'ARCHIVED'), +('2015_02_06_03_world.sql', '9E668BA77990F4F2C246C2727A755CAD29B12854', 'ARCHIVED'), +('2015_02_06_04_world.sql', '4054010C47223827AF2C66D7DF8695F12668C818', 'ARCHIVED'), +('2015_02_06_05_world.sql', '0AE6B9713495B1D0E2B29323027EBF94C9DC20B0', 'ARCHIVED'), +('2015_02_06_06_world.sql', '656086116C0F561C264B5DCABA1811EE6A9352E2', 'ARCHIVED'), +('2015_02_06_07_world.sql', 'B59FEF5851B9DA2C0FC9E8454486F57EAE112996', 'ARCHIVED'), +('2015_02_06_08_world.sql', '8BDF881C53077DA04544BA6890921D49018693CB', 'ARCHIVED'), +('2015_02_06_09_world.sql', 'EDF8CDC077B79843213B7E015BDF8756A41922C7', 'ARCHIVED'), +('2015_02_06_10_world.sql', '0444E8AC273B886330EC119300675774618EA463', 'ARCHIVED'), +('2015_02_06_11_world.sql', 'D995A9DD8E2CBAD243D48E2B55A019D6DD72CF5E', 'ARCHIVED'), +('2015_02_06_12_world.sql', '83931738DD68110A93DBE1DBE1D4BA66351BD469', 'ARCHIVED'), +('2015_02_06_13_world_335.sql', '9F769C1E8BBF6488DBE332D4218B119FF7C2BA1E', 'ARCHIVED'), +('2015_02_07_00_world.sql', '5ABC7660D593224BB3533C56988A1D7D28F0EEFD', 'ARCHIVED'), +('2015_02_07_01_world.sql', '9CBEE43FC6C5E58BD76F6A6E1A947D051F29B12B', 'ARCHIVED'), +('2015_02_09_00_world.sql', '22DC8522928C16AB4C620652C3B53BD17594D663', 'ARCHIVED'), +('2015_02_09_01_world.sql', 'DC7C43F2EA5E8938CA6648AED595B6BF3EA8D937', 'ARCHIVED'), +('2015_02_09_02_world.sql', '7EE5458CFD14C343F397877F0A2509D1E8AA5803', 'ARCHIVED'), +('2015_02_09_03_world.sql', '561E3721B9F06D5A3F060FFFFB05AA1BF9D39E76', 'ARCHIVED'), +('2015_02_09_04_world.sql', 'BBCEE2D1C837B1B6FB4D6B7E0F32CA8EB33A251F', 'ARCHIVED'), +('2015_02_09_05_world.sql', '4D32D3BD4863BDA74FD25DA8910B7937648A7639', 'ARCHIVED'), +('2015_02_09_06_world.sql', '89CC8CDB51D9FA2437E61E18AE261259AF7D998B', 'ARCHIVED'), +('2015_02_09_07_world.sql', '8763439D3B13DD7F0397DD11E10DB93111D5E7BE', 'ARCHIVED'), +('2015_02_09_08_world.sql', '0BABD51056D66A0100B940C4F53AAA8EE7E001E1', 'ARCHIVED'), +('2015_02_09_09_world.sql', 'D87D1ED50CA9273BD548AF01AD376FAD79AD731D', 'ARCHIVED'), +('2015_02_09_10_world.sql', '0B24AA9924383F3F0BD515FBDC18E7DFE75BD6BB', 'ARCHIVED'), +('2015_02_09_11_world.sql', 'F871DEECC735582259193BB524B031DFE3810535', 'ARCHIVED'), +('2015_02_09_12_world.sql', '758083A309171B8FEF4CA8E3A1E0758412C62BE7', 'ARCHIVED'), +('2015_02_09_13_world.sql', '5F2523B534ACF194860EB7F6530E083C0E086BBA', 'ARCHIVED'), +('2015_02_09_14_world.sql', 'C6294ADFA086060C842EE524A03B6CDCA8C34D86', 'ARCHIVED'), +('2015_02_09_15_world.sql', 'B675FFBF3A5B34F99BE7D7759ACC94C5C3639EC1', 'ARCHIVED'), +('2015_02_10_00_world.sql', 'CD1826303ECB7C1B82F6BE40BD6FCC91E239C098', 'ARCHIVED'), +('2015_02_10_01_world.sql', '29E25D672C5F85E20D17691D77F62B8AEB5FF0D6', 'ARCHIVED'), +('2015_02_10_02_world.sql', '7AB6A48ABE89D5D66B4F9F960A0E5B1A62A75CC6', 'ARCHIVED'), +('2015_02_10_03_world.sql', '111973198B2D5E6F4C5C2516E30A2D2B14C41EEC', 'ARCHIVED'), +('2015_02_10_04_world.sql', 'EED7D1133C94A78A43FFEB6A51A934142BE224D0', 'ARCHIVED'), +('2015_02_10_05_world.sql', '53A40BD0DE58CE6D88B142D54D8774666F74081C', 'ARCHIVED'), +('2015_02_10_06_world.sql', '3E997E7CF1ABA6723FAAC9B2F9D493B2AC88A562', 'ARCHIVED'), +('2015_02_10_07_world.sql', 'DCCBABEC0514D380E50746A15C29628DD4379504', 'ARCHIVED'), +('2015_02_10_08_world.sql', 'C3B9AAA017751F06F81F85BA2E849CCF438D78AD', 'ARCHIVED'), +('2015_02_10_09_world.sql', '55FCB77B78EC36BE7CE1989829FA2BE6451C7C01', 'ARCHIVED'), +('2015_02_11_00_world.sql', 'F5C741A373374EA8365834ACE769072C4F9DA8F6', 'ARCHIVED'), +('2015_02_11_01_world.sql', '23CB3EBEE69BA59ACB183C6D31527C88508A4EE4', 'ARCHIVED'), +('2015_02_11_02_world.sql', '159860281A22005101DCB29D103EB9C40C041910', 'ARCHIVED'), +('2015_02_11_03_world.sql', '57C46103FABC911DE3455A7B4D8457FA937E12AE', 'ARCHIVED'), +('2015_02_11_04_world.sql', '45AD1E641084C4E0F22C6F34087F10533C1E29DE', 'ARCHIVED'), +('2015_02_11_05_world.sql', '0E232D2810CBFC314EA65944D649CA4AC46D821E', 'ARCHIVED'), +('2015_02_12_00_world.sql', 'CBB58AF3CA19E7713A282E79F05FCB23B0F3F5B8', 'ARCHIVED'), +('2015_02_12_01_world.sql', '91975F888AB8F542EBB11EB31CDA0E201EABB141', 'ARCHIVED'), +('2015_02_12_02_world.sql', '42D6DF618F929E41014B9B17A4A0D66F9E70374C', 'ARCHIVED'), +('2015_02_12_03_world.sql', '2C4F77BC61CD8A1D8BC8C126F69D66D5E388F7A1', 'ARCHIVED'), +('2015_02_12_04_world.sql', 'CB379D0FD46FDFCF32F9A851E378B8F1FA4C88CD', 'ARCHIVED'), +('2015_02_12_05_world.sql', '62EDAD0D718F10F025CB287A8D596EBD8905EEEB', 'ARCHIVED'), +('2015_02_12_06_world.sql', '4E731729A44F3C13353BF65C7C10F862902832AA', 'ARCHIVED'), +('2015_02_12_07_world.sql', '08BB67B5E8D07FACFC6945E022CD31928FCCA40B', 'ARCHIVED'), +('2015_02_12_08_world.sql', 'B46AC2A8008AD32380E06BE4024344661A6E4E58', 'ARCHIVED'), +('2015_02_12_09_world.sql', '7BD015AE62CBE7348CFF7BBA1C9554D08B996491', 'ARCHIVED'), +('2015_02_12_10_world.sql', 'F9D6251BA0CA2DBF0E6F1330B4A31C0821944BF5', 'ARCHIVED'), +('2015_02_13_00_world.sql', 'B5DBE0F36514434E7D8EC6D3AEAE55C95F0F3FD7', 'ARCHIVED'), +('2015_02_13_01_world.sql', 'D6DA260F0B2C74C7304422750A3BAF0B0FD0748F', 'ARCHIVED'), +('2015_02_13_02_world.sql', '8B172CBAC67D280FABA1B853285FF4301A715876', 'ARCHIVED'), +('2015_02_13_03_world.sql', '9E85F0E44F14A489379311D0F3802F58D847827A', 'ARCHIVED'), +('2015_02_13_04_world.sql', '36DA1C4C2BC969AFB421E8047E0AA22B9E4B6F50', 'ARCHIVED'), +('2015_02_13_05_world.sql', 'E48073A920A754FD6F4AE0ED01C9D41072D7DD13', 'ARCHIVED'), +('2015_02_13_06_world.sql', 'CD3D63C6C11C825D5C7EC0C859AA282D2A6BD166', 'ARCHIVED'), +('2015_02_13_07_world.sql', '61E3135F3126C6790E42743CE53D95305EF905F2', 'ARCHIVED'), +('2015_02_13_08_world.sql', '4DA9FB4C377C175DF71A44D338BA60FD2C7B620F', 'ARCHIVED'), +('2015_02_13_09_world.sql', 'EF84AF4C6EFF2E6FABD52B9224348BBE198EAC82', 'ARCHIVED'), +('2015_02_14_00_world.sql', 'CC5511E0F41D79606D3E4468B6A080AF5D6428A1', 'ARCHIVED'), +('2015_02_14_01_world.sql', '6EC493C9A790DBCDEF70B1EFBF2E2A8E9C0247CB', 'ARCHIVED'), +('2015_02_14_02_world.sql', '7E85DB767AF4A6B74FD6658BCA7C3188BD297355', 'ARCHIVED'), +('2015_02_14_03_world.sql', 'F1D179F37F833B8796D891DF2D990453A86544A9', 'ARCHIVED'), +('2015_02_14_04_world.sql', '39C4A09A3C213578965053A8518156179B1B3F08', 'ARCHIVED'), +('2015_02_14_05_world.sql', '06218EA0397DBE3120E3E54A4F7734AF687D8156', 'ARCHIVED'), +('2015_02_15_00_world.sql', '5BDDF4410B1EFEB8CA5D22414342F28BD89D632F', 'ARCHIVED'), +('2015_02_15_01_world.sql', '9A1696F20A6FA6DB3156B8F26959C6D9EFDFCB78', 'ARCHIVED'), +('2015_02_15_02_world.sql', '44D8AF1F64B0FA6CD8B8CC98836FAB2855CB9D17', 'ARCHIVED'), +('2015_02_15_03_world.sql', 'F4661478999F173A978A4481AB49AC7427E31FB8', 'ARCHIVED'), +('2015_02_15_04_world.sql', '06970DBB20CA78C9D46790E56419CE4DF891692D', 'ARCHIVED'), +('2015_02_15_05_world.sql', 'A0ABF430DB7689C5A4C81E9365CB62FDC6D751E1', 'ARCHIVED'), +('2015_02_15_06_world.sql', '213158CF2559AB62D96F5D87CBCDB894B5CE6656', 'ARCHIVED'), +('2015_02_15_07_world.sql', '66E80F9160CDE708586850D2873FDC12D97CCB2A', 'ARCHIVED'), +('2015_02_15_08_world.sql', '7A80E85E1117C0886DF840C3E57ED3A37CC05B92', 'ARCHIVED'), +('2015_02_15_09_world.sql', '04C18E50C1D7F1D098A89CD61F4596448B27C5CA', 'ARCHIVED'), +('2015_02_15_10_world.sql', '39A86967CEB92A595756EF08BDC8B02BCC66A65C', 'ARCHIVED'), +('2015_02_15_11_world.sql', 'C2C3AFC0A6A8547FF75D8A444BC70032F0FAD5C8', 'ARCHIVED'), +('2015_02_15_12_world.sql', '8BFB17EAACFB73BC966F0130240EBE6896EBD861', 'ARCHIVED'), +('2015_02_15_13_world.sql', '7BA1F085FF528182D39667E0865AA747CFC679D9', 'ARCHIVED'), +('2015_02_15_14_world.sql', '4C428B313B19663A5AC947336E76B3FFAA8FBBFA', 'ARCHIVED'), +('2015_02_16_00_world.sql', '186FFEF331127382F282A13D9A6FC878A4053AD2', 'ARCHIVED'), +('2015_02_16_01_world.sql', 'FA1D413ADB609C601BE1D9D68BD555DC284A5377', 'ARCHIVED'), +('2015_02_16_02_world.sql', '973E420ED39F8C138A64CE0D78581ECAA0B7937B', 'ARCHIVED'), +('2015_02_16_03_world.sql', 'F4DB971B2C1F775543D2CCBDE56CB471A57BAF2C', 'ARCHIVED'), +('2015_02_16_04_world.sql', 'E829C54AE39C7D7A9A1FF51D58AD18DC06D6FE50', 'ARCHIVED'), +('2015_02_16_05_world.sql', '6A4AB1FC25A2613F8FCAD375C69367D034000F1A', 'ARCHIVED'), +('2015_02_16_06_world.sql', '53CF5C1224FE597B8BC0677A1E3C48E01E4F0E6B', 'ARCHIVED'), +('2015_02_17_00_world.sql', '9B44A6A414469B5746E50A9E647B93B9D6620CA2', 'ARCHIVED'), +('2015_02_17_01_world.sql', '49AF6376F02242E6B998F24D1C9E85CFBA2BC368', 'ARCHIVED'), +('2015_02_17_02_world.sql', '2B55FE84EB9E86C76D8440B4395938B00E543198', 'ARCHIVED'), +('2015_02_17_03_world.sql', '753257BB90B8CBA20073B6DB08676A9802D8FAC0', 'ARCHIVED'), +('2015_02_17_04_world.sql', 'CCB8B2D9CC99EBB30BB18B7D4533E1646A6BB8BD', 'ARCHIVED'), +('2015_02_17_05_world.sql', '99907BBFE2529EDB8AEF468C2098B6BA7713ACA4', 'ARCHIVED'), +('2015_02_18_00_world.sql', '6CE3FB9845AE14EEB521103135A1F8E94B25BABA', 'ARCHIVED'), +('2015_02_18_01_world.sql', '73FEA71CD4739F8CCB1924A248FDD006D6F4F811', 'ARCHIVED'), +('2015_02_18_02_world.sql', 'DBC1F166B84CA4E135D827D8D5A8682EFDDC84B3', 'ARCHIVED'), +('2015_02_18_03_world.sql', '9224197FD3427974D942FEBCCEDE7ABD40300E23', 'ARCHIVED'), +('2015_02_19_00_world.sql', '2569C13F6357FD9ED9EB3254133C2BC9BEC20E45', 'ARCHIVED'), +('2015_02_20_00_world.sql', '776DFDF6D728A260CBDE349B888C913DFD362DEE', 'ARCHIVED'), +('2015_02_20_01_world.sql', '24EF4FBF8701A73BA307989426F63C68E2B69D4E', 'ARCHIVED'), +('2015_02_20_02_world.sql', 'AAE9E57EC2ED176842AAD43BCB8932D7B0379321', 'ARCHIVED'), +('2015_02_20_03_world.sql', '77DE8E0108E079741E0C3CED01AB4FD60260C57A', 'ARCHIVED'), +('2015_02_20_04_world.sql', 'C8B171835AA13C0325D2EF4CB1245C786508DC34', 'ARCHIVED'), +('2015_02_21_00_world.sql', 'DF2BF4D30D26181273E510A1D0D887E3250CB325', 'ARCHIVED'), +('2015_02_22_00_world.sql', '25F9838572A396C41FF1348582DAC9B9E952E410', 'ARCHIVED'), +('2015_02_23_00_world.sql', '9BBE01B603ECBA91894DF10CFD45F21AB5A3DB52', 'ARCHIVED'), +('2015_02_23_01_world.sql', 'C4E7234C96912A784AE648CA92F4CD6CA036FEF1', 'ARCHIVED'), +('2015_02_23_02_world.sql', '94E1F9D35A12A0A594D5150299D35C43A5866260', 'ARCHIVED'), +('2015_02_23_03_world.sql', 'AC64B1419E78B50B65428424FA93E12B8631EB5F', 'ARCHIVED'), +('2015_02_23_04_world.sql', '6AB64CD095469CB52FF01928D175B0D9BF51AD3D', 'ARCHIVED'), +('2015_02_23_05_world.sql', 'F21061BD0E2F620E575A692C0E9C5A19F205AD57', 'ARCHIVED'), +('2015_02_23_06_world.sql', 'CAD1DC9C406B2D8621E165E94F06C96DB82899BA', 'ARCHIVED'), +('2015_02_23_07_world.sql', 'B647684F11ABC4ECD26741AB9183E3BBA6A96B1F', 'ARCHIVED'), +('2015_02_23_08_world.sql', '11174B20B34253E1A589D8A403BD9FFBD0FE3973', 'ARCHIVED'), +('2015_02_23_09_world.sql', '96911A36C1BB0ABB161AAB1D85B5CD215BEB6B4E', 'ARCHIVED'), +('2015_02_23_10_world.sql', '58EC7A84326C2612881254F42802BC2A950F5530', 'ARCHIVED'), +('2015_02_24_00_world.sql', '62586C8082319A83C84426BA228076513CA62721', 'ARCHIVED'), +('2015_02_24_01_world.sql', '2370977C4F5619F5AFDDEF66FE9016DCCCEABE4D', 'ARCHIVED'), +('2015_02_25_00_world.sql', '53964FDE738A1324839B5DDA76F15586518B8A23', 'ARCHIVED'), +('2015_02_27_00_world.sql', '54E76B4BFBDC09231BA4A304100E0D1F75C4C859', 'ARCHIVED'), +('2015_02_27_01_world.sql', '6FC4CD8E76BD4E3CC6FDDFE181814745F6E2351D', 'ARCHIVED'), +('2015_02_27_02_world.sql', 'BEBBD48CCC153D87EC0D39CD717D5C533F165356', 'ARCHIVED'), +('2015_03_01_00_world.sql', '00E3E47B590E37609DA1CC59008553C78425A40F', 'ARCHIVED'), +('2015_03_02_00_world.sql', 'BF62D0769132CFD9A7968DA98CEF463DD04D9E74', 'ARCHIVED'), +('2015_03_02_01_world.sql', 'C94C119B766EDE550B60CFBA156EDA5CA40911EE', 'ARCHIVED'), +('2015_03_02_02_world.sql', 'C37D2D5EBF341A51409C49653DA0584A0C9A0979', 'ARCHIVED'), +('2015_03_02_03_world.sql', 'BF185DC5D9780B27DF0788C4008EEF88FC4F20CC', 'ARCHIVED'), +('2015_03_02_04_world.sql', '9053F61D94A83CD4E85B5DB889786ED607B127FC', 'ARCHIVED'), +('2015_03_02_05_world.sql', 'BBE9A3822502E7B9F069D6C6B481B0B902E9341A', 'ARCHIVED'), +('2015_03_02_06_world.sql', '360956E421F0A8F5EB9DD9C611C53B53EA33F921', 'ARCHIVED'), +('2015_03_07_00_world.sql', '9DA807070CA63F4342884DF65C7FE409EEEBAE49', 'ARCHIVED'), +('2015_03_07_01_world.sql', 'D9E23CFC5B7488C0DAAA6D31032239552DEF6225', 'ARCHIVED'), +('2015_03_07_02_world.sql', 'C184D7B6B327C328EE98198751783A816C6EBD26', 'ARCHIVED'), +('2015_03_07_03_world.sql', '3FBA2EDD2A3641A697CA71D0E0C5E716A057C13E', 'ARCHIVED'), +('2015_03_08_00_world.sql', '9FA6752B038CA5618B7D135983CBEB174896A91B', 'ARCHIVED'), +('2015_03_08_01_world.sql', 'FD48D1D422A812CAE718C684EF5698E6073EE6B4', 'ARCHIVED'), +('2015_03_10_00_world.sql', 'BFA0AA6D6F99877D7601ABB52A17F08D0C381EA3', 'ARCHIVED'), +('2015_03_10_01_world.sql', '052E1B11617503217E01449C16DBA74D215EF69C', 'ARCHIVED'), +('2015_03_10_02_world.sql', 'BECFD758851E49D958C48BCA2334424CE224FE5D', 'ARCHIVED'), +('2015_03_10_03_world.sql', 'EB06069B49ACE84F4C580984236A54DE99FBA026', 'ARCHIVED'), +('2015_03_10_04_world.sql', '380829C6E79DED3B3A7C7D85709376B7D8B01819', 'ARCHIVED'), +('2015_03_10_05_world.sql', 'C846E361D9921B965D89689B95322C4179013F13', 'ARCHIVED'), +('2015_03_10_06_world.sql', 'F757056CD733BDBA66E9DE49FC9BCCDBA063A88C', 'ARCHIVED'), +('2015_03_10_07_world.sql', 'A9FDC376A21F8A7D5C6E0D2314B63863C443BEC5', 'ARCHIVED'), +('2015_03_10_08_world.sql', 'F7F42C02531CB3B2E5D5CD3956E9224DE17BB0EA', 'ARCHIVED'), +('2015_03_10_09_world.sql', '2ACF60BF182DA88175890C2F03A5AA6BFCC09131', 'ARCHIVED'), +('2015_03_10_10_world.sql', '641F1B50398EF7562A233201EF1692A7AEA849D2', 'ARCHIVED'), +('2015_03_12_00_world.sql', 'C6811FEC6834870BC3A04BB57A3F7B1D6F84FF17', 'ARCHIVED'), +('2015_03_12_01_world.sql', '24E91D341E658CD2B70A66AFF18F568B02AC50F0', 'ARCHIVED'), +('2015_03_14_00_world.sql', 'C362E3EF5A194382D361D6215733C4B6F9F46E1F', 'ARCHIVED'), +('2015_03_14_01_world.sql', 'ABFB47CE7607FA8369299E520A52200B9A0578CD', 'ARCHIVED'), +('2015_03_14_02_world.sql', 'C7B9EEB9F0D685BDA8ADAE996D967903D5D68F80', 'ARCHIVED'), +('2015_03_15_00_world.sql', '48E0D4A881CF9A55CA7C1D2CB74E7CFC1617FD54', 'ARCHIVED'), +('2015_03_15_01_world.sql', '224CCC1CAB129B6015227BA09EBC86E9BC4C345E', 'ARCHIVED'), +('2015_03_15_02_world.sql', 'CD8163944E0B5FF444F41B5D5BE392F792F71051', 'ARCHIVED'), +('2015_03_15_03_world.sql', 'DE058F6096EB44433CDA1EC7C22F6C1210D8CA4E', 'ARCHIVED'), +('2015_03_15_04_world.sql', 'F00232122D2F1957EDD9AE6E4E3FB7A628CE69C3', 'ARCHIVED'), +('2015_03_15_05_world.sql', '295FF7503CC35E803C52F31E867ABE9D1E169F6A', 'ARCHIVED'), +('2015_03_15_06_world.sql', '6AB7AB871B2FE6967097EC98B991AC64BDEBA13C', 'ARCHIVED'), +('2015_03_15_07_world.sql', 'E373B6D1F3D86AC4B6F7DF0247ABF377A04C805F', 'ARCHIVED'), +('2015_03_15_08_world.sql', '01E780198F1758F1EE4A96795EE13E8C37CF218F', 'ARCHIVED'), +('2015_03_15_09_world.sql', '57681C975B5242D749E60F57D7D481C4A7EA0AD1', 'ARCHIVED'), +('2015_03_15_10_world.sql', 'C2A820073BD679E3A1EE7CFFF840EF30383AC176', 'ARCHIVED'), +('2015_03_15_11_world.sql', '455B95B5F89EEEAB2D62776445813C48E9184B27', 'ARCHIVED'), +('2015_03_15_12_world.sql', 'A986A98F9FF74C288C2288C3B88C01BCFF7C1EDA', 'ARCHIVED'), +('2015_03_15_13_world.sql', '9FF82DA5F3C1E4B506B481DF5CA9B954E6D5D843', 'ARCHIVED'), +('2015_03_15_14_world.sql', 'FBC07BEADB265662AAFE23FD9C36A90A5F1508FD', 'ARCHIVED'), +('2015_03_16_00_world.sql', '836E4FEA197C5ECE330642C976EBC4599FFBC001', 'ARCHIVED'), +('2015_03_16_01_world_335.sql', '91A90BEF14D353250671EB95DFA854064592800A', 'ARCHIVED'), +('2015_03_16_02_world.sql', 'E88EB7C67969EECC025F0CBFC578ED39B8D36E54', 'ARCHIVED'), +('2015_03_16_03_world.sql', 'FBFCCCEBC57755A99F64816A17CADD8EBEC04FC1', 'ARCHIVED'), +('2015_03_16_04_world.sql', '7FDC23F3B4DAABF91156D40CDDC2E4A4E133A55B', 'ARCHIVED'), +('2015_03_16_05_world.sql', '39F873A5FAE5D0D0D95515A8E434BC8FAC24955C', 'ARCHIVED'), +('2015_03_16_06_world.sql', 'C782DF0FA4B99ED6B0557A5CAC4A101F71EBF5F1', 'ARCHIVED'), +('2015_03_17_00_world.sql', '31F53F813A604442DB08AAA1D0C359E5BF5A545B', 'ARCHIVED'), +('2015_03_17_01_world.sql', '8E3DD14F9A9C43345B843826153579A4F334787C', 'ARCHIVED'), +('2015_03_17_02_world.sql', '6212A1CF186600907CBAE1000B9D6AF2026B6E7D', 'ARCHIVED'), +('2015_03_19_00_world.sql', 'CC3E1954E10F06C62A41A04D39A0FF3F138DE477', 'ARCHIVED'), +('2015_03_20_00_world.sql', '8E7C56D7C5F6FC85C291BEEFCEDF036431A399E9', 'ARCHIVED'), +('2015_03_20_01_world.sql', '3C09B97025F2311420DF3B6364AC26B97B57935E', 'ARCHIVED'), +('2015_03_20_02_world.sql', 'B761760804EA73BD297F296C5C1919687DF7191C', 'ARCHIVED'), +('2015_03_20_03_world.sql', 'F721BC06369843A998B6339D52423F28B6168137', 'ARCHIVED'), +('2015_03_20_04_world.sql', '', 'ARCHIVED'); diff --git a/sql/updates/world/2015_03_21_00_world.sql b/sql/updates/world/2015_03_21_00_world.sql new file mode 100644 index 00000000000..d1eee836dd0 --- /dev/null +++ b/sql/updates/world/2015_03_21_00_world.sql @@ -0,0 +1 @@ +UPDATE `version` SET `db_version`='TDB 335.58', `cache_id`=58 LIMIT 1; diff --git a/sql/updates/world/2015_03_21_01_world.sql b/sql/updates/world/2015_03_21_01_world.sql new file mode 100644 index 00000000000..82b5304ef7b --- /dev/null +++ b/sql/updates/world/2015_03_21_01_world.sql @@ -0,0 +1,60 @@ +SET @CGUID := 69713; -- 4 free guid set by TC +SET @OGUID := 6144; -- 2 free guid set by TC + +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID AND @CGUID+3; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `curhealth`, `spawndist`, `MovementType`) VALUES +(@CGUID+0, 21318, 530, 1, 1, -3800.380, 2601.100, 90.14300, 5.481630, 180, 6986, 0, 0), +(@CGUID+1, 21310, 530, 1, 1, -3802.939, 2594.501, 92.709, 1.605702, 300, 6986, 0, 0), +(@CGUID+2, 21310, 530, 1, 1, -3794.054, 2588.724, 92.709, 1.905461, 300, 6986, 0, 0), +(@CGUID+3, 21310, 530, 1, 1, -3788.540, 2597.479, 92.709, 3.382006, 300, 6986, 0, 0); + +DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+1; +INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES +(@OGUID+0, 184731, 530, 1, 1, -3802.939, 2594.501, 92.18282, 1.605702, 0, 0, 0, 1, 120, 255, 1), -- 184731 (Area: -1) +(@OGUID+1, 184731, 530, 1, 1, -3794.054, 2588.724, 92.18282, 1.905461, 0, 0, 0, 1, 120, 255, 1); -- 184731 (Area: -1) + +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (21310, 21309); +UPDATE `creature_template` SET `InhabitType`=4, `gossip_menu_id`=8287, `AIName`='SmartAI' WHERE `entry`=21292; +UPDATE `creature_template` SET `gossip_menu_id`=8288, `AIName`='SmartAI' WHERE `entry`=21318; + +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (-@CGUID+1, -@CGUID+2, -@CGUID+3, -74618, 21318, 21292, 21309); +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(-74618,0,0,0,1,0,100,1,0,0,0,0,11,36558,0,0,0,0,0,19,21292,30,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - OOC no repeat - Cast Ar''tor''s Prison'), +(-@CGUID+1,0,0,0,1,0,100,1,0,0,0,0,11,36558,0,0,0,0,0,19,21292,30,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - OOC no repeat - Cast Ar''tor''s Prison'), +(-@CGUID+2,0,0,0,1,0,100,1,0,0,0,0,11,36558,0,0,0,0,0,19,21292,30,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - OOC no repeat - Cast Ar''tor''s Prison'), +(-@CGUID+3,0,0,0,1,0,100,1,0,0,0,0,11,36558,0,0,0,0,0,19,21292,30,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - OOC no repeat - Cast Ar''tor''s Prison'), +(21292,0,0,0,20,0,100,0,10528,0,0,0,45,0,1,0,0,0,0,19,21318,20,0,0,0,0,0, 'Ar''tor, Son of Oronok - -On quest Rewarded - Set Data'), +(21318,0,0,0,38,0,100,0,0,1,0,0,1,0,0,0,0,0,0,21,30,0,0,0,0,0,0, 'Spirit of Ar''tor -On Data set - Talk'), +(21309,0,0,0,0,0,100,0,5000,7000,20000,25000,11,38048,0,0,0,0,0,2,0,0,0,0,0,0,0,"Painmistress Gabrissa - In Combat - Cast 'Curse of Pain'"), +(21309,0,1,0,0,0,100,0,6000,7000,17000,20000,11,38169,0,0,0,0,0,2,0,0,0,0,0,0,0,"Painmistress Gabrissa - In Combat - Cast 'Curse of Pain'"), +(21309,0,2,0,25,0,100,0,0,0,0,0,11,32783,0,0,0,0,0,1,0,0,0,0,0,0,0,"Painmistress Gabrissa - On reset - Cast 'Arcane Channeling'"); + +DELETE FROM `creature_text` WHERE `entry`=21318; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextID`) VALUES +(21318,0,0,'I... I have died... I was in so much pain... engulfed in darkness... Can you see me, $r?',12,0,100,0,0,0, 'Spirit of Ar''tor ', 18993); + +DELETE FROM `creature_addon` WHERE `guid` IN (@CGUID+1, @CGUID+2, @CGUID+3, 74618); +INSERT INTO `creature_addon` (`guid`,`bytes1`,`bytes2`, `emote`, `auras`) VALUES +(@CGUID+1,0,4097,0,"60194"), +(@CGUID+2,0,4097,0,"60194"), +(@CGUID+3,0,4097,0,"60194"), +(74618,0,4097,0,"60194"); + +DELETE FROM `creature_template_addon` WHERE `entry` IN (21307, 21292); +INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`, `emote`, `auras`) VALUES +(21292,0,4097,383,""), +(21307,0,4097,0,"31261"); + +DELETE FROM `gossip_menu` WHERE `entry`=8288 AND `text_id`=10327; +DELETE FROM `gossip_menu` WHERE `entry`=8287 AND `text_id`=10323; +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES +(8287, 10323), +(8288, 10327); + +DELETE FROM `spell_area` WHERE `spell`=60197 AND `area`=3752; +INSERT INTO `spell_area` (`spell`, `area`, `quest_start`, `quest_end`, `aura_spell`, `racemask`, `gender`, `autocast`, `quest_start_status`, `quest_end_status`) VALUES +(60197, 3752, 10528, 0, 0, 0, 2, 1, 64, 0); + +DELETE FROM `spell_area` WHERE `spell`=60194 AND `area`=3752; +INSERT INTO `spell_area` (`spell`, `area`, `quest_start`, `quest_end`, `aura_spell`, `racemask`, `gender`, `autocast`, `quest_start_status`, `quest_end_status`) VALUES +(60194, 3752, 0, 10528, 0, 0, 2, 1, 0, 11); diff --git a/sql/updates/world/2015_03_21_02_world.sql b/sql/updates/world/2015_03_21_02_world.sql new file mode 100644 index 00000000000..831bf907912 --- /dev/null +++ b/sql/updates/world/2015_03_21_02_world.sql @@ -0,0 +1,5 @@ +DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = 23161; +INSERT INTO `spell_linked_spell` VALUES (23161, 31725, 0, 'Summon Nightmare'); + +DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = 5784; +INSERT INTO `spell_linked_spell` VALUES (5784, 31725, 0, 'Summon felsteed'); diff --git a/sql/updates/world/2015_03_22_00_world.sql b/sql/updates/world/2015_03_22_00_world.sql new file mode 100644 index 00000000000..97ecb115bc2 --- /dev/null +++ b/sql/updates/world/2015_03_22_00_world.sql @@ -0,0 +1,243 @@ +DELETE FROM `smart_scripts` WHERE `entryorguid` IN(21181,21310,17008,21052,21685,21686,21687,21738,21739,21740,21741,21049) AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN(2118100,2131000,2102401) AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid` =21024 AND `source_type`=0 AND `id`>1; + +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE entry IN (21181, 17008, 21052, 21685, 21686, 21687, 21310,21738,21739,21740,21741,21049); + +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(21049, 0, 0, 0, 11, 0, 100, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Spirit of the Past - On spawn - set Phase 1'), +(21049, 0, 1, 0, 1, 1, 100, 0, 0, 180000, 90000, 180000, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Spirit of the Past - OOC (Phase 1) - Say Line 0'), +(21049, 0, 2, 0, 38, 0, 100, 0, 1, 1, 0, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Spirit of the Past - On Data Set 1 1 - set Phase 2'), +(21049, 0, 3, 0, 1, 2, 100, 0, 300000, 300000, 300000, 300000, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Spirit of the Past - OOC (Phase 2) - Set Phase 1'), +(21738, 0, 0, 0, 1, 0, 100, 1, 100, 100, 0, 0, 11, 25035, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Redeemed Spirit of Air - OOC (No Repeat) - Cast Elemental Spawn-in'), +(21739, 0, 0, 0, 1, 0, 100, 1, 100, 100, 0, 0, 11, 25035, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Redeemed Spirit of Earth - OOC (No Repeat) - Cast Elemental Spawn-in'), +(21740, 0, 0, 0, 1, 0, 100, 1, 100, 100, 0, 0, 11, 25035, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Redeemed Spirit of Fire - OOC (No Repeat) - Cast Elemental Spawn-in'), +(21741, 0, 0, 0, 1, 0, 100, 1, 100, 100, 0, 0, 11, 25035, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Redeemed Spirit of Water - OOC (No Repeat) - Cast Elemental Spawn-in'), +(21024, 0, 2, 0, 38, 1, 100, 0, 1, 1, 0, 0, 80, 2102401, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - On Data Set 1 1 - Run Script 2'), +(21181, 0, 0 ,0, 9, 0, 100, 0, 0,20,10000,15000,11,18945,2,0,0,0,0,7,0,0,0,0,0,0,0,'Cyrukh the Firelord <The Dirge of Karabor> - On Range - Cast Knock-Away'), +(21181, 0, 1 ,0, 0, 0, 100, 0, 3000,5000,5000,11000,11,39429,2,0,0,0,0,5,0,0,0,0,0,0,0,'Cyrukh the Firelord <The Dirge of Karabor> - IC - Cast Fel Flamestrike'), +(21181, 0, 2 ,0, 9, 0, 100, 0, 0,20,8000,13000,11,39425,2,0,0,0,0,5,0,0,0,0,0,0,0,'Cyrukh the Firelord <The Dirge of Karabor> - On Range - Cast Trample'), +(21181, 0, 3 ,0, 11, 0, 100, 0, 0,0,0,0,18,768,0,0,0,0,0,1,0,0,0,0,0,0,0,'Cyrukh the Firelord <The Dirge of Karabor> - On Spawn - Set Unit Flags'), +(21181, 0, 4 ,0, 38, 0, 100, 0, 1,1,0,0,53,0,21181,0,0,0,0,1,0,0,0,0,0,0,0,'Cyrukh the Firelord <The Dirge of Karabor> - On Data Set 1 1 - Start WP'), +(21181, 0, 5 ,6, 40, 0, 100, 0, 1,21181,0,0,101,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Cyrukh the Firelord <The Dirge of Karabor> - On Reached WP1 - Set Home Position'), +(21181, 0, 6 ,7, 61, 0, 100, 0, 0,0,0,0,19,768,0,0,0,0,0,1,0,0,0,0,0,0,0,'Cyrukh the Firelord <The Dirge of Karabor> - On Reached WP1 - Set Unit Flags'), +(21181, 0, 7 ,8, 61, 0, 100, 0, 0,0,0,0,8,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Cyrukh the Firelord <The Dirge of Karabor> - On Reached WP1 - Set Aggresive'), +(21181, 0, 8 ,9, 61, 0, 100, 0, 0,0,0,0,49,0,0,0,0,0,0,19,21685,0,0,0,0,0,0,'Cyrukh the Firelord <The Dirge of Karabor> - On Reached WP1 - Start Attack'), +(21181, 0, 9 ,10, 61, 0, 100, 0, 0,0,0,0,45,2,2,0,0,0,0,19,21686,0,0,0,0,0,0,'Cyrukh the Firelord <The Dirge of Karabor> - On Reached WP1 - Start Attack'), +(21181, 0, 10 ,0, 61, 0, 100, 0, 0,0,0,0,45,2,2,0,0,0,0,19,21687,0,0,0,0,0,0,'Cyrukh the Firelord <The Dirge of Karabor> - On Reached WP1 - Start Attack'), +(21181, 0, 11 ,0, 1, 0, 100, 0, 0,0,15000,30000,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Cyrukh the Firelord <The Dirge of Karabor> - IC - Say'), +(21181, 0, 12 ,0, 6, 0, 100, 0, 0,0,0,0,45,1,1,0,0,0,0,19,21024,0,0,0,0,0,0,'Cyrukh the Firelord <The Dirge of Karabor> - On Death - Set Data'), +(21181, 0, 13 ,0, 54, 0, 100, 0, 0,0,0,0,11,36329,0,0,0,0,0,1,0,0,0,0,0,0,0,'Cyrukh the Firelord <The Dirge of Karabor> - On Just SUmmoned - Cast Cyrukh Fire Kit'), +(17008, 0, 0 ,0, 38, 0, 100, 0, 1,1,0,0,11,35996,0,0,0,0,0,1,0,0,0,0,0,0,0,'Guldan - On Data Set 1 1 - Cast Guldan Channel'), +(17008, 0, 1 ,0, 38, 0, 100, 0, 2,2,0,0,28,35996,0,0,0,0,0,1,0,0,0,0,0,0,0,'Guldan - On Data Set 2 2 - Remove Aura Guldan Channel'), +(17008, 0, 2 ,0, 38, 0, 100, 0, 3,3,0,0,66,0,0,0,0,0,0,19,21049,0,0,0,0,0,0,'Guldan - On Data Set 3 3 - Set Orientation'), +(17008, 0, 3 ,0, 38, 0, 100, 0, 4,4,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,4.95674,'Guldan - On Data Set 3 3 - Set Orientation'), +(21052, 0, 0 ,0, 1, 2, 100, 0, 0,0,500,1000,11,35997,0,0,0,0,0,1,0,0,0,0,0,0,0,'Camera Shaker - Altar of Damnation - OOC (Phase 2) - Cast Fel Flames'), +(21052, 0, 1 ,0, 1, 2, 100, 0, 30000,30000,30000,30000,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Camera Shaker - Altar of Damnation - OOC (Phase 2) - Set Phase 1'), +(21052, 0, 2 ,0, 1, 2, 100, 0, 0,1000,1000,3000,11,35757,0,0,0,0,0,1,0,0,0,0,0,0,0,'Camera Shaker - Altar of Damnation - OOC (Phase 2) - Cast Ultris Destroyed'), +(21052, 0, 3 ,0, 38, 0, 100, 0, 1,1,0,0,22,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Camera Shaker - Altar of Damnation -On Data Set 1 1 - Set Phase 2'), +(21685, 0, 0 ,0, 38, 0, 100, 0, 1,1,0,0,81,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Oronok Torn-heart - On Data Set 1 1 - Set NPC Flags Gossip'), +(21685, 0, 1 ,2, 62, 0, 100, 0, 8350,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'Oronok Torn-heart - On Gossip Select - Store Targetlist'), +(21685, 0, 2 ,3, 61, 0, 100, 0, 0,0,0,0,81,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Oronok Torn-heart - On Gossip Select - Set NPC Flags None'), +(21685, 0, 3 ,4, 61, 0, 100, 0, 0,0,0,0,45,1,1,0,0,0,0,19,21686,0,0,0,0,0,0,'Oronok Torn-heart - On Gossip Select - Set Data'), +(21685, 0, 4 ,5, 61, 0, 100, 0, 0,0,0,0,45,1,1,0,0,0,0,19,21687,0,0,0,0,0,0,'Oronok Torn-heart - On Gossip Select - Set Data'), +(21685, 0, 5 ,0, 61, 0, 100, 0, 0,0,0,0,53,0,21685,0,0,0,0,1,0,0,0,0,0,0,0,'Oronok Torn-heart - On Gossip Select - Start WP'), +(21685, 0, 6 ,7, 40, 0, 100, 0, 12,21685,0,0,101,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Oronok Torn-heart - On Reached WP12 - Set Home Position'), +(21685, 0, 7 ,8, 61, 0, 100, 0, 0,0,0,0,19,768,0,0,0,0,0,1,0,0,0,0,0,0,0,'Oronok Torn-heart - On Reached WP12 - Set Unit Flags'), +(21685, 0, 8 ,9, 61, 0, 100, 0, 0,0,0,0,2,495,0,0,0,0,0,1,0,0,0,0,0,0,0,'Oronok Torn-heart - On Reached WP12 - Set Faction'), +(21685, 0, 9 ,10, 61, 0, 100, 0, 0,0,0,0,8,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Oronok Torn-heart - On Reached WP12 - Set Aggresive'), +(21685, 0, 10 ,0, 61, 0, 100, 0, 0,0,0,0,45,1,1,0,0,0,0,19,21181,0,0,0,0,0,0,'Oronok Torn-heart - On Reached WP12 - Set Data on Cyrukh the Firelord <The Dirge of Karabor>'), +(21685, 0, 11 ,0, 0, 0, 100, 0, 0,0,8000,11000,11,16006,0,0,0,0,0,2,0,0,0,0,0,0,0,'Oronok Torn-heart - IC - Cast Chain Lightning'), +(21685, 0, 12 ,0, 0, 0, 100, 0, 0,0,6000,8000,11,12548,0,0,0,0,0,2,0,0,0,0,0,0,0,'Oronok Torn-heart - IC - Cast Frost Shock'), +(21685, 0, 13 ,0, 2, 0, 100, 0, 0,40,5000,8000,11,12491,0,0,0,0,0,1,0,0,0,0,0,0,0,'Oronok Torn-heart - On Less than 40% HP - Cast Healing Wave'), +(21685, 0, 14 ,0, 38, 0, 100, 0, 5,5,0,0,11,12491,0,0,0,0,0,19,21687,0,0,0,0,0,0,'Oronok Torn-heart - On Data Set - Cast Healing Wave'), +(21685, 0, 15 ,16, 38, 0, 100, 0, 6,6,0,0,71,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Oronok Torn-heart - On Data Set 6 6 - Unequip weapon'), +(21685, 0, 16 ,0, 61, 0, 100, 0, 0,0,0,0,15,10588,0,0,0,0,0,12,1,0,0,0,0,0,0,'Oronok Torn-heart - On Data Set 6 6 - Complete Quest - The Cipher of Damnation'), +(21685, 0, 17 ,0, 7, 0, 100, 0, 0,0,0,0,53,0,2168500,0,0,0,0,1,0,0,0,0,0,0,0,'Oronok Torn-heart - On Evade - Start WP (Path 2)'), +(21685, 0, 18 ,0, 40, 0, 100, 0, 1,2168500,0,0,66,0,0,0,0,0,0,19,21024,0,0,0,0,0,0,'Oronok Torn-heart - On Reached WP1 (Path 2) - Set Orientation'), +(21686, 0, 0 ,0, 38, 0, 100, 0, 1,1,0,0,53,0,21686,0,0,0,0,1,0,0,0,0,0,0,0,'Borak, Son of Oronok - On Data Set - Start WP'), +(21686, 0, 1 ,2, 40, 0, 100, 0, 18,21686,0,0,101,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Borak, Son of Oronok - On Reached WP18 - Set Home Position'), +(21686, 0, 2 ,3, 61, 0, 100, 0, 0,0,0,0,2,495,0,0,0,0,0,1,0,0,0,0,0,0,0,'Borak, Son of Oronok - On Reached WP18 - Set Faction'), +(21686, 0, 3 ,4, 61, 0, 100, 0, 0,0,0,0,19,768,0,0,0,0,0,1,0,0,0,0,0,0,0,'Borak, Son of Oronok - On Reached WP18 - Set Unit Flags'), +(21686, 0, 4 ,0, 61, 0, 100, 0, 0,0,0,0,8,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Borak, Son of Oronok - On Reached WP18 - Set Aggresive'), +(21686, 0, 5 ,0, 38, 0, 100, 0, 2,2,0,0,49,0,0,0,0,0,0,19,21181,0,0,0,0,0,0,'Borak, Son of Oronok - On Data Set - Start Attack'), +(21686, 0, 6 ,0, 9, 0, 100, 0, 0,5,3000,6000,11,27611,0,0,0,0,0,1,0,0,0,0,0,0,0,'Borak, Son of Oronok - On Range - Cast Eviscerate'), +(21686, 0, 7 ,0, 9, 0, 100, 0, 0,5,15000,18000,11,30470,0,0,0,0,0,1,0,0,0,0,0,0,0,'Borak, Son of Oronok - On Range - Cast Slice and Dice'), +(21686, 0, 8 ,0, 38, 0, 100, 0, 3,3,0,0,71,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Borak, Son of Oronok - On Data Set 3 3 - Unequip weapon'), +(21686, 0, 9 ,0, 7, 0, 100, 0, 0,0,0,0,53,0,2168600,0,0,0,0,1,0,0,0,0,0,0,0,'Borak, Son of Oronok - On Evade - Start WP (Path 2)'), +(21686, 0, 10 ,0, 40, 0, 100, 0, 1,2168600,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,1.660839,'Borak, Son of Oronok - On Reached WP1 (Path 2) - Set Orientation'), +(21687, 0, 0 ,0, 38, 0, 100, 0, 1,1,0,0,53,0,21687,0,0,0,0,1,0,0,0,0,0,0,0,'Gromtor, Son of Oronok - On Data Set - Start WP'), +(21687, 0, 1 ,2, 40, 0, 100, 0, 17,21687,0,0,101,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Gromtor, Son of Oronok - On Reached WP17 - Set Home Position'), +(21687, 0, 2 ,3, 61, 0, 100, 0, 0,0,0,0,19,768,0,0,0,0,0,1,0,0,0,0,0,0,0,'Gromtor, Son of Oronok - On Reached WP17 - Set Unit Flags'), +(21687, 0, 3 ,4, 61, 0, 100, 0, 0,0,0,0,2,495,0,0,0,0,0,1,0,0,0,0,0,0,0,'Gromtor, Son of Oronok - On Reached WP17 - Set Faction'), +(21687, 0, 4 ,0, 61, 0, 100, 0, 0,0,0,0,8,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Gromtor, Son of Oronok - On Reached WP17 - Set Aggresive'), +(21687, 0, 5 ,0, 38, 0, 100, 0, 2,2,0,0,49,0,0,0,0,0,0,19,21181,0,0,0,0,0,0,'Gromtor, Son of Oronok - On Data Set - Start Attack'), +(21687, 0, 6 ,0, 4, 0, 100, 0, 0,0,0,0,11,31403,0,0,0,0,0,1,0,0,0,0,0,0,0,'Gromtor, Son of Oronok - On Agro - Cast Battle Shout'), +(21687, 0, 7 ,0, 9, 0, 100, 0, 0,5,3000,7000,11,29426,0,0,0,0,0,1,0,0,0,0,0,0,0,'Gromtor, Son of Oronok - On Range - Cast Heroic Strike'), +(21687, 0, 8 ,0, 9, 0, 100, 0, 0,5,8000,13000,11,12169,0,0,0,0,0,1,0,0,0,0,0,0,0,'Gromtor, Son of Oronok - On Range - Cast Shield Block'), +(21687, 0, 9 ,0, 9, 0, 100, 0, 0,5,18000,23000,11,15062,0,0,0,0,0,1,0,0,0,0,0,0,0,'Gromtor, Son of Oronok - On Range - Cast Shield Wall'), +(21687, 0, 10 ,0, 0, 0, 100, 0, 0,5000,5000,8000,11,26281,0,0,0,0,0,2,0,0,0,0,0,0,0,'Gromtor, Son of Oronok - IC - Cast Taunt'), +(21687, 0, 11 ,0, 2, 0, 100, 0, 0,40,5000,8000,45,4,4,0,0,0,0,19,21685,0,0,0,0,0,0,'Gromtor, Son of Oronok - On Less than 40% HP - Set Data Oronok Torn-heart'), +(21687, 0, 12 ,0, 38, 0, 100, 0, 3,3,0,0,71,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Gromtor, Son of Oronok - On Data Set 3 3 - Unequip weapon'), +(21687, 0, 13 ,0, 7, 0, 100, 0, 0,0,0,0,53,0,2168700,0,0,0,0,1,0,0,0,0,0,0,0,'Gromtor, Son of Oronok - On Evade - Start WP (Path 2)'), +(21687, 0, 14 ,0, 40, 0, 100, 0, 1,2168700,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,1.503118,'Gromtor, Son of Oronok - On Reached WP1 (Path 2) - Set Orientation'), +(21310, 0, 3 ,0, 54, 0, 100, 0, 0,0,0,0,80,2131000,2,0,0,0,0,1,0,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - On Spawn - Run Script'), +(2102401, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Set Phase 2'), +(2102401, 9, 1, 0, 0, 0, 100, 0, 15000, 15000, 0, 0, 1, 6, 0, 0, 0, 0, 0, 19, 21685, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Say Line 6 (Oronok Torn-heart)'), -- 18:45:48.094 +(2102401, 9, 2, 0, 0, 0, 100, 0, 20000, 20000, 0, 0, 1, 11, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Say Line 11'), -- 18:46:05.594 +(2102401, 9, 3, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 107, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Summon Group 2'), -- 18:46:08.938 +(2102401, 9, 4, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 1, 7, 0, 0, 0, 0, 0, 19, 21685, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Say Line 7 (Oronok Torn-heart)'), -- 18:46:13.844 +(2102401, 9, 5, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 19, 21739, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Say Line 1 (Redeemed Spirit of Earth)'), -- 18:46:18.938 +(2102401, 9, 6, 0, 0, 0, 100, 0, 9000, 9000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, 21740, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Say Line 0 (Redeemed Spirit of Fire)'), -- 18:46:27.953 +(2102401, 9, 7, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 1, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Say Line 8'), -- 18:46:34.235 +(2102401, 9, 8, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, 21739, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Say Line 0 (Redeemed Spirit of Earth)'), -- 18:46:38.813 +(2102401, 9, 9, 0, 0, 0, 100, 0, 8000, 8000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 19, 21685, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Say Line 1 (Oronok Torn-heart)'), -- 18:46:42.844 +(2102401, 9, 10, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 19, 21685, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Say Line 2 (Oronok Torn-heart)'), -- 18:46:42.844 +(2102401, 9, 11, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 3, 0, 0, 0, 0, 0, 19, 21685, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Say Line 3 (Oronok Torn-heart)'), -- 18:46:48.860 +(2102401, 9, 12, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 45, 6, 6, 0, 0, 0, 0, 19, 21685, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Set Data 6 6 Oronok Torn-heart'), -- 18:46:48.860 +(2102401, 9, 13, 0, 0, 0, 100, 0, 0, 0, 0, 0, 45, 3, 3, 0, 0, 0, 0, 19, 21686, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Set Data 3 3 Borak, Son of Oronok'), -- 18:46:48.860 +(2102401, 9, 14, 0, 0, 0, 100, 0, 0, 0, 0, 0, 45, 3, 3, 0, 0, 0, 0, 19, 21687, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Set Data 3 3 Gromtor, Son of Oronok'), -- 18:46:48.860 +(2102401, 9, 15, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 19, 21685, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Despawn '), -- 18:46:48.860 +(2102401, 9, 16, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 19, 21686, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Despawn'), -- 18:46:48.860 +(2102401, 9, 17, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 19, 21687, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Despawn'), -- 18:46:48.860 +(2102401, 9, 18, 0, 0, 0, 100, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Torlok <The Earthen Ring> - Script 2 - Set Phase 1'), +(2131000, 9, 1 ,0, 0, 0, 100, 0, 0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Say Line 1'), +(2131000, 9, 2 ,0, 0, 0, 100, 0, 0,0,0,0,45,3,3,0,0,0,0,19,17008,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Set Data 3 3 on Gul''Dan'), +(2131000, 9, 3 ,0, 0, 0, 100, 0, 3000,3000,0,0,1,0,0,0,0,0,0,19,17008,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Say Line 1 on Gul''Dan'), +(2131000, 9, 4 ,0, 0, 0, 100, 0, 0,0,0,0,45,1,1,0,0,0,0,9,21049,0,200,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Set Data 1 1 on Spirit of the Past'), +(2131000, 9, 5 ,0, 0, 0, 100, 0, 6000,6000,0,0,45,4,4,0,0,0,0,19,17008,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Set Data 4 4 on Gul''Dan'), +(2131000, 9, 6 ,0, 0, 0, 100, 0, 1000,1000,0,0,45,1,1,0,0,0,0,19,17008,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Set Data 1 1 on Gul''Dan'), +(2131000, 9, 7 ,0, 0, 0, 100, 0, 0,0,0,0,1,1,0,0,0,0,0,19,17008,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Say Line 2 on Gul''Dan'), +(2131000, 9, 8 ,0, 0, 0, 100, 0, 0,0,0,0,45,1,1,0,0,0,0,9,21052,0,200,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Set Data 1 1 on Camera Shaker - Altar of Damnation'), +(2131000, 9, 9 ,0, 0, 0, 100, 0, 3000,3000,0,0,1,2,0,0,0,0,0,19,17008,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Say Line 3 on Gul''Dan'), +(2131000, 9, 10 ,0, 0, 0, 100, 0, 4000,4000,0,0,12,21181,2,600000,0,0,0,1,0,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Summon Cyrukh the Firelord <The Dirge of Karabor>'), +(2131000, 9, 11 ,0, 0, 0, 100, 0, 0,0,0,0,1,3,0,0,0,0,0,19,17008,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Say Line 4 on Gul''Dan'), +(2131000, 9, 12 ,0, 0, 0, 100, 0, 1000,1000,0,0,1,0,0,0,0,0,0,19,21181,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Say Line 4 on Cyrukh the Firelord <The Dirge of Karabor>'), +(2131000, 9, 13 ,0, 0, 0, 100, 0, 3000,3000,0,0,107,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Summon Group'), +(2131000, 9, 14 ,0, 0, 0, 100, 0, 3000,3000,0,0,1,0,0,0,0,0,0,19,21685,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Say Line 1 on Oronok Torn-heart'), +(2131000, 9, 15 ,0, 0, 0, 100, 0, 3000,3000,0,0,1,4,0,0,0,0,0,19,17008,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Say Line 5 on Gul''Dan'), +(2131000, 9, 16 ,0, 0, 0, 100, 0, 6000,6000,0,0,1,5,0,0,0,0,0,19,17008,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Say Line 6 on Gul''Dan'), +(2131000, 9, 17 ,0, 0, 0, 100, 0, 0,0,0,0,45,2,2,0,0,0,0,19,17008,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Set Data 2 2 on Gul''Dan'), +(2131000, 9, 18 ,0, 0, 0, 100, 0, 6000,6000,0,0,1,5,0,0,0,0,0,19,21685,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Say Line 2 on Oronok Torn-heart'), +(2131000, 9, 19 ,0, 0, 0, 100, 0, 0,0,0,0,45,1,1,0,0,0,0,19,21685,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Set Data 1 1 on Oronok Torn-heart'), +(2131000, 9, 20 ,0, 0, 0, 100, 0, 0,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Shadowmoon Valley Invisible Trigger (Tiny) - Script - Despawn'); + +DELETE FROM `waypoints` WHERE `entry` IN(21685,21686,21687,21181,2168500,2168600,2168700); + +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(21687, 1,-3620.271, 1862.062, 48.44324, 'Gromtor, Son of Oronok'), +(21687, 2,-3623.021, 1861.062, 48.94324, 'Gromtor, Son of Oronok'), +(21687, 3,-3626.021, 1860.062, 49.94324, 'Gromtor, Son of Oronok'), +(21687, 4,-3629.771, 1858.812, 50.94324, 'Gromtor, Son of Oronok'), +(21687, 5,-3631.521, 1858.312, 51.69324, 'Gromtor, Son of Oronok'), +(21687, 6,-3633.521, 1857.562, 52.44324, 'Gromtor, Son of Oronok'), +(21687, 7,-3634.521, 1857.312, 53.44324, 'Gromtor, Son of Oronok'), +(21687, 8,-3636.271, 1856.562, 54.19324, 'Gromtor, Son of Oronok'), +(21687, 9,-3637.271, 1856.312, 55.19324, 'Gromtor, Son of Oronok'), +(21687, 10,-3640.271, 1855.312, 55.69324, 'Gromtor, Son of Oronok'), +(21687, 11,-3643.021, 1854.562, 56.44324, 'Gromtor, Son of Oronok'), +(21687, 12,-3642.169, 1854.779, 56.43678, 'Gromtor, Son of Oronok'), +(21687, 13,-3644.919, 1854.529, 56.68678, 'Gromtor, Son of Oronok'), +(21687, 14,-3642.169, 1854.779, 56.43678, 'Gromtor, Son of Oronok'), +(21687, 15,-3644.919, 1854.529, 56.68678, 'Gromtor, Son of Oronok'), +(21687, 16,-3646.248, 1853.079, 57.05591, 'Gromtor, Son of Oronok'), +(21687, 17,-3647.998, 1852.079, 57.80591, 'Gromtor, Son of Oronok'), +(21686, 1,-3618.578, 1866.529, 48.23744, 'Borak, Son of Oronok'), +(21686, 2,-3620.311, 1865.76, 48.47595, 'Borak, Son of Oronok'), +(21686, 3,-3622.811, 1865.26, 48.97595, 'Borak, Son of Oronok'), +(21686, 4,-3624.811, 1864.51, 49.47595, 'Borak, Son of Oronok'), +(21686, 5,-3626.313, 1863.896, 50.1328, 'Borak, Son of Oronok'), +(21686, 6,-3628.313, 1863.396, 50.8828, 'Borak, Son of Oronok'), +(21686, 7,-3630.313, 1862.646, 51.3828, 'Borak, Son of Oronok'), +(21686, 8,-3632.813, 1861.896, 52.1328, 'Borak, Son of Oronok'), +(21686, 9,-3634.813, 1861.396, 52.8828, 'Borak, Son of Oronok'), +(21686, 10,-3634.81, 1861.143, 53.03374, 'Borak, Son of Oronok'), +(21686, 11,-3636.56, 1860.643, 53.78374, 'Borak, Son of Oronok'), +(21686, 12,-3639.31, 1859.893, 54.28374, 'Borak, Son of Oronok'), +(21686, 13,-3641.06, 1859.393, 55.03374, 'Borak, Son of Oronok'), +(21686, 14,-3643.06, 1858.643, 56.03374, 'Borak, Son of Oronok'), +(21686, 15,-3643.157, 1857.902, 56.33821, 'Borak, Son of Oronok'), +(21686, 16,-3644.657, 1857.152, 57.08821, 'Borak, Son of Oronok'), +(21686, 17,-3646.227, 1855.506, 57.3797, 'Borak, Son of Oronok'), +(21686, 18,-3648.227, 1853.756, 58.3797, 'Borak, Son of Oronok'), +(21685, 1,-3619.83, 1857.978, 48.17765, 'Oronok Torn-heart'), +(21685, 2,-3624.58, 1856.228, 48.67765, 'Oronok Torn-heart'), +(21685, 3,-3625.787, 1855.872, 49.38496, 'Oronok Torn-heart'), +(21685, 4,-3627.787, 1855.122, 50.13496, 'Oronok Torn-heart'), +(21685, 5,-3629.537, 1854.622, 51.13496, 'Oronok Torn-heart'), +(21685, 6,-3630.287, 1854.372, 51.63496, 'Oronok Torn-heart'), +(21685, 7,-3631.287, 1854.122, 53.13496, 'Oronok Torn-heart'), +(21685, 8,-3632.287, 1853.872, 53.88496, 'Oronok Torn-heart'), +(21685, 9,-3632.533, 1853.489, 54.04154, 'Oronok Torn-heart'), +(21685, 10,-3634.533, 1852.989, 56.29154, 'Oronok Torn-heart'), +(21685, 11,-3637.033, 1852.239, 57.79154, 'Oronok Torn-heart'), +(21685, 12,-3640.951, 1852.142, 57.46563, 'Oronok Torn-heart'), +(21181, 1,-3617.7155, 1823.1611, 39.7751, 'Cyrukh the Firelord <The Dirge of Karabor>'), +(2168500, 1,-3600.319, 1898.602, 47.36539, 'Oronok Torn-heart (Path 2)'), +(2168600, 1,-3597.452, 1895.446, 47.36539, 'Borak, Son of Oronok (Path 2)'), +(2168700, 1,-3603.953, 1895.167, 47.36539, 'Gromtor, Son of Oronok (Path 2)'); + +DELETE FROM `creature_text` WHERE `entry` IN(21685,17008,21181,21310,21049,21739,21740); +DELETE FROM `creature_text` WHERE `entry` IN(21024) and `groupid`>10; + +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextID`) VALUES +(21024, 11, 0, 'I hear what you hear, brother. Look behind you...', 12, 0, 100, 1, 0, 0, 'Earthmender Torlok to Cyrukh the Firelord',19336), + +(21685, 0, 0, 'You do not fight alone, $n! Together, we will banish this spawn of hellfire!', 14, 0, 100, 0, 0, 0, 'Oronok Torn-heart',19304), +(21685, 1, 0, 'We leave, then, Torlok. I have only one request...', 12, 0, 100, 1, 0, 0, 'Oronok Torn-heart',19341), +(21685, 2, 0, 'The Torn-heart men give their weapons to Earthmender Torlok.', 16, 0, 100, 1, 0, 0, 'Oronok Torn-heart',19342), +(21685, 3, 0, 'Give these to the heroes that made this possible.', 12, 0, 100, 1, 0, 0, 'Oronok Torn-heart',19343), +(21685, 4, 0, 'We will set the elements free of your grasp by force!', 14, 0, 100, 0, 0, 0, 'Oronok Torn-heart',19309), +(21685, 5, 0, 'We will fight when you are ready.', 12, 0, 100, 0, 0, 0, 'Oronok Torn-heart',19310), +(21685, 6, 0, 'What say the elements, Torlok? I hear only silence.', 12, 0, 100, 1, 0, 0, 'Oronok Torn-heart',19334), +(21685, 7, 0, 'They are redeemed! Then we have won?', 12, 0, 100, 5, 0, 0, 'Oronok Torn-heart',19337), +(17008, 0, 0, 'Be silent! The shattering is soon to come!', 12, 0, 100, 15, 0, 0, 'Gul''dan',18701), +(17008, 1, 0, 'Bear witness to the undeniable power of our dark master!', 12, 0, 100, 0, 0, 0, 'Gul''dan',18702), +(17008, 2, 0, 'With his gift, I shall raze this land and reform it!', 12, 0, 100, 0, 0, 0, 'Gul''dan',18703), +(17008, 3, 0, 'Watch! See the ground shatter before us! Watch as the energy flows! It will feed our armies...', 12, 0, 100, 0, 0, 0, 'Gul''dan',18704), +(17008, 4, 0, 'We will never be without power! I have secured our future! Bask in my glory!', 12, 0, 100, 0, 0, 0, 'Gul''dan',18705), +(17008, 5, 0, 'It... is... done...', 12, 0, 100, 0, 0, 0, 'Gul''dan',18706), +(21181, 0, 0, 'Cyrukh has awoken!', 14, 0, 100, 0, 0, 0, 'Cyrukh the Firelord',19298), +(21181, 1, 0, 'Cyrukh comes for you!', 14, 0, 100, 0, 0, 0, 'Cyrukh the Firelord',19301), +(21181, 1, 1, 'You will suffer eternally!', 14, 0, 100, 0, 0, 0, 'Cyrukh the Firelord',19299), +(21181, 1, 2, 'Those that dare play with fire will be incinerated!', 14, 0, 100, 0, 0, 0, 'Cyrukh the Firelord',19302), +(21181, 1, 3, 'Little creature made of flesh, your wish is granted! Death comes for you!', 14, 0, 100, 0, 0, 0, 'Cyrukh the Firelord',19308), +(21310, 0, 0, 'A flaming vortex takes shape.', 16, 0, 100, 0, 0, 0, 'Shadowmoon Valley Invisible Trigger (Tiny)',19303), +(21049, 0, 0, 'You have damned us all... We are lost.', 12, 0, 100, 20, 0, 0, 'Spirit of the Past',18700), +(21049, 0, 1, 'Stop! You must stop!', 12, 0, 100, 20, 0, 0, 'Spirit of the Past',18698), +(21049, 0, 2, 'Do not do this, Gul''dan! The elements will never forgive us!', 12, 0, 100, 20, 0, 0, 'Spirit of the Past',18697), +(21049, 0, 3, 'Think of our younglings, Gul''dan! You will destroy us all!', 12, 0, 100, 20, 0, 0, 'Spirit of the Past',18699), +(21049, 0, 4, 'We will take from the land if it refuses to give!', 12, 0, 100, 15, 0, 0, 'Spirit of the Past',18696), +(21049, 0, 5, 'Tear the land asunder, Gul''dan! Sever the tie!', 12, 0, 100, 15, 0, 0, 'Spirit of the Past',18694), +(21049, 0, 6, 'They have abandoned us! Do not forget!', 12, 0, 100, 15, 0, 0, 'Spirit of the Past',18695), +(21740, 0, 0, 'Yes... Well enough for the elements that are here, but the cipher is known to another... The spirits of fire are in turmoil... If this force is not stopped, the world where these mortals came from will cease.', 12, 0, 100, 0, 0, 0, 'Redeemed Spirit of Fire',19339), +(21739, 0, 0, 'Farewell, mortals... The earthmender knows what fire feels...', 12, 0, 100, 0, 0, 0, 'Redeemed Spirit of Earth',19340), +(21739, 1, 0, 'It is now as it should be, shaman. You have done well.', 12, 0, 100, 0, 0, 0, 'Redeemed Spirit of Earth',19338); + +DELETE FROM `creature_template_addon` WHERE `entry` BETWEEN 21738 AND 21741; +INSERT INTO `creature_template_addon` (`entry`, `mount`, `bytes1`, `bytes2`, `auras`) VALUES +(21741, 0, 0x0, 0x1, ''), -- 21741 +(21740, 0, 0x0, 0x1, ''), -- 21740 +(21739, 0, 0x0, 0x1, ''), -- 21739 +(21738, 0, 0x0, 0x1, ''); -- 21738 + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=35997; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, 35997, 0, 0, 35, 1, 0, 20, 1, 0, 0, 0, '', 'Fel Flames target must not be self'), +(13, 1, 35997, 0, 0, 31, 0, 3, 21052, 0, 0, 0, 0, '', 'Fel Flames target has to be Camera Shaker - Altar of Damnation'); + +DELETE FROM `creature_summon_groups` WHERE `summonerId`IN(21310); +DELETE FROM `creature_summon_groups` WHERE `summonerId`IN(21024) AND `groupId`=1; + +INSERT INTO `creature_summon_groups` (`summonerId`, `summonerType`, `groupId`, `entry`, `position_x`, `position_y`, `position_z`, `orientation`, `summonType`, `summonTime`) VALUES +(21024, 0, 1, 21738, -3587.229, 1892.889, 47.32373, 2.199115, 1, 37000), +(21024, 0, 1, 21739, -3598.681, 1888.016, 47.32373, 1.692969, 1, 37000), +(21024, 0, 1, 21740, -3605.315, 1884.477, 47.32373, 1.308997, 1, 37000), +(21024, 0, 1, 21741, -3591.871, 1886.822, 47.32373, 1.850049, 1, 37000), +(21310, 0, 0, 21685, -3600.319, 1898.602, 47.36539, 4.921828, 1, 600000), +(21310, 0, 0, 21686, -3603.865, 1900.854, 47.36539, 4.931085, 1, 600000), +(21310, 0, 0, 21687, -3597.99, 1902.118, 47.3654, 4.848677, 1, 600000); + +DELETE FROM `event_scripts` WHERE id=13961; +INSERT INTO `event_scripts` (`id`, `delay`, `command`, `datalong`, `datalong2`, `dataint`, `x`, `y`, `z`, `o`) VALUES +(13961, 3, 10, 21310, 50000, 0, -3590.538574, 1832.343506, 41.749908, 1.65); diff --git a/sql/updates/world/2015_03_22_01_world.sql b/sql/updates/world/2015_03_22_01_world.sql new file mode 100644 index 00000000000..07e759465dc --- /dev/null +++ b/sql/updates/world/2015_03_22_01_world.sql @@ -0,0 +1,100 @@ +SET @Cannon:= 186432; +SET @Tethyr:=23899; +SET @Marksman:=23900; +SET @Blast:=42578; +SET @Mills:=23905; +SET @Counter:=52500; + +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry` IN (@Tethyr, @Mills, @Marksman); +UPDATE `creature_template` SET `InhabitType`=2 WHERE `entry` IN (@Tethyr); +UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry`=@Cannon; + +DELETE FROM `creature_text` WHERE `entry`=@Mills; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextID`) VALUES +(@Mills,0,0,'Marksmen, form up and take your positions!',14,0,100,0,0,0, 'Major Mills', 22447), +(@Mills,1,0,'Prepare to fire upon my command! Ready, aim...',14,0,100,0,0,0, 'Major Mills', 22448), +(@Mills,2,0,'FIRE AT WILL!',14,0,100,0,0,0, 'Major Mills', 22449), +(@Mills,3,0,'We did it! We''ve defeated Tethyr!',14,0,100,0,0,0, 'Major Mills', 22633); + +DELETE FROM `waypoints` WHERE `entry`=@Tethyr; +INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES +(@Tethyr,1, -3882.588379,-4670.275391,-1.823548,'Tethyr'); +UPDATE `quest_template` SET `SpecialFlags`=2 WHERE `Id`=11198; + +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@Cannon) AND `source_type`=1; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@Marksman) AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@Marksman*100) AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@Mills) AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@Mills*100) AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@Marksman*100) AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@Marksman*100+1) AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@Tethyr) AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@Tethyr*100) AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@Tethyr*100+1) AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@Mills,0,0,0,19,0,100,0,11198,0,0,0,80,@Mills*100,2,0,0,0,0,1,0,0,0,0,0,0,0, 'Major Mills: On quest accept call main script'), +(@Mills*100,9,0,0,0,0,100,0,0,0,0,0,83,2,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Take Down Tethyr: Remove npcflag'), +(@Mills*100,9,1,0,0,0,100,0,2000,2000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Take Down Tethyr: Talk'), +(@Mills*100,9,2,0,0,0,100,0,0,0,0,0,12,@Marksman,1,900000,0,0,0,8,0,0,0,-3904.77,-4635.09,9.62735,5.49334, 'Take Down Tethyr: Summon Theramore Marksman'), +(@Mills*100,9,3,0,0,0,100,0,0,0,0,0,12,@Marksman,1,900000,0,0,0,8,0,0,0,-3856.59,-4622.45,9.24753,3.87856, 'Take Down Tethyr: Summon Theramore Marksman'), +(@Mills*100,9,4,0,0,0,100,0,0,0,0,0,12,@Marksman,1,900000,0,0,0,8,0,0,0,-3917.6,-4648.53,9.32604,5.56795, 'Take Down Tethyr: Summon Theramore Marksman'), +(@Mills*100,9,5,0,0,0,100,0,0,0,0,0,12,@Marksman,1,900000,0,0,0,8,0,0,0,-3890.48,-4620.7,9.55527,4.99383, 'Take Down Tethyr: Summon Theramore Marksman'), +(@Mills*100,9,6,0,0,0,100,0,0,0,0,0,12,@Marksman,1,900000,0,0,0,8,0,0,0,-3865.94,-4617.2,9.26262,4.16523, 'Take Down Tethyr: Summon Theramore Marksman'), +(@Mills*100,9,7,0,0,0,100,0,0,0,0,0,12,@Marksman,1,900000,0,0,0,8,0,0,0,-3834.8,-4645.41,9.25827,3.61152, 'Take Down Tethyr: Summon Theramore Marksman'), +(@Mills*100,9,8,0,0,0,100,0,0,0,0,0,12,@Marksman,1,900000,0,0,0,8,0,0,0,-3826.61,-4655.32,9.21484,3.13243, 'Take Down Tethyr: Summon Theramore Marksman'), +(@Mills*100,9,9,0,0,0,100,0,0,0,0,0,12,@Marksman,1,900000,0,0,0,8,0,0,0,-3830.76,-4673.74,9.50962,2.70832, 'Take Down Tethyr: Summon Theramore Marksman'), +(@Mills*100,9,10,0,0,0,100,0,0,0,0,0,12,@Marksman,1,900000,0,0,0,8,0,0,0,-3843.65,-4687.59,9.6436,2.43735, 'Take Down Tethyr: Summon Theramore Marksman'), +(@Mills*100,9,11,0,0,0,100,0,0,0,0,0,12,@Marksman,1,900000,0,0,0,8,0,0,0,-3858.49,-4703.49,9.17411,2.33525, 'Take Down Tethyr: Summon Theramore Marksman'), +(@Mills*100,9,12,0,0,0,100,0,0,0,0,0,12,@Marksman,1,900000,0,0,0,8,0,0,0,-3851.97,-4697.24,9.36834,2.33525, 'Take Down Tethyr: Summon Theramore Marksman'), +(@Mills*100,9,13,0,0,0,100,0,0,0,0,0,12,@Marksman,1,900000,0,0,0,8,0,0,0,-3924.35,-4656.55,9.15409,5.80749, 'Take Down Tethyr: Summon Theramore Marksman'), +(@Mills*100,9,14,0,0,0,100,0,0,0,0,0,12,@Tethyr,1,900000,0,0,0,8,0,0,0,-3897.365479, -4750.632813, -1.719010, 1.791049, 'Take Down Tethyr: Summon Tethyr'), +(@Mills*100,9,15,0,0,0,100,0,6000,6000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Take Down Tethyr: Talk'), +(@Mills*100,9,16,0,0,0,100,0,10000,10000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Take Down Tethyr: Talk'), +(@Mills*100,9,17,0,0,0,100,0,0,0,0,0,106,16,0,0,0,0,0,14,10824,@Cannon,0,0, 0, 0, 0, 'Take Down Tethyr: Remove Flag from GO'), +(@Mills*100,9,18,0,0,0,100,0,0,0,0,0,106,16,0,0,0,0,0,14,10227,@Cannon,0,0, 0, 0, 0, 'Take Down Tethyr: Remove Flag from GO'), +(@Mills*100,9,19,0,0,0,100,0,0,0,0,0,106,16,0,0,0,0,0,14,11186,@Cannon,0,0, 0, 0, 0, 'Take Down Tethyr: Remove Flag from GO'), +(@Tethyr,0,0,0,54,0,100,0,0,0,0,0,80,@Tethyr*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'Tethyr - Just Summoned - Action list'), +(@Tethyr*100,9,0,0,0,0,100,0,0,0,0,0,53,0,@Tethyr,0,0,0,0,1,0,0,0,0,0,0,0,'Tethyr - Action list - Start wp'), +(@Tethyr*100,9,1,0,0,0,100,0,0,0,0,0,102,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tethyr - Action list - REGEN HEALTH OFF'), +(@Tethyr*100,9,2,0,0,0,100,0,0,0,0,0,18,128,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tethyr - Action list - Add unit flag'), +(@Tethyr,0,1,0,23,0,100,1,@Counter,5,0,0,80,@Tethyr*100+1,2,0,0,0,0,1,0,0,0,0,0,0,0,'Tethyr - On data set - ActionList'), +(@Tethyr*100+1,9,3,0,0,0,100,0,0,0,0,0,6,11198,0,0,0,0,0,18,90,0,0,0,0,0,0,'Tethyr - Action list - Quest Failed'), +(@Tethyr*100+1,9,4,0,0,0,100,0,0,0,0,0,41,0,0,0,0,0,0,11,@Marksman,80,0,0,0,0,0,'Tethyr - Action list - Despawn'), +(@Tethyr*100+1,9,5,0,0,0,100,0,0,0,0,0,45,0,2,0,0,0,0,10,31075,@Mills,0,0,0,0,0,'Tethyr - Action list - Set Data'), +(@Tethyr*100+1,9,6,0,0,0,100,0,0,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tethyr - Action list - Despawn'), +(@Tethyr,0,1,2,40,0,100,0,1,@Tethyr,0,0,101,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tethyr - Waypoint reached - Set home position'), +(@Tethyr,0,2,0,61,0,100,0,0,0,0,0,19,128,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tethyr - Just Summoned - Remove unit flag'), +(@Tethyr,0,3,0,0,0,100,0,3000,3000,7000,7000,11,42584,0,0,0,0,0,5,0,0,0,0,0,0,0,'Tethyr - Occ - Cast'), +(@Tethyr,0,4,0,0,0,100,0,5000,5000,8000,8000,11,42574,0,0,0,0,0,5,0,0,0,0,0,0,0,'Tethyr - Occ - Cast'), +(@Tethyr,0,5,0,8,0,100,0,@Blast,0,0,0,11,36662,2,0,0,0,0,1,0,0,0,0,0,0,0,'Tethyr - Spell Hist - Cast'), +(@Tethyr,0,6,7,6,0,100,0,0,0,0,0,45,0,1,0,0,0,0,10,31075,@Mills,0,0,0,0,0,'Tethyr - On Death - Set Data'), +(@Tethyr,0,7,0,61,0,100,0,0,0,0,0,45,0,1,0,0,0,0,11,@Marksman,80,0,0,0,0,0,'Tethyr - On Death - Set Data'), +(@Mills,0,1,2,38,0,100,0,0,1,0,0,82,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tethyr - On data set - Add npcflag'), +(@Mills,0,2,3,61,0,100,0,0,0,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tethyr - On data set - talk'), +(@Mills,0,3,0,61,0,100,0,0,0,0,0,15,11198,0,0,0,0,0,18,100,0,0,0,0,0,0,'Tethyr - On data sett - Area explored'), +(@Mills,0,4,0,38,0,100,0,0,2,0,0,82,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tethyr - On data set - Add npcflag'), +(@Marksman,0,0,0,38,0,100,0,0,1,0,0,80,@Marksman*100+1,2,0,0,0,0,1,0,0,0,0,0,0,0,'Marksman - On DATA set - Action List'), +(@Marksman*100+1,9,1,0,0,0,100,0,2000,2000,0,0,11,66402,0,0,0,0,0,1,0,0,0,0,0,0,0,'Marksman - Action list - cast Fireworks'), +(@Marksman*100+1,9,2,0,0,0,100,0,2000,2000,0,0,11,66400,0,0,0,0,0,1,0,0,0,0,0,0,0,'Marksman - Action list - cast Fireworks'), +(@Marksman*100+1,9,3,0,0,0,100,0,2000,2000,0,0,11,66402,0,0,0,0,0,1,0,0,0,0,0,0,0,'Marksman - Action list - cast Fireworks'), +(@Marksman*100+1,9,4,0,0,0,100,0,2000,2000,0,0,11,66400,0,0,0,0,0,1,0,0,0,0,0,0,0,'Marksman - Action list - cast Fireworks'), +(@Marksman*100+1,9,5,0,0,0,100,0,2000,2000,0,0,11,66402,0,0,0,0,0,1,0,0,0,0,0,0,0,'Marksman - Action list - cast Fireworks'), +(@Marksman*100+1,9,6,0,0,0,100,0,2000,2000,0,0,11,66400,0,0,0,0,0,1,0,0,0,0,0,0,0,'Marksman - Action list - cast Fireworks'), +(@Marksman*100+1,9,7,0,0,0,100,0,2000,2000,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tethyr - Just Summoned - Despawn'), +(@Marksman,0,1,0,54,0,100,1,0,0,0,0,80,@Marksman*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'Marksman - Just Summoned - Action list'), +(@Marksman*100,9,0,0,0,0,100,0,0,0,0,0,8,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Marksman - Action list - React passif'), +(@Marksman*100,9,1,0,0,0,100,0,0,0,0,0,18,131072,0,0,0,0,0,1,0,0,0,0,0,0,0,'Marksman - Action list - Add unit flag'), +(@Marksman*100,9,2,0,0,0,100,0,16000,16000,0,0,19,131072,0,0,0,0,0,1,0,0,0,0,0,0,0,'Marksman - Action list - Remove unit flag'), +(@Marksman,0,2,0,1,0,100,0,3000,3000,2000,2000,11,42580,0,0,0,0,0,19,@Tethyr,80,0,0,0,0,0,'Tethyr - Occ - Cast'), +(@Marksman,0,3,0,0,0,100,0,3000,3000,2000,2000,11,42580,0,0,0,0,0,19,@Tethyr,80,0,0,0,0,0,'Tethyr - IC - Cast'), +(@Marksman,0,4,0,6,0,100,0,0,0,0,0,75,@Counter,0,0,0,0,0,19,@Tethyr,80,0,0,0,0,0,'Tethyr - On death - Set data1'); + +DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = @Blast; +INSERT INTO `spell_linked_spell` VALUES (@Blast, 42576, 0, 'Theramore Cannon blast'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=@Blast; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, @Blast, 0, 31, 3, @Tethyr, 0, 0, '', 'Blast cannon target'); +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=42576; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, 42576, 0, 31, 3, @Tethyr, 0, 0, '', 'Blast cannon target'); diff --git a/sql/updates/world/2015_03_22_02_world.sql b/sql/updates/world/2015_03_22_02_world.sql new file mode 100644 index 00000000000..4fd3f5b8e25 --- /dev/null +++ b/sql/updates/world/2015_03_22_02_world.sql @@ -0,0 +1,3 @@ +DELETE FROM `creature` WHERE `id` = 34137; +DELETE FROM `creature_addon` WHERE `guid` = 26148; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (26148, 261480); diff --git a/sql/updates/world/2015_03_22_03_world.sql b/sql/updates/world/2015_03_22_03_world.sql new file mode 100644 index 00000000000..8b59ea0824c --- /dev/null +++ b/sql/updates/world/2015_03_22_03_world.sql @@ -0,0 +1,68 @@ +SET @GUID:=69717; -- 3 free Gob guid set by TC +SET @WESTERN_TP := 22348; +SET @EASTERN_TP := 22351; +SET @CENTRAL_TP := 22350; +SET @Teleporter := 185215; + +DELETE FROM `gameobject` WHERE `guid` IN (@GUID+0, @GUID+1, @GUID+2); +INSERT INTO `gameobject` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`animprogress`,`state`) VALUES +(@GUID+0, @Teleporter, 530, 1, 1, 4697.5, 3298.68, 178.892, 2.02823, 0, 0, 0.849013, 0.528372, 120, 0, 1), +(@GUID+1, @Teleporter, 530, 1, 1, 4734.71, 3193.67, 161.48, 0.386745, 0, 0, 0.19217, 0.981362, 120, 0, 1), +(@GUID+2, @Teleporter, 530, 1, 1, 4673.28, 3126.67, 166.725, 5.42979, 0, 0, 0.413867, -0.910337, 120, 0, 1); + +UPDATE `creature_template` SET `spell2`=36255,`spell3`=8599,`spell4`=38920 WHERE `entry`=16943; +UPDATE `creature_template` SET `spell2`=37179,`spell3`=36251,`spell4`=38920 WHERE `entry`=20928; +UPDATE `creature_template` SET `AIName`='SmartAI', `unit_flags`=33555200, `flags_extra`=130 WHERE `entry` IN (@CENTRAL_TP, @EASTERN_TP, @WESTERN_TP); +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (20928); + +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (-70125,-70122,-70124,-70126,-70123,-70116,-70115,-70117,-70118,-70119,-70128,-70127,-70121,-70120, -70131, -70130, -70129, -70112, -70113, -70114, -70132, -70133, -70135, -70134, -70138, -70136, -70139, -70137) AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@WESTERN_TP, @EASTERN_TP, @CENTRAL_TP, 20928) AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (16943) AND `source_type`=0 AND id IN (3,4,5); +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@WESTERN_TP,0,0,0,8,0,100,0,38920,0,0,0,45,0,1,0,0,0,0,7,0,0,0,0,0,0,0,"WESTERN_TP - On spell hit - SET data"), +(@EASTERN_TP,0,1,0,8,0,100,0,38920,0,0,0,45,0,2,0,0,0,0,7,0,0,0,0,0,0,0,"EASTERN_TP - On spell hit - SET data"), +(@CENTRAL_TP,0,2,0,8,0,100,0,38920,0,0,0,45,0,3,0,0,0,0,7,0,0,0,0,0,0,0,"CENTRAL_TP - On spell hit - SET data"), +(16943,0,3,0,38,0,100,0,0,1,0,0,86,38982,0,23,0,0,0,1,0,0,0,0,0,0,0,"16943 - On data set - Cast Credit"), +(16943,0,4,0,38,0,100,0,0,2,0,0,86,38983,0,23,0,0,0,1,0,0,0,0,0,0,0,"16943 - On data set - Cast Credit"), +(16943,0,5,0,38,0,100,0,0,3,0,0,86,38984,0,23,0,0,0,1,0,0,0,0,0,0,0,"16943 - On data set - Cast Credit"), +(20928,0,0,0,0,0,100,0,1000,1000,7000,9000,11,37179,0,0,0,0,0,2,0,0,0,0,0,0,0,"20928 - IC- Cast"), +(20928,0,1,0,0,0,100,0,4000,4000,5000,5000,11,36251,0,0,0,0,0,2,0,0,0,0,0,0,0,"20928 - IC- Cast"), +(20928,0,2,0,4,0,100,0,0,0,0,0,11,33962,0,0,0,0,0,1,0,0,0,0,0,0,0,"20928 - On Aggro - Cast"), +(20928,0,3,0,38,0,100,0,0,1,0,0,86,38982,0,23,0,0,0,1,0,0,0,0,0,0,0,"20928 - On data set - Cast Credit"), +(20928,0,4,0,38,0,100,0,0,2,0,0,86,38983,0,23,0,0,0,1,0,0,0,0,0,0,0,"20928 - On data set - Cast Credit"), +(20928,0,5,0,38,0,100,0,0,3,0,0,86,38984,0,23,0,0,0,1,0,0,0,0,0,0,0,"20928 - On data set - Cast Credit"), +(-70115,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70116,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'), +(-70118,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70116,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'), +(-70117,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70116,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'), +(-70119,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70120,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'), +(-70128,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70120,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'), +(-70121,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70120,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'), +(-70127,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,1,0,0,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'), +(-70126,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70123,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'), +(-70122,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70123,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'), +(-70124,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70123,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'), +(-70125,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,1,0,0,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'), +(-70114,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,1,0,0,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'), +(-70132,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,1,0,0,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'), +(-70133,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,1,0,0,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'), +(-70129,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70131,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'), +(-70130,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70129,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'), +(-70131,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70130,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'), +(-70113,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70112,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'), +(-70112,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70113,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'), +(-70135,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70137,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'), +(-70134,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70137,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'), +(-70138,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70137,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'), +(-70136,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70137,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'), +(-70139,0,0,0,1,0,100,1,0,0,0,0,11,33346,64,0,0,0,0,10,70137,19656,0,0,0,0,0,'Invisible Location Trigger - OOC no repeat - Cast Green Beam on target'); + +DELETE FROM `conditions` WHERE `SourceEntry`=38920 AND `SourceTypeOrReferenceId`=13; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(13,7,38920,0,1,31,0,3,@WESTERN_TP,0,0,0,'', 'Detonate all 3 implicit effects can hit western teleporter'), +(13,7,38920,0,2,31,0,3,@EASTERN_TP,0,0,0,'', 'Detonate all 3 implicit effects can hit eastern teleporter'), +(13,7,38920,0,3,31,0,3,@CENTRAL_TP,0,0,0,'', 'Detonate all 3 implicit effects can hit central teleporter'); + +DELETE FROM `conditions` WHERE `SourceEntry`=38915 AND `SourceTypeOrReferenceId`=17; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(17,0,38915,0,1,31,1,3,16943,0,0,0,'', 'Mental interference target can be Cyber-Rage Forgelord'), +(17,0,38915,0,2,31,1,3,20928,0,0,0,'', 'Mental interference target can be Ironspine Forgelord'); diff --git a/sql/updates/world/2015_03_22_04_world.sql b/sql/updates/world/2015_03_22_04_world.sql new file mode 100644 index 00000000000..d468134a279 --- /dev/null +++ b/sql/updates/world/2015_03_22_04_world.sql @@ -0,0 +1,88 @@ +-- Pathing for Winter Revenant Entry: 34134 +SET @NPC := 136272; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1863.794,`position_y`=-291.2315,`position_z`=412.549 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1863.794,-291.2315,412.549,0,0,0,0,100,0), +(@PATH,2,1863.79,-270.939,412.549,0,0,0,0,100,0), +(@PATH,3,1863.947,-228.3612,412.549,0,0,0,0,100,0), +(@PATH,4,1869.661,-213.3534,412.5491,0,0,0,0,100,0), +(@PATH,5,1865.418,-223.9702,412.5492,0,0,0,0,100,0), +(@PATH,6,1864.278,-260.7524,412.5491,0,0,0,0,100,0); + +-- Pathing for Winter Revenant Entry: 34134 +SET @NPC := 136273; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1923.732,`position_y`=-359.4886,`position_z`=421.7067 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1923.732,-359.4886,421.7067,0,0,0,0,100,0), +(@PATH,2,1910.024,-354.7222,418.0154,0,0,0,0,100,0), +(@PATH,3,1918.405,-348.7433,419.1237,0,0,0,0,100,0), +(@PATH,4,1939.619,-338.1754,423.0634,0,0,0,0,100,0), +(@PATH,5,1963.408,-334.0208,424.2783,0,0,0,0,100,0), +(@PATH,6,1980.856,-335.2691,424.5296,0,0,0,0,100,0), +(@PATH,7,1986.183,-330.6932,425.169,0,0,0,0,100,0), +(@PATH,8,1995.423,-314.1808,429.2899,0,0,0,0,100,0), +(@PATH,9,1991.416,-322.2818,428.0239,0,0,0,0,100,0), +(@PATH,10,1986.513,-331.125,425.358,0,0,0,0,100,0), +(@PATH,11,1985.857,-349.7383,423.7158,0,0,0,0,100,0), +(@PATH,12,1981.682,-366.153,421.861,0,0,0,0,100,0), +(@PATH,13,1977.274,-369.6335,421.7955,0,0,0,0,100,0), +(@PATH,14,1979.401,-369.707,421.2126,0,0,0,0,100,0), +(@PATH,15,1984.034,-359.9644,422.6329,0,0,0,0,100,0), +(@PATH,16,1984.393,-335.8026,424.7922,0,0,0,0,100,0), +(@PATH,17,1988.928,-328.356,425.7399,0,0,0,0,100,0), +(@PATH,18,1995.36,-317.4339,428.2936,0,0,0,0,100,0), +(@PATH,19,1986.51,-331.1359,425.4233,0,0,0,0,100,0), +(@PATH,20,1985.911,-349.9874,423.6323,0,0,0,0,100,0), +(@PATH,21,1981.283,-367.6224,421.5562,0,0,0,0,100,0), +(@PATH,22,1977.089,-370.4861,421.7415,0,0,0,0,100,0), +(@PATH,23,1980.1,-368.3475,421.1914,0,0,0,0,100,0), +(@PATH,24,1983.74,-359.1452,422.7472,0,0,0,0,100,0), +(@PATH,25,1984.766,-343.7218,423.7823,0,0,0,0,100,0), +(@PATH,26,1995.432,-314.0199,429.2879,0,0,0,0,100,0), +(@PATH,27,1989.344,-326.1992,426.7511,0,0,0,0,100,0), +(@PATH,28,1982.792,-334.583,424.959,0,0,0,0,100,0), +(@PATH,29,1966.594,-333.5218,424.746,0,0,0,0,100,0), +(@PATH,30,1947.611,-335.2066,424.0862,0,0,0,0,100,0), +(@PATH,31,1926.362,-345.1485,420.9026,0,0,0,0,100,0), +(@PATH,32,1910.392,-351.3752,417.4246,0,0,0,0,100,0), +(@PATH,33,1920.583,-357.5619,420.6503,0,0,0,0,100,0), +(@PATH,34,1930.703,-367.3549,424.857,0,0,0,0,100,0), +(@PATH,35,1948.212,-376.7307,427.6352,0,0,0,0,100,0); + +-- Pathing for Winter Revenant Entry: 34134 +SET @NPC := 136282; +SET @PATH := @NPC * 10; +DELETE FROM `creature` WHERE `guid`=@NPC; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@NPC,34134,603,3,1,1819.619,-357.7437,413.1524,0.42,604800,0, 2); +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1819.619,-357.7437,413.1524,0,0,0,0,100,0), +(@PATH,2,1805.549,-360.7479,413.217,0,0,0,0,100,0), +(@PATH,3,1794.583,-359.7582,412.7976,0,0,0,0,100,0), +(@PATH,4,1781.751,-356.4551,412.6638,0,0,0,0,100,0), +(@PATH,5,1767.5,-360.8076,412.4928,0,0,0,0,100,0), +(@PATH,6,1786.507,-358.0201,412.7365,0,0,0,0,100,0), +(@PATH,7,1804.042,-360.811,413.1808,0,0,0,0,100,0), +(@PATH,8,1815.088,-359.1276,413.0786,0,0,0,0,100,0), +(@PATH,9,1826.932,-355.8406,413.2609,0,0,0,0,100,0), +(@PATH,10,1837.789,-356.2162,413.0187,0,0,0,0,100,0), +(@PATH,11,1851.447,-344.2731,412.6318,0,0,0,0,100,0), +(@PATH,12,1860.773,-334.8643,412.6426,0,0,0,0,100,0), +(@PATH,13,1874.715,-338.0733,412.809,0,0,0,0,100,0), +(@PATH,14,1882.154,-355.1157,412.7476,0,0,0,0,100,0), +(@PATH,15,1872.645,-369.4694,413.3637,0,0,0,0,100,0), +(@PATH,16,1862.287,-378.0733,413.9054,0,0,0,0,100,0), +(@PATH,17,1850.775,-374.4587,412.9799,0,0,0,0,100,0), +(@PATH,18,1841.932,-359.4829,413.0605,0,0,0,0,100,0), +(@PATH,19,1823.803,-358.0992,412.858,0,0,0,0,100,0); diff --git a/sql/updates/world/2015_03_22_05_world.sql b/sql/updates/world/2015_03_22_05_world.sql new file mode 100644 index 00000000000..6e81be445da --- /dev/null +++ b/sql/updates/world/2015_03_22_05_world.sql @@ -0,0 +1,42 @@ +-- Pathing for Freya Entry: 32906 +SET @NPC := 136554; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2338.461,`position_y`=-52.32549,`position_z`=425.5522 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2338.461,-52.32549,425.5522,0,0,0,0,100,0), +(@PATH,2,2327.021,-69.61578,426.0348,0,0,0,0,100,0), +(@PATH,3,2303.438,-90.47264,429.1589,0,0,0,0,100,0), +(@PATH,4,2301.615,-91.41477,429.1122,3.649395,13000,0,488,100,0), +(@PATH,5,2333.003,-57.68308,425.5663,0,0,0,0,100,0), +(@PATH,6,2342.892,-46.95139,425.5204,3.298672,60000,0,0,100,0), +(@PATH,7,2397.739,-42.16927,422.8524,0,0,0,0,100,0), +(@PATH,8,2409.762,-74.47346,420.6727,0,0,0,0,100,0), +(@PATH,9,2400.14,-96.78609,424.1808,0,0,0,0,100,0), +(@PATH,10,2399.105,-98.47173,424.2316,4.866657,13000,0,489,100,0), +(@PATH,11,2397.637,-46.43726,423.2978,0,0,0,0,100,0), +(@PATH,12,2358.936,-41.11687,425.6092,0,0,0,0,100,0), +(@PATH,13,2349.045,-40.70486,425.7578,3.176499,60000,0,0,100,0), +(@PATH,14,2403.443,-26.94002,419.8143,0,0,0,0,100,0), +(@PATH,15,2411.195,-22.77497,419.1813,0,0,0,0,100,0), +(@PATH,16,2436.248,12.27234,422.2727,0,0,0,0,100,0), +(@PATH,17,2437.145,16.83826,424.929,0,0,0,0,100,0), +(@PATH,18,2437.777,19.35069,426.0522,1.399542,13000,0,490,100,0), +(@PATH,19,2412.994,-11.56424,420.4819,0,0,0,0,100,0), +(@PATH,20,2359.694,-40.27568,425.3726,0,75000,0,0,100,0); + +DELETE FROM `waypoint_scripts` WHERE `id` IN (488,489,490); +INSERT INTO `waypoint_scripts` (`id`,`delay`,`command`,`datalong`,`datalong2`,`dataint`,`x`,`guid`) VALUES +(488,3,15,63295,4,33575,30,891),(489,3,15,63292,4,33575,30,892),(490,3,15,63294,4,33575,30,893); + +UPDATE `creature` SET `modelid`=0,`spawndist`=0,`MovementType`=0, `curhealth`=1 WHERE `id`=33575; +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=33575; + +-- Add spell target condition for Freya Dummy +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceGroup`=2 AND `SourceEntry` IN (63292,63294,63295); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 2, 63292, 0, 0, 31, 3, 33575, 0, 0, '', 'Freya Dummy Yellow targets Channel Stalker Freya'), +(13, 2, 63294, 0, 0, 31, 3, 33575, 0, 0, '', 'Freya Dummy Blue targets Channel Stalker Freya'), +(13, 2, 63295, 0, 0, 31, 3, 33575, 0, 0, '', 'Freya Dummy Green targets Channel Stalker Freya'); diff --git a/sql/updates/world/2015_03_22_06_world.sql b/sql/updates/world/2015_03_22_06_world.sql new file mode 100644 index 00000000000..db8227afff8 --- /dev/null +++ b/sql/updates/world/2015_03_22_06_world.sql @@ -0,0 +1,62 @@ +-- Pathing for Guardian of Life Entry: 33528 +SET @NPC := 137528; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2267.131,`position_y`=25.01511,`position_z`=428.6021 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2267.131,25.01511,428.6021,0,0,0,0,100,0), +(@PATH,2,2267.036,24.98481,428.7653,0,0,0,0,100,0), +(@PATH,3,2266.606,38.24471,428.8724,0,0,0,0,100,0), +(@PATH,4,2266.924,24.55858,428.5795,0,0,0,0,100,0), +(@PATH,5,2267.036,24.98481,428.7653,0,0,0,0,100,0), +(@PATH,6,2266.606,38.24471,428.8724,0,0,0,0,100,0), +(@PATH,7,2267.153,24.9108,428.5908,0,0,0,0,100,0), +(@PATH,8,2267.036,24.98481,428.7653,0,0,0,0,100,0), +(@PATH,9,2266.606,38.24471,428.8724,0,0,0,0,100,0); + +-- Pathing for Guardian of Life Entry: 33528 +SET @NPC := 137529; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2366.774,`position_y`=4.869098,`position_z`=427.116 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2366.774,4.869098,427.116,0,0,0,0,100,0), +(@PATH,2,2362.121,4.529948,427.9323,0,0,0,0,100,0), +(@PATH,3,2348.469,20.28589,429.8685,0,0,0,0,100,0), +(@PATH,4,2364.304,30.57164,430.7769,0,0,0,0,100,0), +(@PATH,5,2361.717,29.00374,430.3431,0,0,0,0,100,0), +(@PATH,6,2353.135,9.205807,428.5914,0,0,0,0,100,0); + +-- Pathing for Guardian of Life Entry: 33528 +SET @NPC := 137530; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2258.508,`position_y`=-45.42564,`position_z`=427.925 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2258.508,-45.42564,427.925,0,0,0,0,100,0), +(@PATH,2,2251.779,-49.15427,426.946,0,0,0,0,100,0), +(@PATH,3,2250.673,-49.80873,426.6561,0,0,0,0,100,0), +(@PATH,4,2252.392,-71.85374,427.5378,0,0,0,0,100,0), +(@PATH,5,2247.761,-65.52759,426.7502,0,0,0,0,100,0), +(@PATH,6,2245.5,-62.23093,426.3374,0,0,0,0,100,0); + +-- Pathing for Guardian of Life Entry: 33528 +SET @NPC := 137531; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2337.467,`position_y`=-207.8645,`position_z`=442.2937 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2337.467,-207.8645,442.2937,0,0,0,0,100,0), +(@PATH,2,2344.242,-198.5094,441.5296,0,0,0,0,100,0), +(@PATH,3,2348.561,-192.5445,440.9542,0,0,0,0,100,0), +(@PATH,4,2324.5,-181.2047,442.9576,0,0,0,0,100,0), +(@PATH,5,2333.28,-177.3987,441.4766,0,0,0,0,100,0), +(@PATH,6,2337.545,-175.9973,441.1203,0,0,0,0,100,0); diff --git a/sql/updates/world/2015_03_22_07_world.sql b/sql/updates/world/2015_03_22_07_world.sql new file mode 100644 index 00000000000..1e5c6607bee --- /dev/null +++ b/sql/updates/world/2015_03_22_07_world.sql @@ -0,0 +1,318 @@ +-- Pathing for Guardian Lasher Entry: 33430 'TDB FORMAT' +SET @NPC := 136608; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2409.214,`position_y`=39.68574,`position_z`=430.8202 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2409.214,39.68574,430.8202,0,0,0,0,100,0), +(@PATH,2,2419.765,55.44238,432.5078,0,0,0,0,100,0), +(@PATH,3,2412.965,68.34785,436.2759,0,0,0,0,100,0), +(@PATH,4,2392.464,56.26165,433.3107,0,0,0,0,100,0); + +-- Pathing for Guardian Lasher Entry: 33430 'TDB FORMAT' +SET @NPC := 136606; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2279.508,`position_y`=-143.8644,`position_z`=435.7896 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2279.508,-143.8644,435.7896,0,0,0,0,100,0), +(@PATH,2,2294.608,-141.4411,434.8279,0,0,0,0,100,0), +(@PATH,3,2297.896,-140.7821,434.6606,0,0,0,0,100,0), +(@PATH,4,2300.045,-107.6998,432.8321,0,0,0,0,100,0), +(@PATH,5,2282.262,-122.0434,432.8238,0,0,0,0,100,0), +(@PATH,6,2262.708,-113.97,431.0626,0,0,0,0,100,0), +(@PATH,7,2246.123,-120.2917,433.473,0,0,0,0,100,0), +(@PATH,8,2252.349,-127.7779,432.1354,0,0,0,0,100,0); + +-- Pathing for Guardian Lasher Entry: 33430 'TDB FORMAT' +SET @NPC := 136604; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2348.184,`position_y`=-33.40479,`position_z`=425.1163 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2348.184,-33.40479,425.1163,0,0,0,0,100,0), +(@PATH,2,2321.229,-1.325779,426.4646,0,0,0,0,100,0), +(@PATH,3,2314.177,14.98683,429.6667,0,0,0,0,100,0), +(@PATH,4,2318.373,3.474962,427.6927,0,0,0,0,100,0), +(@PATH,5,2346.51,-30.4225,424.8373,0,0,0,0,100,0), +(@PATH,6,2325.816,-64.16115,426.2005,0,0,0,0,100,0); + +-- Pathing for Hired Engineer Entry: 33626 'TDB FORMAT' +SET @NPC := 136355; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-714.6555,`position_y`=-17.16721,`position_z`=429.8806 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-714.6555,-17.16721,429.8806,3.124139,2000,0,0,100,0), -- 10:58:06 +(@PATH,2,-718.4268,-23.51997,429.8806,0,0,0,0,100,0), -- 10:58:08 +(@PATH,3,-718.511,-23.33659,430.1306,0,0,0,0,100,0), -- 10:58:10 +(@PATH,4,-722.3708,-23.03671,430.1306,0,0,0,0,100,0), -- 10:58:12 +(@PATH,5,-724.927,-20.31805,430.1306,0,0,0,0,100,0), -- 10:58:13 +(@PATH,6,-725.4897,-15.76975,429.8806,6.178465,3000,0,0,100,0), -- 10:58:16 +(@PATH,7,-724.358,-22.59787,429.8806,0,0,0,0,100,0), -- 10:58:19 +(@PATH,8,-724.1555,-22.44646,430.1306,0,0,0,0,100,0), -- 10:58:20 +(@PATH,9,-719.5723,-23.93241,430.1306,0,0,0,0,100,0), -- 10:58:23 +(@PATH,10,-715.4219,-21.92954,430.1306,0,0,0,0,100,0); -- 10:58:25 + +-- Pathing for Hired Engineer Entry: 33626 'TDB FORMAT' +SET @NPC := 136359; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-821.8198,`position_y`=-33.27892,`position_z`=430.2184 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-821.8198,-33.27892,430.2184,0,0,0,0,100,0), +(@PATH,2,-822.3601,-31.65381,430.2184,0,0,0,0,100,0), +(@PATH,3,-824.5154,-34.64041,429.9684,0,0,0,0,100,0), +(@PATH,4,-824.2672,-34.39585,430.2184,0,0,0,0,100,0), +(@PATH,5,-821.0198,-37.88292,429.9684,0.4537856,2000,0,0,100,0); + +-- Pathing for Hired Engineer Entry: 33626 'TDB FORMAT' +SET @NPC := 136357; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-754.7864,`position_y`=-36.70388,`position_z`=429.9034 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-754.7864,-36.70388,429.9034,0,0,0,0,100,0), +(@PATH,2,-751.721,-35.1428,429.9657,0,0,0,0,100,0), +(@PATH,3,-751.8016,-34.96943,430.1835,0,0,0,0,100,0), +(@PATH,4,-751.6813,-31.36849,429.9659,2.617994,2000,0,0,100,0); + +-- Pathing for Hired Engineer Entry: 33626 'TDB FORMAT' +SET @NPC := 136347; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-806.7797,`position_y`=-61.91017,`position_z`=430.2184 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-806.7797,-61.91017,430.2184,0,0,0,0,100,0), -- 10:58:05 +(@PATH,2,-805.1627,-65.66473,430.1716,0,0,0,0,100,0), -- 10:58:06 +(@PATH,3,-807.4543,-68.63271,429.8748,2.460914,2000,0,0,100,0), -- 10:58:09 +(@PATH,4,-810.992,-72.29839,429.8748,0,0,0,0,100,0), -- 10:58:11 +(@PATH,5,-811.0092,-71.93497,430.1248,0,0,0,0,100,0), -- 10:58:12 +(@PATH,6,-819.4515,-69.41702,429.9216,0,0,0,0,100,0), -- 10:58:16 +(@PATH,7,-821.9469,-64.33131,430.2059,0,0,0,0,100,0), -- 10:58:18 +(@PATH,8,-819.5031,-58.79203,430.2184,0,0,0,0,100,0), -- 10:58:20 +(@PATH,9,-817.4072,-59.57487,429.9684,4.729842,2000,0,0,100,0), -- 10:58:23 +(@PATH,10,-807.0515,-61.87196,429.9684,0,0,0,0,100,0); -- 10:58:25 + +-- Pathing for Hired Engineer Entry: 33626 'TDB FORMAT' +SET @NPC := 136356; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-785.7463,`position_y`=-41.38455,`position_z`=429.9659 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-785.7463,-41.38455,429.9659,0,0,0,0,100,0), -- 10:58:08 +(@PATH,2,-785.3948,-41.14034,430.2159,0,0,0,0,100,0), -- 10:58:09 +(@PATH,3,-782.2135,-41.35977,430.2159,0,0,0,0,100,0), -- 10:58:10 +(@PATH,4,-779.5613,-40.3548,430.2159,0,0,0,0,100,0), -- 10:58:11 +(@PATH,5,-777.8319,-36.41965,430.183,0,0,0,0,100,0), -- 10:58:14 +(@PATH,6,-778.6835,-33.0957,429.9001,3.420845,2000,0,0,100,0), -- 10:58:16 +(@PATH,7,-779.9354,-28.00385,429.9001,0,0,0,0,100,0), -- 10:58:18 +(@PATH,8,-779.8657,-28.03287,430.1501,0,0,0,0,100,0), -- 10:58:20 +(@PATH,9,-784.348,-25.80318,430.1501,0,0,0,0,100,0), -- 10:58:21 +(@PATH,10,-788.9271,-27.93935,430.183,0,0,0,0,100,0), -- 10:58:23 +(@PATH,11,-791.5985,-34.02659,430.1966,0,0,0,0,100,0), -- 10:58:26 +(@PATH,12,-790.8046,-36.75038,430.2113,0,0,0,0,100,0); -- 10:58:27 + +-- Pathing for Hired Engineer Entry: 33626 'TDB FORMAT' +SET @NPC := 136349; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-808.118,`position_y`=-40.2321,`position_z`=429.9684 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-808.118,-40.2321,429.9684,0,0,0,0,100,0), +(@PATH,2,-807.7555,-40.07573,430.2184,0,0,0,0,100,0), +(@PATH,3,-804.9432,-39.92784,430.2184,0,0,0,0,100,0), +(@PATH,4,-807.1721,-39.73579,430.2184,0,0,0,0,100,0), +(@PATH,5,-808.9033,-36.34509,430.2184,0,0,0,0,100,0); + +-- Pathing for Hired Engineer Entry: 33626 'TDB FORMAT' +SET @NPC := 136350; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-712.0216,`position_y`=-106.3855,`position_z`=430.3862 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-712.0216,-106.3855,430.3862,0,0,0,0,100,0), -- 10:58:08 +(@PATH,2,-712.1302,-106.2594,430.5872,0,0,0,0,100,0), -- 10:58:09 +(@PATH,3,-712.4497,-100.7512,430.033,0,0,0,0,100,0), -- 10:58:11 +(@PATH,4,-714.1099,-98.13288,430.1651,0,0,0,0,100,0), -- 10:58:12 +(@PATH,5,-717.9264,-97.92854,430.2126,0,0,0,0,100,0), -- 10:58:14 +(@PATH,6,-720.3586,-98.40739,430.1744,0,0,0,0,100,0), -- 10:58:18 +(@PATH,7,-722.0936,-101.579,430.1653,0,0,0,0,100,0), -- 10:58:20 +(@PATH,8,-722.2216,-104.0047,430.1362,0,0,0,0,100,0), -- 10:58:21 +(@PATH,9,-721.8704,-107.3522,429.9794,0,0,0,0,100,0), -- 10:58:22 +(@PATH,10,-719.009,-109.2184,430.31,0,0,0,0,100,0), -- 10:58:23 +(@PATH,11,-717.5231,-108.9742,430.4017,0,0,0,0,100,0); -- 10:58:25 + +-- Pathing for Hired Engineer Entry: 33626 'TDB FORMAT' +SET @NPC := 136360; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-805.7245,`position_y`=-92.51467,`position_z`=429.9373 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-805.7245,-92.51467,429.9373,0,0,0,0,100,0), +(@PATH,2,-809.9697,-93.78546,430.1968,0,0,0,0,100,0), +(@PATH,3,-813.4847,-92.64854,429.9998,1.518436,3000,0,0,100,0), +(@PATH,4,-821.6218,-88.66959,429.8748,0,0,0,0,100,0), +(@PATH,5,-821.3884,-88.30928,430.1454,0,0,0,0,100,0), +(@PATH,6,-820.6511,-83.99181,430.1248,0,0,0,0,100,0), +(@PATH,7,-819.0802,-80.95631,430.1201,0,0,0,0,100,0), +(@PATH,8,-815.6989,-79.63522,429.9362,0,0,0,0,100,0), +(@PATH,9,-812.4637,-81.22309,429.9998,4.45059,2000,0,0,100,0), +(@PATH,10,-805.8566,-83.38759,429.9998,0,0,0,0,100,0), +(@PATH,11,-805.8384,-83.39809,430.1873,0,0,0,0,100,0), +(@PATH,12,-804.1865,-87.55893,430.1577,0,0,0,0,100,0); + +-- Pathing for Hired Demolitionist Entry: 33627 'TDB FORMAT' +SET @NPC := 136369; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-741.3947,`position_y`=-207.9769,`position_z`=431.7578 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-741.3947,-207.9769,431.7578,0,0,0,0,100,0), +(@PATH,2,-742.5634,-205.1704,431.0431,0,0,0,0,100,0), +(@PATH,3,-746.6194,-203.6891,430.4383,0,0,0,0,100,0), +(@PATH,4,-751.6924,-207.3801,430.4216,0,0,0,0,100,0), +(@PATH,5,-752.3352,-214.3417,431.4221,0,0,0,0,100,0), +(@PATH,6,-751.818,-216.1215,431.7806,0,0,0,0,100,0), +(@PATH,7,-752.1444,-209.4591,430.6995,0,0,0,0,100,0), +(@PATH,8,-752.5813,-208.6543,430.434,0,0,0,0,100,0), +(@PATH,9,-749.45,-205.2882,430.5325,0,0,0,0,100,0), +(@PATH,10,-742.3865,-205.8632,431.1866,0,0,0,0,100,0), +(@PATH,11,-740.8467,-209.625,432.1345,0,0,0,0,100,0), +(@PATH,12,-740.2542,-212.8133,432.6738,3.438299,3000,0,0,100,0); + +-- Pathing for Hired Demolitionist Entry: 33627 'TDB FORMAT' +SET @NPC := 136366; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-712.1467,`position_y`=-168.2411,`position_z`=432.9551 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-712.1467,-168.2411,432.9551,0,0,0,0,100,0), +(@PATH,2,-711.2845,-169.7373,433.5219,0,0,0,0,100,0), +(@PATH,3,-718.3967,-173.3105,431.6536,0,0,0,0,100,0), +(@PATH,4,-722.842,-172.8361,430.3402,0,0,0,0,100,0), +(@PATH,5,-723.5557,-172.3758,430.0638,0,0,0,0,100,0), +(@PATH,6,-724.2864,-166.9745,429.9667,0.7853982,3000,0,0,100,0), +(@PATH,7,-727.4843,-162.5646,429.9667,0,0,0,0,100,0), +(@PATH,8,-727.1448,-162.4384,430.2167,0,0,0,0,100,0), +(@PATH,9,-725.0723,-159.2923,430.2167,0,0,0,0,100,0), +(@PATH,10,-719.7878,-157.1184,430.2519,0,0,0,0,100,0), +(@PATH,11,-715.3311,-160.4503,430.7693,0,0,0,0,100,0), +(@PATH,12,-713.6705,-163.3997,431.3184,0,0,0,0,100,0); + +-- Pathing for Hired Demolitionist Entry: 33627 'TDB FORMAT' +SET @NPC := 136361; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-715.4345,`position_y`=-120.4184,`position_z`=430.8215 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-715.4345,-120.4184,430.8215,0,0,0,0,100,0), +(@PATH,2,-715.2732,-119.9876,430.8068,0,0,0,0,100,0), +(@PATH,3,-713.6184,-118.4633,430.9174,0,0,0,0,100,0), +(@PATH,4,-714.1099,-115.8266,430.8853,0,0,0,0,100,0), +(@PATH,5,-718.0544,-115.391,430.4921,0,0,0,0,100,0), +(@PATH,6,-720.8175,-116.2792,430.0629,0,0,0,0,100,0), +(@PATH,7,-721.2681,-119.6442,430.1362,0,0,0,0,100,0), +(@PATH,8,-721.4601,-123.3716,430.1362,0,0,0,0,100,0), +(@PATH,9,-721.3339,-127.6245,429.9487,0,0,0,0,100,0), +(@PATH,10,-718.5485,-128.1067,430.2194,0,0,0,0,100,0); + +-- Pathing for Hired Demolitionist Entry: 33627 'TDB FORMAT' +SET @NPC := 136365; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-798.1786,`position_y`=-248.1221,`position_z`=432.4507 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-798.1786,-248.1221,432.4507,0,0,0,0,100,0), +(@PATH,2,-798.7401,-245.9213,431.4652,0,0,0,0,100,0), +(@PATH,3,-799.3177,-242.9683,430.5485,0,0,0,0,100,0), +(@PATH,4,-797.5398,-247.3222,432.0694,0,0,0,0,100,0), +(@PATH,5,-796.4919,-249.3278,432.7336,0,0,0,0,100,0), +(@PATH,6,-789.5071,-248.2485,433.1029,0,0,0,0,100,0), +(@PATH,7,-786.5637,-240.1779,432.2992,0,0,0,0,100,0), +(@PATH,8,-789.908,-234.2144,431.4653,0,0,0,0,100,0), +(@PATH,9,-791.3019,-233.3431,430.7617,4.206244,2000,0,0,100,0), +(@PATH,10,-787.354,-241.1295,432.3823,0,0,0,0,100,0), +(@PATH,11,-786.8214,-247.0664,433.4664,0,0,0,0,100,0), +(@PATH,12,-787.0446,-247.7635,433.499,0,0,0,0,100,0); + +-- Pathing for Hired Demolitionist Entry: 33627 'TDB FORMAT' +SET @NPC := 136367; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-767.8429,`position_y`=-217.267,`position_z`=429.9667 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-767.8429,-217.267,429.9667,0,0,0,0,100,0), +(@PATH,2,-767.6378,-217.1616,430.0292,0,0,0,0,100,0), +(@PATH,3,-761.6285,-219.4796,430.4327,0,0,0,0,100,0), +(@PATH,4,-760.9791,-222.4792,430.8569,3.281219,2000,0,0,100,0), +(@PATH,5,-761.7565,-231.0529,432.8887,0,0,0,0,100,0), +(@PATH,6,-761.9493,-231.9112,433.0276,0,0,0,0,100,0), +(@PATH,7,-770.1174,-232.0044,432.3535,0,0,0,0,100,0), +(@PATH,8,-772.8343,-227.3204,431.1874,0,0,0,0,100,0), +(@PATH,9,-772.8062,-223.4772,430.3036,0,0,0,0,100,0), +(@PATH,10,-772.7734,-222.031,429.9667,0,0,0,0,100,0); + +-- Pathing for Hired Demolitionist Entry: 33627 'TDB FORMAT' +SET @NPC := 136368; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-731.2537,`position_y`=-177.8654,`position_z`=430.2253 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-731.2537,-177.8654,430.2253,0,0,0,0,100,0), +(@PATH,2,-727.3505,-179.0715,430.0485,4.39823,3000,0,0,100,0), +(@PATH,3,-734.2864,-179.9329,429.8522,0,0,0,0,100,0), +(@PATH,4,-734.1282,-180.0425,429.9078,0,0,0,0,100,0), +(@PATH,5,-735.3954,-183.6396,429.8522,5.8294,2000,0,0,100,0), +(@PATH,6,-731.4017,-177.9422,429.9667,0,0,0,0,100,0); + +-- Pathing for Weslex Quickwrench Entry: 33629 'TDB FORMAT' +SET @NPC := 136370; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-744.1992,`position_y`=-41.8189,`position_z`=429.9657 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,14374,0,257,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-744.1992,-41.8189,429.9657,1.919862,3000,0,0,100,0), +(@PATH,2,-722.2444,-31.58008,429.8806,0,0,0,0,100,0), +(@PATH,3,-722.0319,-31.24901,430.1359,0,0,0,0,100,0), +(@PATH,4,-715.6211,-29.15961,429.8806,1.884956,2000,0,0,100,0), +(@PATH,5,-743.2397,-42.08398,429.9657,0,0,0,0,100,0); + +-- Earthen Stoneshaper ,Goran Steelbreaker, Ulduar Shield Bunny should not have movement +UPDATE `creature` SET `modelid`=0,`spawndist`=0,`MovementType`=0, `curhealth`=1 WHERE `id` IN (33620,33622,33779); diff --git a/sql/updates/world/2015_03_23_00_world.sql b/sql/updates/world/2015_03_23_00_world.sql new file mode 100644 index 00000000000..32f90e439d6 --- /dev/null +++ b/sql/updates/world/2015_03_23_00_world.sql @@ -0,0 +1,5 @@ +-- +DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN (23214, 13819); +INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `comment`) VALUES +(23214, 31726, 'Summon Charger'), +(13819, 31726, 'Summon Warhorse'); diff --git a/sql/updates/world/2015_03_23_01_world.sql b/sql/updates/world/2015_03_23_01_world.sql new file mode 100644 index 00000000000..d6f8d4591ff --- /dev/null +++ b/sql/updates/world/2015_03_23_01_world.sql @@ -0,0 +1,5 @@ +-- +DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN (28273, -28273); +INSERT INTO `spell_linked_spell` VALUES +(28273, -28274, 0, 'Bloodthistle'), +(-28273, 28274, 0, 'Bloodthistle'); diff --git a/sql/updates/world/2015_03_23_02_world.sql b/sql/updates/world/2015_03_23_02_world.sql new file mode 100644 index 00000000000..3bc255d569e --- /dev/null +++ b/sql/updates/world/2015_03_23_02_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `smart_scripts` SET `action_type`=18, `action_param1`=512, `comment`='Hyldsmeet Warbear - Out of Combat - Set Unit_flag immune to npc (No Repeat)' WHERE `entryorguid`=30174 AND `id`=0; diff --git a/sql/updates/world/2015_03_23_03_world.sql b/sql/updates/world/2015_03_23_03_world.sql new file mode 100644 index 00000000000..bb0a1609876 --- /dev/null +++ b/sql/updates/world/2015_03_23_03_world.sql @@ -0,0 +1,12 @@ +-- +SET @Disco :=190351; +UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry` IN (@Disco); +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Disco AND `source_type`=1; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(@Disco, 1, 0, 0, 64, 0, 100, 0, 0, 0, 0, 0, 85, 50493 , 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Disco - On gossip hello - cast Listening to Music'); + +DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN (-50314, -50493, 50493); +INSERT INTO `spell_linked_spell` VALUES +(-50314, -50493, 0, 'Disco Ball'), +(-50493, -50314, 0, 'Disco Ball(Listening to Music)'), +(50493, 50314, 0, 'Disco Ball(Listening to Music)'); diff --git a/sql/updates/world/2015_03_23_04_world.sql b/sql/updates/world/2015_03_23_04_world.sql new file mode 100644 index 00000000000..1425f517d0a --- /dev/null +++ b/sql/updates/world/2015_03_23_04_world.sql @@ -0,0 +1,15 @@ +-- +SET @Bird1 :=22337; +SET @Bird2 :=22339; +SET @Egg :=185211; + +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (@Bird2); +UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry` IN (@Egg); + +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Egg*100 AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Egg*100+1 AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Egg AND `source_type`=1; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(@Egg, 1, 0, 0, 70, 0, 100, 0, 2, 0, 0, 0, 87, @Egg*100, @Egg*100+1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Cursed egg - On State 2 - Action random action list'), +(@Egg*100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 12, @Bird2, 3, 15000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Cursed egg - Action list - Summon'), +(@Egg*100+1, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 12, @Bird1, 3, 40000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Cursed egg - Action list - Summon'); diff --git a/sql/updates/world/2015_03_23_05_world.sql b/sql/updates/world/2015_03_23_05_world.sql new file mode 100644 index 00000000000..e574ff22bea --- /dev/null +++ b/sql/updates/world/2015_03_23_05_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature` SET `unit_flags`=4104 WHERE `id`=12423; diff --git a/sql/updates/world/2015_03_23_06_world.sql b/sql/updates/world/2015_03_23_06_world.sql new file mode 100644 index 00000000000..e8820a341e2 --- /dev/null +++ b/sql/updates/world/2015_03_23_06_world.sql @@ -0,0 +1,22 @@ +-- +SET @CGUID := 45834; -- 1 free guid set by TC +SET @Triggger:=21321; +DELETE FROM `creature` WHERE `guid`=@CGUID; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@CGUID, 21321, 530, 1, 1, 1316.625854, 6689.878418, -18.672377, 0.160565, 0, 0, 0); + +DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN (36587); +INSERT INTO `spell_linked_spell` VALUES +(36587, 36573, 0, 'Vision Guide'); + +UPDATE `creature_template` SET `AIName`='SmartAI', `flags_extra`= 2 WHERE `entry` IN (@Triggger); + +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Triggger AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@Triggger,0,0,1,10,0,100,0,1,10,5000,5000,15,10525,0,0,0,0,0,7,0,0,0,0,0,0,0,'Triggger - LOS - AREAEXPLOREDOREVENTHAPPENS'), +(@Triggger,0,1,0,61,0,100,0,0,0,0,0,28,36573,0,0,0,0,0,7,0,0,0,0,0,0,0,'Triggger - LOS - remove aura'), +(@Triggger,0,2,0,63,0,100,0,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Triggger - Just created - Set invisible'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=1 AND `SourceEntry`=@Triggger; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`, `ErrorTextId`,`ScriptName`,`Comment`) VALUES +(22,1,@Triggger,0,1,36573,1,0,0,'','event require Aura 36573'); diff --git a/sql/updates/world/2015_03_23_07_world.sql b/sql/updates/world/2015_03_23_07_world.sql new file mode 100644 index 00000000000..ca9bffaf728 --- /dev/null +++ b/sql/updates/world/2015_03_23_07_world.sql @@ -0,0 +1,43 @@ +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE entry IN (21332,21334,20427); + +DELETE FROM `smart_scripts` WHERE `entryorguid` IN(21318) AND `source_type`=0 AND `id`>0; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN(21332,21334,20427) AND `source_type`=0; + +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(21318, 0, 1, 2, 62, 0, 100, 0, 8288, 0, 0, 0, 85, 36620, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Spirit of Ar''tor - On Gossip Option 0 Selected - Invoker Cast Spirit of Ar''tor'), +(21318, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Spirit of Ar''tor - On Gossip Option 0 Selected - Close Gossip'), +(21318, 0, 3, 0, 19, 0, 100, 0, 10540, 0, 0, 0, 85, 36620, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Spirit of Ar''tor - On Quest Accept (10540) - Invoker Cast Spirit of Ar''tor'), +(21332, 0, 0, 0, 38, 0, 100, 1, 3, 3, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 21334, 0, 0, 0, 0, 0, 0, 'Spirit Hunter - On Data Set 3 3 - Set Data 1 1 to Veneratus Spawn Node'), +(21332, 0, 1, 0, 38, 0, 100, 0, 1, 1, 0, 0, 49, 0, 0, 0, 0, 0, 0, 19, 20427, 0, 0, 0, 0, 0, 0, 'Spirit Hunter - On Data Set - Start Attack'), +(21332, 0, 2, 0, 38, 0, 100, 0, 2, 2, 0, 0, 1, 0, 5000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Spirit Hunter - On Data Set - Say Line 0'), +(21332, 0, 3, 0, 52, 0, 100, 0, 0, 21332, 0, 0, 1, 1, 5000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Spirit Hunter - On Text Over Line 0 - Say Line 1'), +(21332, 0, 4, 0, 52, 0, 100, 0, 1, 21332, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Spirit Hunter - On Text Over Line 1 - Despawn'), +(21332, 0, 5, 0, 54, 0, 100, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Spirit Hunter - On Just Summoned - Turn HP Regen off'), +(21334, 0, 0, 0, 1, 0, 100, 0, 0, 0, 2000, 2000, 45, 3, 3, 0, 0, 0, 0, 19, 21332, 40, 0, 0, 0, 0, 0, 'Veneratus Spawn Node - OOC - Set Data to Spirit Hunter'), +(21334, 0, 1, 0, 38, 0, 100, 0, 1, 1, 60000, 60000, 11, 36616, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Veneratus Spawn Node - On Data Set 1 1 - Cast Veneratus Spawn'), +(20427, 0, 0, 1, 1, 0, 100, 1, 100, 100, 0, 0, 11, 24240, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Veneratus the Many <Servant of Illidan> - On Spawn - Cast Spawn - Red Lightning'), +(20427, 0, 1, 2, 61, 0, 100, 1, 0, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Veneratus the Many <Servant of Illidan> - On Spawn - Set Hostile'), +(20427, 0, 2, 0, 61, 0, 100, 1, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 19, 21334, 0, 0, 0, 0, 0, 0, 'Veneratus the Many <Servant of Illidan> - On Spawn - Despawn - Veneratus Spawn Node'), +(20427, 0, 3, 0, 6, 0, 100, 0, 0, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 19, 21332, 0, 0, 0, 0, 0, 0, 'Veneratus the Many <Servant of Illidan> - On Death - Set Data on Spirit Hunter'), +(20427, 0, 4, 0, 1, 0, 100, 1, 5000, 5000, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 21332, 0, 0, 0, 0, 0, 0, 'Veneratus the Many <Servant of Illidan> - OOC - Set Data on Spirit Hunter (No repeat)'); + +DELETE FROM `creature_text` WHERE `entry`=21332; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextID`, `comment`) VALUES +(21332, 0, 0, 'It is dying! The second part of the Cipher of Damnation is ours. I...', 12, 0, 100, 1, 0, 0, 19040, 'Spirit Hunter to Veneratus the Many'), +(21332, 1, 0, 'I am fading... Return to Ar''tor... Ret... rn... to...', 12, 0, 100, 1, 0, 0, 19041, 'Spirit Hunter to Veneratus the Many'); + +UPDATE `spell_dbc` SET `Effect2`=28,`EffectMiscValueB2`=64 WHERE `Id`=36616; + +DELETE FROM `gossip_menu_option` WHERE `menu_id`=8288; +INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `OptionBroadcastTextID`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`, `BoxBroadcastTextID`) VALUES +(8288, 0, 0, 'I require the aid of another spirit hunter, Ar''tor.', 19017, 1, 1, 0, 0, 0, 0, NULL, 0); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=8288; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15, 8288, 0, 0, 0, 9, 0, 10540, 0, 0, 0, 0, 0, '', 'Gossip Option requires quest 10540 taken'), +(15, 8288, 0, 0, 0, 1, 0, 36620, 2, 0, 1, 0, 0, '', 'Gossip Option requires player does not have aura 36620'), +(15, 8288, 0, 0, 0, 29, 1, 21332, 40, 0, 1, 0, 0, '', 'Gossip Option requires no npc 21332 present'); + +DELETE FROM `creature_template_addon` WHERE `entry`=21332; +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES +(21332, 0, 0, 0, 0, 0, '36613'); diff --git a/sql/updates/world/2015_03_23_08_world.sql b/sql/updates/world/2015_03_23_08_world.sql new file mode 100644 index 00000000000..c7837c47d9d --- /dev/null +++ b/sql/updates/world/2015_03_23_08_world.sql @@ -0,0 +1,37 @@ +DELETE FROM `creature_text` WHERE `entry`=21411; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextID`, `comment`) VALUES +(21411, 0, 0, '%s cracks the rotten egg open and - to the horror and dismay of all around him - begins to drink from its putrid core.', 16, 0, 100, 92, 0, 0, 19098, 'Tobias the Filth Gorger to Player'), +(21411, 1, 0, 'That was life-changing... Excuse me for one minute.', 12, 0, 100, 273, 0, 0, 19099, 'Tobias the Filth Gorger to Player'), +(21411, 2, 0, '%s lets loose the most foul belch ever heard or smelled.', 16, 0, 100, 15, 0, 10593, 19100, 'Tobias the Filth Gorger to Player'), +(21411, 3, 0, 'Ok then, back to business.', 12, 0, 100, 1, 0, 0, 19101, 'Tobias the Filth Gorger to Player'); + +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` =21411; + +DELETE FROM `smart_scripts` WHERE `entryorguid` =21411 AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid` =2141100 AND `source_type`=9; + +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(21411, 0, 0, 1, 19, 0, 100, 0, 10550, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - On Quest 10550 taken - Store Targetlist'), +(21411, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 80, 2141100, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - On Quest 10550 taken - Run script'), +(21411, 0, 2, 0, 34, 0, 100, 0, 0, 1, 0, 0, 54, 10000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - On Reached WP1 - Pause WP'), +(21411, 0, 3, 0, 34, 0, 100, 0, 0, 2, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0.3141593, 'Tobias the Filth Gorger - On Reached WP2 - Set Orientation'), +(2141100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - Script - Set NPC Flags'), +(2141100, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 71, 0, 0, 20468, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - Script - Equip Item'), +(2141100, 9, 2, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - Script - Say Line 0'), +(2141100, 9, 3, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 5, 92, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - Script - Play Emote OneShotEatNoSheathe'), +(2141100, 9, 4, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 66, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - Script - Set Orientation'), +(2141100, 9, 5, 0, 0, 0, 100, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - Script - UnEquip Item'), +(2141100, 9, 6, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - Script - Say Line 1'), +(2141100, 9, 7, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 53, 0, 21411, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - Script - Start WP'), +(2141100, 9, 8, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - Script - Say Line 2'), +(2141100, 9, 9, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 11, 36823, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - Script - Cast Overwhelming Odor'), +(2141100, 9, 10, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 5.544791, 'Tobias the Filth Gorger - Script - Set Orientation'), +(2141100, 9, 11, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 11, 36824, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - Script - Cast Overwhelming Odor'), +(2141100, 9, 12, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 1, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - Script - Say Line 2'), +(2141100, 9, 13, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tobias the Filth Gorger - Script - Set NPC Flags'); + +DELETE FROM `waypoints` WHERE `entry` =21411; + +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(21411, 1,-2080.307, 5296.746, -37.32356, 'Tobias the Filth Gorger'), +(21411, 2,-2083.831, 5299.953, -37.32356, 'Tobias the Filth Gorger'); diff --git a/sql/updates/world/2015_03_23_09_world.sql b/sql/updates/world/2015_03_23_09_world.sql new file mode 100644 index 00000000000..d90f7fc9249 --- /dev/null +++ b/sql/updates/world/2015_03_23_09_world.sql @@ -0,0 +1,14 @@ +DELETE FROM `creature_text` WHERE `entry`=18417; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextID`, `comment`) VALUES +(18417, 0, 0, 'The information you seek... I cannot give you that freely. You will have to prove that your enemies are the same as mine.', 12, 0, 100, 25, 0, 0, 19890, 'Altruis the Sufferer to Player'), +(18417, 1, 0, 'This book would give me unlimited power over my enemies... I would become... unstoppable!', 12, 0, 100, 1, 0, 0, 19614, 'Altruis the Sufferer to Player'), +(18417, 2, 0, 'No... you must take this from me, $n! I feel its dark power swaying my will already! Use it to destroy Varedis.', 12, 0, 100, 274, 0, 0, 19615, 'Altruis the Sufferer to Player'); + +DELETE FROM `smart_scripts` WHERE `entryorguid` =18417 AND `source_type`=0 AND `id`>2; + +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(18417, 0, 3, 0, 20, 0, 100, 0, 10640, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Altruis the Sufferer - On Quest reward 10640 - Say Line 0'), +(18417, 0, 4, 0, 20, 0, 100, 0, 10689, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Altruis the Sufferer - On Quest reward 10689 - Say Line 0'), +(18417, 0, 5, 0, 20, 0, 100, 0, 10649, 0, 0, 0, 1, 1, 4000, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Altruis the Sufferer - On Quest reward 10649 - Say Line 1'), +(18417, 0, 6, 0, 52, 0, 100, 0, 1, 18417, 0, 0, 1, 2, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Altruis the Sufferer - On Text Over Line 1 - Say Line 2'); + diff --git a/sql/updates/world/2015_03_23_10_world.sql b/sql/updates/world/2015_03_23_10_world.sql new file mode 100644 index 00000000000..d83e5c212a0 --- /dev/null +++ b/sql/updates/world/2015_03_23_10_world.sql @@ -0,0 +1,11 @@ +-- +UPDATE `smart_scripts` SET `entryorguid`= -69714 WHERE `entryorguid`= -69712; +UPDATE `smart_scripts` SET `entryorguid`= -69715 WHERE `entryorguid`= -69711; +UPDATE `smart_scripts` SET `entryorguid`= -69716 WHERE `entryorguid`= -69710; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (-69712, -69711, -69710); + +DELETE FROM `creature_addon` WHERE `guid` IN (69713); +INSERT INTO `creature_addon` (`guid`,`bytes1`,`bytes2`, `emote`, `auras`) VALUES +(69713,0,4097,0,"37497"); + +UPDATE `creature_template_addon` SET `auras`= "37467" WHERE `entry`=21292; diff --git a/sql/updates/world/2015_03_23_11_world.sql b/sql/updates/world/2015_03_23_11_world.sql new file mode 100644 index 00000000000..2d3b346d18e --- /dev/null +++ b/sql/updates/world/2015_03_23_11_world.sql @@ -0,0 +1,83 @@ +UPDATE `creature_template` SET `gossip_menu_id`=8372 WHERE `entry`=21700; +UPDATE `creature_template` SET `unit_flags`=768 WHERE `entry`=21768; +UPDATE `creature_template` SET `unit_flags`=33536 WHERE `entry`=21776; + +DELETE FROM `gossip_menu` WHERE `entry`=8372; +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES +(8372, 10447); -- 21700 + +DELETE FROM `creature_text` WHERE `entry`IN(21700,21768,21699); +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextID`, `comment`) VALUES +(21700, 0, 0, 'Have no fear, $r. Just play along.', 15, 0, 100, 0, 0, 0, 19402, 'Akama to Player'), +(21700, 1, 0, 'A mere nuisance, I assure you! Tell the Master his prisoner will not escape while Akama and his Deathsworn watch over her.', 14, 0, 100, 0, 0, 0, 19403, 'Akama to Player'), +(21700, 2, 0, 'Forgive my harsh methods, but the Betrayer cannot learn of the truth. My secret must be kept at all costs!', 12, 0, 100, 0, 0, 0, 19405, 'Akama to Player'), +(21700, 3, 0, 'In due time, Maiev. I''ve spent years preparing to make my move - I can''t afford to put my plans in peril by tipping my hand too soon.', 12, 0, 100, 0, 0, 0, 19408, 'Akama to Player'), +(21700, 4, 0, 'The Heart of Fury... I witnessed its power long ago, when Velen wielded it. I feel the same power coursing through it right now!', 12, 0, 100, 0, 0, 0, 19858, 'Akama to Player'), +(21700, 5, 0, 'With this crystal''s powers, my Deathsworn and I... we''d be unstoppable! We could destroy Illidan! We could... replace him as lords of Outland!', 12, 0, 100, 0, 0, 0, 19859, 'Akama to Player'), +(21700, 6, 0, 'But that is not part of the vision I was granted... that is not... how my people will be freed.', 12, 0, 100, 0, 0, 0, 19860, 'Akama to Player'), +(21700, 7, 0, 'Please, $n. You must take the Heart of Fury somewhere safe... you must take it to A''dal!', 12, 0, 100, 0, 0, 0, 19870, 'Akama to Player'), +(21699, 0, 0, 'Release me immediately or face my wrath!', 12, 0, 100, 15, 0, 0, 19395, 'Maiev Shadowsong'), +(21699, 1, 0, 'If we truly desire the same thing, Akama, then release me! If Illidan is to die, it shall be by my hand!', 12, 0, 100, 22, 0, 0, 0, 'Maiev Shadowsong to Player'), +(21699, 2, 0, 'Curse you, Akama! I am not a pawn in your game... my will is my own. When I unleash my wrath upon Illidan it will have nothing to do with your foolish scheme!', 12, 0, 100, 0, 0, 0, 19409, 'Maiev Shadowsong to Player'), +(21768, 0, 0, 'Mortals, here? What is the meaning of this, pathetic Broken!', 14, 0, 100, 0, 0, 0, 19401, 'Vagath to Player'), +(21768, 1, 0, 'You''d do well not to toy with me, Akama. Illidan has given me specific orders to keep a close watch on the Warden. If I find out you''re hiding anything from me, I will crush you with my own hands!', 12, 0, 100, 0, 0, 0, 19404, 'Vagath to Player'); + +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN(21700,21768,21776,21669); + +DELETE FROM `smart_scripts` WHERE `entryorguid` IN(21700,21768,21776,21669) AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid` in(2170000,2170001) AND `source_type`=9; + +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(21768, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 53, 0, 21768, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Vagath - On Just Summoned - Start WP'), +(21768, 0, 1, 0, 40, 0, 100, 0, 2, 21768, 0, 0, 54, 15000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Vagath - On Reached WP2 - Pause WP'), +(21768, 0, 2, 3, 40, 0, 100, 0, 4, 21768, 0, 0, 41, 0, 0, 0, 0, 0, 0, 9, 21776, 0, 100, 0, 0, 0, 0, 'Vagath - On Reached WP4 - Despawn Illidari Temptress'), +(21768, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Vagath - On Reached WP4 - Despawn'), +(21776, 0, 0, 0, 1, 0, 100, 0, 0, 0, 1000, 1000, 29, 0, 0, 0, 0, 0, 0, 19, 21768, 0, 0, 0, 0, 0, 0, 'Illidari Temptress - On Just Summoned - Follow Vagath'), +(21669, 0, 0, 0, 1, 0, 100, 0, 0, 300000, 300000, 900000, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Maiev Shadowsong - OOC - Say Line 0'), +(21700, 0, 0, 1, 20, 0, 100, 0, 10628, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Akama - On Quest 10628 rewarded - Store Targetlist'), +(21700, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 80, 2170000, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - On Quest 10628 rewarded - Run Script'), +(21700, 0, 2, 3, 20, 0, 100, 0, 10707, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Akama - On Quest 10707 rewarded - Store Targetlist'), +(21700, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 80, 2170001, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - On Quest 10707 rewarded - Run Script'), +(2170000, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script - Set NPC Flags'), +(2170000, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script - Summon Group'), +(2170000, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, 21768, 0, 0, 0, 0, 0, 0, 'Akama - Script - Say Line 0 on Vagath'), -- 15:52:01.922 +(2170000, 9, 3, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 2.530727, 'Akama - Script - Set Orientation'), -- 15:52:02.032 +(2170000, 9, 4, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Akama - Script - Say Line 0'), -- 15:52:07.141 +(2170000, 9, 5, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 11, 37448, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Akama - Script - Cast Chain Lightning'), -- 15:52:13.110 +(2170000, 9, 6, 0, 0, 0, 100, 0, 50, 50, 0, 0, 85, 37493, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Akama - Script - InVoker Cast Feign Death'), -- 15:52:13.125 +(2170000, 9, 7, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Akama - Script - Say Line 1'), -- 15:52:13.188 +(2170000, 9, 8, 0, 0, 0, 100, 0, 8000, 8000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 19, 21768, 0, 0, 0, 0, 0, 0, 'Akama - Script - Say Line 1 on Vagath'), -- 15:52:21.219 +(2170000, 9, 9, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Akama - Script - Say Line 2'), -- 15:52:38.500 +(2170000, 9, 10, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 11, 37449, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Akama - Script - Cast Resurrect'), -- 15:52:40.813 +(2170000, 9, 11, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 28, 37493, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Akama - Script - Remove Aura Feign Death'), -- 15:52:43.828 +(2170000, 9, 12, 0, 0, 0, 100, 0, 0, 0, 0, 0, 19, 1, 1, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Akama - Script - Set Unit Flags 2 on Player'), -- 15:52:13.125 +(2170000, 9, 13, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script - Set Npc Flags'), +(2170000, 9, 14, 0, 0, 0, 100, 0, 17000, 17000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 19, 21699, 0, 0, 0, 0, 0, 0, 'Akama - Script - Say Line 1 on Maiev Shadowsong '), -- 15:52:53.000 +(2170000, 9, 15, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 3, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Akama - Script - Say Line 3'), -- 15:52:59.016 +(2170000, 9, 16, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 19, 21699, 0, 0, 0, 0, 0, 0, 'Akama - Script - Say Line 2 on Maiev Shadowsong '), -- 15:53:05.063 +(2170001, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script 2 - Set NPC Flags'), +(2170001, 9, 1, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 66, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Akama - Script 2 - Set Orientation'), +(2170001, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Akama - Script 2 - Say Line 4'), -- 15:23:44.859 +(2170001, 9, 3, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 5, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Akama - Script 2 - Say Line 5'), -- 15:23:50.906 +(2170001, 9, 4, 0, 0, 0, 100, 0, 9000, 9000, 0, 0, 1, 6, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Akama - Script 2 - Say Line 6'), -- 15:23:59.359 +(2170001, 9, 5, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 81, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script 2 - Set NPC Flags'), -- 15:24:05.265 +(2170001, 9, 6, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 7, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Akama - Script 2 - Say Line 6'); -- 15:24:05.422 + +DELETE FROM `creature_summon_groups` WHERE `summonerId`=21700; + +INSERT INTO `creature_summon_groups` (`summonerId`, `summonerType`, `groupId`, `entry`, `position_x`, `position_y`, `position_z`, `orientation`, `summonType`, `summonTime`) VALUES +(21700, 0, 0, 21768, -3726.069,1040.505, 56.03978, 4.852015, 1, 60000), +(21700, 0, 0, 21776, -3730.32, 1041.369, 56.03996, 4.72222, 1, 60000), +(21700, 0, 0, 21776, -3722.402, 1041.253, 56.0398, 4.72222, 1, 60000); + +DELETE FROM `waypoints` WHERE `entry` =21768; + +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(21768, 1,-3724.426, 1030.954, 55.95728, 'Vagath'), +(21768, 2,-3721.095, 1030.279, 55.95773, 'Vagath'), +(21768, 3,-3725.885, 1035.806, 55.95677, 'Vagath'), +(21768, 4,-3726.25, 1040.238, 55.95593, 'Vagath'); + +DELETE FROM `spell_linked_spell` WHERE `spell_trigger`=37493; +INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comment`) VALUES +(37493, 31261, 2, 'Feign Death'); diff --git a/sql/updates/world/2015_03_23_12_world.sql b/sql/updates/world/2015_03_23_12_world.sql new file mode 100644 index 00000000000..2471e9bdcf1 --- /dev/null +++ b/sql/updates/world/2015_03_23_12_world.sql @@ -0,0 +1,20 @@ +-- +UPDATE `smart_scripts` SET `action_param2`=6, `action_param3`=60000 WHERE `entryorguid`=23310 AND `source_type`=0 AND `id`=2 AND `link`=3; +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry`=23310; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22, 3, 23310, 0, 0, 29, 1, 25003, 200, 0, 1, 0, 0, '', 'Only run SAI if no Emissary of Hate nearby'); + +-- Irespeaker SAI +SET @ENTRY := 24999; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,1500,3000,10000,15000,11,35913,0,0,0,0,0,2,0,0,0,0,0,0,0,"Irespeaker - In Combat - Cast 'Fel Fireball'"), +(@ENTRY,0,1,0,0,0,100,0,13000,16000,20000,35000,11,18267,0,0,0,0,0,2,0,0,0,0,0,0,0,"Irespeaker - In Combat - Cast 'Curse of Weakness'"), +(@ENTRY,0,2,0,6,0,100,0,5000,5000,10000,10000,45,1,1,0,0,0,0,10,79450,23310,0,0,0,0,0,"Irespeaker - On Just Died - Set Data 1 1"), +(@ENTRY,0,3,0,25,0,100,0,0,0,0,0,11,45023,0,0,0,0,0,19,25953,13,0,0,0,0,0,"Irespeaker - On Reset - Cast 'Fel Consumption'"); + +DELETE FROM `smart_scripts` WHERE `entryorguid`=25002 AND `source_type`=0 AND `id`=0 AND `link`=0; +UPDATE `smart_scripts` SET `id`=0 WHERE `entryorguid`=25002 AND `source_type`=0 AND `id`=1 AND `link`=0; +UPDATE `smart_scripts` SET `id`=1 WHERE `entryorguid`=25002 AND `source_type`=0 AND `id`=2 AND `link`=0; +UPDATE `smart_scripts` SET `id`=2 WHERE `entryorguid`=25002 AND `source_type`=0 AND `id`=3 AND `link`=0; diff --git a/sql/updates/world/2015_03_23_13_world.sql b/sql/updates/world/2015_03_23_13_world.sql new file mode 100644 index 00000000000..7e42213583f --- /dev/null +++ b/sql/updates/world/2015_03_23_13_world.sql @@ -0,0 +1,93 @@ +-- Add conditions to prevent Anti-Air Rocket friendly fire +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=62363; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition` ,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(13,1,62363,0,1,31,0,3,33236,0,0,0,'','Anti-Air Rocket can hit Steelforged Defender'), +(13,2,62363,0,1,31,0,3,33236,0,0,0,'','Anti-Air Rocket can hit Steelforged Defender'), +(13,1,62363,0,2,31,0,3,34234,0,0,0,'','Anti-Air Rocket can hit Runeforged Sentry'), +(13,2,62363,0,2,31,0,3,34234,0,0,0,'','Anti-Air Rocket can hit Runeforged Sentry'), +(13,1,62363,0,3,31,0,3,33237,0,0,0,'','Anti-Air Rocket can hit Ulduar Colossus'), +(13,2,62363,0,3,31,0,3,33237,0,0,0,'','Anti-Air Rocket can hit Ulduar Colossus'), +(13,1,62363,0,4,31,0,3,34164,0,0,0,'','Anti-Air Rocket can hit Mechagnome Battletank'), +(13,2,62363,0,4,31,0,3,34164,0,0,0,'','Anti-Air Rocket can hit Mechagnome Battletank'), +(13,1,62363,0,5,31,0,3,33264,0,0,0,'','Anti-Air Rocket can hit Ironwork Canon'), +(13,2,62363,0,5,31,0,3,33264,0,0,0,'','Anti-Air Rocket can hit Ironwork Canon'), +(13,1,62363,0,6,31,0,3,33214,0,0,0,'','Anti-Air Rocket can hit Mechanolift 304-A'), +(13,2,62363,0,6,31,0,3,33214,0,0,0,'','Anti-Air Rocket can hit Mechanolift 304-A'), +(13,1,62363,0,7,31,0,3,33113,0,0,0,'','Anti-Air Rocket can hit Flame Leviathan'), +(13,2,62363,0,7,31,0,3,33113,0,0,0,'','Anti-Air Rocket can hit Flame Leviathan'), +(13,1,62363,0,8,31,0,3,34161,0,0,0,'','Anti-Air Rocket can hit Mechanostriker 54-A'), +(13,2,62363,0,8,31,0,3,34161,0,0,0,'','Anti-Air Rocket can hit Mechanostriker 54-A'), +(13,1,62363,0,9,31,0,3,34275,0,0,0,'','Anti-Air Rocket can hit Ward of Life'), +(13,2,62363,0,9,31,0,3,34275,0,0,0,'','Anti-Air Rocket can hit Ward of Life'), +(13,1,62363,0,10,31,0,3,33387,0,0,0,'','Anti-Air Rocket can hit Writhing Lasher'), +(13,2,62363,0,10,31,0,3,33387,0,0,0,'','Anti-Air Rocket can hit Writhing Lasher'); +-- Add conditions to prevent Hurl Boulder friendly fire // Flames are supposed to do Friendly Damage, since they break Ice in HM +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=62307; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition` ,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(13,1,62307,0,1,31,0,3,33236,0,0,0,'','Hurl Boulder can hit Steelforged Defender'), +(13,1,62307,0,2,31,0,3,34234,0,0,0,'','Hurl Boulder can hit Runeforged Sentry'), +(13,1,62307,0,3,31,0,3,33237,0,0,0,'','Hurl Boulder can hit Ulduar Colossus'), +(13,1,62307,0,4,31,0,3,34164,0,0,0,'','Hurl Boulder can hit Mechagnome Battletank'), +(13,1,62307,0,5,31,0,3,33264,0,0,0,'','Hurl Boulder can hit Ironwork Canon'), +(13,1,62307,0,6,31,0,3,33214,0,0,0,'','Hurl Boulder can hit Mechanolift 304-A'), +(13,1,62307,0,7,31,0,3,33113,0,0,0,'','Hurl Boulder can hit Flame Leviathan'), +(13,1,62307,0,8,31,0,3,33090,0,0,0,'','Hurl Boulder can hit Pool of Tar'), +(13,1,62307,0,9,31,0,3,34161,0,0,0,'','Hurl Boulder can hit Mechanostriker 54-A'), +(13,1,62307,0,10,31,0,3,34275,0,0,0,'','Hurl Boulder can hit Ward of Life'), +(13,1,62307,0,11,31,0,3,33387,0,0,0,'','Hurl Boulder can hit Writhing Lasher'); +-- Add conditions to prevent Mortar friendly fire // Flames are supposed to do Friendly Damage, since they break Ice in HM +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=62635; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition` ,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(13,1,62635,0,1,31,0,3,33236,0,0,0,'','Mortar can hit Steelforged Defender'), +(13,1,62635,0,2,31,0,3,34234,0,0,0,'','Mortar can hit Runeforged Sentry'), +(13,1,62635,0,3,31,0,3,33237,0,0,0,'','Mortar can hit Ulduar Colossus'), +(13,1,62635,0,4,31,0,3,34164,0,0,0,'','Mortar can hit Mechagnome Battletank'), +(13,1,62635,0,5,31,0,3,33264,0,0,0,'','Mortar can hit Ironwork Canon'), +(13,1,62635,0,6,31,0,3,33214,0,0,0,'','Mortar can hit Mechanolift 304-A'), +(13,1,62635,0,7,31,0,3,33113,0,0,0,'','Mortar can hit Flame Leviathan'), +(13,1,62635,0,8,31,0,3,33090,0,0,0,'','Mortar can hit Pool of Tar'), +(13,1,62635,0,9,31,0,3,34161,0,0,0,'','Mortar can hit Mechanostriker 54-A'), +(13,1,62635,0,10,31,0,3,34275,0,0,0,'','Mortar can hit Ward of Life'), +(13,1,62635,0,11,31,0,3,33387,0,0,0,'','Mortar can hit Writhing Lasher'); +-- Add conditions to prevent Fire Cannon friendly fire // Flames are supposed to do Friendly Damage, since they break Ice in HM +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=62357; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition` ,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(13,1,62357,0,1,31,0,3,33236,0,0,0,'','Fire Cannon can hit Steelforged Defender'), +(13,1,62357,0,2,31,0,3,34234,0,0,0,'','Fire Cannon can hit Runeforged Sentry'), +(13,1,62357,0,3,31,0,3,33237,0,0,0,'','Fire Cannon can hit Ulduar Colossus'), +(13,1,62357,0,4,31,0,3,34164,0,0,0,'','Fire Cannon can hit Mechagnome Battletank'), +(13,1,62357,0,5,31,0,3,33264,0,0,0,'','Fire Cannon can hit Ironwork Canon'), +(13,1,62357,0,6,31,0,3,33214,0,0,0,'','Fire Cannon can hit Mechanolift 304-A'), +(13,1,62357,0,7,31,0,3,33113,0,0,0,'','Fire Cannon can hit Flame Leviathan'), +(13,1,62357,0,8,31,0,3,33090,0,0,0,'','Fire Cannon can hit Pool of Tar'), +(13,1,62357,0,9,31,0,3,34161,0,0,0,'','Fire Cannon can hit Mechanostriker 54-A'), +(13,1,62357,0,10,31,0,3,34275,0,0,0,'','Fire Cannon can hit Ward of Life'), +(13,1,62357,0,11,31,0,3,33387,0,0,0,'','Fire Cannon can hit Writhing Lasher'); +-- Add conditions to prevent Burning Tar friendly fire // Flames are supposed to do Friendly Damage, since they break Ice in HM +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=62290; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition` ,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(13,1,62290,0,1,31,0,3,33236,0,0,0,'','Burning Tar can hit Steelforged Defender'), +(13,1,62290,0,2,31,0,3,34234,0,0,0,'','Burning Tar can hit Runeforged Sentry'), +(13,1,62290,0,3,31,0,3,33237,0,0,0,'','Burning Tar can hit Ulduar Colossus'), +(13,1,62290,0,4,31,0,3,34164,0,0,0,'','Burning Tar can hit Mechagnome Battletank'), +(13,1,62290,0,5,31,0,3,33264,0,0,0,'','Burning Tar can hit Ironwork Canon'), +(13,1,62290,0,6,31,0,3,33214,0,0,0,'','Burning Tar can hit Mechanolift 304-A'), +(13,1,62290,0,7,31,0,3,33113,0,0,0,'','Burning Tar can hit Flame Leviathan'), +(13,1,62290,0,8,31,0,3,33090,0,0,0,'','Burning Tar can hit Pool of Tar'), +(13,1,62290,0,9,31,0,3,34161,0,0,0,'','Burning Tar can hit Mechanostriker 54-A'), +(13,1,62290,0,10,31,0,3,34275,0,0,0,'','Burning Tar can hit Ward of Life'), +(13,1,62290,0,11,31,0,3,33387,0,0,0,'','Burning Tar can hit Writhing Lasher'); +-- Add conditions to prevent Blue Pyrite friendly fire +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=62489; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition` ,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(13,1,62489,0,1,31,0,3,33236,0,0,0,'','Blue Pyrite can hit Steelforged Defender'), +(13,1,62489,0,2,31,0,3,34234,0,0,0,'','Blue Pyrite can hit Runeforged Sentry'), +(13,1,62489,0,3,31,0,3,33237,0,0,0,'','Blue Pyrite can hit Ulduar Colossus'), +(13,1,62489,0,4,31,0,3,34164,0,0,0,'','Blue Pyrite can hit Mechagnome Battletank'), +(13,1,62489,0,5,31,0,3,33264,0,0,0,'','Blue Pyrite can hit Ironwork Canon'), +(13,1,62489,0,6,31,0,3,33214,0,0,0,'','Blue Pyrite can hit Mechanolift 304-A'), +(13,1,62489,0,7,31,0,3,33113,0,0,0,'','Blue Pyrite can hit Flame Leviathan'), +(13,1,62489,0,8,31,0,3,33090,0,0,0,'','Blue Pyrite can hit Pool of Tar'), +(13,1,62489,0,9,31,0,3,34161,0,0,0,'','Blue Pyrite can hit Mechanostriker 54-A'), +(13,1,62489,0,10,31,0,3,34275,0,0,0,'','Blue Pyrite can hit Ward of Life'), +(13,1,62489,0,11,31,0,3,33387,0,0,0,'','Blue Pyrite can hit Writhing Lasher'); diff --git a/sql/updates/world/2015_03_24_00_world.sql b/sql/updates/world/2015_03_24_00_world.sql new file mode 100644 index 00000000000..752272710b4 --- /dev/null +++ b/sql/updates/world/2015_03_24_00_world.sql @@ -0,0 +1,2 @@ +DELETE FROM `smart_scripts` WHERE `entryorguid`=21685 AND `source_type`=0 AND `id`=16 AND `link`=0; +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=21685 AND `source_type`=0 AND `id`=15 AND `link`=16; diff --git a/sql/updates/world/2015_03_24_01_world.sql b/sql/updates/world/2015_03_24_01_world.sql new file mode 100644 index 00000000000..31034d87c4a --- /dev/null +++ b/sql/updates/world/2015_03_24_01_world.sql @@ -0,0 +1,10 @@ + +DELETE FROM `gameobject` WHERE `guid` IN (69717, 69718, 69719, 6220,6221,6222) AND `id`=185215; +DELETE FROM `gameobject` WHERE `guid` IN (69717, 69718, 69719) AND `id` IN(2040,1732,1733); +INSERT INTO `gameobject` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`animprogress`,`state`) VALUES +(6220, 185215, 530, 1, 1, 4697.5, 3298.68, 178.892, 2.02823, 0, 0, 0.849013, 0.528372, 120, 0, 1), +(6221, 185215, 530, 1, 1, 4734.71, 3193.67, 161.48, 0.386745, 0, 0, 0.19217, 0.981362, 120, 0, 1), +(6222, 185215, 530, 1, 1, 4673.28, 3126.67, 166.725, 5.42979, 0, 0, 0.413867, -0.910337, 120, 0, 1), +(69717, 2040, 0, 1, 1, -1246, -2071, 50.241, 2.284, 0, 0, 0, 0, 900, 255, 1), +(69718, 1732, 0, 1, 1, -1246, -2071, 50.241, 2.284, 0, 0, 0, 0, 900, 255, 1), +(69719, 1733, 0, 1, 1, -1246, -2071, 50.241, 2.284, 0, 0, 0, 0, 900, 255, 1); diff --git a/sql/updates/world/2015_03_24_02_world.sql b/sql/updates/world/2015_03_24_02_world.sql new file mode 100644 index 00000000000..b9a49dcc9ba --- /dev/null +++ b/sql/updates/world/2015_03_24_02_world.sql @@ -0,0 +1,6 @@ +UPDATE `creature_template` SET `AIName`='' WHERE `entry`=21669; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=21699; +DELETE FROM `smart_scripts` WHERE `entryorguid` In(21669,21699) and `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(21669, 0, 0, 0, 1, 0, 100, 0, 0, 300000, 300000, 900000, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Maiev Shadowsong - OOC - Say Line 0'); +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 and `SourceEntry`=35997; diff --git a/sql/updates/world/2015_03_24_03_world.sql b/sql/updates/world/2015_03_24_03_world.sql new file mode 100644 index 00000000000..3012bb6b82a --- /dev/null +++ b/sql/updates/world/2015_03_24_03_world.sql @@ -0,0 +1,3 @@ +-- +UPDATE `conditions` SET `SourceGroup`=3 WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry` IN (63292,63294, 63295); +UPDATE `conditions` SET `ConditionTypeOrReference`=39 WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=3 AND `SourceEntry`=202443 AND `SourceId`=1 AND `ElseGroup`=0 AND `ConditionTypeOrReference`=40 AND `ConditionTarget`=1 AND `ConditionValue1`=4576 AND `ConditionValue2`=0 AND `ConditionValue3`=0; diff --git a/sql/updates/world/2015_03_24_04_world.sql b/sql/updates/world/2015_03_24_04_world.sql new file mode 100644 index 00000000000..74488cd00bd --- /dev/null +++ b/sql/updates/world/2015_03_24_04_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `smart_scripts` SET `entryorguid`=21699 WHERE `entryorguid`=21669 AND `source_type`=0 AND `id`=0 AND `link`=0; diff --git a/sql/updates/world/2015_03_24_05_world.sql b/sql/updates/world/2015_03_24_05_world.sql new file mode 100644 index 00000000000..c9faf951751 --- /dev/null +++ b/sql/updates/world/2015_03_24_05_world.sql @@ -0,0 +1,16 @@ +-- Remove Clockwork Mechanic & Arachnopod Destroyer Incorrect spawns "Ulduar" +DELETE FROM `creature` WHERE `guid` IN (137561,137562,137563,136543,136544,136547,136551); + +-- Arachnopod Destroyer SAI "Still needs combat AI" +SET @ENTRY := 34183; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,1,0,0,0,0,11,64703,0,0,0,0,0,1,0,0,0,0,0,0,0,"Arachnopod Destroyer - OOC - Cast Summon Clockwork Mechanic"); + +-- Clockwork Mechanic SAI "Still needs combat AI" +SET @ENTRY := 34184; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,54,0,100,0,0,0,0,0,11,63313,0,0,0,0,0,7,0,0,0,0,0,0,0,"Clockwork Mechanic - Just Summoned - Cast Ride Vehicle"); diff --git a/sql/updates/world/2015_03_25_00_world.sql b/sql/updates/world/2015_03_25_00_world.sql new file mode 100644 index 00000000000..06d4910fe05 --- /dev/null +++ b/sql/updates/world/2015_03_25_00_world.sql @@ -0,0 +1,2 @@ +-- +DELETE FROM `creature_addon` WHERE `guid` IN (137561,137562,137563); diff --git a/sql/updates/world/2015_03_25_01_world.sql b/sql/updates/world/2015_03_25_01_world.sql new file mode 100644 index 00000000000..29dd214f262 --- /dev/null +++ b/sql/updates/world/2015_03_25_01_world.sql @@ -0,0 +1,9 @@ +-- assign spellscript for Spell: 'Infected Worgen Bite' + +DELETE FROM `spell_linked_spell` WHERE `spell_trigger`=53095; +INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comment`) VALUES +(53095,-53094,2,'Infected Worgen Bite - Worgen\'s Call Immunity'); + +DELETE FROM `spell_script_names` WHERE `spell_id`=53094; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(53094,'spell_infected_worgen_bite'); diff --git a/sql/updates/world/2015_03_25_02_world.sql b/sql/updates/world/2015_03_25_02_world.sql new file mode 100644 index 00000000000..10b8903f3fb --- /dev/null +++ b/sql/updates/world/2015_03_25_02_world.sql @@ -0,0 +1,13 @@ +DELETE FROM `spell_script_names` WHERE `spell_id` IN (62539,64614,64629,64630,64631,64632,64633,64634,64635,64636,67393); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(62539,'spell_gen_eject_passenger'), +(64614,'spell_gen_eject_passenger'), +(64629,'spell_gen_eject_passenger'), +(64630,'spell_gen_eject_passenger'), +(64631,'spell_gen_eject_passenger'), +(64632,'spell_gen_eject_passenger'), +(64633,'spell_gen_eject_passenger'), +(64634,'spell_gen_eject_passenger'), +(64635,'spell_gen_eject_passenger'), +(64636,'spell_gen_eject_passenger'), +(67393,'spell_gen_eject_passenger'); diff --git a/sql/updates/world/2015_03_25_03_world.sql b/sql/updates/world/2015_03_25_03_world.sql new file mode 100644 index 00000000000..3706bde1b71 --- /dev/null +++ b/sql/updates/world/2015_03_25_03_world.sql @@ -0,0 +1,98 @@ +DELETE FROM `creature_text` WHERE `entry` IN(22865,22820); +DELETE FROM `creature_text` WHERE `entry` =21700 AND `groupid`>7; + +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextID`, `comment`) VALUES +(22865, 0, 0, 'You disappoint me, Akama. I wanted to question the treacherous worm myself! I''m beginning to question your allegiance, Broken.', 12, 0, 100, 1, 0, 11608, 20628, 'Illidan''s Presence to Player'), +(22865, 1, 0, 'I do not sense lies in your voice, Akama. That Kael''thas would betray me does not come as a big surprise - I''m not as oblivious as some would think. That one of your own was involved with him puts your loyalties into question.', 12, 0, 100, 5, 0, 11609, 20629, 'Illidan''s Presence to Player'), +(22865, 2, 0, 'Send your Ashtongue into Tempest Keep and slay his most prized possession, the phoenix known as Al''ar. I must know that you''re not on his side. Do not think of betraying me, Broken. We both know who owns your soul!', 12, 0, 100, 1, 0, 11610, 20630, 'Illidan''s Presence to Player'), +(21700, 8, 0, 'Olum... old friend. It is good to see that you are safe.', 12, 0, 100, 6, 0, 11600, 20490, 'Akama to Player'), +(21700, 9, 0, 'Illidan will become suspicious... that much is for certain. We will deal with it as we always do.', 12, 0, 100, 0, 0, 11601, 20491, 'Akama to Player'), +(21700, 10, 0, 'You cannot... be serious, Olum. Your sacrifice has already been too great.', 12, 0, 100, 274, 0, 11602, 20492, 'Akama to Player'), +(21700, 11, 0, 'It appears your mind is set then. We will guide you to the spirit world with as much kindness as we can.', 12, 0, 100, 396, 0, 11603, 20493, 'Akama to Player'), +(21700, 12, 0, 'Farewell, dear friend. We shall meet you in the next world when our duties in this one are fulfilled.', 12, 0, 100, 0, 0, 11604, 20494, 'Akama to Player'), +(21700, 13, 0, 'Master! We''ve found the traitor who escaped Vashj! His body lies in front of me... lifeless!', 12, 0, 100, 0, 0, 11605, 20495, 'Akama to Player'), +(21700, 14, 0, 'But, sire! You have misjudged my actions... I do have knowledge of someone close to you who plans to betray you. It is that dog, Kael''thas! He has allied with Kil''jaeden and intends to replace you as Lord of Outland!', 12, 0, 100, 0, 0, 11606, 20496, 'Akama to Player'), +(21700, 15, 0, 'It will be done, my lord!', 12, 0, 100, 66, 0, 11607, 20497, 'Akama to Player'), +(22820, 0, 0, 'Akama, my friend! Have you been informed? I was found out by Vashj''s followers. Our secret is in peril!', 12, 0, 100, 0, 0, 11611, 20498, 'Seer Olum to Player'), +(22820, 1, 0, 'Illidan is looking for me. I am not safe here... none of us are.', 12, 0, 100, 1, 0, 11612, 20502, 'Seer Olum to Player'), +(22820, 2, 0, 'Illidan will find me and when he does... he will pry the Ashtongue secret from me - such is the power of the Betrayer! No... there is only one way. My usefulness to the cause has come to an end. I must venture into the spirit world!', 12, 0, 100, 6, 0, 11613, 20499, 'Seer Olum to Player'), +(22820, 3, 0, 'My decision is final. I will not be dissuaded. I have devoted my life to our plan. To jeopardize it now would betray all who have died for the cause long before me.', 12, 0, 100, 274, 0, 11614, 20500, 'Seer Olum to Player'), +(22820, 4, 0, 'I thank you, Akama. You honor me by allowing me this moment, surrounded by my brothers. Farewell, friend. Guide our people well.', 12, 0, 100, 2, 0, 11615, 20501, 'Seer Olum to Player'); + +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN(22820,22865,22870); + +DELETE FROM `smart_scripts` WHERE `entryorguid` IN(22820,22865,22870) AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid` =21700 AND `source_type`=0 AND `id` IN(4,5); + +DELETE FROM `smart_scripts` WHERE `entryorguid` =2170002 AND `source_type`=9; +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=22870; + + +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(22870, 0, 0, 1, 54, 0, 100, 0, 0, 0, 0, 0, 11, 36545, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Olums Spirit - On Just Summoned - Cast Floating Drowned'), +(22870, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 11, 36550, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Olums Spirit - On Just Summoned - Cast Floating Drowned'), +(22870, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 53, 0, 22870, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Olums Spirit - On Just Summoned - Start WP'), +(22870, 0, 3, 0, 40, 0, 100, 0, 1, 22870, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Olums Spirit - On Reached WP1 - Despawn'), + +(22820, 0, 0, 1, 54, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Seer Olum - On Just Summoned - Set NPC Flags'), +(22820, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 53, 0, 22820, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Seer Olum - On Just Summoned - Start WP'), +(22820, 0, 2, 0, 40, 0, 100, 0, 2, 22820, 0, 0, 101, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Seer Olum - On Reached WP2 - Set Home Position'), +(22820, 0, 3, 4, 8, 0, 100, 0, 39552, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Seer Olum - On Spellhit (Olums Sacrifice) - Die'), +(22820, 0, 4, 0, 61, 0, 100, 0, 0, 0, 0, 0, 12, 22870, 1, 20000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Seer Olum - On Spellhit (Olums Sacrifice) - Summon Olums Spirit'), + +(22865, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 11, 37816, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Illidans Presence- On Just Summoned - Cast Shadowform'), +(22865, 0, 1, 0, 38, 0, 100, 0, 1, 1, 0, 0, 5, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Illidans Presence- On Data Set - Play Emote OneShotExclamation (5)'), +(22865, 0, 2, 0, 38, 0, 100, 0, 2, 2, 0, 0, 5, 53, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Illidans Presence- On Data Set - Play Emote OneShotBattleRoar (53)'), + + +(21700, 0, 4, 5, 20, 0, 100, 0, 10944, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Akama - On Quest 10944 rewarded - Store Targetlist'), +(21700, 0, 5, 0, 61, 0, 100, 0, 0, 0, 0, 0, 80, 2170002, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - On Quest 10944 rewarded - Run Script'), +(2170002, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Set NPC Flags'), +(2170002, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 12, 22820, 1, 180000, 0, 0, 0, 8, 0, 0, 0, -3726.361, 1040.714, 56.03985, 5.846853, 'Akama - Script 3 - Summon Seer Olum'), -- 00:57:39.985 Number: 4250 +(2170002, 9, 2, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, 22820, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 0 on Seer Olum'), -- 00:57:41.328 Number: 4268 +(2170002, 9, 3, 0, 0, 0, 100, 0, 10000, 10000, 0, 0, 1, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 8'), -- 00:57:51.438 Number: 4412 +(2170002, 9, 4, 0, 0, 0, 100, 0, 10000, 10000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 19, 22820, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 1 on Seer Olum'), -- 00:58:01.547 Number: 4545 +(2170002, 9, 5, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 1, 9, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 9'), -- 00:58:08.422 Number: 4613 +(2170002, 9, 6, 0, 0, 0, 100, 0, 10000, 10000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 19, 22820, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 2 on Seer Olum'), -- 00:58:18.485 Number: 4746 +(2170002, 9, 7, 0, 0, 0, 100, 0, 25000, 25000, 0, 0, 1, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 10'), -- 00:58:43.578 Number: 5020 +(2170002, 9, 8, 0, 0, 0, 100, 0, 10000, 10000, 0, 0, 1, 3, 0, 0, 0, 0, 0, 19, 22820, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 3 on Seer Olum'), -- 00:58:53.688 Number: 5102 +(2170002, 9, 9, 0, 0, 0, 100, 0, 13000, 13000, 0, 0, 1, 11, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 11'), -- 00:59:06.610 Number: 5239 +(2170002, 9, 10, 0, 0, 0, 100, 0, 14000, 14000, 0, 0, 1, 4, 0, 0, 0, 0, 0, 19, 22820, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 4 on Seer Olum'), -- 00:59:20.328 Number: 5385 +(2170002, 9, 11, 0, 0, 0, 100, 0, 11000, 11000, 0, 0, 11, 39552, 0, 0, 0, 0, 0, 19, 22820, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Cast Olums Sacrifice'), -- 00:59:31.532 Number: 5519 +(2170002, 9, 12, 0, 0, 0, 100, 0, 14000, 14000, 0, 0, 1, 12, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 12'), -- 00:59:45.438 Number: 5726 +(2170002, 9, 13, 0, 0, 0, 100, 0, 21000, 21000, 0, 0, 1, 13, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 13'), -- 01:00:06.110 Number: 5970 +(2170002, 9, 14, 0, 0, 0, 100, 0, 0, 0, 0, 0, 90, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Set Bytes 1'), +(2170002, 9, 15, 0, 0, 0, 100, 0, 300, 300, 0, 0, 12, 22865, 1, 86000, 0, 0, 0, 8, 0, 0, 0, -3721.867, 1029.501, 56.03928, 0.03490658, 'Akama - Script 3 - Summon Illidans Presence'), -- 01:00:06.438 Number: 5980 +(2170002, 9, 16, 0, 0, 0, 100, 0, 0, 0, 0, 0, 50, 185520, 86, 0, 0, 0, 0, 8, 0, 0, 0, -3721.867, 1029.501, 56.03928, 0.03490658, 'Akama - Script 3 - Summon Fel Fire (GO)'), -- 01:00:06.438 Number: 5980 +(2170002, 9, 17, 0, 0, 0, 100, 0, 8000, 8000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, 22865, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 0 on Illidans Presence'), -- 01:00:14.610 Number: 6082 +(2170002, 9, 18, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 22865, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Set Data 1 1 on Illidans Presence'), -- 01:00:19.516 Number: 6135 +(2170002, 9, 19, 0, 0, 0, 100, 0, 9000, 9000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 19, 22820, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Despawn Seer Olum'), -- 01:00:28.000 Number: 6250 +(2170002, 9, 20, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 91, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Set Bytes 1'), -- 01:00:29.219 Number: 6273 +(2170002, 9, 21, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 14, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 14'), -- 01:00:29.328 Number: 6276 +(2170002, 9, 22, 0, 0, 0, 100, 0, 16000, 16000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 19, 22865, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 1 on Illidans Presence'), -- 01:00:45.110 Number: 6432 +(2170002, 9, 23, 0, 0, 0, 100, 0, 23000, 23000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 19, 22865, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 2 on Illidans Presence'), -- 01:01:08.125 Number: 6672 +(2170002, 9, 24, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 45, 2, 2, 0, 0, 0, 0, 19, 22865, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Set Data 2 2 on Illidans Presence'), -- 01:01:14.125 Number: 6731 +(2170002, 9, 25, 0, 0, 0, 100, 0, 17000, 17000, 0, 0, 1, 15, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 15'), -- 01:01:31.188 Number: 6926 +(2170002, 9, 26, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Akama - Script 3 - Say Line 15'); -- Set NPC Flags + +DELETE FROM `creature_template_addon` WHERE `entry` IN(22870,22865); +INSERT INTO `creature_template_addon` (`entry`, `mount`, `bytes1`, `bytes2`, `auras`) VALUES +(22870, 0, 0x0, 0x1, '36545'), -- 22870 - 36545 +(22865, 0, 0x0, 0x1, '37816'); -- 22865 - 37816 + +DELETE FROM `waypoints` WHERE `entry` IN(22820,22870); +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(22820, 1,-3724.758, 1036.542, 55.99855, 'Seer Olum'), +(22820, 2,-3723.388, 1033.147, 56.20685, 'Seer Olum'), +(22870, 1,-3718.94, 1032.773, 63.84426, 'Olums Spirit'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=39552; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, 39552, 0, 0, 31, 0, 3, 22820, 0, 0, 0, 0, '', 'Olums Sacrifice targets Seer Olum'), +(22, 1, 22820, 0, 0, 23, 1, 3821, 0, 0, 0, 0, 0, '', 'The Lich King - Only Run SAI in The Wardens Cage'); + +UPDATE `creature_template` SET `gossip_menu_id`=8564 WHERE `entry`=22820; + +DELETE FROM `gossip_menu` WHERE `entry`=8564; +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES +(8564, 10733); -- 22820 diff --git a/sql/updates/world/2015_03_25_04_world.sql b/sql/updates/world/2015_03_25_04_world.sql new file mode 100644 index 00000000000..017a0162c5d --- /dev/null +++ b/sql/updates/world/2015_03_25_04_world.sql @@ -0,0 +1,18 @@ +-- +SET @CGUID := 370474; +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+13; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@CGUID+0, 37543, 530, 1, 1, 9633.195, -7136.578, 30.51368, 0, 120, 0, 0), -- 37543 (Area: 3665) 3.3.5a +(@CGUID+1, 37543, 530, 1, 1, 9648.338, -7119.096, 28.47594, 0, 120, 0, 0), -- 37543 (Area: 3665) 3.3.5a +(@CGUID+2, 37543, 530, 1, 1, 9665.38, -7136.049, 28.58942, 0, 120, 0, 0), -- 37543 (Area: 3665) 3.3.5a +(@CGUID+3, 37574, 530, 1, 1, 9568.38, -7194.522, 24.68986, 4.660029, 120, 0, 0), -- 37574 (Area: 0) 3.3.5a +(@CGUID+4, 37574, 530, 1, 1, 9530.643, -7189.838, 31.87009, 4.660029, 120, 0, 0), -- 37574 (Area: 0) 3.3.5a +(@CGUID+5, 37543, 530, 1, 1, 9530.571, -7220.372, 30.44205, 1.22173, 120, 0, 0), -- 37543 (Area: 0) 3.3.5a +(@CGUID+6, 37574, 530, 1, 1, 9520.098, -7188.818, 31.84313, 4.660029, 120, 0, 0), -- 37574 (Area: 0) 3.3.5a +(@CGUID+7, 37574, 530, 1, 1, 9676.034, -7346.333, 22.96401, 4.660029, 120, 0, 0), -- 37574 (Area: 3482) 3.3.5a +(@CGUID+8, 37574, 530, 1, 1, 9683.437, -7394.599, 24.14162, 4.660029, 120, 0, 0), -- 37574 (Area: 3482) 3.3.5a +(@CGUID+9, 37574, 530, 1, 1, 9532.216, -7239.835, 24.74386, 4.660029, 120, 0, 0), -- 37574 (Area: 3482) 3.3.5a +(@CGUID+10, 37574, 530, 1, 1, 9574.714, -7221.677, 23.17951, 4.660029, 120, 0, 0), -- 37574 (Area: 3482) 3.3.5a +(@CGUID+11, 37543, 530, 1, 1, 9648.606, -7151.55, 28.7944, 0, 120, 0, 0), -- 37543 (Area: 3482) 3.3.5a +(@CGUID+12, 37543, 530, 1, 1, 9467.849, -7269.604, 34.85052, 0, 120, 0, 0), -- 37543 (Area: 3482) 3.3.5a +(@CGUID+13, 37543, 530, 1, 1, 9467.499, -7287.613, 36.13566, 0, 120, 0, 0); -- 37543 (Area: 3482) 3.3.5a diff --git a/sql/updates/world/2015_03_26_00_world.sql b/sql/updates/world/2015_03_26_00_world.sql new file mode 100644 index 00000000000..ab759e628f6 --- /dev/null +++ b/sql/updates/world/2015_03_26_00_world.sql @@ -0,0 +1,586 @@ +-- Pathing for Stonevault Ambusher Entry: 7175 'TDB FORMAT' +SET @NPC := 27536; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-210.1764,`position_y`=109.2886,`position_z`=-47.71453 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-210.1764,109.2886,-47.71453,0,0,1,0,100,0), -- 19:46:17 +(@PATH,2,-210.9264,115.0386,-47.71453,0,0,1,0,100,0), -- 19:46:17 +(@PATH,3,-211.1764,117.7886,-46.96453,0,0,1,0,100,0), -- 19:46:17 +(@PATH,4,-211.4264,120.0386,-46.46453,0,0,1,0,100,0), -- 19:46:17 +(@PATH,5,-211.3505,121.1287,-46.46464,0,0,1,0,100,0), -- 19:46:20 +(@PATH,6,-211.3505,124.6287,-46.46464,0,0,1,0,100,0), -- 19:46:20 +(@PATH,7,-211.3505,126.8787,-46.46464,0,0,1,0,100,0), -- 19:46:20 +(@PATH,8,-206.7831,137.7592,-46.55875,0,0,1,0,100,0), -- 19:46:21 +(@PATH,9,-204.5331,138.0092,-46.55875,0,0,1,0,100,0), -- 19:46:21 +(@PATH,10,-200.7831,138.2592,-46.55875,0,0,1,0,100,0), -- 19:46:21 +(@PATH,11,-199.5331,138.5092,-46.55875,0,0,1,0,100,0), -- 19:46:21 +(@PATH,12,-198.5331,138.5092,-47.05875,0,0,1,0,100,0), -- 19:46:21 +(@PATH,13,-198.2273,138.9003,-47.06185,0,0,1,0,100,0), -- 19:46:23 +(@PATH,14,-192.7273,139.1503,-47.06185,0,0,1,0,100,0), -- 19:46:23 +(@PATH,15,-174.9689,143.976,-47.15791,0,0,1,0,100,0), -- 19:46:25 +(@PATH,16,-174.9137,144.2064,-47.1599,0,0,1,0,100,0), -- 19:46:26 +(@PATH,17,-174.1637,144.9564,-47.1599,0,0,1,0,100,0), -- 19:46:26 +(@PATH,18,-174.2672,156.425,-47.16148,0,0,1,0,100,0), -- 19:46:27 +(@PATH,19,-178.1581,166.2433,-47.16,0,0,1,0,100,0), -- 19:46:28 +(@PATH,20,-182.0437,167.7564,-47.15718,0,0,1,0,100,0), -- 19:46:29 +(@PATH,21,-187.5437,168.5064,-47.15718,0,0,1,0,100,0), -- 19:46:29 +(@PATH,22,-198.6023,169.4236,-47.01919,0,0,1,0,100,0), -- 19:46:30 +(@PATH,23,-199.8523,169.4236,-46.26919,0,0,1,0,100,0), -- 19:46:30 +(@PATH,24,-206.3523,169.1736,-44.51919,0,0,1,0,100,0), -- 19:46:30 +(@PATH,25,-208.6023,169.1736,-44.51919,0,0,1,0,100,0), -- 19:46:30 +(@PATH,26,-211.6879,169.1373,-44.53472,0,0,1,0,100,0), -- 19:46:33 +(@PATH,27,-215.1879,168.8873,-44.53472,0,0,1,0,100,0), -- 19:46:33 +(@PATH,28,-219.4723,168.7791,-44.37992,0,0,1,0,100,0), -- 19:46:34 +(@PATH,29,-239.9498,168.602,-44.37992,0,0,1,0,100,0), -- 19:46:37 +(@PATH,30,-246.9581,168.9306,-44.51655,0,0,1,0,100,0), -- 19:46:38 +(@PATH,31,-249.2081,168.9306,-44.51655,0,0,1,0,100,0), -- 19:46:38 +(@PATH,32,-252.4581,169.1806,-45.51655,0,0,1,0,100,0), -- 19:46:38 +(@PATH,33,-255.7081,169.4306,-46.26655,0,0,1,0,100,0), -- 19:46:38 +(@PATH,34,-256.7081,169.4306,-47.01655,0,0,1,0,100,0), -- 19:46:38 +(@PATH,35,-256.8999,169.2992,-47.01842,0,0,1,0,100,0), -- 19:46:39 +(@PATH,36,-260.1499,169.5492,-47.01842,0,0,1,0,100,0), -- 19:46:39 +(@PATH,37,-271.5681,169.6401,-47.15585,0,0,1,0,100,0), -- 19:46:40 +(@PATH,38,-278.7491,167.1944,-47.1574,0,0,1,0,100,0), -- 19:46:41 +(@PATH,39,-281.8345,159.0635,-47.15884,0,0,1,0,100,0), -- 19:46:43 +(@PATH,40,-281.6717,149.2611,-47.15874,0,0,1,0,100,0), -- 19:46:44 +(@PATH,41,-281.4217,147.0111,-47.15874,0,0,1,0,100,0), -- 19:46:44 +(@PATH,42,-280.9217,143.0111,-47.15874,0,0,1,0,100,0), -- 19:46:44 +(@PATH,43,-280.6221,142.876,-47.15683,0,0,1,0,100,0), -- 19:46:45 +(@PATH,44,-280.6221,141.876,-47.15683,0,0,1,0,100,0), -- 19:46:45 +(@PATH,45,-279.6221,141.376,-47.15683,0,0,1,0,100,0), -- 19:46:45 +(@PATH,46,-273.4069,138.0354,-47.15511,0,0,1,0,100,0), -- 19:46:46 +(@PATH,47,-256.2716,137.7599,-46.55902,0,0,1,0,100,0), -- 19:46:47 +(@PATH,48,-251.2716,137.7599,-46.55902,0,0,1,0,100,0), -- 19:46:47 +(@PATH,49,-245.0504,137.672,-46.46387,0,0,1,0,100,0), -- 19:46:50 +(@PATH,50,-230.932,137.3019,-46.46301,0,0,1,0,100,0), -- 19:46:51 +(@PATH,51,-219.4549,136.5503,-46.46327,0,0,1,0,100,0), -- 19:46:52 +(@PATH,52,-212.4549,136.0503,-46.46327,0,0,1,0,100,0), -- 19:46:52 +(@PATH,53,-211.8714,135.753,-46.46384,0,0,1,0,100,0), -- 19:46:54 +(@PATH,54,-211.8714,127.003,-46.46384,0,0,1,0,100,0), -- 19:46:54 +(@PATH,55,-211.7341,126.9009,-46.65929,0,0,1,0,100,0), -- 19:46:55 +(@PATH,56,-211.7341,124.6509,-46.65929,0,0,1,0,100,0), -- 19:46:55 +(@PATH,57,-211.7341,123.6509,-46.65929,0,0,1,0,100,0), -- 19:46:55 +(@PATH,58,-211.7341,119.9009,-46.65929,0,0,1,0,100,0), -- 19:46:55 +(@PATH,59,-211.7341,117.6509,-47.15929,0,0,1,0,100,0), -- 19:46:55 +(@PATH,60,-211.7341,115.1509,-47.65929,0,0,1,0,100,0), -- 19:46:55 +(@PATH,61,-211.6735,112.9518,-47.72739,0,0,1,0,100,0); -- 19:46:57 +-- 0x1C16F408C00701C00059E900030B2760 .go -210.1764 109.2886 -47.71453 + +-- Pathing for Stonevault Ambusher Entry: 7175 'TDB FORMAT' +SET @NPC := 27535; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-260.9756,`position_y`=61.2314,`position_z`=-48.54825 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-260.9756,61.2314,-48.54825,0,0,1,0,100,0), -- 19:46:55 +(@PATH,2,-279.7831,63.47712,-48.54804,0,0,1,0,100,0), -- 19:46:57 +(@PATH,3,-282.5231,65.95476,-48.55443,0,0,1,0,100,0), -- 19:46:58 +(@PATH,4,-288.7731,67.95476,-48.55443,0,0,1,0,100,0), -- 19:46:58 +(@PATH,5,-293.4806,70.74025,-48.55671,0,0,1,0,100,0), -- 19:47:00 +(@PATH,6,-295.2306,72.99025,-48.55671,0,0,1,0,100,0), -- 19:47:00 +(@PATH,7,-292.8817,80.33412,-48.55592,0,0,1,0,100,0), -- 19:47:01 +(@PATH,8,-288.8817,83.33412,-48.55592,0,0,1,0,100,0), -- 19:47:01 +(@PATH,9,-280.2568,88.74796,-48.5517,0,0,1,0,100,0), -- 19:47:03 +(@PATH,10,-273.2597,91.43516,-48.54511,0,0,1,0,100,0), -- 19:47:05 +(@PATH,11,-256.2809,91.47353,-47.96152,0,0,1,0,100,0), -- 19:47:06 +(@PATH,12,-254.0309,91.47353,-47.96152,0,0,1,0,100,0), -- 19:47:06 +(@PATH,13,-250.0309,91.47353,-47.96152,0,0,1,0,100,0), -- 19:47:06 +(@PATH,14,-246.0933,91.76448,-47.96255,0,0,1,0,100,0), -- 19:47:07 +(@PATH,15,-244.1956,114.8135,-47.86117,0,0,1,0,100,0), -- 19:47:09 +(@PATH,16,-244.0928,116.6703,-47.67337,0,0,1,0,100,0), -- 19:47:11 +(@PATH,17,-244.0928,119.6703,-46.42337,0,0,1,0,100,0), -- 19:47:11 +(@PATH,18,-244.3428,126.6703,-46.42337,0,0,1,0,100,0), -- 19:47:11 +(@PATH,19,-244.2846,127.0505,-46.63219,0,0,1,0,100,0), -- 19:47:12 +(@PATH,20,-251.2605,136.6456,-46.55659,0,0,1,0,100,0), -- 19:47:13 +(@PATH,21,-256.0104,137.6456,-46.55659,0,0,1,0,100,0), -- 19:47:13 +(@PATH,22,-257.2604,137.8956,-47.05659,0,0,1,0,100,0), -- 19:47:13 +(@PATH,23,-259.69,138.2683,-47.05939,0,0,1,0,100,0), -- 19:47:16 +(@PATH,24,-278.1556,142.2052,-47.15575,0,0,1,0,100,0), -- 19:47:17 +(@PATH,25,-278.9056,143.2052,-47.15575,0,0,1,0,100,0), -- 19:47:17 +(@PATH,26,-281.2275,147.3071,-47.15728,0,0,1,0,100,0), -- 19:47:18 +(@PATH,27,-281.9775,148.5571,-47.15728,0,0,1,0,100,0), -- 19:47:18 +(@PATH,28,-277.5583,166.0385,-47.15807,0,0,1,0,100,0), -- 19:47:20 +(@PATH,29,-270.8185,168.1763,-47.15633,0,0,1,0,100,0), -- 19:47:21 +(@PATH,30,-257.0093,169.4798,-47.01865,0,0,1,0,100,0), -- 19:47:23 +(@PATH,31,-256.0093,169.4798,-46.26865,0,0,1,0,100,0), -- 19:47:23 +(@PATH,32,-252.7593,169.4798,-45.51865,0,0,1,0,100,0), -- 19:47:23 +(@PATH,33,-249.2593,169.4798,-44.51865,0,0,1,0,100,0), -- 19:47:23 +(@PATH,34,-247.0093,169.4798,-44.51865,0,0,1,0,100,0), -- 19:47:23 +(@PATH,35,-246.7646,169.5961,-44.52259,0,0,1,0,100,0), -- 19:47:25 +(@PATH,36,-244.5146,169.5961,-44.52259,0,0,1,0,100,0), -- 19:47:25 +(@PATH,37,-240.0146,169.5961,-44.52259,0,0,1,0,100,0), -- 19:47:25 +(@PATH,38,-215.2646,169.3461,-44.52259,0,0,1,0,100,0), -- 19:47:25 +(@PATH,39,-208.8364,169.3836,-44.51604,0,0,1,0,100,0), -- 19:47:29 +(@PATH,40,-206.5864,169.6336,-44.51604,0,0,1,0,100,0), -- 19:47:29 +(@PATH,41,-200.0864,169.8836,-46.26604,0,0,1,0,100,0), -- 19:47:29 +(@PATH,42,-198.8364,169.8836,-47.01604,0,0,1,0,100,0), -- 19:47:29 +(@PATH,43,-197.5312,170.0583,-47.003,0,0,1,0,100,0), -- 19:47:31 +(@PATH,44,-186.4549,169.675,-47.1562,0,0,1,0,100,0), -- 19:47:33 +(@PATH,45,-178.1893,166.1073,-47.15907,0,0,1,0,100,0), -- 19:47:34 +(@PATH,46,-174.5692,160.0448,-47.16045,0,0,1,0,100,0), -- 19:47:35 +(@PATH,47,-177.7394,141.6598,-47.16039,0,0,1,0,100,0), -- 19:47:36 +(@PATH,48,-178.7611,140.6003,-47.15852,0,0,1,0,100,0), -- 19:47:37 +(@PATH,49,-187.544,138.534,-47.15597,0,0,1,0,100,0), -- 19:47:38 +(@PATH,50,-199.6097,138.1275,-46.55952,0,0,1,0,100,0), -- 19:47:40 +(@PATH,51,-200.3597,138.1275,-46.55952,0,0,1,0,100,0), -- 19:47:40 +(@PATH,52,-204.6097,138.1275,-46.55952,0,0,1,0,100,0), -- 19:47:40 +(@PATH,53,-210.2272,138.1704,-46.66569,0,0,1,0,100,0), -- 19:47:41 +(@PATH,54,-219.309,137.7214,-46.46365,0,0,1,0,100,0), -- 19:47:42 +(@PATH,55,-227.5786,137.2641,-46.46313,0,0,1,0,100,0), -- 19:47:43 +(@PATH,56,-241.2292,133.3628,-46.46293,0,0,1,0,100,0), -- 19:47:45 +(@PATH,57,-244.0938,127.9868,-46.65569,0,0,1,0,100,0), -- 19:47:46 +(@PATH,58,-244.0938,126.7368,-46.65569,0,0,1,0,100,0), -- 19:47:46 +(@PATH,59,-244.0938,119.9868,-46.65569,0,0,1,0,100,0), -- 19:47:46 +(@PATH,60,-244.0938,117.7368,-47.15569,0,0,1,0,100,0), -- 19:47:46 +(@PATH,61,-244.1458,117.4128,-47.17364,0,0,1,0,100,0), -- 19:47:47 +(@PATH,62,-244.1458,115.9128,-47.67364,0,0,1,0,100,0), -- 19:47:47 +(@PATH,63,-243.8958,107.6628,-47.67364,0,0,1,0,100,0), -- 19:47:47 +(@PATH,64,-244.0653,104.803,-47.8754,0,0,1,0,100,0), -- 19:47:50 +(@PATH,65,-249.939,90.39037,-47.9633,0,0,1,0,100,0), -- 19:47:51 +(@PATH,66,-253.939,90.64037,-47.9633,0,0,1,0,100,0), -- 19:47:51 +(@PATH,67,-256.189,90.64037,-47.9633,0,0,1,0,100,0), -- 19:47:51 +(@PATH,68,-257.189,90.64037,-48.4633,0,0,1,0,100,0), -- 19:47:51 +(@PATH,69,-261.1644,90.57747,-48.46085,0,0,1,0,100,0), -- 19:47:53 +(@PATH,70,-278.2355,87.77667,-48.54754,0,0,1,0,100,0), -- 19:47:54 +(@PATH,71,-282.5812,77.72125,-48.55171,0,0,1,0,100,0), -- 19:47:56 +(@PATH,72,-282.8312,75.47125,-48.55171,0,0,1,0,100,0), -- 19:47:56 +(@PATH,73,-283.0587,72.90546,-48.55147,0,0,1,0,100,0), -- 19:47:57 +(@PATH,74,-280.5587,63.15546,-48.55147,0,0,1,0,100,0), -- 19:47:57 +(@PATH,75,-279.8492,62.23659,-48.55054,0,0,1,0,100,0); -- 19:47:58 +-- 0x1C16F408C00701C00059E900038B2760 .go -260.9756 61.2314 -48.54825 + +-- Pathing for Shrike Bat Entry: 4861 'TDB FORMAT' +SET @NPC := 30081; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-116.1971,`position_y`=317.7787,`position_z`=-46.08444 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-116.1971,317.7787,-46.08444,0,0,0,0,100,0), -- 19:46:24 +(@PATH,2,-118.9047,317.3614,-45.29679,0,0,0,0,100,0), -- 19:46:29 +(@PATH,3,-126.8644,318.512,-44.13009,0,0,0,0,100,0), -- 19:46:31 +(@PATH,4,-131.6838,323.5452,-43.69198,0,0,0,0,100,0), -- 19:46:33 +(@PATH,5,-133.1838,326.0452,-43.94198,0,0,0,0,100,0), -- 19:46:33 +(@PATH,6,-134.4338,328.2952,-44.19198,0,0,0,0,100,0), -- 19:46:33 +(@PATH,7,-139.5984,330.833,-44.22396,0,0,0,0,100,0), -- 19:46:38 +(@PATH,8,-141.3152,330.4821,-44.35117,0,0,0,0,100,0), -- 19:46:41 +(@PATH,9,-145.4463,327.2668,-46.04215,0,0,0,0,100,0), -- 19:46:43 +(@PATH,10,-153.1682,320.1992,-48.49626,0,0,0,0,100,0), -- 19:46:46 +(@PATH,11,-157.6236,320.5594,-49.23671,0,0,0,0,100,0), -- 19:46:48 +(@PATH,12,-163.7113,322.522,-50.1132,0,0,0,0,100,0), -- 19:46:52 +(@PATH,13,-172.0462,323.2635,-51.23209,0,0,0,0,100,0), -- 19:46:54 +(@PATH,14,-173.7962,323.2635,-51.48209,0,0,0,0,100,0), -- 19:46:54 +(@PATH,15,-177.0651,319.9081,-52.49401,0,0,0,0,100,0), -- 19:46:58 +(@PATH,16,-179.3571,312.8132,-52.80653,0,0,0,0,100,0), -- 19:47:01 +(@PATH,17,-179.3571,311.8132,-52.80653,0,0,0,0,100,0), -- 19:47:01 +(@PATH,18,-181.0257,301.3842,-50.73584,0,0,0,0,100,0), -- 19:47:05 +(@PATH,19,-183.2724,293.4999,-48.85449,0,0,0,0,100,0), -- 19:47:09 +(@PATH,20,-183.7724,292.4999,-48.60449,0,0,0,0,100,0), -- 19:47:09 +(@PATH,21,-184.433,290.7685,-48.27169,0,0,0,0,100,0), -- 19:47:11 +(@PATH,22,-184.683,289.2685,-47.77169,0,0,0,0,100,0), -- 19:47:11 +(@PATH,23,-184.933,288.0185,-47.52169,0,0,0,0,100,0), -- 19:47:11 +(@PATH,24,-187.3712,282.3932,-47.8597,0,0,0,0,100,0), -- 19:47:14 +(@PATH,25,-187.4142,282.2362,-47.91491,0,0,0,0,100,0), -- 19:47:19 +(@PATH,26,-185.3188,287.8494,-47.45733,0,0,0,0,100,0), -- 19:47:21 +(@PATH,27,-185.0688,289.0994,-47.70733,0,0,0,0,100,0), -- 19:47:21 +(@PATH,28,-184.179,290.8317,-48.2381,0,0,0,0,100,0), -- 19:47:23 +(@PATH,29,-183.679,292.5817,-48.4881,0,0,0,0,100,0), -- 19:47:23 +(@PATH,30,-183.429,293.3317,-48.7381,0,0,0,0,100,0), -- 19:47:23 +(@PATH,31,-182.929,295.3317,-49.9881,0,0,0,0,100,0), -- 19:47:23 +(@PATH,32,-180.9205,303.2869,-51.47765,0,0,0,0,100,0), -- 19:47:27 +(@PATH,33,-179.3741,312.776,-52.76653,0,0,0,0,100,0), -- 19:47:31 +(@PATH,34,-179.1241,314.276,-52.76653,0,0,0,0,100,0), -- 19:47:31 +(@PATH,35,-177.1773,319.9679,-52.64116,0,0,0,0,100,0), -- 19:47:34 +(@PATH,36,-176.4273,322.2179,-52.14116,0,0,0,0,100,0), -- 19:47:34 +(@PATH,37,-173.9601,323.1776,-51.58164,0,0,0,0,100,0), -- 19:47:38 +(@PATH,38,-172.4601,323.4276,-51.58164,0,0,0,0,100,0), -- 19:47:38 +(@PATH,39,-167.9601,323.6776,-50.83164,0,0,0,0,100,0), -- 19:47:38 +(@PATH,40,-163.9189,322.6101,-50.14185,0,0,0,0,100,0), -- 19:47:41 +(@PATH,41,-162.9189,322.3601,-49.64185,0,0,0,0,100,0), -- 19:47:41 +(@PATH,42,-158.5166,320.7068,-49.43653,0,0,0,0,100,0), -- 19:47:44 +(@PATH,43,-149.9316,322.1074,-48.67955,0,0,0,0,100,0), -- 19:47:46 +(@PATH,44,-145.6857,327.386,-45.98837,0,0,0,0,100,0), -- 19:47:50 +(@PATH,45,-141.4396,330.4873,-44.44178,0,0,0,0,100,0), -- 19:47:52 +(@PATH,46,-139.9884,330.9608,-44.31651,0,0,0,0,100,0), -- 19:47:55 +(@PATH,47,-131.8122,323.8088,-43.84772,0,0,0,0,100,0), -- 19:47:57 +(@PATH,48,-129.3122,319.8088,-44.34772,0,0,0,0,100,0), -- 19:47:57 +(@PATH,49,-127.2311,318.8854,-44.18322,0,0,0,0,100,0), -- 19:48:01 +(@PATH,50,-123.7311,317.3854,-44.43322,0,0,0,0,100,0), -- 19:48:01 +(@PATH,51,-119.1036,317.5869,-45.31766,0,0,0,0,100,0); -- 19:48:03 +-- 0x1C16F408C004BF400059E900000B2760 .go -116.1971 317.7787 -46.08444 + +-- Pathing for Shrike Bat Entry: 4861 'TDB FORMAT' +SET @NPC := 33522; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-34.35824,`position_y`=349.1816,`position_z`=-44.71794 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-34.35824,349.1816,-44.71794,0,0,0,0,100,0), -- 19:54:43 +(@PATH,2,-39.45177,352.6617,-46.25263,0,0,0,0,100,0), -- 19:54:48 +(@PATH,3,-41.51308,355.655,-46.53062,0,0,0,0,100,0), -- 19:54:52 +(@PATH,4,-43.01308,359.905,-47.28062,0,0,0,0,100,0), -- 19:54:52 +(@PATH,5,-44.79412,364.367,-48.26569,0,0,0,0,100,0), -- 19:54:55 +(@PATH,6,-45.79412,367.367,-48.51569,0,0,0,0,100,0), -- 19:54:55 +(@PATH,7,-48.12923,369.0743,-49.55631,0,0,0,0,100,0), -- 19:54:57 +(@PATH,8,-49.62923,369.5743,-49.80631,0,0,0,0,100,0), -- 19:54:57 +(@PATH,9,-58.34222,370.8102,-50.34889,0,0,0,0,100,0), -- 19:55:02 +(@PATH,10,-64.80667,367.5034,-50.34549,0,0,0,0,100,0), -- 19:55:05 +(@PATH,11,-71.09432,360.0078,-51.03568,0,0,0,0,100,0), -- 19:55:08 +(@PATH,12,-72.84432,359.0078,-51.28568,0,0,0,0,100,0), -- 19:55:08 +(@PATH,13,-77.36659,356.679,-50.97245,0,0,0,0,100,0), -- 19:55:12 +(@PATH,14,-79.61659,355.929,-50.72245,0,0,0,0,100,0), -- 19:55:12 +(@PATH,15,-83.36659,354.429,-50.97245,0,0,0,0,100,0), -- 19:55:12 +(@PATH,16,-85.8164,353.4018,-50.05049,0,0,0,0,100,0), -- 19:55:16 +(@PATH,17,-90.8164,351.9018,-49.30049,0,0,0,0,100,0), -- 19:55:16 +(@PATH,18,-99.78505,351.1479,-48.29544,0,0,0,0,100,0), -- 19:55:20 +(@PATH,19,-102.785,351.3979,-48.29544,0,0,0,0,100,0), -- 19:55:20 +(@PATH,20,-96.03415,350.9953,-48.6471,0,0,0,0,100,0), -- 19:55:27 +(@PATH,21,-86.49751,353.2874,-49.41515,0,0,0,0,100,0), -- 19:55:31 +(@PATH,22,-84.99751,353.7874,-50.41515,0,0,0,0,100,0), -- 19:55:31 +(@PATH,23,-84.28488,354.1664,-50.5457,0,0,0,0,100,0), -- 19:55:35 +(@PATH,24,-79.78488,355.6664,-50.5457,0,0,0,0,100,0), -- 19:55:35 +(@PATH,25,-77.28488,356.6664,-50.7957,0,0,0,0,100,0), -- 19:55:35 +(@PATH,26,-71.36815,359.9686,-51.01308,0,0,0,0,100,0), -- 19:55:40 +(@PATH,27,-68.36815,361.9686,-50.76308,0,0,0,0,100,0), -- 19:55:40 +(@PATH,28,-65.49499,366.807,-50.34712,0,0,0,0,100,0), -- 19:55:44 +(@PATH,29,-58.40037,370.9284,-50.30991,0,0,0,0,100,0), -- 19:55:46 +(@PATH,30,-57.15037,371.1784,-50.30991,0,0,0,0,100,0), -- 19:55:46 +(@PATH,31,-55.87487,371.4779,-50.10828,0,0,0,0,100,0), -- 19:55:50 +(@PATH,32,-50.62487,369.9779,-49.85828,0,0,0,0,100,0), -- 19:55:50 +(@PATH,33,-48.12487,369.4779,-49.60828,0,0,0,0,100,0), -- 19:55:50 +(@PATH,34,-45.93803,367.2723,-48.61888,0,0,0,0,100,0), -- 19:55:53 +(@PATH,35,-44.93803,364.7723,-48.36888,0,0,0,0,100,0), -- 19:55:53 +(@PATH,36,-43.17387,359.995,-47.31218,0,0,0,0,100,0), -- 19:55:56 +(@PATH,37,-41.67387,356.745,-46.56218,0,0,0,0,100,0), -- 19:55:56 +(@PATH,38,-35.86934,350.4595,-45.71741,0,0,0,0,100,0); -- 19:56:01 +-- 0x1C16F408C004BF400059E900000B2761 .go -34.35824 349.1816 -44.71794 + +-- Pathing for Shrike Bat Entry: 4861 'TDB FORMAT' +SET @NPC := 30085; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-142.7949,`position_y`=225.2512,`position_z`=-45.7625 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-142.7949,225.2512,-45.7625,0,0,0,0,100,0), -- 19:46:47 +(@PATH,2,-136.7979,229.3257,-47.20895,0,0,0,0,100,0), -- 19:46:54 +(@PATH,3,-135.2979,230.3257,-47.45895,0,0,0,0,100,0), -- 19:46:54 +(@PATH,4,-133.7979,231.3257,-47.20895,0,0,0,0,100,0), -- 19:46:54 +(@PATH,5,-132.9678,231.759,-47.66918,0,0,0,0,100,0), -- 19:46:58 +(@PATH,6,-130.4678,233.759,-47.66918,0,0,0,0,100,0), -- 19:46:58 +(@PATH,7,-124.7075,239.272,-48.10035,0,0,0,0,100,0), -- 19:47:01 +(@PATH,8,-122.997,243.3047,-47.74892,0,0,0,0,100,0), -- 19:47:04 +(@PATH,9,-122.2632,250.6377,-48.21873,0,0,0,0,100,0), -- 19:47:06 +(@PATH,10,-122.0635,253.1956,-47.99726,0,0,0,0,100,0), -- 19:47:09 +(@PATH,11,-124.687,265.2274,-46.29008,0,0,0,0,100,0), -- 19:47:11 +(@PATH,12,-125.7654,267.4338,-45.58253,0,0,0,0,100,0), -- 19:47:15 +(@PATH,13,-126.7654,270.4338,-45.58253,0,0,0,0,100,0), -- 19:47:15 +(@PATH,14,-127.0154,271.6838,-45.58253,0,0,0,0,100,0), -- 19:47:15 +(@PATH,15,-128.2654,275.6838,-45.83253,0,0,0,0,100,0), -- 19:47:15 +(@PATH,16,-129.7654,280.1838,-45.58253,0,0,0,0,100,0), -- 19:47:15 +(@PATH,17,-132.0325,283.5439,-45.71447,0,0,0,0,100,0), -- 19:47:21 +(@PATH,18,-133.5325,285.2939,-45.96447,0,0,0,0,100,0), -- 19:47:21 +(@PATH,19,-134.5325,286.5439,-45.96447,0,0,0,0,100,0), -- 19:47:21 +(@PATH,20,-135.2825,287.5439,-45.71447,0,0,0,0,100,0), -- 19:47:21 +(@PATH,21,-136.0218,288.4235,-45.95388,0,0,0,0,100,0), -- 19:47:24 +(@PATH,22,-139.2718,292.4235,-45.95388,0,0,0,0,100,0), -- 19:47:24 +(@PATH,23,-140.0702,299.2286,-46.03945,0,0,0,0,100,0), -- 19:47:27 +(@PATH,24,-140.2864,299.1003,-45.87361,0,0,0,0,100,0), -- 19:47:32 +(@PATH,25,-139.1992,292.5916,-45.83009,0,0,0,0,100,0), -- 19:47:33 +(@PATH,26,-133.8004,285.6141,-45.93703,0,0,0,0,100,0), -- 19:47:37 +(@PATH,27,-132.0504,283.6141,-45.68703,0,0,0,0,100,0), -- 19:47:37 +(@PATH,28,-129.9505,280.1571,-45.59953,0,0,0,0,100,0), -- 19:47:39 +(@PATH,29,-128.7005,275.6571,-45.84953,0,0,0,0,100,0), -- 19:47:39 +(@PATH,30,-127.2005,271.6571,-45.59953,0,0,0,0,100,0), -- 19:47:39 +(@PATH,31,-126.7005,270.4071,-45.59953,0,0,0,0,100,0), -- 19:47:39 +(@PATH,32,-125.7005,267.4071,-45.59953,0,0,0,0,100,0), -- 19:47:39 +(@PATH,33,-123.5866,262.6984,-47.1854,0,0,0,0,100,0), -- 19:47:46 +(@PATH,34,-122.0696,253.5793,-48.02232,0,0,0,0,100,0), -- 19:47:50 +(@PATH,35,-122.1644,250.7279,-48.18776,0,0,0,0,100,0), -- 19:47:52 +(@PATH,36,-122.1644,248.4779,-48.18776,0,0,0,0,100,0), -- 19:47:52 +(@PATH,37,-122.9575,243.5141,-47.85612,0,0,0,0,100,0), -- 19:47:55 +(@PATH,38,-127.747,236.1646,-47.66065,0,0,0,0,100,0), -- 19:47:57 +(@PATH,39,-130.1325,234.0169,-47.69135,0,0,0,0,100,0), -- 19:48:00 +(@PATH,40,-136.8559,229.2036,-47.26409,0,0,0,0,100,0), -- 19:48:02 +(@PATH,41,-138.6059,227.9536,-46.76409,0,0,0,0,100,0); -- 19:48:02 +-- 0x1C16F408C004BF400059E900010B2760 .go -142.7949 225.2512 -45.7625 + +-- Pathing for Stone Steward Entry: 4860 'TDB FORMAT' +SET @NPC := 28365; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=157.359,`position_y`=278.6508,`position_z`=-26.48766 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,157.359,278.6508,-26.48766,0,0,0,0,100,0), -- 19:58:53 +(@PATH,2,158.1053,277.0509,-26.33149,0,0,0,0,100,0), -- 19:59:03 +(@PATH,3,159.3106,274.6482,-26.47079,0,0,0,0,100,0), -- 19:59:10 +(@PATH,4,161.3106,270.6482,-27.72079,0,0,0,0,100,0), -- 19:59:10 +(@PATH,5,162.0606,268.6482,-28.22079,0,0,0,0,100,0), -- 19:59:10 +(@PATH,6,162.5606,267.6482,-28.97079,0,0,0,0,100,0), -- 19:59:10 +(@PATH,7,169.1669,252.4363,-29.11036,0,0,0,0,100,0), -- 19:59:20 +(@PATH,8,170.2946,247.0149,-29.11045,0,0,0,0,100,0), -- 19:59:22 +(@PATH,9,141.0065,231.4473,-42.17465,0,0,0,0,100,0), -- 19:59:26 +(@PATH,10,135.2668,228.6892,-42.44057,0,0,0,0,100,0), -- 19:59:38 +(@PATH,11,126.2668,224.4392,-42.44057,0,0,0,0,100,0), -- 19:59:38 +(@PATH,12,125.0168,223.9392,-42.44057,0,0,0,0,100,0), -- 19:59:38 +(@PATH,13,117.7668,220.4392,-42.44057,0,0,0,0,100,0), -- 19:59:38 +(@PATH,14,115.0168,219.1892,-42.44057,0,0,0,0,100,0), -- 19:59:38 +(@PATH,15,112.5168,217.9392,-42.44057,0,0,0,0,100,0), -- 19:59:38 +(@PATH,16,111.5168,217.4392,-42.44057,0,0,0,0,100,0), -- 19:59:38 +(@PATH,17,110.6416,216.7866,-42.73357,0,0,0,0,100,0), -- 19:59:50 +(@PATH,18,91.14159,207.5366,-54.48357,0,0,0,0,100,0), -- 19:59:50 +(@PATH,19,89.71228,206.7954,-54.72824,0,0,0,0,100,0), -- 20:00:01 +(@PATH,20,81.51923,204.1784,-54.72749,0,0,0,0,100,0), -- 20:00:03 +(@PATH,21,70.45786,225.8585,-53.83768,0,0,0,0,100,0), -- 20:00:07 +(@PATH,22,67.45786,231.8585,-52.08768,0,0,0,0,100,0), -- 20:00:07 +(@PATH,23,66.45786,233.8585,-52.08768,0,0,0,0,100,0), -- 20:00:07 +(@PATH,24,65.99206,234.5262,-51.94806,0,0,0,0,100,0), -- 20:00:18 +(@PATH,25,57.07329,252.1399,-51.94805,0,0,0,0,100,0), -- 20:00:25 +(@PATH,26,56.98771,251.7677,-52.19805,0,0,0,0,100,0), -- 20:00:31 +(@PATH,27,57.20819,251.6948,-51.94805,0,0,0,0,100,0), -- 20:00:32 +(@PATH,28,70.53458,225.9198,-53.83727,0,0,0,0,100,0), -- 20:00:41 +(@PATH,29,71.03458,224.9198,-54.58727,0,0,0,0,100,0), -- 20:00:41 +(@PATH,30,78.36176,210.3076,-54.72746,0,0,0,0,100,0), -- 20:00:52 +(@PATH,31,81.43523,204.0119,-54.72772,0,0,0,0,100,0), -- 20:00:54 +(@PATH,32,91.10306,207.5477,-54.68492,0,0,0,0,100,0), -- 20:00:58 +(@PATH,33,115.051,219.2345,-42.26912,0,0,0,0,100,0), -- 20:01:09 +(@PATH,34,117.551,220.4845,-42.26912,0,0,0,0,100,0), -- 20:01:09 +(@PATH,35,124.801,223.7345,-42.26912,0,0,0,0,100,0), -- 20:01:09 +(@PATH,36,126.301,224.4845,-42.26912,0,0,0,0,100,0), -- 20:01:09 +(@PATH,37,135.301,228.7345,-42.26912,0,0,0,0,100,0), -- 20:01:09 +(@PATH,38,141.7687,232.0445,-42.17444,0,0,0,0,100,0), -- 20:01:21 +(@PATH,39,163.1443,242.3607,-29.2016,0,0,0,0,100,0), -- 20:01:33 +(@PATH,40,170.1688,247.0374,-29.11083,0,0,0,0,100,0), -- 20:01:37 +(@PATH,41,162.2002,268.689,-28.2213,0,0,0,0,100,0), -- 20:01:39 +(@PATH,42,161.2002,270.689,-27.7213,0,0,0,0,100,0), -- 20:01:39 +(@PATH,43,159.4502,274.689,-26.4713,0,0,0,0,100,0), -- 20:01:39 +(@PATH,44,158.2711,277.0461,-26.35968,0,0,0,0,100,0); -- 20:01:49 +-- 0x1C16F408C004BF000059E900020B2760 .go 157.359 278.6508 -26.48766 + +-- Pathing for Stone Steward Entry: 4860 'TDB FORMAT' +SET @NPC := 27473; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-15.69449,`position_y`=279.0179,`position_z`=-47.67377 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-15.69449,279.0179,-47.67377,0,0,0,0,100,0), -- 19:46:43 +(@PATH,2,-20.67551,276.4372,-47.63821,0,0,0,0,100,0), -- 19:46:46 +(@PATH,3,-21.52459,276.0081,-47.67233,0,0,0,0,100,0), -- 19:46:47 +(@PATH,4,-24.52459,275.5081,-47.92233,0,0,0,0,100,0), -- 19:46:47 +(@PATH,5,-25.77459,275.0081,-47.92233,0,0,0,0,100,0), -- 19:46:47 +(@PATH,6,-34.79898,273.5978,-48.29856,0,0,0,0,100,0), -- 19:46:51 +(@PATH,7,-36.04898,273.5978,-48.29856,0,0,0,0,100,0), -- 19:46:51 +(@PATH,8,-38.79898,273.0978,-48.54856,0,0,0,0,100,0), -- 19:46:51 +(@PATH,9,-39.34219,272.8535,-48.79059,0,0,0,0,100,0), -- 19:46:56 +(@PATH,10,-41.08632,250.9034,-48.67182,0,0,0,0,100,0), -- 19:47:00 +(@PATH,11,-41.49896,245.6531,-48.172,0,0,0,0,100,0), -- 19:47:05 +(@PATH,12,-41.49896,242.6531,-48.172,0,0,0,0,100,0), -- 19:47:05 +(@PATH,13,-41.49896,241.4031,-48.172,0,0,0,0,100,0), -- 19:47:05 +(@PATH,14,-41.85809,240.7104,-48.07686,0,0,0,0,100,0), -- 19:47:08 +(@PATH,15,-53.59785,238.2883,-48.27911,0,0,0,0,100,0), -- 19:47:12 +(@PATH,16,-59.84785,238.2883,-48.02911,0,0,0,0,100,0), -- 19:47:12 +(@PATH,17,-62.09785,238.2883,-48.77911,0,0,0,0,100,0), -- 19:47:12 +(@PATH,18,-64.84785,238.2883,-49.27911,0,0,0,0,100,0), -- 19:47:12 +(@PATH,19,-59.91378,238.0276,-48.03023,0,0,0,0,100,0), -- 19:47:20 +(@PATH,20,-53.66378,238.0276,-48.28023,0,0,0,0,100,0), -- 19:47:20 +(@PATH,21,-52.16378,238.0276,-48.28023,0,0,0,0,100,0), -- 19:47:20 +(@PATH,22,-49.32967,238.2136,-48.07516,0,0,0,0,100,0), -- 19:47:25 +(@PATH,23,-41.65893,245.4057,-48.07581,0,0,0,0,100,0), -- 19:47:29 +(@PATH,24,-41.10932,250.7121,-48.67118,0,0,0,0,100,0), -- 19:47:33 +(@PATH,25,-40.51412,262.4556,-48.76871,0,0,0,0,100,0), -- 19:47:37 +(@PATH,26,-34.8937,273.3388,-48.22985,0,0,0,0,100,0), -- 19:47:42 +(@PATH,27,-32.8937,273.5888,-48.47985,0,0,0,0,100,0), -- 19:47:42 +(@PATH,28,-24.87062,275.2746,-47.7992,0,0,0,0,100,0), -- 19:47:46 +(@PATH,29,-22.12062,275.7746,-47.7992,0,0,0,0,100,0), -- 19:47:46 +(@PATH,30,-18.17185,277.6628,-47.70597,0,0,0,0,100,0); -- 19:47:50 +-- 0x1C16F408C004BF000059E900028B2760 .go -15.69449 279.0179 -47.67377 + +-- Pathing for Stone Steward Entry: 4860 'TDB FORMAT' +SET @NPC := 27472; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-90.22527,`position_y`=312.3529,`position_z`=-50.81741 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-90.22527,312.3529,-50.81741,0,0,0,0,100,0), -- 19:46:26 +(@PATH,2,-89.75098,303.8569,-50.53365,0,0,0,0,100,0), -- 19:46:32 +(@PATH,3,-89.58408,299.2126,-49.18354,0,0,0,0,100,0), -- 19:46:37 +(@PATH,4,-89.58408,298.2126,-48.93354,0,0,0,0,100,0), -- 19:46:37 +(@PATH,5,-89.58408,293.9626,-47.43354,0,0,0,0,100,0), -- 19:46:37 +(@PATH,6,-89.33408,291.7126,-47.43354,0,0,0,0,100,0), -- 19:46:37 +(@PATH,7,-89.01637,285.0681,-47.38007,0,0,0,0,100,0), -- 19:46:43 +(@PATH,8,-89.01088,254.6502,-47.48074,0,0,0,0,100,0), -- 19:46:50 +(@PATH,9,-89.01088,251.4002,-47.48074,0,0,0,0,100,0), -- 19:46:50 +(@PATH,10,-88.93411,260.2717,-47.48082,0,0,0,0,100,0), -- 19:46:58 +(@PATH,11,-89.04137,285.1695,-47.38035,0,0,0,0,100,0), -- 19:47:03 +(@PATH,12,-89.46567,293.7497,-47.41035,0,0,0,0,100,0), -- 19:47:12 +(@PATH,13,-89.46567,298.2497,-48.91035,0,0,0,0,100,0), -- 19:47:12 +(@PATH,14,-89.46567,299.2497,-49.16035,0,0,0,0,100,0), -- 19:47:12 +(@PATH,15,-90.22608,307.6347,-50.82426,0,0,0,0,100,0); -- 19:47:18 +-- 0x1C16F408C004BF000059E900030B2760 .go -90.22527 312.3529 -50.81741 + +-- Pathing for Stone Steward Entry: 4860 'TDB FORMAT' +SET @NPC := 27471; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-107.2204,`position_y`=202.1764,`position_z`=-40.99639 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-107.2204,202.1764,-40.99639,0,0,0,0,100,0), -- 19:50:58 +(@PATH,2,-106.9112,202.3231,-40.72182,0,0,0,0,100,0), -- 19:50:59 +(@PATH,3,-102.3103,204.8115,-39.65949,0,0,0,0,100,0), -- 19:51:00 +(@PATH,4,-97.74992,214.5336,-41.63697,0,0,0,0,100,0), -- 19:51:03 +(@PATH,5,-96.3933,219.4432,-43.16748,0,0,0,0,100,0), -- 19:51:06 +(@PATH,6,-93.05585,222.2282,-44.29628,0,0,0,0,100,0), -- 19:51:08 +(@PATH,7,-91.30585,222.4782,-45.79628,0,0,0,0,100,0), -- 19:51:08 +(@PATH,8,-89.56384,221.7615,-46.28793,0,0,0,0,100,0), -- 19:51:11 +(@PATH,9,-88.31384,220.2615,-46.03793,0,0,0,0,100,0), -- 19:51:11 +(@PATH,10,-84.37595,219.1314,-47.14322,0,0,0,0,100,0), -- 19:51:14 +(@PATH,11,-82.37595,219.8814,-48.39322,0,0,0,0,100,0), -- 19:51:14 +(@PATH,12,-79.37595,220.6314,-49.39322,0,0,0,0,100,0), -- 19:51:14 +(@PATH,13,-76.82669,224.0322,-49.37569,0,0,0,0,100,0), -- 19:51:17 +(@PATH,14,-75.57669,227.0322,-49.37569,0,0,0,0,100,0), -- 19:51:17 +(@PATH,15,-74.57669,229.2822,-49.37569,0,0,0,0,100,0), -- 19:51:17 +(@PATH,16,-71.33888,233.2636,-49.4961,0,0,0,0,100,0), -- 19:51:22 +(@PATH,17,-65.08888,237.0136,-49.4961,0,0,0,0,100,0), -- 19:51:22 +(@PATH,18,-62.24201,238.0235,-48.78309,0,0,0,0,100,0), -- 19:51:27 +(@PATH,19,-59.99201,238.2735,-48.03309,0,0,0,0,100,0), -- 19:51:27 +(@PATH,20,-53.99201,238.5235,-48.03309,0,0,0,0,100,0), -- 19:51:27 +(@PATH,21,-52.93201,238.7369,-48.07719,0,0,0,0,100,0), -- 19:51:32 +(@PATH,22,-43.56981,231.3157,-48.09142,0,0,0,0,100,0), -- 19:51:35 +(@PATH,23,-42.54251,216.3974,-48.08791,0,0,0,0,100,0), -- 19:51:40 +(@PATH,24,-42.79251,212.3974,-48.08791,0,0,0,0,100,0), -- 19:51:40 +(@PATH,25,-45.2256,206.4191,-48.07826,0,0,0,0,100,0), -- 19:51:46 +(@PATH,26,-45.29718,206.2893,-48.07718,0,0,0,0,100,0), -- 19:51:51 +(@PATH,27,-42.43665,216.1878,-48.09149,0,0,0,0,100,0), -- 19:51:54 +(@PATH,28,-42.18665,219.1878,-48.09149,0,0,0,0,100,0), -- 19:51:54 +(@PATH,29,-43.43148,231.2084,-48.08014,0,0,0,0,100,0), -- 19:51:58 +(@PATH,30,-52.35088,238.3348,-48.08712,0,0,0,0,100,0), -- 19:52:03 +(@PATH,31,-59.86867,238.2005,-48.0407,0,0,0,0,100,0), -- 19:52:08 +(@PATH,32,-62.11867,237.9505,-48.7907,0,0,0,0,100,0), -- 19:52:08 +(@PATH,33,-65.00171,237.1759,-49.39082,0,0,0,0,100,0), -- 19:52:12 +(@PATH,34,-71.50171,233.1759,-49.39082,0,0,0,0,100,0), -- 19:52:12 +(@PATH,35,-74.66057,229.2685,-49.48391,0,0,0,0,100,0), -- 19:52:17 +(@PATH,36,-75.16057,227.0185,-49.48391,0,0,0,0,100,0), -- 19:52:17 +(@PATH,37,-76.66057,224.0185,-49.48391,0,0,0,0,100,0), -- 19:52:17 +(@PATH,38,-77.41057,221.7685,-49.48391,0,0,0,0,100,0), -- 19:52:17 +(@PATH,39,-79.18384,220.6745,-49.24834,0,0,0,0,100,0), -- 19:52:22 +(@PATH,40,-82.18384,219.6745,-48.24834,0,0,0,0,100,0), -- 19:52:22 +(@PATH,41,-83.43384,219.4245,-47.49834,0,0,0,0,100,0), -- 19:52:22 +(@PATH,42,-89.23185,221.8512,-46.51452,0,0,0,0,100,0), -- 19:52:25 +(@PATH,43,-92.72166,222.22,-44.23815,0,0,0,0,100,0), -- 19:52:27 +(@PATH,44,-94.97166,221.72,-43.73815,0,0,0,0,100,0), -- 19:52:27 +(@PATH,45,-96.1684,219.4541,-43.43246,0,0,0,0,100,0), -- 19:52:30 +(@PATH,46,-98.76186,211.6802,-40.79076,0,0,0,0,100,0), -- 19:52:32 +(@PATH,47,-102.1261,204.7718,-39.52556,0,0,0,0,100,0), -- 19:52:36 +(@PATH,48,-103.2557,203.5211,-39.62801,0,0,0,0,100,0); -- 19:52:39 +-- 0x1C16F408C004BF000059E900038B2760 .go -107.2204 202.1764 -40.99639 + +-- Pathing for Stonevault Brawler Entry: 4855 'TDB FORMAT' +SET @NPC := 30106; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=9.185728,`position_y`=361.806,`position_z`=-42.52501 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,9.185728,361.806,-42.52501,0,0,0,0,100,0), -- 19:55:52 +(@PATH,2,10.68573,361.306,-42.77501,0,0,0,0,100,0), -- 19:55:52 +(@PATH,3,11.68573,361.056,-43.02501,0,0,0,0,100,0), -- 19:55:52 +(@PATH,4,14.93573,360.306,-43.27501,0,0,0,0,100,0), -- 19:55:52 +(@PATH,5,16.43573,360.056,-43.27501,0,0,0,0,100,0), -- 19:55:52 +(@PATH,6,17.27649,359.817,-43.0314,0,0,0,0,100,0), -- 19:55:56 +(@PATH,7,21.02649,359.317,-42.7814,0,0,0,0,100,0), -- 19:55:56 +(@PATH,8,22.77649,359.067,-42.5314,0,0,0,0,100,0), -- 19:55:56 +(@PATH,9,30.55592,356.7866,-42.15283,0,0,0,0,100,0), -- 19:56:01 +(@PATH,10,35.82129,353.2513,-42.55444,0,0,0,0,100,0), -- 19:56:03 +(@PATH,11,38.37708,347.7673,-42.24792,0,0,0,0,100,0), -- 19:56:05 +(@PATH,12,38.87708,346.7673,-41.99792,0,0,0,0,100,0), -- 19:56:05 +(@PATH,13,40.62708,342.7673,-42.24792,0,0,0,0,100,0), -- 19:56:05 +(@PATH,14,39.82348,338.4128,-42.98926,0,0,0,0,100,0), -- 19:56:09 +(@PATH,15,34.19891,331.8911,-42.67289,0,0,0,0,100,0), -- 19:56:13 +(@PATH,16,33.44891,331.1411,-42.17289,0,0,0,0,100,0), -- 19:56:13 +(@PATH,17,31.19891,329.6411,-41.92289,0,0,0,0,100,0), -- 19:56:13 +(@PATH,18,27.54275,327.8886,-40.85126,0,0,0,0,100,0), -- 19:56:18 +(@PATH,19,20.32842,326.7422,-39.95414,0,0,0,0,100,0), -- 19:56:19 +(@PATH,20,19.07842,326.4922,-39.95414,0,0,0,0,100,0), -- 19:56:19 +(@PATH,21,9.621592,325.83,-38.5783,0,0,0,0,100,0), -- 19:56:23 +(@PATH,22,7.871592,325.83,-38.3283,0,0,0,0,100,0), -- 19:56:23 +(@PATH,23,9.734783,325.8379,-38.52752,0,0,0,0,100,0), -- 19:56:27 +(@PATH,24,13.93066,326.2504,-38.2508,0,0,0,0,100,0), -- 19:56:31 +(@PATH,25,22.48125,319.4749,-39.35741,0,0,0,0,100,0), -- 19:56:32 +(@PATH,26,26.9873,314.6351,-39.25242,0,0,0,0,100,0), -- 19:56:37 +(@PATH,27,27.76221,314.1161,-39.14816,0,0,0,0,100,0), -- 19:56:38 +(@PATH,28,37.06132,309.7848,-38.86451,0,0,0,0,100,0), -- 19:56:41 +(@PATH,29,41.82753,309.0237,-39.42388,0,0,0,0,100,0), -- 19:56:43 +(@PATH,30,43.02345,310.306,-39.93136,0,0,0,0,100,0), -- 19:56:44 +(@PATH,31,43.73434,313.0781,-41.1359,0,0,0,0,100,0), -- 19:56:45 +(@PATH,32,43.48434,313.8281,-41.3859,0,0,0,0,100,0), -- 19:56:45 +(@PATH,33,42.98434,315.8281,-41.6359,0,0,0,0,100,0), -- 19:56:45 +(@PATH,34,42.48434,317.0781,-42.1359,0,0,0,0,100,0), -- 19:56:45 +(@PATH,35,42.1835,317.9608,-42.14388,0,0,0,0,100,0), -- 19:56:48 +(@PATH,36,40.1835,321.7108,-42.14388,0,0,0,0,100,0), -- 19:56:48 +(@PATH,37,36.3874,327.808,-42.69028,0,0,0,0,100,0), -- 19:56:52 +(@PATH,38,34.34555,331.4348,-42.79681,0,0,0,0,100,0), -- 19:56:54 +(@PATH,39,36.48765,335.1658,-43.15406,0,0,0,0,100,0), -- 19:56:55 +(@PATH,40,39.48765,338.1658,-43.15406,0,0,0,0,100,0), -- 19:56:55 +(@PATH,41,39.95882,338.9326,-42.81082,0,0,0,0,100,0), -- 19:56:59 +(@PATH,42,40.59457,346.0652,-41.82687,0,0,0,0,100,0), -- 19:57:01 +(@PATH,43,37.89469,351.2465,-42.51594,0,0,0,0,100,0), -- 19:57:02 +(@PATH,44,36.39469,353.2465,-42.51594,0,0,0,0,100,0), -- 19:57:02 +(@PATH,45,35.03273,354.4401,-42.57788,0,0,0,0,100,0), -- 19:57:06 +(@PATH,46,25.94484,356.5529,-42.75359,0,0,0,0,100,0), -- 19:57:09 +(@PATH,47,22.69484,357.5529,-43.00359,0,0,0,0,100,0), -- 19:57:09 +(@PATH,48,16.94927,359.168,-43.14427,0,0,0,0,100,0), -- 19:57:12 +(@PATH,49,11.69927,360.918,-42.89427,0,0,0,0,100,0), -- 19:57:12 +(@PATH,50,10.69927,361.168,-42.64427,0,0,0,0,100,0); -- 19:57:12 +-- 0x1C16F408C004BDC00059E900020B2760 .go 9.185728 361.806 -42.52501 + +-- Pathing for Ancient Stone Keeper Entry: 7206 'TDB FORMAT' +SET @NPC := 27553; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-38.42904,`position_y`=221.2527,`position_z`=-48.3663 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-38.42904,221.2527,-48.3663,3.159046,40000,0,0,100,0), -- 20:00:31 +(@PATH,2,-46.91619,220.9454,-48.09736,0,0,0,0,100,0), -- 20:01:17 +(@PATH,3,-54.90334,220.6381,-48.32841,0,40000,0,0,100,0), -- 20:01:17 +(@PATH,4,-43.16619,221.1954,-48.09736,0,0,0,0,100,0); -- 20:02:18 +-- 0x1C16F408C00709800059E900000B2760 .go -38.42904 221.2527 -48.3663 + +-- Add animation +DELETE FROM `creature_addon` WHERE `guid` IN (29384, 29488, 29574, 29573, 28536, 28539, 28538, 28537, 28798); +INSERT INTO `creature_addon` (`guid`, `bytes2`, `emote`, `auras`) VALUES +(29384, 4097, 233, NULL), +(29488, 4097, 233, NULL), +(29574, 4097, 233, NULL), +(29573, 4097, 233, NULL), +(28536, 4097, 233, NULL), +(28539, 4097, 233, NULL), +(28538, 4097, 233, NULL), +(28537, 4097, 233, NULL), +(28798, 4097, 233, NULL), +(28544, 4097, 233, NULL), +(28541, 4097, 233, NULL), +(28542, 4097, 233, NULL), +(28543, 4097, 233, NULL); + +-- Remove too many spawns +DELETE FROM `creature` WHERE `guid` IN (33523, 33512, 28800, 28799, 28798, 28797, 28796, 28786); diff --git a/sql/updates/world/2015_03_26_01_world.sql b/sql/updates/world/2015_03_26_01_world.sql new file mode 100644 index 00000000000..afd0d99691a --- /dev/null +++ b/sql/updates/world/2015_03_26_01_world.sql @@ -0,0 +1,121 @@ +-- +SET @ADMETIUS := 17658; +SET @LEGOSO := 17982; +SET @SIRONAS := 17678; +SET @TESLA := 17979; + +-- Sironas +-- Equips +DELETE FROM `creature_equip_template` WHERE `entry`=@SIRONAS; +INSERT INTO `creature_equip_template` (`entry`, `id`, `itemEntry1`) VALUES +(@SIRONAS, 1, 2244); + +-- Spells & scriptname +UPDATE `creature_template` SET `spell1`=10966, `spell2`=12742, `spell3`=8282, `spell4`=0, `ScriptName`='npc_sironas' WHERE `entry`=@SIRONAS; +-- Text +DELETE FROM `creature_text` WHERE `entry`=@SIRONAS; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `probability`, `comment`, `BroadcastTextId`) VALUES +(@SIRONAS, 0, 0, 'Petulant children, pray to your gods for you are about to meet them!', 14, 100, 'Sironas SAY_SIRONAS_1 (pre aggro)',14666); + +-- Tesla targets +-- Disable movement +UPDATE `creature` SET `spawndist`=0, `MovementType`=0 WHERE `Id`=@TESLA; +-- Position fix +UPDATE `creature` SET `position_x`=-1964.13, `position_y`=-10538.7, `position_z`=198.928 WHERE `Id`=@TESLA AND `guid`=63627; +UPDATE `creature` SET `position_x`=-1926.01, `position_y`=-10577.4, `position_z`=194.301 WHERE `Id`=@TESLA AND `guid`=63628; +UPDATE `creature` SET `position_x`=-1921.15, `position_y`=-10583.0, `position_z`=213.888 WHERE `Id`=@TESLA AND `guid`=63629; +UPDATE `creature` SET `position_x`=-1886.11, `position_y`=-10534.5, `position_z`=199.901 WHERE `Id`=@TESLA AND `guid`=63630; + +-- Bloodmyst Tesla target condition +DELETE FROM `conditions` WHERE `SourceEntry`=31611; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`) VALUES +(13, 1, 31611, 0, 0, 31, 0, 3, @SIRONAS, 0); + +-- Legoso +-- Scriptname +UPDATE `creature_template` SET `ScriptName`='npc_demolitionist_legoso' WHERE `entry`=@LEGOSO; +-- Respawn time (this npc respawns very quickly, http://www.wowhead.com/npc=@LEGOSO#comments:id=752881:reply=111200) +UPDATE `creature` SET `spawntimesecs`=30 WHERE `id`=@LEGOSO; + +-- Text +DELETE FROM `creature_text` WHERE `entry`=@LEGOSO; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `probability`, `emote`, `comment`, `BroadcastTextId`) VALUES +(@LEGOSO, 0, 0, 'There''s no turning back now. Stay close and watch my back.', 12, 100, 1, 'npc_demolitionist_legoso SAY_LEGOSO_1',14648), +(@LEGOSO, 1, 0, 'There it is! Do you see where the large red crystal is jutting out from the Vector Coil? That''s where I need to plant the first set of explosives.', 12, 100, 25, 'npc_demolitionist_legoso SAY_LEGOSO_2',14649), +(@LEGOSO, 2, 0, 'Cover me!', 12, 100, 5, 'npc_demolitionist_legoso SAY_LEGOSO_3',14650), +(@LEGOSO, 3, 0, 'It won''t be much longer. Just keep them off me while I work.', 12, 100, 69, 'npc_demolitionist_legoso SAY_LEGOSO_4',14651), +(@LEGOSO, 4, 0, 'That''ll do it! Quickly, take cover!', 12, 100, 5, 'npc_demolitionist_legoso SAY_LEGOSO_5',14652), +(@LEGOSO, 5, 0, '3...', 12, 100, 0, 'npc_demolitionist_legoso SAY_LEGOSO_6',14653), +(@LEGOSO, 6, 0, '2...', 12, 100, 0, 'npc_demolitionist_legoso SAY_LEGOSO_7',14654), +(@LEGOSO, 7, 0, '1...', 12, 100, 0, 'npc_demolitionist_legoso SAY_LEGOSO_8',14655), +(@LEGOSO, 8, 0, 'Don''t get too excited, hero, that was the easy part. The challenge lies ahead! Let''s go.', 12, 100, 1, 'npc_demolitionist_legoso SAY_LEGOSO_9',14656), +(@LEGOSO, 9, 0, 'What in the Nether is that?!?!', 12, 100, 5, 'npc_demolitionist_legoso SAY_LEGOSO_10',14657), +(@LEGOSO, 10, 0, 'Be ready for anything.', 12, 100, 1, 'npc_demolitionist_legoso SAY_LEGOSO_11',14658), +(@LEGOSO, 11, 0, 'Blessed Light! She''s siphoning energy right out of the Vector Coil!', 12, 100, 53, 'npc_demolitionist_legoso SAY_LEGOSO_12',14659), +(@LEGOSO, 12, 0, 'Cover me, we have to do this quickly. Once I blow the support on this side, it will disrupt the energy beams and she''ll break out! I doubt very much that she''ll be happy to see us.', 12, 100, 1, 'npc_demolitionist_legoso SAY_LEGOSO_13',14660), +(@LEGOSO, 13, 0, 'I''ve almost got it! Just a little more time...', 12, 100, 0, 'npc_demolitionist_legoso SAY_LEGOSO_14',14661), +(@LEGOSO, 14, 0, 'Take cover and be ready for the fight of your life!', 12, 100, 5, 'npc_demolitionist_legoso SAY_LEGOSO_15',14662), +(@LEGOSO, 15, 0, '3...', 12, 100, 0, 'npc_demolitionist_legoso SAY_LEGOSO_16',14653), +(@LEGOSO, 16, 0, '2...', 12, 100, 0, 'npc_demolitionist_legoso SAY_LEGOSO_17',14654), +(@LEGOSO, 17, 0, '1...', 12, 100, 0, 'npc_demolitionist_legoso SAY_LEGOSO_18',14655), +(@LEGOSO, 18, 0, 'Holy mother of O''ros!', 12, 100, 5, 'npc_demolitionist_legoso SAY_LEGOSO_19',14663), +(@LEGOSO, 19, 0, 'I... I can''t believe it''s over. You did it! You''ve destoyed the blood elves and their leader!', 12, 100, 1, 'npc_demolitionist_legoso SAY_LEGOSO_20',14664), +(@LEGOSO, 20, 0, 'Get back to Blood Watch. I''ll see you there...', 12, 100, 1, 'npc_demolitionist_legoso SAY_LEGOSO_21',14665); + +-- Waypoints +DELETE FROM `script_waypoint` WHERE `entry`=@LEGOSO; +INSERT INTO `script_waypoint` (`entry`, `pointid`, `location_x`, `location_y`, `location_z`, `waittime`, `point_comment`) VALUES +(@LEGOSO, 1, -1773.64, -11073.9, 76.8923, 0, 'Legoso'), +(@LEGOSO, 2, -1784.13, -11051.1, 77.2078, 0, 'Legoso'), +(@LEGOSO, 3, -1793.02, -11047.5, 77.1118, 0, 'Legoso'), +(@LEGOSO, 4, -1792.87, -11036.8, 76.2142, 0, 'Legoso'), +(@LEGOSO, 5, -1804.07, -11023.6, 69.8951, 0, 'Legoso'), +(@LEGOSO, 6, -1826.2, -11003.5, 67.3465, 0, 'Legoso'), +(@LEGOSO, 7, -1855, -10992.3, 64.5101, 0, 'Legoso'), +(@LEGOSO, 8, -1888.95, -10966.4, 61.1596, 0, 'Legoso'), +(@LEGOSO, 9, -1913.87, -10935.6, 61.4501, 0, 'Legoso'), +(@LEGOSO, 10, -1927.65, -10907.8, 62.7226, 0, 'Legoso'), +(@LEGOSO, 11, -1932.9, -10868.6, 66.2437, 0, 'Legoso'), +(@LEGOSO, 12, -1940.75, -10853.8, 69.1475, 0, 'Legoso'), +(@LEGOSO, 13, -1934.66, -10821.3, 80.0018, 0, 'Legoso'), +(@LEGOSO, 14, -1940.5, -10807.7, 84.7886, 0, 'Legoso'), +(@LEGOSO, 15, -1966.12, -10791.9, 88.6942, 0, 'Legoso'), +(@LEGOSO, 16, -1977.82, -10778.2, 89.1746, 0, 'Legoso'), +(@LEGOSO, 17, -1980.04, -10757.3, 91.1206, 0, 'Legoso'), +(@LEGOSO, 18, -1959.13, -10739.6, 98.335, 0, 'Legoso'), +(@LEGOSO, 19, -1947.52, -10721.8, 108.46, 0, 'Legoso'), +(@LEGOSO, 20, -1947.04, -10711.1, 111.313, 0, 'Legoso'), +(@LEGOSO, 21, -1953.05, -10682.2, 110.582, 0, 'Legoso'), +(@LEGOSO, 22, -1955.6, -10669.8, 110.65, 0, 'Legoso'), +(@LEGOSO, 23, -1967.13, -10677.3, 111.37, 0, 'Legoso'), +(@LEGOSO, 24, -1987.29, -10701.7, 116.038, 0, 'Legoso'), +(@LEGOSO, 25, -2008.1, -10664.8, 120.99, 0, 'Legoso'), +(@LEGOSO, 26, -2021.77, -10648.8, 129.903, 0, 'Legoso'), +(@LEGOSO, 27, -2022.39, -10647.7, 130.624, 0, 'Legoso'), +(@LEGOSO, 28, -2039.34, -10632.7, 143, 0, 'Legoso'), +(@LEGOSO, 29, -2041.41, -10624.6, 145.187, 0, 'Legoso'), +(@LEGOSO, 30, -2036.49, -10617.1, 146.52, 0, 'Legoso'), +(@LEGOSO, 31, -2026.12, -10606.9, 150.263, 0, 'Legoso'), +(@LEGOSO, 32, -1993, -10613.7, 161.852, 0, 'Legoso'), +(@LEGOSO, 33, -1970.41, -10616.8, 163.838, 0, 'Legoso'), +(@LEGOSO, 34, -1953.78, -10590.9, 170.538, 0, 'Legoso'), +(@LEGOSO, 35, -1942.51, -10577.7, 175.276, 0, 'Legoso'), +(@LEGOSO, 36, -1937.517090, -10575.675781, 176.253082, 0, 'Legoso'), +(@LEGOSO, 37, -1926.401733, -10577.000977, 177.240952, 0, 'Legoso'), +(@LEGOSO, 38, -1920.892212, -10575.630859, 177.493637, 0, 'Legoso'), +(@LEGOSO, 39, -1913.378662, -10575, 178.044113, 0, 'Legoso'), +(@LEGOSO, 40, -1951.17, -10555, 177.33, 0, 'Legoso'), +(@LEGOSO, 41, -1946.9, -10557.8, 177.7, 0, 'Legoso'); + +-- Exarch Admetius +-- Text +DELETE FROM `creature_text` WHERE `entry`=@ADMETIUS; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `probability`, `emote`, `comment`, `BroadcastTextId`) VALUES +(@ADMETIUS, 0, 0, 'All hail $N, savior of Azuremyst and Bloodmyst. Hero of the Hand of Argus, champion of the draenei people!', 14, 100, 22, 'Exarch Admetius q9759 OnRewarded',14691); + +-- Exarch Admetius SAI +SET @ENTRY := 17658; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,20,0,100,1,9759,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Exarch Admetius - On Quest 'Ending Their World' Finished - Say Line 0 (No Repeat)"); diff --git a/sql/updates/world/2015_03_26_02_world.sql b/sql/updates/world/2015_03_26_02_world.sql new file mode 100644 index 00000000000..4ae68387d8e --- /dev/null +++ b/sql/updates/world/2015_03_26_02_world.sql @@ -0,0 +1,48 @@ + +DELETE FROM `creature_text` WHERE `entry`=16819 AND `groupid` IN(1,2); +DELETE FROM `creature_text` WHERE `entry`IN(3230,18481,23054); + +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(3230, 0, 0, 'Hellfire Citadel is ours! The source of Illidan\'s fel orc army is no more! Magtheridon has fallen to the might of $n and $g his:her; allies!', 14, 1, 100, 22, 0, 0, 20765, 2, 'Nazgrel to Player'), +(3230, 1, 0, 'The time for us to rise and strike at the fel orcs that remain is now! Do this for your Warchief! Do this for the Horde!', 14, 1, 100, 22, 0, 0, 20766, 2, 'Nazgrel to Player'), +(18481, 0, 0, 'Silence descends upon Shattrath.', 16, 0, 100, 0, 0, 0, 20776, 2, 'A\'dal to Player'), +(18481, 1, 0, '%s\'s thoughts invade your mind.', 16, 0, 100, 0, 0, 0, 20777, 2, 'A\'dal to Player'), +(18481, 2, 0, 'Kael\'thas Sunstrider has been defeated by $n and $g his:her; allies.', 16, 0, 100, 0, 0, 0, 20778, 2, 'A\'dal to Player'), +(18481, 3, 0, 'The time to strike at the remaining blood elves of Tempest Keep is now. Take arms and let A\'dal\'s song of battle empower you!', 16, 0, 100, 0, 0, 0, 20779, 2, 'A\'dal to Player'), +(23054, 0, 0, 'Your monkeys failed to finish the job, naaru. Beaten but alive... The same mistake was not made when we took command of your vessel.', 14, 0, 100, 1, 0, 0, 20792, 0, 'Kael\'thas Sunstrider to Player'), +(23054, 1, 0, 'All for what? Trinkets? You are too late. The preparations have already begun. Soon the master will make his return.', 14, 0, 100, 274, 0, 0, 20793, 0, 'Kael\'thas Sunstrider to Player'), +(23054, 2, 0, 'And there is nothing you or that fool, Illidan, can do to stop me! You have both served me in your own right - unwittingly.', 14, 0, 100, 1, 0, 0, 20794, 0, 'Kael\'thas Sunstrider to Player'), +(23054, 3, 0, 'Lay down your arms and succumb to the might of Kil\'jaeden!', 14, 0, 100, 14, 0, 0, 20796, 0, 'Kael\'thas Sunstrider to Player'), +(16819, 1, 0, 'The feast of corruption is no more! Magtheridon has fallen to the battle prowess of $n and $g his:her; allies! Witness the might of the Alliance! A pit lord commander is destroyed!', 14, 7, 100, 22, 0, 0, 20754, 2, 'Force Commander Danath Trollbane to Player'), +(16819, 2, 0, 'Hear me brothers and sisters-in-arms! The time of our enemies is at an end! We must strike at the fel orcs that remain! Exterminate them like the vermin that they are! Carry with you the favor of the Sons of Lothar!', 14, 7, 100, 22, 0, 0, 20754, 2, 'Force Commander Danath Trollbane to Player'); + +UPDATE `creature_template` SET `unit_flags`=768, `InhabitType`=4 WHERE `entry`=23054; + +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN(3230,23054); + +DELETE FROM `smart_scripts` WHERE `entryorguid` IN(3230,23054) AND `source_type`=0; + +DELETE FROM `smart_scripts` WHERE `entryorguid` =1848100 AND `source_type`=9; + +DELETE FROM `smart_scripts` WHERE `entryorguid` =16819 AND `source_type`=0 AND `id`>1; +DELETE FROM `smart_scripts` WHERE `entryorguid` =18481 AND `source_type`=0 AND `id`>2; + +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(3230, 0, 0, 1, 20, 0, 100, 0, 11003, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Nazgrel - On Quest Reward 11003 - Play emote OneShotRoar (15)'), +(3230, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 1, 0, 7000, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Nazgrel - On Quest Reward 11003 - Say Line 0'), +(3230, 0, 2, 0, 52, 0, 100, 0, 0, 3230, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Nazgrel - On Text Over Line 0 - Say Line 1'), +(16819, 0, 2, 0, 20, 0, 100, 0, 11002, 0, 0, 0, 1, 1, 7000, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Force Commander Danath Trollbane - On Quest Reward 11002 - Say Line 1'), +(16819, 0, 3, 0, 52, 0, 100, 0, 1, 16819, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Force Commander Danath Trollbane - On Text Over Line 1 - Say Line 2'), +(23054, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 11, 39966, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Kael''thas Sunstrider - On On Just Summoned - Cast Kael thas Defeated'), +(18481, 0, 3, 4, 20, 0, 100, 0, 11007, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'A Dal - On Quest Reward 11007 - Store Targetlist'), +(18481, 0, 4, 0, 61, 0, 100, 0, 0, 0, 0, 0, 80, 1848100, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'A Dal - On Quest Reward 11007 - Run Script'), +(1848100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'A Dal - Script - Say Line 0'), -- 13:50:41.485 +(1848100, 9, 1, 0, 0, 0, 100, 0, 4500, 4500, 0, 0, 1, 1, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'A Dal - Script - Say Line 1'), -- 13:50:45.907 +(1848100, 9, 2, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'A Dal - Script - Say Line 2'), -- 13:50:49.532 +(1848100, 9, 3, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 1, 3, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'A Dal - Script - Say Line 3'), -- 13:50:54.407 +(1848100, 9, 4, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 12, 23054, 1, 50000, 0, 0, 0, 8, 0, 0, 0, -1884.322, 5420.598, -8.42119, 0.4886922, 'A Dal - Script - Summon Kael''thas Sunstrider'), -- 13:50:55.625 +(1848100, 9, 5, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 50, 185170, 300, 0, 0, 0, 0, 8, 0, 0, 0, -1891.344, 5417.036, -5.539243, 0.9781476, 'A Dal - Script - The Mark of Kael''Thas'), -- 13:50:59.922 +(1848100, 9, 6, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, 23054, 0, 0, 0, 0, 0, 0, 'A Dal - Script - Say Line 0 on Kael''thas Sunstrider'), -- 13:51:00.422 +(1848100, 9, 7, 0, 0, 0, 100, 0, 11000, 11000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 19, 23054, 0, 0, 0, 0, 0, 0, 'A Dal - Script - Say Line 1 on Kael''thas Sunstrider'), -- 13:51:11.360 +(1848100, 9, 8, 0, 0, 0, 100, 0, 11000, 11000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 19, 23054, 0, 0, 0, 0, 0, 0, 'A Dal - Script - Say Line 2 on Kael''thas Sunstrider'), -- 13:51:22.297 +(1848100, 9, 9, 0, 0, 0, 100, 0, 11000, 11000, 0, 0, 1, 3, 0, 0, 0, 0, 0, 19, 23054, 0, 0, 0, 0, 0, 0, 'A Dal - Script - Say Line 2 on Kael''thas Sunstrider'); -- 13:51:33.219 diff --git a/sql/updates/world/2015_03_28_00_world.sql b/sql/updates/world/2015_03_28_00_world.sql new file mode 100644 index 00000000000..af58d0ecf83 --- /dev/null +++ b/sql/updates/world/2015_03_28_00_world.sql @@ -0,0 +1,2 @@ +-- +DELETE FROM `creature_addon` WHERE `guid` IN (28786, 28800, 28798); diff --git a/sql/updates/world/2015_03_28_01_world.sql b/sql/updates/world/2015_03_28_01_world.sql new file mode 100644 index 00000000000..e1d6e6d63dc --- /dev/null +++ b/sql/updates/world/2015_03_28_01_world.sql @@ -0,0 +1,7 @@ +-- +DELETE FROM `creature_text` WHERE `entry`=18744 AND `id`=2; +UPDATE `smart_scripts` SET `action_type`= 87, `action_param2`= 1874301 WHERE `entryorguid`=18743 AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE (`entryorguid`=1874301 AND `source_type`=9); +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(1874301,9,0,0,0,0,100,0,0,0,0,0,5,274,0,0,0,0,0,11,18744,20,0,0,0,0,0,'Elrodan - Script - Aurosalia Play emote'), +(1874301,9,1,0,0,0,100,0,3000,3000,3000,3000,11,32826,0,0,0,0,0,1,0,0,0,0,0,0,0,'Elrodan - Script - cast Polymorph Cast Visual'); diff --git a/sql/updates/world/2015_03_30_00_world.sql b/sql/updates/world/2015_03_30_00_world.sql new file mode 100644 index 00000000000..10bb642f8a1 --- /dev/null +++ b/sql/updates/world/2015_03_30_00_world.sql @@ -0,0 +1,110 @@ +SET @Illidan:=23467; +SET @Morghor:=23139; +SET @Sinestra1:=23283; +SET @Sinestra2:=23284; +SET @Yarzill:= 23141; +SET @Dragonmaw:=23146; + +DELETE FROM `creature_template_addon` WHERE `entry` IN (@Illidan); +INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`, `emote`, `auras`) VALUES +(@Illidan,0,4097,0,"37816"); + +UPDATE `creature_template` SET `AIName`='SmartAI', `ScriptName`='' WHERE `entry` IN (@Illidan, @Morghor, @Yarzill, @Dragonmaw, 23468); +UPDATE `creature_template` SET `VehicleId`=321 WHERE `entry`=23468; + +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@Illidan, @Morghor, @Yarzill, @Dragonmaw, 23468, @Illidan*100); +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@Morghor*100, @Morghor*100+1, @Yarzill*100); +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@Morghor,0,0,0,19,0,100,0,11108,0,0,0,80,@Morghor*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Mor''ghor - On quest accept (Lord Illidan Stormrage) - ActionList'), +(@Morghor*100,9,0,0,0,0,100,0,0,0,0,0,83,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Mor''ghor - Action List - Remove npcfla'), +(@Morghor*100,9,1,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Overlord Mor''ghor - Action List - Talk'), +(@Morghor*100,9,2,0,0,0,100,0,2000,2000,0,0,59,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Mor''ghor - Action List - Set Run OFF'), +(@Morghor*100,9,3,0,0,0,100,0,0,0,0,0,69,0,0,0,0,0,0,8,0,0,0,-5104.410156, 595.296997, 85.680908, 2.368710,'Overlord Mor''ghor - Action List - Go to pos'), +(@Morghor*100,9,4,0,0,0,100,0,9000,9000,0,0,1,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'Overlord Mor''ghor - Action List - Talk'), +(@Morghor*100,9,5,0,0,0,100,0,9000,9000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Mor''ghor - Action List - Talk'), +(@Morghor*100,9,6,0,0,0,100,0,5000,5000,0,0,12,@Illidan,8,0,0,0,0,8,0,0,0,-5107.830078, 602.583984, 85.239304, 4.925980,'Overlord Mor''ghor - Action List - Summon'), +(@Morghor*100,9,7,0,0,0,100,0,3000,3000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Mor''ghor - Action List - Talk'), +(@Morghor*100,9,8,0,0,0,100,0,1000,1000,0,0,11,68442,0,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Mor''ghor - Action List - Cast emote kneel'), +(@Morghor*100,9,9,0,0,0,100,0,2000,2000,0,0,1,4,0,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Mor''ghor - Action List - Talk'), +(@Morghor*100,9,10,0,0,0,100,0,6000,6000,0,0,1,0,0,0,0,0,0,19,@Illidan,15,0,0,0,0,0,'Overlord Mor''ghor - Action List - Illidan Talk'), +(@Morghor*100,9,11,0,0,0,100,0,0,0,0,0,5,1,0,0,0,0,0,19,@Illidan,15,0,0,0,0,0,'Overlord Mor''ghor - Action List - Illidan Play emote talk'), +(@Morghor*100,9,12,0,0,0,100,0,5000,5000,0,0,1,5,0,0,0,0,0,7,0,0,0,0,0,0,0,'Overlord Mor''ghor - Action List - Talk'), +(@Morghor*100,9,13,0,0,0,100,0,5000,5000,0,0,1,1,0,0,0,0,0,19,@Illidan,15,0,0,0,0,0,'Overlord Mor''ghor - Action List - Illidan Talk'), +(@Morghor*100,9,14,0,0,0,100,0,0,0,0,0,5,1,0,0,0,0,0,19,@Illidan,15,0,0,0,0,0,'Overlord Mor''ghor - Action List - Illidan Play emote talk'), +(@Morghor*100,9,15,0,0,0,100,0,3000,3000,0,0,1,2,0,0,0,0,0,19,@Illidan,15,0,0,0,0,0,'Overlord Mor''ghor - Action List - Illidan Talk'), +(@Morghor*100,9,16,0,0,0,100,0,0,0,0,0,5,1,0,0,0,0,0,19,@Illidan,15,0,0,0,0,0,'Overlord Mor''ghor - Action List - Illidan Play emote talk'), +(@Morghor*100,9,17,0,0,0,100,0,5000,5000,0,0,1,3,0,0,0,0,0,19,@Illidan,15,0,0,0,0,0,'Overlord Mor''ghor - Action List - Illidan Talk'), +(@Morghor*100,9,18,0,0,0,100,0,0,0,0,0,5,1,0,0,0,0,0,19,@Illidan,15,0,0,0,0,0,'Overlord Mor''ghor - Action List - Illidan Play emote talk'), +(@Morghor*100,9,19,0,0,0,100,0,5000,5000,0,0,1,4,0,0,0,0,0,19,@Illidan,15,0,0,0,0,0,'Overlord Mor''ghor - Action List - Illidan Talk'), +(@Morghor*100,9,20,0,0,0,100,0,0,0,0,0,5,1,0,0,0,0,0,19,@Illidan,15,0,0,0,0,0,'Overlord Mor''ghor - Action List - Illidan Play emote talk'), +(@Morghor*100,9,21,0,0,0,100,0,5000,5000,0,0,1,5,0,0,0,0,0,19,@Illidan,15,0,0,0,0,0,'Overlord Mor''ghor - Action List - Illidan Talk'), +(@Morghor*100,9,22,0,0,0,100,0,0,0,0,0,5,1,0,0,0,0,0,19,@Illidan,15,0,0,0,0,0,'Overlord Mor''ghor - Action List - Illidan Play emote talk'), +(@Morghor*100,9,23,0,0,0,100,0,2000,2000,0,0,85,41528,0,0,0,0,0,7,0,0,0,0,0,0,0,'Overlord Mor''ghor - Action List - InvokerCast'), +(@Morghor*100,9,24,0,0,0,100,0,0,0,0,0,28,42016,0,0,0,0,0,7,0,0,0,0,0,0,0,'Overlord Mor''ghor - Action List - Remove aura'), +(@Morghor*100,9,25,0,0,0,100,0,5000,5000,0,0,1,6,0,0,0,0,0,19,@Illidan,15,0,0,0,0,0,'Overlord Mor''ghor - Action List - Illidan Talk'), +(@Morghor*100,9,26,0,0,0,100,0,0,0,0,0,5,53,0,0,0,0,0,19,@Illidan,15,0,0,0,0,0,'Overlord Mor''ghor - Action List - Illidan Play emote rowar'), +(@Morghor*100,9,27,0,0,0,100,0,5000,5000,0,0,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Mor''ghor - Action List - Talk'), +(@Morghor*100,9,28,0,0,0,100,0,0,0,0,0,5,254,0,0,0,0,0,19,@Illidan,15,0,0,0,0,0,'Overlord Mor''ghor - Action List - Emote land'), +(@Morghor*100,9,29,0,0,0,100,0,1000,1000,0,0,41,0,0,0,0,0,0,19,@Illidan,15,0,0,0,0,0,'Overlord Mor''ghor - Action List - Despawn'), +(@Morghor*100,9,30,0,0,0,100,0,1000,1000,0,0,28,68442,0,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Mor''ghor - Action List - remove emote aura'), +(@Morghor*100,9,31,0,0,0,100,0,1000,1000,0,0,66,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Overlord Mor''ghor - Action List - Set orientation'), +(@Morghor*100,9,32,0,0,0,100,0,1000,1000,0,0,1,7,0,0,0,0,0,7,0,0,0,0,0,0,0,'Overlord Mor''ghor - Action List - Talk'), +(@Morghor*100,9,33,0,0,0,100,0,0,0,0,0,5,25,0,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Mor''ghor - Action List - Play emote'), +(@Morghor*100,9,34,0,0,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'Overlord Mor''ghor - Action List - Store target'), +(@Morghor*100,9,35,0,0,0,100,0,0,0,0,0,100,1,0,0,0,0,0,19,@Yarzill,30,0,0,0,0,0,'Overlord Mor''ghor - Action List - Send target'), +(@Morghor*100,9,36,0,0,0,100,0,5000,5000,0,0,45,0,1,0,0,0,0,19,@Yarzill,30,0,0,0,0,0,'Overlord Mor''ghor - Action List - set Data'), +(@Morghor*100,9,37,0,0,0,100,0,2000,2000,0,0,12,23468,8,0,0,0,0,8,0,0,0,-5126.729004, 604.291626, 84.271423, 2.468847,'Overlord Mor''ghor - Action List - Summon'), +(@Morghor*100,9,38,0,0,0,100,0,1000,1000,0,0,85,46598,0,0,0,0,0,19,23468,40,0,0,0,0,0,'Overlord Mor''ghor - Action List - Cast to ride'), +(@Morghor*100,9,39,0,0,0,100,0,3000,3000,0,0,85,41540,0,0,0,0,0,7,0,0,0,0,0,0,0,'Overlord Mor''ghor - Action List - Cast taxi'), +(@Morghor*100,9,40,0,0,0,100,0,10000,10000,0,0,69,0,0,0,0,0,0,8,0,0,0,-5085.000000, 578.656982, 86.648300, 2.368710,'Overlord Mor''ghor - Action List - Go to pos'), +(@Morghor*100,9,41,0,0,0,100,0,9000,9000,0,0,66,0,0,0,0,0,0,8,0,0,0,-5085.000000, 578.656982, 86.648300, 2.368710,'Overlord Mor''ghor - Action List - Set orientation'), +(@Morghor*100,9,42,0,0,0,100,0,0,0,0,0,82,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Overlord Mor''ghor - Action List - Add npcfla'), +(@Yarzill,0,0,0,38,0,100,0,0,1,0,0,80,@Yarzill*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'Yarzill - On Data set (Lord Illidan Stormrage) - ActionList'), +(@Yarzill*100,9,0,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,12,1,0,0,0,0,0,0,'Yarzill - Action List - Talk'), +(@Yarzill*100,9,1,0,0,0,100,0,0,0,0,0,28,41528,0,0,0,0,0,12,1,0,0,0,0,0,0,'Yarzill - Action List - remove aura'), +(@Yarzill*100,9,2,0,0,0,100,0,0,0,0,0,28,41519,0,0,0,0,0,12,1,0,0,0,0,0,0,'Yarzill - Action List - remove aura'), +(@Yarzill*100,9,4,0,0,0,100,0,0,0,0,0,15,11108,0,0,0,0,0,12,1,0,0,0,0,0,0,'Yarzill - Action List - AREAEXPLOREDOREVENTHAPPENS'), +(@Illidan,0,0,0,54,0,100,0,0,0,0,0,80,@Illidan*100,0,0,0,0,0,1,0,0,0,0,0,0,0,'Illidan - Just summoned - Action List'), +(@Illidan*100,9,0,0,0,0,100,0,300,300,0,0,11,39990,0,0,0,0,0,1,0,0,0,0,0,0,0,'Illidan - Action List - cast'), +(@Illidan*100,9,1,0,0,0,100,0,0,0,0,0,50,185520,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Illidan - Action List - Summon Fel Fire (GO)'), +(23468,0,0,0,27,0,100,0,0,0,0,0,11,50630,0,0,0,0,0,1,0,0,0,0,0,0,0,'Yarzill Dragon - passenger boarded - Eject all passengers'), +(23468,0,1,0,28,0,100,0,0,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Yarzill Dragon- passenger removed - despawn'); + +DELETE FROM `creature_text` WHERE `entry`IN (@Illidan, @Morghor, @Sinestra2, @Yarzill, @Dragonmaw); +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextID`) VALUES +(@Yarzill,0,0,'You will not harm the $g boy:girl;, Mor''ghor! Quickly, $n, climb on my back!',12,0,100,0,0,0, 'Yarzill', 21825), +(@Dragonmaw,0,0,'Who... Who is you?? What you want?',12,0,100,0,0,0, 'Dragonmaw Enforcer', 21300), +(@Dragonmaw,1,0,'Yes... Yes we move now... Please no hurt us...',12,0,100,0,0,0, 'Dragonmaw Enforcer', 21302), +(@Morghor,0,0,'Come, $n. Lord Stormrage awaits.',12,0,100,0,0,0, 'Overlord Mor''ghor', 21798), +(@Morghor,1,0,'Warriors of Dragonmaw, gather ''round! One among you has attained the rank of highlord! Bow your heads in reverence! Show your respect and allegiance to Highlord $n!',14,0,100,0,0,0, 'Overlord Mor''ghor', 21799), +(@Morghor,2,0,'Lord Illidan will be here shortly.',12,0,100,0,0,0, 'Overlord Mor''ghor', 21800), +(@Morghor,3,0,'All hail Lord Illidan!',14,0,100,0,0,0, 'Overlord Mor''ghor', 21802), +(@Morghor,4,0,'Lord Illidan, this is the Dragonmaw that I, and others, have told you about. He will lead us to victory!',12,0,100,0,0,0, 'Overlord Mor''ghor', 21803), +(@Morghor,5,0,'But... My lord, I do not understand. $n... He is the orc that has...',12,0,100,0,0,0, 'Overlord Mor''ghor', 21805), +(@Morghor,6,0,'It will be done, my lord.',12,0,100,0,0,0, 'Overlord Mor''ghor', 21823), +(@Morghor,7,0,'So you thought to make a fool of Mor''ghor, eh? Before you are delivered to Lord Illidan, you will feel pain that you could not know to exist. I will take pleasure in exacting my own vengeance.',12,0,100,0,0,0, 'Overlord Mor''ghor', 21824), + +(@Morghor,8,0,'I will not drag this out any further than it needs, Lady Sinestra. You have bent my ear, now tell me what it is that you want from Dragonmaw.',12,0,100,0,0,0, 'Overlord Mor''ghor', 21307), +(@Morghor,9,0,'The... The master? He lives?',12,0,100,0,0,0, 'Overlord Mor''ghor', 21310), +(@Morghor,10,0,'%s stammers.',16,0,100,0,0,0, 'Overlord Mor''ghor', 21313), +(@Morghor,11,0,'Ye... Yes, yes... Of course. We need only the crystals and ore from this place. There is... We will need mounts.',12,0,100,0,0,0, 'Overlord Mor''ghor', 21314), + +(@Illidan,0,0,'What is the meaning of this, Mor''ghor?',12,0,100,0,0,0, 'Illidan', 21804), +(@Illidan,1,0,'SILENCE!',12,0,100,0,0,0, 'Illidan', 21807), +(@Illidan,2,0,'Blathering idiot. You incomprehensibly incompetent buffoon...',12,0,100,0,0,0, 'Illidan', 21808), +(@Illidan,3,0,'THIS is your hero?',12,0,100,0,0,0, 'Illidan', 21809), +(@Illidan,4,0,'You have been deceived, imbecile.',12,0,100,0,0,0, 'Illidan', 21810), +(@Illidan,5,0,'This... whole... operation... HAS BEEN COMPROMISED!',12,0,100,0,0,0, 'Illidan', 21811), +(@Illidan,6,0,'I expect to see this insect''s carcass in pieces in my lair within the hour. Fail and you will suffer a fate so much worse than death.',12,0,100,0,0,0, 'Illidan', 21812), + +(@Sinestra2,0,0,'Step aside lest I add you as another adornment to my armor. Your leader and I have matters to attend...',12,0,100,0,0,0, 'Sinestra', 21301), +(@Sinestra2,1,0,'$s smiles.',16,0,100,0,0,0, 'Sinestra', 21303), +(@Sinestra2,2,0,'I thought you would see it my way...',12,0,100,0,0,0, 'Sinestra', 21304), +(@Sinestra2,3,0,'Overlord Mor''ghor, I presume... A pleasure to finally make your acquaintance.',12,0,100,0,0,0, 'Sinestra', 21305), +(@Sinestra2,4,0,'I am Lady Sinestra.',12,0,100,0,0,0, 'Sinestra', 21306), +(@Sinestra2,5,0,'You have no doubt heard about Nefarian''s failures on Azeroth... While he has fallen, the experiment continues. My master... He continues the work that his progeny began.',12,0,100,0,0,0, 'Sinestra', 21308), +(@Sinestra2,6,0,'$s nods.',16,0,100,0,0,0, 'Sinestra', 21309), +(@Sinestra2,7,0,'You were once a chief lieutenant, Mor''ghor. Your work in Grim Batol is not easily forgotten.',12,0,100,0,0,0, 'Sinestra', 21311), +(@Sinestra2,8,0,'Now... We need the eggs that you recovered. The Netherwing eggs. They are, after all, a product of the master. We will pay whatever price that you ask.',12,0,100,0,0,0, 'Sinestra', 21312), +(@Sinestra2,9,0,'The master will be most pleased with this news. The Black Dragonflight will provide you all that you ask. You will be allowed to ride upon the backs of our drakes as needed. ',12,0,100,0,0,0, 'Sinestra', 21315), +(@Sinestra2,10,0,'I thank you for your graciousness, Mor''ghor. I must now take my leave.',12,0,100,0,0,0, 'Sinestra', 21316); diff --git a/sql/updates/world/2015_03_30_01_world.sql b/sql/updates/world/2015_03_30_01_world.sql new file mode 100644 index 00000000000..2e62c6cfba3 --- /dev/null +++ b/sql/updates/world/2015_03_30_01_world.sql @@ -0,0 +1,70 @@ +SET @Sinestra1:=23283; +SET @Sinestra2:=23284; + +SET @GUID:=28796; -- 1 free creature guid set by TC +SET @PATH := @Sinestra1*10; +DELETE FROM `creature` WHERE `id` IN (@Sinestra1); +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`,`curhealth`) VALUES +(@GUID+0, @Sinestra1, 530, 1, 1, -5240.304199, 682.020081, 157.604004, 5.723090, 900, 151760); + +UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@GUID; +UPDATE `creature_template` SET `InhabitType`=4, `AIName`='SmartAI', `flags_extra`=0 WHERE `entry`=@Sinestra1; +UPDATE `creature_template` SET `AIName`='SmartAI', `flags_extra`=0 WHERE `entry`=@Sinestra2; +DELETE FROM `creature_addon` WHERE `guid`=@GUID; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@GUID,@PATH,0,33554432,1,0,''); + +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-5120.744629, 783.187988, 208.115173,0,0,0,0,100,0), +(@PATH,2,-5331.205078, 712.656494, 180.570953,0,0,0,0,100,0), +(@PATH,3,-5371.597656, 573.186890, 159.434875,0,0,0,0,100,0), +(@PATH,4,-5299.805176, 490.375488, 150.086655,0,0,0,0,100,0), +(@PATH,5,-5207.269043, 478.922729, 150.908600,0,0,0,0,100,0), +(@PATH,6,-5170.645996, 533.437805, 168.776611,0,0,0,0,100,0), +(@PATH,7,-5132.274902, 632.125549, 177.018936,0,0,0,0,100,0); + +DELETE FROM `waypoints` WHERE `entry` IN(@Sinestra1*100); +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(@Sinestra1*100, 1, -5163.216309, 645.610779, 77.3899920, 'Lady Sinestra'); + +DELETE FROM `waypoints` WHERE `entry` IN(@Sinestra2*100); +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(@Sinestra2*100, 1, -5155.744629, 636.083862, 80.537260, 'Lady Sinestra'), +(@Sinestra2*100, 2, -5130.897949, 609.521179, 83.996864, 'Lady Sinestra'), +(@Sinestra2*100, 3, -5113.644531, 604.067078, 84.993507, 'Lady Sinestra'), +(@Sinestra2*100, 4, -5093.567383, 586.982605, 86.467323, 'Lady Sinestra'), +(@Sinestra2*100, 5, -5113.704590, 604.713928, 85.021675, 'Lady Sinestra'), +(@Sinestra2*100, 6, -5134.045410, 612.111572, 83.530479, 'Lady Sinestra'), +(@Sinestra2*100, 7, -5163.214844, 645.577454, 77.393990, 'Lady Sinestra'); + +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@Sinestra1, @Sinestra1*100, @Sinestra2, @Sinestra2*100, @Sinestra2*100+1); +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@Sinestra1,0,0,0,1,0,100,0,7200000,7200000,7200000,7200000,53,1,@Sinestra1*100,0,0,0,1,1,0,0,0,0,0,0,0,"Time Watcher - OOC - Start wp"), +(@Sinestra1,0,1,0,58,0,100,0,1,@Sinestra1*100,0,0,80,@Sinestra1*100,2,0,0,0,0,1,0,0,0,0,0,0,0,"Lady Sinestra - On way point ended - action list"), +(@Sinestra1*100,9,0,0,0,0,100,0,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lady Sinestra - Action list - Set visible off"), +(@Sinestra1*100,9,1,0,0,0,100,0,0,0,0,0,12,@Sinestra2,8,0,0,0,0,8,0,0,0,-5163.216309, 645.610779, 77.6899920, 5.328592,"Lady Sinestra - Action list - Spawn"), +(@Sinestra1*100,9,2,0,0,0,100,0,160000,160000,0,0,47,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lady Sinestra - Action list - St visible on"), +(@Sinestra2,0,0,0,54,0,100,0,0,0,0,0,53,0,@Sinestra2*100,0,0,0,1,1,0,0,0,0,0,0,0,"Lady Sinestra - Just summoned - Start wp"), +(@Sinestra2,0,1,0,40,0,100,0,1,@Sinestra2*100,0,0,80,@Sinestra2*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lady Sinestra - On wp1 - Action list"), +(@Sinestra2*100,9,0,0,0,0,100,0,0,0,0,0,54,20000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lady Sinestra - Action list - Pause waypoint"), +(@Sinestra2*100,9,1,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,19,23146,20,0,0,0,0,0,"Lady Sinestra - Action list - Talk"), +(@Sinestra2*100,9,2,0,0,0,100,0,5000,5000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lady Sinestra - Action list - Talk"), +(@Sinestra2*100,9,3,0,0,0,100,0,9000,9000,0,0,1,1,0,0,0,0,0,19,23146,20,0,0,0,0,0,"Lady Sinestra - Action list - Talk"), +(@Sinestra2*100,9,4,0,0,0,100,0,4000,4000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lady Sinestra - Action list - Talk"), +(@Sinestra2*100,9,5,0,0,0,100,0,2000,2000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lady Sinestra - Action list - Talk"), +(@Sinestra2,0,2,0,40,0,100,0,4,@Sinestra2*100,0,0,80,@Sinestra2*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lady Sinestra - On wp4 - Action list"), +(@Sinestra2*100+1,9,0,0,0,0,100,0,0,0,0,0,54,65000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lady Sinestra - Action list - Pause waypoint"), +(@Sinestra2*100+1,9,1,0,0,0,100,0,0,0,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lady Sinestra - Action list - Talk"), +(@Sinestra2*100+1,9,2,0,0,0,100,0,5000,5000,0,0,1,4,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lady Sinestra - Action list - Talk"), +(@Sinestra2*100+1,9,3,0,0,0,100,0,4000,4000,0,0,1,8,0,0,0,0,0,19,23139,20,0,0,0,0,0,"Lady Sinestra - Action list - Talk"), +(@Sinestra2*100+1,9,4,0,0,0,100,0,9000,9000,0,0,1,5,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lady Sinestra - Action list - Talk"), +(@Sinestra2*100+1,9,5,0,0,0,100,0,9000,9000,0,0,1,9,0,0,0,0,0,19,23139,20,0,0,0,0,0,"Lady Sinestra - Action list - Talk"), +(@Sinestra2*100+1,9,6,0,0,0,100,0,3000,3000,0,0,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lady Sinestra - Action list - Talk"), +(@Sinestra2*100+1,9,7,0,0,0,100,0,3000,3000,0,0,1,7,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lady Sinestra - Action list - Talk"), +(@Sinestra2*100+1,9,8,0,0,0,100,0,7000,7000,0,0,1,8,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lady Sinestra - Action list - Talk"), +(@Sinestra2*100+1,9,9,0,0,0,100,0,4000,4000,0,0,1,10,0,0,0,0,0,19,23139,20,0,0,0,0,0,"Lady Sinestra - Action list - Talk"), +(@Sinestra2*100+1,9,10,0,0,0,100,0,3000,3000,0,0,1,11,0,0,0,0,0,19,23139,20,0,0,0,0,0,"Lady Sinestra - Action list - Talk"), +(@Sinestra2*100+1,9,11,0,0,0,100,0,8000,8000,0,0,1,9,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lady Sinestra - Action list - Talk"), +(@Sinestra2*100+1,9,12,0,0,0,100,0,8000,8000,0,0,1,10,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lady Sinestra - Action list - Talk"), +(@Sinestra2,0,3,0,58,0,100,0,7,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Lady Sinestra - On wp Ended - Despawn"); diff --git a/sql/updates/world/2015_03_30_02_world.sql b/sql/updates/world/2015_03_30_02_world.sql new file mode 100644 index 00000000000..e75ccb04142 --- /dev/null +++ b/sql/updates/world/2015_03_30_02_world.sql @@ -0,0 +1,71 @@ +SET @Triggger:=34146; +SET @Triggger1:=34150; +SET @Triggger2:=34151; +SET @Jormungar:=34137; + +DELETE FROM `vehicle_template_accessory` WHERE `entry` IN (34146, 34151, 34150); +INSERT INTO `vehicle_template_accessory` (`entry`,`accessory_entry`,`seat_id`,`minion`,`description`,`summontype`,`summontimer`)VALUES +(34146,34137,0,0,'Snow Mound',8,0), +(34146,34137,1,0,'Snow Mound',8,0), +(34146,34137,2,0,'Snow Mound',8,0), +(34146,34137,3,0,'Snow Mound',8,0), +(34151,34137,0,0,'Snow Mound',8,0), +(34151,34137,1,0,'Snow Mound',8,0), +(34151,34137,2,0,'Snow Mound',8,0), +(34151,34137,3,0,'Snow Mound',8,0), +(34151,34137,4,0,'Snow Mound',8,0), +(34151,34137,5,0,'Snow Mound',8,0), +(34151,34137,6,0,'Snow Mound',8,0), +(34151,34137,7,0,'Snow Mound',8,0), +(34150,34137,0,0,'Snow Mound',8,0), +(34150,34137,1,0,'Snow Mound',8,0), +(34150,34137,2,0,'Snow Mound',8,0), +(34150,34137,3,0,'Snow Mound',8,0), +(34150,34137,4,0,'Snow Mound',8,0), +(34150,34137,5,0,'Snow Mound',8,0); + +DELETE FROM `npc_spellclick_spells` WHERE `npc_entry` IN (34146, 34151, 34150); +INSERT INTO `npc_spellclick_spells` (`npc_entry`, `spell_id`, `cast_flags`, `user_type`) VALUES +(34146, 43671, 1, 0), +(34151, 43671, 1, 0), +(34150, 43671, 1, 0); + +UPDATE `creature_template` SET `flags_extra`= 2, `AIName`='SmartAI' WHERE `entry` IN (34146, 34150, 34151, 34137); + +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (34146,34150,34151,34137) AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (34146*100,34150*100,34151*100) AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (34146*100+1,34150*100+1,34151*100+1, @Jormungar*100) AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(34146,0,0,0,10,0,100,1,0,15,1000,1000,80,34146*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'Snow Mound - LOS - Action list'), +(34150,0,0,0,10,0,100,1,0,15,1000,1000,80,34150*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'Snow Mound - LOS - Action list'), +(34151,0,0,0,10,0,100,1,0,15,1000,1000,80,34151*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'Snow Mound - LOS - Action list'), +(34146*100,9,0,0,0,0,100,0,1000,1000,0,0,11,64629,0,0,0,0,0,1,0,0,0,0,0,0,0,'Snow Mound - Action list - Eject Passenger'), +(34146*100,9,1,0,0,0,100,0,4000,4000,0,0,11,64630,0,0,0,0,0,1,0,0,0,0,0,0,0,'Snow Mound - Action list - Eject Passenger'), +(34146*100,9,2,0,0,0,100,0,4000,4000,0,0,11,64631,0,0,0,0,0,1,0,0,0,0,0,0,0,'Snow Mound - Action list - Eject Passenger'), +(34146*100,9,3,0,0,0,100,0,4000,4000,0,0,11,64632,0,0,0,0,0,1,0,0,0,0,0,0,0,'Snow Mound - Action list - Eject Passenger'), +(34146*100,9,4,0,0,0,100,0,2000,2000,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Snow Mound - Action list - Despawn'), +(34150*100,9,0,0,0,0,100,0,1000,1000,0,0,11,64629,0,0,0,0,0,1,0,0,0,0,0,0,0,'Snow Mound - Action list - Eject Passenger'), +(34150*100,9,1,0,0,0,100,0,4000,4000,0,0,11,64630,0,0,0,0,0,1,0,0,0,0,0,0,0,'Snow Mound - Action list - Eject Passenger'), +(34150*100,9,2,0,0,0,100,0,4000,4000,0,0,11,64631,0,0,0,0,0,1,0,0,0,0,0,0,0,'Snow Mound - Action list - Eject Passenger'), +(34150*100,9,3,0,0,0,100,0,4000,4000,0,0,11,64632,0,0,0,0,0,1,0,0,0,0,0,0,0,'Snow Mound - Action list - Eject Passenger'), +(34150*100,9,4,0,0,0,100,0,4000,4000,0,0,11,64633,0,0,0,0,0,1,0,0,0,0,0,0,0,'Snow Mound - Action list - Eject Passenger'), +(34150*100,9,5,0,0,0,100,0,4000,4000,0,0,11,64634,0,0,0,0,0,1,0,0,0,0,0,0,0,'Snow Mound - Action list - Eject Passenger'), +(34150*100,9,6,0,0,0,100,0,2000,2000,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Snow Mound - Action list - Despawn'), +(34151*100,9,0,0,0,0,100,0,1000,1000,0,0,11,64629,0,0,0,0,0,1,0,0,0,0,0,0,0,'Snow Mound - Action list - Eject Passenger'), +(34151*100,9,1,0,0,0,100,0,4000,4000,0,0,11,64630,0,0,0,0,0,1,0,0,0,0,0,0,0,'Snow Mound - Action list - Eject Passenger'), +(34151*100,9,2,0,0,0,100,0,4000,4000,0,0,11,64631,0,0,0,0,0,1,0,0,0,0,0,0,0,'Snow Mound - Action list - Eject Passenger'), +(34151*100,9,3,0,0,0,100,0,4000,4000,0,0,11,64632,0,0,0,0,0,1,0,0,0,0,0,0,0,'Snow Mound - Action list - Eject Passenger'), +(34151*100,9,4,0,0,0,100,0,4000,4000,0,0,11,64633,0,0,0,0,0,1,0,0,0,0,0,0,0,'Snow Mound - Action list - Eject Passenger'), +(34151*100,9,5,0,0,0,100,0,4000,4000,0,0,11,64634,0,0,0,0,0,1,0,0,0,0,0,0,0,'Snow Mound - Action list - Eject Passenger'), +(34151*100,9,6,0,0,0,100,0,4000,4000,0,0,11,64635,0,0,0,0,0,1,0,0,0,0,0,0,0,'Snow Mound - Action list - Eject Passenger'), +(34151*100,9,7,0,0,0,100,0,4000,4000,0,0,11,64636,0,0,0,0,0,1,0,0,0,0,0,0,0,'Snow Mound - Action list - Eject Passenger'), +(34151*100,9,8,0,0,0,100,0,2000,2000,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Snow Mound - Action list - Despawn'), +(@Jormungar,0,0,0,0,0,100,0,2000,5000,7000,9000,11,64638,0,0,0,0,0,2,0,0,0,0,0,0,0,'Winter Jormungar - IC - Acidic Bite'), +(@Jormungar,0,1,0,23,0,100,1,43671,0,0,0,80,@Jormungar*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'Winter Jormungar - On aura remove - Action list'), +(@Jormungar*100,9,1,0,0,0,100,0,1000,1000,0,0,49,0,0,0,0,0,0,21,70,0,0,0,0,0,0,'Winter Jormungar - Action list - Start attack'); + +DELETE FROM `creature_template_addon` WHERE `entry` IN (34146, 34150, 34151); +INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`, `emote`, `auras`) VALUES +(@Triggger,0,4097,0,"64615"), +(@Triggger1,0,4097,0,"64615"), +(@Triggger2,0,4097,0,"64615"); diff --git a/sql/updates/world/2015_03_30_03_world.sql b/sql/updates/world/2015_03_30_03_world.sql new file mode 100644 index 00000000000..5c8497edc05 --- /dev/null +++ b/sql/updates/world/2015_03_30_03_world.sql @@ -0,0 +1,194 @@ +SET @JAINA := 38606; +SET @MURADIN := 38607; +SET @UTHER := 38608; +SET @SYLVANAS := 38609; +SET @DARION := 37120; +SET @ALEXANDROS := 38610; +SET @JAINAQUEST := 24916; +SET @MURADINQUEST := 24917; +SET @UTHERQUEST := 24919; +SET @SYLVANASQUEST := 24918; +SET @DARIONQUEST := 24915; + +UPDATE `creature_template` SET `gossip_menu_id`=11065, `npcflag`=3, `speed_run`=1, `unit_class`=8, `unit_flags`=33088, `unit_flags2`=2099200, `AIName`='SmartAI' WHERE `entry`=@JAINA; +UPDATE `creature_template` SET `npcflag`=2, `speed_run`=1.714286, `unit_flags`=33600, `AIName`='SmartAI' WHERE `entry`=@MURADIN; +UPDATE `creature_template` SET `npcflag`=2, `unit_class`=2, `unit_flags`=32832, `unit_flags2`=2099200, `AIName`='SmartAI' WHERE `entry`=@UTHER; +UPDATE `creature_template` SET `npcflag`=2, `speed_walk`=0.888888, `speed_run`=0.9920629, `unit_class`=2, `unit_flags`=33088, `unit_flags2`=2099200, `AIName`='SmartAI' WHERE `entry`=@SYLVANAS; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ALEXANDROS; + +UPDATE `quest_template` SET `OfferRewardText`='Impossible...$B$BFather, is it you?!$B$BYou have done me a great service, hero. I offer you the reins of my faithful steed. Do with it as you please, but do not forget those that assisted you in this monumental feat.', `RequestItemsText`='What is that you hold, $c?$B$BIt calls out to me, stirring feelings I thought to be long dead.' WHERE `Id`=@DARIONQUEST; +UPDATE `quest_template` SET `OfferRewardText`='What... how did you manage to come by this!?$B$BYou have done me a great service, hero. My heart could not bear to keep this locket, but I will place an enchantment upon it that you may find useful. Do with it as you please, but do not forget those that assisted you in this monumental feat.', `RequestItemsText`='Yes, $c? How can I assist you?' WHERE `Id`=@JAINAQUEST; +UPDATE `quest_template` SET `OfferRewardText`='Aye. I know this blade... and I will treasure it always - a moment of time that will be lost forever.$B$BYou have done me a great service, hero. I offer you a gift from the Frostborn dwarves. Do with it as you please, but do not forget those that assisted you in this monumental feat.', `RequestItemsText`='Whatdya got there, $r?' WHERE `Id`=@MURADINQUEST; +UPDATE `quest_template` SET `OfferRewardText`='<Sylvanas silently reflects for a moment before returning her gaze to you.>$B$BYou have done me a great service, hero. I offer you the boon of the Banshee Queen. Do with it as you please, but do not forget those that assisted you in this monumental feat.', `RequestItemsText`='What is it, $r?' WHERE `Id`=@SYLVANASQUEST; +UPDATE `quest_template` SET `OfferRewardText`='<Uther stares at the medal, speechless for a moment.>$B$BArthas'' medal.$B$BI remember well the day I presented it to him...$B$BYou have done me a great service, hero. My soul may now rest in peace. I offer you a memory lost in time. Do with it as you please, but do not forget those that assisted you in this monumental feat.', `RequestItemsText`='How may I be of service, $r?' WHERE `Id`=@UTHERQUEST; + +UPDATE `creature_queststarter` SET `id`=@JAINA WHERE `id`=37120 AND `quest`=24916; +UPDATE `creature_queststarter` SET `id`=@MURADIN WHERE `id`=37120 AND `quest`=24917; +UPDATE `creature_queststarter` SET `id`=@UTHER WHERE `id`=37120 AND `quest`=24919; +UPDATE `creature_queststarter` SET `id`=@SYLVANAS WHERE `id`=37120 AND `quest`=24918; + +UPDATE `creature_questender` SET `id`=@JAINA WHERE `id`=37120 AND `quest`=24916; +UPDATE `creature_questender` SET `id`=@MURADIN WHERE `id`=37120 AND `quest`=24917; +UPDATE `creature_questender` SET `id`=@UTHER WHERE `id`=37120 AND `quest`=24919; +UPDATE `creature_questender` SET `id`=@SYLVANAS WHERE `id`=37120 AND `quest`=24918; + +DELETE FROM `spell_target_position` WHERE `ID`=72468; +INSERT INTO `spell_target_position` (`id`, `effIndex`, `target_map`, `target_position_x`, `target_position_y`, `target_position_z`, `target_orientation`, `VerifiedBuild`) VALUES +(72468, 0, 631, -66.8684, 2158.28, 30.73743, 3.893452, 17658); + +DELETE FROM `gossip_menu` WHERE `entry`=11065 AND `text_id`=15382; +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES +(11065, 15382); + +DELETE FROM `npc_text` WHERE `ID`=15382; +INSERT INTO `npc_text` (`ID`, `text0_1`, `BroadcastTextID0`, `prob0`, `text1_1`, `BroadcastTextID1`, `prob1`, `VerifiedBuild`) VALUES +(15382, 'He''s truly gone, isn''t he?$b$bI... I can feel it.', 38510, 1, 'Was there truly no way to save him?$b$bI fear I shall always wonder.', 38511, 1, 19342); + +DELETE FROM `creature_text` WHERE `entry` IN (@JAINA,@MURADIN,@UTHER,@SYLVANAS,@ALEXANDROS); +DELETE FROM `creature_text` WHERE `entry`=@DARION AND `groupid` IN (4,5,6); +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextID`, `comment`) VALUES +(@JAINA, 0, 0, 'What''s this!?', 12, 0, 100, 5, 0, 17383, 38201, 'Lady Jaina Proudmoore to Player'), +(@JAINA, 1, 0, 'He... he kept it? All this time, he kept it!?', 12, 0, 100, 5, 0, 17384, 38202, 'Lady Jaina Proudmoore'), +(@JAINA, 2, 0, 'I knew! ', 12, 0, 100, 5, 0, 17385, 38203, 'Lady Jaina Proudmoore'), +(@JAINA, 3, 0, 'I sensed a part of him still alive! Trapped... struggling... Oh, Arthas!', 12, 0, 100, 396, 0, 17386, 38204, 'Lady Jaina Proudmoore'), +(@JAINA, 4, 0, 'Perhaps - perhaps he might someday remember what he once was.', 12, 0, 100, 396, 0, 17387, 38205, 'Lady Jaina Proudmoore'), +(@JAINA, 5, 0, 'By the Light, may he at last find rest, free from the icy grip of that terrible blade.', 12, 0, 100, 396, 0, 17388, 38206, 'Lady Jaina Proudmoore'), +(@MURADIN, 0, 0, 'Oh, lad...', 12, 0, 100, 396, 0, 17421, 38171, 'Muradin Bronzebeard'), +(@MURADIN, 1, 0, 'How I miss those endless days in Lordaeron...', 12, 0, 100, 396, 0, 17422, 38172, 'Muradin Bronzebeard'), +(@MURADIN, 2, 0, '...sharpenin'' yer skill with this dull blade...', 12, 0, 100, 396, 0, 17423, 38173, 'Muradin Bronzebeard'), +(@MURADIN, 3, 0, '...forgin'' ya into a weapon meant to withstand the demands of a great destiny.', 12, 0, 100, 396, 0, 17424, 38174, 'Muradin Bronzebeard'), +(@MURADIN, 4, 0, 'Heh... Yeh sure put them skills ta use, didn''t yeh, lad?', 12, 0, 100, 6, 0, 17425, 38175, 'Muradin Bronzebeard'), +(@MURADIN, 5, 0, 'If only I''da been able ta stop yeh that day, how different things mighta been.', 12, 0, 100, 396, 0, 17426, 38176, 'Muradin Bronzebeard'), +(@MURADIN, 6, 0, 'If only I''da never discovered that accursed blade...', 12, 0, 100, 396, 0, 17427, 38177, 'Muradin Bronzebeard'), +(@MURADIN, 7, 0, 'Farewell, Arthas... my brother.', 12, 0, 100, 396, 0, 17428, 38178, 'Muradin Bronzebeard'), +(@UTHER, 0, 0, 'Arthas...', 12, 0, 100, 396, 0, 17402, 38160, 'Uther the Lightbringer'), +(@UTHER, 1, 0, 'Alas, hero of Azeroth, you give me a greater gift than you know.', 12, 0, 100, 396, 0, 17403, 38161, 'Uther the Lightbringer'), +(@UTHER, 2, 0, 'Long have I struggled to forgive the prince for his terrible transgressions.', 12, 0, 100, 396, 0, 17404, 38162, 'Uther the Lightbringer'), +(@UTHER, 3, 0, 'My soul has been wracked with unbearable anxiety, dark thoughts... distancing me from the Light.', 12, 0, 100, 396, 0, 17405, 38163, 'Uther the Lightbringer'), +(@UTHER, 4, 0, 'I recall clearly the gleam of pride in his eye as he stood before me, eager to defeat the enemies of the Light...', 12, 0, 100, 396, 0, 17406, 38165, 'Uther the Lightbringer'), +(@UTHER, 5, 0, 'Eager to defend his people, no matter the cost.', 12, 0, 100, 396, 0, 17407, 38166, 'Uther the Lightbringer'), +(@UTHER, 6, 0, 'It is this memory of Arthas that I choose to keep in my heart.', 12, 0, 100, 396, 0, 17408, 38167, 'Uther the Lightbringer'), +(@UTHER, 7, 0, 'I shall always be in your debt, friend.', 12, 0, 100, 396, 0, 17409, 38168, 'Uther the Lightbringer'), +(@UTHER, 8, 0, 'Thank you.', 12, 0, 100, 0, 0, 17410, 38169, 'Uther the Lightbringer'), +(@SYLVANAS, 0, 0, 'So, it is done.', 12, 0, 100, 396, 0, 17376, 38179, 'Lady Sylvanas Windrunner'), +(@SYLVANAS, 1, 0, 'I had not dared to trust my senses - too many times has the Lich King made me to be a fool.', 12, 0, 100, 396, 0, 17377, 38180, 'Lady Sylvanas Windrunner'), +(@SYLVANAS, 2, 0, 'Finally, he has been made to pay for the atrocities he imposed upon my people.', 12, 0, 100, 396, 0, 17378, 38181, 'Lady Sylvanas Windrunner'), +(@SYLVANAS, 3, 0, 'May Azeroth never fail to remember the terrible price we paid for our weakness... for our pride.', 12, 0, 100, 396, 0, 17379, 38183, 'Lady Sylvanas Windrunner'), +(@SYLVANAS, 4, 0, 'But what now, hero? What of those freed from his grasp, but still shackled to their mortal coils?', 12, 0, 100, 6, 0, 17380, 38184, 'Lady Sylvanas Windrunner'), +(@SYLVANAS, 5, 0, 'Leave me. ', 12, 0, 100, 396, 0, 17381, 38185, 'Lady Sylvanas Windrunner'), +(@SYLVANAS, 6, 0, 'I have much to ponder.', 12, 0, 100, 396, 0, 17382, 38186, 'Lady Sylvanas Windrunner'), +(@ALEXANDROS, 0, 0, 'Darion, my son.', 12, 0, 100, 396, 0, 17414, 38152, 'Highlord Alexandros Mograine'), +(@ALEXANDROS, 1, 0, 'At last, I am able to lay my eyes upon you again.', 12, 0, 100, 396, 0, 17415, 38153, 'Highlord Alexandros Mograine'), +(@ALEXANDROS, 2, 0, 'The Lich King tormented me without end, Darion.', 12, 0, 100, 396, 0, 17416, 38154, 'Highlord Alexandros Mograine'), +(@ALEXANDROS, 3, 0, 'Endlessly, he sought to break my will, to force me to serve him, to bind me to his blade...', 12, 0, 100, 396, 0, 17417, 38155, 'Highlord Alexandros Mograine'), +(@ALEXANDROS, 4, 0, 'Finally, when events demanded his full attention, he left me.', 12, 0, 100, 396, 0, 17418, 38156, 'Highlord Alexandros Mograine'), +(@ALEXANDROS, 5, 0, 'The one memory, I clung to, Darion... The one thought that kept me from giving in...', 12, 0, 100, 396, 0, 17419, 38157, 'Highlord Alexandros Mograine'), +(@ALEXANDROS, 6, 0, 'It was your sacrifice, my son, that again saved me from eternal peril.', 12, 0, 100, 396, 0, 17420, 38158, 'Highlord Alexandros Mograine'), +(@DARION, 4, 0, 'Father...', 12, 0, 100, 396, 0, 17411, 38143, 'Highlord Darion Mograine'), +(@DARION, 5, 0, 'Father. I feared for your... your sanity.', 12, 0, 100, 396, 0, 17412, 38150, 'Highlord Darion Mograine'), +(@DARION, 6, 0, 'Father... For you, I would give my life a thousand times.', 12, 0, 100, 396, 0, 17413, 38151, 'Highlord Darion Mograine'); + +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@JAINA, @JAINA*100, @MURADIN, @MURADIN*100, @UTHER, @UTHER*100, @SYLVANAS, @SYLVANAS*100, @DARION*100+1, @ALEXANDROS) AND `source_type` IN (0,9); +DELETE FROM `smart_scripts` WHERE `entryorguid`=@DARION AND `id`=7; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(@JAINA, 0, 0, 0, 20, 0, 100, 0, @JAINAQUEST, 0, 0, 0, 80, @JAINA*100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Quest ''Jaina''s Locket'' Finished - Run Script'), +(@JAINA*100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Script - Remove NPC Flags'), +(@JAINA*100, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 9, @MURADIN, 0, 10, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Script - Remove NPC Flags'), +(@JAINA*100, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 9, @UTHER, 0, 10, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Script - Remove NPC Flags'), +(@JAINA*100, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 9, @SYLVANAS, 0, 10, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Script - Remove NPC Flags'), +(@JAINA*100, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 9, @DARION, 0, 10, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Script - Remove NPC Flags'), +(@JAINA*100, 9, 5, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Script - Say Line 0'), +(@JAINA*100, 9, 6, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Script - Say Line 1'), +(@JAINA*100, 9, 7, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Script - Say Line 2'), +(@JAINA*100, 9, 8, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 1, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Script - Say Line 3'), +(@JAINA*100, 9, 9, 0, 0, 0, 100, 0, 10000, 10000, 0, 0, 1, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Script - Say Line 4'), +(@JAINA*100, 9, 10, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Script - Say Line 5'), +(@JAINA*100, 9, 11, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 81, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Script - Restore NPC Flags'), +(@JAINA*100, 9, 12, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 2, 0, 0, 0, 0, 0, 9, @MURADIN, 0, 10, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Script - Restore NPC Flags'), +(@JAINA*100, 9, 13, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 2, 0, 0, 0, 0, 0, 9, @UTHER, 0, 10, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Script - Restore NPC Flags'), +(@JAINA*100, 9, 14, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 2, 0, 0, 0, 0, 0, 9, @SYLVANAS, 0, 10, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Script - Restore NPC Flags'), +(@JAINA*100, 9, 15, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 3, 0, 0, 0, 0, 0, 9, @DARION, 0, 10, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Script - Restore NPC Flags'), +(@MURADIN, 0, 0, 0, 20, 0, 100, 0, @MURADINQUEST, 0, 0, 0, 80, @MURADIN*100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Muradin Bronzebeard - On Quest ''Muradin''s Lament'' Finished - Run Script'), +(@MURADIN*100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Muradin Bronzebeard - On Script - Remove NPC Flags'), +(@MURADIN*100, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 9, @JAINA, 0, 10, 0, 0, 0, 0, 'Muradin Bronzebeard - On Script - Remove NPC Flags'), +(@MURADIN*100, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 9, @UTHER, 0, 10, 0, 0, 0, 0, 'Muradin Bronzebeard - On Script - Remove NPC Flags'), +(@MURADIN*100, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 9, @SYLVANAS, 0, 10, 0, 0, 0, 0, 'Muradin Bronzebeard - On Script - Remove NPC Flags'), +(@MURADIN*100, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 9, @DARION, 0, 10, 0, 0, 0, 0, 'Muradin Bronzebeard - On Script - Remove NPC Flags'), +(@MURADIN*100, 9, 5, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Muradin Bronzebeard - On Script - Say Line 0'), +(@MURADIN*100, 9, 6, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Muradin Bronzebeard - On Script - Say Line 1'), +(@MURADIN*100, 9, 7, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Muradin Bronzebeard - On Script - Say Line 2'), +(@MURADIN*100, 9, 8, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 1, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Muradin Bronzebeard - On Script - Say Line 3'), +(@MURADIN*100, 9, 9, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Muradin Bronzebeard - On Script - Say Line 4'), +(@MURADIN*100, 9, 10, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Muradin Bronzebeard - On Script - Say Line 5'), +(@MURADIN*100, 9, 11, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 1, 6, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Muradin Bronzebeard - On Script - Say Line 6'), +(@MURADIN*100, 9, 12, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 1, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Muradin Bronzebeard - On Script - Say Line 7'), +(@MURADIN*100, 9, 13, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 81, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Muradin Bronzebeard - On Script - Restore NPC Flags'), +(@MURADIN*100, 9, 14, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 3, 0, 0, 0, 0, 0, 9, @JAINA, 0, 10, 0, 0, 0, 0, 'Muradin Bronzebeard - On Script - Restore NPC Flags'), +(@MURADIN*100, 9, 15, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 2, 0, 0, 0, 0, 0, 9, @UTHER, 0, 10, 0, 0, 0, 0, 'Muradin Bronzebeard - On Script - Restore NPC Flags'), +(@MURADIN*100, 9, 16, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 2, 0, 0, 0, 0, 0, 9, @SYLVANAS, 0, 10, 0, 0, 0, 0, 'Muradin Bronzebeard - On Script - Restore NPC Flags'), +(@MURADIN*100, 9, 17, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 3, 0, 0, 0, 0, 0, 9, @DARION, 0, 10, 0, 0, 0, 0, 'Muradin Bronzebeard - On Script - Restore NPC Flags'), +(@UTHER, 0, 0, 0, 20, 0, 100, 0, @UTHERQUEST, 0, 0, 0, 80, @UTHER*100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Uther the Lightbringer - On Quest ''The Lightbringer''s Redemption'' Finished - Run Script'), +(@UTHER*100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Uther the Lightbringer - On Script - Remove NPC Flags'), +(@UTHER*100, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 9, @JAINA, 0, 10, 0, 0, 0, 0, 'Uther the Lightbringer - On Script - Remove NPC Flags'), +(@UTHER*100, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 9, @MURADIN, 0, 10, 0, 0, 0, 0, 'Uther the Lightbringer - On Script - Remove NPC Flags'), +(@UTHER*100, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 9, @SYLVANAS, 0, 10, 0, 0, 0, 0, 'Uther the Lightbringer - On Script - Remove NPC Flags'), +(@UTHER*100, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 9, @DARION, 0, 10, 0, 0, 0, 0, 'Uther the Lightbringer - On Script - Remove NPC Flags'), +(@UTHER*100, 9, 5, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Uther the Lightbringer - On Script - Say Line 0'), +(@UTHER*100, 9, 6, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Uther the Lightbringer - On Script - Say Line 1'), +(@UTHER*100, 9, 7, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Uther the Lightbringer - On Script - Say Line 2'), +(@UTHER*100, 9, 8, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 1, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Uther the Lightbringer - On Script - Say Line 3'), +(@UTHER*100, 9, 9, 0, 0, 0, 100, 0, 9000, 9000, 0, 0, 1, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Uther the Lightbringer - On Script - Say Line 4'), +(@UTHER*100, 9, 10, 0, 0, 0, 100, 0, 11000, 11000, 0, 0, 1, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Uther the Lightbringer - On Script - Say Line 5'), +(@UTHER*100, 9, 11, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 6, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Uther the Lightbringer - On Script - Say Line 6'), +(@UTHER*100, 9, 12, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 1, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Uther the Lightbringer - On Script - Say Line 7'), +(@UTHER*100, 9, 13, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Uther the Lightbringer - On Script - Say Line 8'), +(@UTHER*100, 9, 14, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 81, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Uther the Lightbringer - On Script - Restore NPC Flags'), +(@UTHER*100, 9, 15, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 3, 0, 0, 0, 0, 0, 9, @JAINA, 0, 10, 0, 0, 0, 0, 'Uther the Lightbringer - On Script - Restore NPC Flags'), +(@UTHER*100, 9, 16, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 2, 0, 0, 0, 0, 0, 9, @MURADIN, 0, 10, 0, 0, 0, 0, 'Uther the Lightbringer - On Script - Restore NPC Flags'), +(@UTHER*100, 9, 17, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 2, 0, 0, 0, 0, 0, 9, @SYLVANAS, 0, 10, 0, 0, 0, 0, 'Uther the Lightbringer - On Script - Restore NPC Flags'), +(@UTHER*100, 9, 18, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 3, 0, 0, 0, 0, 0, 9, @DARION, 0, 10, 0, 0, 0, 0, 'Uther the Lightbringer - On Script - Restore NPC Flags'), +(@SYLVANAS, 0, 0, 0, 20, 0, 100, 0, @SYLVANASQUEST, 0, 0, 0, 80, @SYLVANAS*100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Sylvanas Windrunner - On Quest ''Sylvanas'' Vengeance'' Finished - Run Script'), +(@SYLVANAS*100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Sylvanas Windrunner - On Script - Remove NPC Flags'), +(@SYLVANAS*100, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 9, @JAINA, 0, 10, 0, 0, 0, 0, 'Lady Sylvanas Windrunner - On Script - Remove NPC Flags'), +(@SYLVANAS*100, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 9, @MURADIN, 0, 10, 0, 0, 0, 0, 'Lady Sylvanas Windrunner - On Script - Remove NPC Flags'), +(@SYLVANAS*100, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 9, @UTHER, 0, 10, 0, 0, 0, 0, 'Lady Sylvanas Windrunner - On Script - Remove NPC Flags'), +(@SYLVANAS*100, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 9, @DARION, 0, 10, 0, 0, 0, 0, 'Lady Sylvanas Windrunner - On Script - Remove NPC Flags'), +(@SYLVANAS*100, 9, 5, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Sylvanas Windrunner - On Script - Say Line 0'), +(@SYLVANAS*100, 9, 6, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Sylvanas Windrunner - On Script - Say Line 1'), +(@SYLVANAS*100, 9, 7, 0, 0, 0, 100, 0, 8000, 8000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Sylvanas Windrunner - On Script - Say Line 2'), +(@SYLVANAS*100, 9, 8, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Sylvanas Windrunner - On Script - Say Line 3'), +(@SYLVANAS*100, 9, 9, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 1, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Sylvanas Windrunner - On Script - Say Line 4'), +(@SYLVANAS*100, 9, 10, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 1, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Sylvanas Windrunner - On Script - Say Line 5'), +(@SYLVANAS*100, 9, 11, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 1, 6, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Sylvanas Windrunner - On Script - Say Line 6'), +(@SYLVANAS*100, 9, 12, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 81, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Sylvanas Windrunner - On Script - Restore NPC Flags'), +(@SYLVANAS*100, 9, 13, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 3, 0, 0, 0, 0, 0, 9, @JAINA, 0, 10, 0, 0, 0, 0, 'Lady Sylvanas Windrunner - On Script - Restore NPC Flags'), +(@SYLVANAS*100, 9, 14, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 2, 0, 0, 0, 0, 0, 9, @MURADIN, 0, 10, 0, 0, 0, 0, 'Lady Sylvanas Windrunner - On Script - Restore NPC Flags'), +(@SYLVANAS*100, 9, 15, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 2, 0, 0, 0, 0, 0, 9, @UTHER, 0, 10, 0, 0, 0, 0, 'Lady Sylvanas Windrunner - On Script - Restore NPC Flags'), +(@SYLVANAS*100, 9, 16, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 3, 0, 0, 0, 0, 0, 9, @DARION, 0, 10, 0, 0, 0, 0, 'Lady Sylvanas Windrunner - On Script - Restore NPC Flags'), +(@DARION, 0, 7, 0, 20, 0, 100, 0, @DARIONQUEST, 0, 0, 0, 80, @DARION*100+1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Highlord Darion Mograine - On Quest ''Mograine''s Reunion'' Finished - Run Script'), +(@DARION*100+1, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Highlord Darion Mograine - On Script - Remove NPC Flags'), +(@DARION*100+1, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 9, @JAINA, 0, 10, 0, 0, 0, 0, 'Highlord Darion Mograine - On Script - Remove NPC Flags'), +(@DARION*100+1, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 9, @MURADIN, 0, 10, 0, 0, 0, 0, 'Highlord Darion Mograine - On Script - Remove NPC Flags'), +(@DARION*100+1, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 9, @UTHER, 0, 10, 0, 0, 0, 0, 'Highlord Darion Mograine - On Script - Remove NPC Flags'), +(@DARION*100+1, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 9, @SYLVANAS, 0, 10, 0, 0, 0, 0, 'Highlord Darion Mograine - On Script - Remove NPC Flags'), +(@DARION*100+1, 9, 5, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 5, 432, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Highlord Darion Mograine - On Script - Play Emote 432'), +(@DARION*100+1, 9, 6, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 11, 72468, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Highlord Darion Mograine - On Script - Cast ''Summon Alexandros'''), +(@DARION*100+1, 9, 7, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 66, 0, 0, 0, 0, 0, 0, 19, @ALEXANDROS, 0, 0, 0, 0, 0, 0, 'Highlord Darion Mograine - On Script - Set Orientation Closest Creature ''Highlord Alexandros Mograine'''), +(@DARION*100+1, 9, 8, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Highlord Darion Mograine - On Script - Say Line 4'), +(@DARION*100+1, 9, 9, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 9, @ALEXANDROS, 0, 10, 0, 0, 0, 0, 'Highlord Darion Mograine - On Script - Say Line 0'), +(@DARION*100+1, 9, 10, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 9, @ALEXANDROS, 0, 10, 0, 0, 0, 0, 'Highlord Darion Mograine - On Script - Say Line 1'), +(@DARION*100+1, 9, 11, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Highlord Darion Mograine - On Script - Say Line 5'), +(@DARION*100+1, 9, 12, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 9, @ALEXANDROS, 0, 10, 0, 0, 0, 0, 'Highlord Darion Mograine - On Script - Say Line 2'), +(@DARION*100+1, 9, 13, 0, 0, 0, 100, 0, 11000, 11000, 0, 0, 1, 3, 0, 0, 0, 0, 0, 9, @ALEXANDROS, 0, 10, 0, 0, 0, 0, 'Highlord Darion Mograine - On Script - Say Line 3'), +(@DARION*100+1, 9, 14, 0, 0, 0, 100, 0, 8000, 8000, 0, 0, 1, 4, 0, 0, 0, 0, 0, 9, @ALEXANDROS, 0, 10, 0, 0, 0, 0, 'Highlord Darion Mograine - On Script - Say Line 4'), +(@DARION*100+1, 9, 15, 0, 0, 0, 100, 0, 8000, 8000, 0, 0, 1, 5, 0, 0, 0, 0, 0, 9, @ALEXANDROS, 0, 10, 0, 0, 0, 0, 'Highlord Darion Mograine - On Script - Say Line 5'), +(@DARION*100+1, 9, 16, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 1, 6, 0, 0, 0, 0, 0, 9, @ALEXANDROS, 0, 10, 0, 0, 0, 0, 'Highlord Darion Mograine - On Script - Say Line 6'), +(@DARION*100+1, 9, 17, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 1, 6, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Highlord Darion Mograine - On Script - Say Line 6'), +(@DARION*100+1, 9, 18, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Highlord Darion Mograine - On Script - Set Orientation Home Position'), +(@DARION*100+1, 9, 19, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 11, @ALEXANDROS, 10, 0, 0, 0, 0, 0, 'Highlord Darion Mograine - On Script - Despawn Highlord Alexandros'), +(@DARION*100+1, 9, 20, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Highlord Darion Mograine - On Script - Restore NPC Flags'), +(@DARION*100+1, 9, 21, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 3, 0, 0, 0, 0, 0, 9, @JAINA, 0, 10, 0, 0, 0, 0, 'Highlord Darion Mograine - On Script - Restore NPC Flags'), +(@DARION*100+1, 9, 22, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 2, 0, 0, 0, 0, 0, 9, @MURADIN, 0, 10, 0, 0, 0, 0, 'Highlord Darion Mograine - On Script - Restore NPC Flags'), +(@DARION*100+1, 9, 23, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 2, 0, 0, 0, 0, 0, 9, @UTHER, 0, 10, 0, 0, 0, 0, 'Highlord Darion Mograine - On Script - Restore NPC Flags'), +(@DARION*100+1, 9, 24, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 2, 0, 0, 0, 0, 0, 9, @SYLVANAS, 0, 10, 0, 0, 0, 0, 'Highlord Darion Mograine - On Script - Restore NPC Flags'), +(@ALEXANDROS, 0, 0, 0, 1, 0, 100, 1, 0, 0, 0, 0, 11, 72469, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Highlord Alexandros Mograine - Out of Combat - Cast ''Alexandros Spawn'''); diff --git a/sql/updates/world/2015_04_01_00_world.sql b/sql/updates/world/2015_04_01_00_world.sql new file mode 100644 index 00000000000..68d43c08415 --- /dev/null +++ b/sql/updates/world/2015_04_01_00_world.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `smart_scripts` WHERE `entryorguid`=15274 AND `id`=2; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(15274, 0, 2, 0, 8, 0, 100, 1, 50613, 0, 0, 0, 11, 61314, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Mana Wyrm - On Spellhit Arcane Torrent - Quest Credit'); diff --git a/sql/updates/world/2015_04_01_01_world.sql b/sql/updates/world/2015_04_01_01_world.sql new file mode 100644 index 00000000000..b53c739e2dd --- /dev/null +++ b/sql/updates/world/2015_04_01_01_world.sql @@ -0,0 +1,376 @@ +-- Pathing for Silvermoon City Guardian Entry: 16222 'TDB FORMAT' +SET @NPC := 56892; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=9797.032,`position_y`=-7418.94,`position_z`=14.02596 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,9797.032,-7418.94,14.02596,0,0,0,0,100,0), -- 20:03:32 +(@PATH,2,9795.906,-7402.565,13.77626,0,0,0,0,100,0), -- 20:03:42 +(@PATH,3,9795.656,-7400.315,13.77626,0,0,0,0,100,0), -- 20:03:42 +(@PATH,4,9790.018,-7397.717,14.59705,0,0,0,0,100,0), -- 20:03:50 +(@PATH,5,9788.768,-7397.717,14.84705,0,0,0,0,100,0), -- 20:03:50 +(@PATH,6,9775.768,-7396.717,14.84705,0,0,0,0,100,0), -- 20:03:50 +(@PATH,7,9770.018,-7396.217,14.84705,0,0,0,0,100,0), -- 20:03:50 +(@PATH,8,9767.188,-7400.526,14.03701,0,0,0,0,100,0), -- 20:04:01 +(@PATH,9,9767.188,-7402.276,14.03701,0,0,0,0,100,0), -- 20:04:01 +(@PATH,10,9765.688,-7412.526,13.78701,0,0,0,0,100,0), -- 20:04:01 +(@PATH,11,9758.99,-7418.586,13.32115,0,0,0,0,100,0), -- 20:04:10 +(@PATH,12,9713.854,-7426.193,13.51967,0,0,0,0,100,0), -- 20:04:24 +(@PATH,13,9707.104,-7429.193,13.51967,0,0,0,0,100,0), -- 20:04:24 +(@PATH,14,9700.104,-7432.693,13.51967,0,0,0,0,100,0), -- 20:04:24 +(@PATH,15,9687.424,-7434.536,13.54329,0,0,0,0,100,0), -- 20:04:39 +(@PATH,16,9650.786,-7425.012,13.54389,0,0,0,0,100,0), -- 20:04:50 +(@PATH,17,9611.484,-7423.664,13.54949,0,0,0,0,100,0), -- 20:04:59 +(@PATH,18,9602.561,-7429.987,13.43456,0,0,0,0,100,0), -- 20:05:15 +(@PATH,19,9602.061,-7430.737,13.93456,0,0,0,0,100,0), -- 20:05:15 +(@PATH,20,9600.311,-7432.487,13.68456,0,0,0,0,100,0), -- 20:05:15 +(@PATH,21,9578.125,-7435.431,15.78367,0,0,0,0,100,0), -- 20:05:23 +(@PATH,22,9573.875,-7434.931,15.78367,0,0,0,0,100,0), -- 20:05:23 +(@PATH,23,9570.875,-7434.681,15.78367,0,0,0,0,100,0), -- 20:05:23 +(@PATH,24,9561.199,-7425.627,17.48535,0,0,0,0,100,0), -- 20:05:36 +(@PATH,25,9560.949,-7424.377,17.98535,0,0,0,0,100,0), -- 20:05:36 +(@PATH,26,9560.449,-7422.627,18.73535,0,0,0,0,100,0), -- 20:05:36 +(@PATH,27,9560.199,-7420.877,19.48535,0,0,0,0,100,0), -- 20:05:36 +(@PATH,28,9562.604,-7417.716,19.62811,0,0,0,0,100,0), -- 20:05:42 +(@PATH,29,9564.242,-7407.687,19.65438,0,0,0,0,100,0), -- 20:05:44 +(@PATH,30,9564.242,-7403.187,17.15438,0,0,0,0,100,0), -- 20:05:44 +(@PATH,31,9555.359,-7396.585,17.08825,0,0,0,0,100,0), -- 20:05:52 +(@PATH,32,9547.609,-7396.585,17.08825,0,0,0,0,100,0), -- 20:05:52 +(@PATH,33,9539.609,-7396.835,17.08825,0,0,0,0,100,0), -- 20:05:52 +(@PATH,34,9538.109,-7396.835,17.08825,0,0,0,0,100,0), -- 20:05:52 +(@PATH,35,9536.859,-7396.835,17.08825,0,0,0,0,100,0), -- 20:05:52 +(@PATH,36,9534.359,-7396.835,17.08825,0,0,0,0,100,0), -- 20:05:52 +(@PATH,37,9530.609,-7397.085,17.08825,0,0,0,0,100,0), -- 20:05:52 +(@PATH,38,9528.309,-7396.823,17.08099,0,0,0,0,100,0), -- 20:06:06 +(@PATH,39,9515.559,-7396.823,15.08099,0,0,0,0,100,0), -- 20:06:06 +(@PATH,40,9508.986,-7383.027,14.37308,0,0,0,0,100,0), -- 20:06:15 +(@PATH,41,9507.986,-7368.527,14.37308,0,0,0,0,100,0), -- 20:06:15 +(@PATH,42,9509.079,-7334.869,14.47609,0,0,0,0,100,0), -- 20:06:29 +(@PATH,43,9509.329,-7333.369,14.47609,0,0,0,0,100,0), -- 20:06:29 +(@PATH,44,9509.329,-7332.369,14.47609,0,0,0,0,100,0), -- 20:06:29 +(@PATH,45,9509.579,-7330.119,14.47609,0,0,0,0,100,0), -- 20:06:29 +(@PATH,46,9509.579,-7329.119,14.22609,0,0,0,0,100,0), -- 20:06:29 +(@PATH,47,9510.201,-7311.316,14.32034,0,0,0,0,100,0), -- 20:06:45 +(@PATH,48,9510.201,-7306.066,14.32034,0,0,0,0,100,0), -- 20:06:45 +(@PATH,49,9510.451,-7298.816,14.32034,0,0,0,0,100,0), -- 20:06:45 +(@PATH,50,9510.451,-7293.316,14.07034,0,0,0,0,100,0), -- 20:06:45 +(@PATH,51,9510.329,-7300.647,14.09887,0,0,0,0,100,0), -- 20:06:54 +(@PATH,52,9510.372,-7292.951,14.05711,0,0,0,0,100,0), -- 20:10:02 +(@PATH,53,9515.844,-7278.31,14.22743,0,0,0,0,100,0), -- 20:10:09 +(@PATH,54,9526.344,-7277.31,13.97743,0,0,0,0,100,0), -- 20:10:09 +(@PATH,55,9537.094,-7276.31,14.22743,0,0,0,0,100,0), -- 20:10:09 +(@PATH,56,9555.932,-7274.813,14.1918,0,0,0,0,100,0), -- 20:10:27 +(@PATH,57,9620.014,-7275.292,14.19181,0,0,0,0,100,0), -- 20:10:43 +(@PATH,58,9664.584,-7274.804,13.9807,0,0,0,0,100,0), -- 20:11:00 +(@PATH,59,9667.084,-7274.804,14.2307,0,0,0,0,100,0), -- 20:11:00 +(@PATH,60,9676.5,-7289.921,13.96391,0,0,0,0,100,0), -- 20:11:16 +(@PATH,61,9676.75,-7291.921,14.21391,0,0,0,0,100,0), -- 20:11:16 +(@PATH,62,9682.359,-7296.356,14.19385,0,0,0,0,100,0), -- 20:11:25 +(@PATH,63,9693.359,-7297.106,14.44385,0,0,0,0,100,0), -- 20:11:25 +(@PATH,64,9695.359,-7297.106,14.44385,0,0,0,0,100,0), -- 20:11:25 +(@PATH,65,9698.109,-7297.356,14.69385,0,0,0,0,100,0), -- 20:11:25 +(@PATH,66,9699.902,-7303.835,15.57155,0,0,0,0,100,0), -- 20:11:34 +(@PATH,67,9699.902,-7308.335,15.32155,0,0,0,0,100,0), -- 20:11:34 +(@PATH,68,9695.211,-7310.05,14.5845,0,0,0,0,100,0), -- 20:11:39 +(@PATH,69,9693.211,-7310.3,14.5845,0,0,0,0,100,0), -- 20:11:39 +(@PATH,70,9682.211,-7310.8,14.3345,0,0,0,0,100,0), -- 20:11:39 +(@PATH,71,9676.809,-7317.146,14.0487,0,0,0,0,100,0), -- 20:11:48 +(@PATH,72,9676.059,-7328.396,13.7987,0,0,0,0,100,0), -- 20:11:48 +(@PATH,73,9675.559,-7335.146,12.5487,0,0,0,0,100,0), -- 20:11:48 +(@PATH,74,9675.311,-7342.5,12.11859,0,0,0,0,100,0), -- 20:11:59 +(@PATH,75,9675.311,-7345.75,12.11859,0,0,0,0,100,0), -- 20:11:59 +(@PATH,76,9675.311,-7347.5,12.11859,0,0,0,0,100,0), -- 20:11:59 +(@PATH,77,9675.311,-7348.5,12.11859,0,0,0,0,100,0), -- 20:11:59 +(@PATH,78,9669.002,-7356.422,12.18507,0,0,0,0,100,0), -- 20:12:06 +(@PATH,79,9668.814,-7361.282,12.18596,0,0,0,0,100,0), -- 20:12:10 +(@PATH,80,9668.77,-7364.439,12.18267,0,0,0,0,100,0), -- 20:12:12 +(@PATH,81,9690.079,-7381.311,12.09861,0,0,0,0,100,0), -- 20:12:22 +(@PATH,82,9687.182,-7384.319,11.74371,0,0,0,0,100,0), -- 20:12:24 +(@PATH,83,9686.182,-7384.319,11.74371,0,0,0,0,100,0), -- 20:12:24 +(@PATH,84,9683.373,-7392.788,12.14598,0,0,0,0,100,0), -- 20:12:28 +(@PATH,85,9683.373,-7394.288,12.14598,0,0,0,0,100,0), -- 20:12:28 +(@PATH,86,9682.873,-7403.288,11.89598,0,0,0,0,100,0), -- 20:12:28 +(@PATH,87,9682.623,-7408.288,11.89598,0,0,0,0,100,0), -- 20:12:28 +(@PATH,88,9682.373,-7411.788,11.89598,0,0,0,0,100,0), -- 20:12:28 +(@PATH,89,9682.123,-7420.038,13.89598,0,0,0,0,100,0), -- 20:12:28 +(@PATH,90,9681.873,-7421.538,13.89598,0,0,0,0,100,0), -- 20:12:28 +(@PATH,91,9682.331,-7411.838,12.38935,0,0,0,0,100,0), -- 20:12:44 +(@PATH,92,9682.581,-7408.338,11.88935,0,0,0,0,100,0), -- 20:12:44 +(@PATH,93,9682.581,-7403.338,12.13935,0,0,0,0,100,0), -- 20:12:44 +(@PATH,94,9683.081,-7394.338,12.13935,0,0,0,0,100,0), -- 20:12:44 +(@PATH,95,9683.081,-7392.838,12.13935,0,0,0,0,100,0), -- 20:12:44 +(@PATH,96,9683.331,-7390.088,12.13935,0,0,0,0,100,0), -- 20:12:44 +(@PATH,97,9687.128,-7384.611,11.93381,0,0,0,0,100,0), -- 20:12:58 +(@PATH,98,9689.84,-7379.5,12.07366,0,0,0,0,100,0), -- 20:13:02 +(@PATH,99,9689.515,-7378.112,12.14712,0,0,0,0,100,0), -- 20:13:04 +(@PATH,100,9668.722,-7361.385,12.18551,0,0,0,0,100,0), -- 20:13:14 +(@PATH,101,9668.566,-7356.804,12.18437,0,0,0,0,100,0), -- 20:13:18 +(@PATH,102,9675.295,-7347.331,12.04761,0,0,0,0,100,0), -- 20:13:20 +(@PATH,103,9675.295,-7346.081,12.04761,0,0,0,0,100,0), -- 20:13:20 +(@PATH,104,9675.045,-7342.581,12.04761,0,0,0,0,100,0), -- 20:13:20 +(@PATH,105,9675.82,-7328.544,13.847,0,0,0,0,100,0), -- 20:13:27 +(@PATH,106,9676.07,-7317.294,14.097,0,0,0,0,100,0), -- 20:13:27 +(@PATH,107,9676.32,-7315.294,14.097,0,0,0,0,100,0), -- 20:13:27 +(@PATH,108,9693.324,-7310.449,14.44139,0,0,0,0,100,0), -- 20:13:38 +(@PATH,109,9695.074,-7310.449,14.44139,0,0,0,0,100,0), -- 20:13:38 +(@PATH,110,9697.824,-7310.199,14.69139,0,0,0,0,100,0), -- 20:13:38 +(@PATH,111,9699.779,-7303.936,15.51412,0,0,0,0,100,0), -- 20:13:48 +(@PATH,112,9700.029,-7299.436,15.51412,0,0,0,0,100,0), -- 20:13:48 +(@PATH,113,9698.18,-7297.467,15.08991,0,0,0,0,100,0), -- 20:13:53 +(@PATH,114,9695.18,-7297.467,14.58991,0,0,0,0,100,0), -- 20:13:53 +(@PATH,115,9693.43,-7297.217,14.58991,0,0,0,0,100,0), -- 20:13:53 +(@PATH,116,9682.43,-7296.467,14.33991,0,0,0,0,100,0), -- 20:13:53 +(@PATH,117,9680.68,-7296.467,14.08991,0,0,0,0,100,0), -- 20:13:53 +(@PATH,118,9676.986,-7292.785,14.18614,0,0,0,0,100,0), -- 20:14:01 +(@PATH,119,9676.736,-7290.035,13.93614,0,0,0,0,100,0), -- 20:14:01 +(@PATH,120,9676.486,-7284.785,14.18614,0,0,0,0,100,0), -- 20:14:01 +(@PATH,121,9664.668,-7274.95,13.98935,0,0,0,0,100,0), -- 20:14:11 +(@PATH,122,9641.668,-7275.45,13.98935,0,0,0,0,100,0), -- 20:14:11 +(@PATH,123,9600.16,-7275.033,14.19062,0,0,0,0,100,0), -- 20:14:27 +(@PATH,124,9596.66,-7275.033,14.19062,0,0,0,0,100,0), -- 20:14:27 +(@PATH,125,9595.887,-7274.914,14.19024,0,0,0,0,100,0), -- 20:14:43 +(@PATH,126,9526.42,-7277.001,14.22749,0,0,0,0,100,0), -- 20:14:59 +(@PATH,127,9515.92,-7278.001,14.22749,0,0,0,0,100,0), -- 20:14:59 +(@PATH,128,9513.92,-7278.251,14.22749,0,0,0,0,100,0), -- 20:14:59 +(@PATH,129,9510.681,-7293.288,14.06322,0,0,0,0,100,0), -- 20:15:17 +(@PATH,130,9510.681,-7298.788,14.31322,0,0,0,0,100,0), -- 20:15:17 +(@PATH,131,9510.681,-7306.038,14.31322,0,0,0,0,100,0), -- 20:15:17 +(@PATH,132,9510.431,-7311.288,14.31322,0,0,0,0,100,0), -- 20:15:17 +(@PATH,133,9510.431,-7314.288,14.31322,0,0,0,0,100,0), -- 20:15:17 +(@PATH,134,9509.529,-7330.155,14.47821,0,0,0,0,100,0), -- 20:15:34 +(@PATH,135,9509.279,-7332.405,14.47821,0,0,0,0,100,0), -- 20:15:34 +(@PATH,136,9509.279,-7333.405,14.47821,0,0,0,0,100,0), -- 20:15:34 +(@PATH,137,9509.029,-7334.905,14.47821,0,0,0,0,100,0), -- 20:15:34 +(@PATH,138,9507.779,-7356.905,14.47821,0,0,0,0,100,0), -- 20:15:34 +(@PATH,139,9508.02,-7368.424,14.58394,0,0,0,0,100,0), -- 20:15:49 +(@PATH,140,9508.77,-7382.924,14.58394,0,0,0,0,100,0), -- 20:15:49 +(@PATH,141,9508.77,-7385.174,14.58394,0,0,0,0,100,0), -- 20:15:49 +(@PATH,142,9528.405,-7396.765,17.07827,0,0,0,0,100,0), -- 20:16:04 +(@PATH,143,9534.251,-7396.64,16.96906,0,0,0,0,100,0), -- 20:16:13 +(@PATH,144,9537.001,-7396.64,16.96906,0,0,0,0,100,0), -- 20:16:13 +(@PATH,145,9538.001,-7396.64,16.96906,0,0,0,0,100,0), -- 20:16:13 +(@PATH,146,9539.751,-7396.64,16.96906,0,0,0,0,100,0), -- 20:16:13 +(@PATH,147,9547.501,-7396.64,16.96906,0,0,0,0,100,0), -- 20:16:13 +(@PATH,148,9555.251,-7396.39,16.96906,0,0,0,0,100,0), -- 20:16:13 +(@PATH,149,9556.751,-7396.39,16.96906,0,0,0,0,100,0), -- 20:16:13 +(@PATH,150,9564.121,-7407.653,19.65082,0,0,0,0,100,0), -- 20:16:26 +(@PATH,151,9564.121,-7411.653,19.65082,0,0,0,0,100,0), -- 20:16:26 +(@PATH,152,9562.407,-7417.577,19.72515,0,0,0,0,100,0), -- 20:16:34 +(@PATH,153,9560.863,-7424.275,17.98024,0,0,0,0,100,0), -- 20:16:37 +(@PATH,154,9561.113,-7425.525,17.48024,0,0,0,0,100,0), -- 20:16:37 +(@PATH,155,9561.613,-7427.275,16.73024,0,0,0,0,100,0), -- 20:16:37 +(@PATH,156,9573.232,-7434.738,15.66694,0,0,0,0,100,0), -- 20:16:43 +(@PATH,157,9577.982,-7435.488,15.66694,0,0,0,0,100,0), -- 20:16:43 +(@PATH,158,9581.732,-7435.988,14.16694,0,0,0,0,100,0), -- 20:16:43 +(@PATH,159,9601.162,-7431.205,13.72673,0,0,0,0,100,0), -- 20:16:55 +(@PATH,160,9602.662,-7430.205,13.47673,0,0,0,0,100,0), -- 20:16:55 +(@PATH,161,9604.162,-7428.705,13.47673,0,0,0,0,100,0), -- 20:16:55 +(@PATH,162,9611.602,-7423.619,13.54987,0,0,0,0,100,0), -- 20:17:04 +(@PATH,163,9661.816,-7430.175,13.54431,0,0,0,0,100,0), -- 20:17:19 +(@PATH,164,9691.869,-7434.476,13.54329,0,0,0,0,100,0), -- 20:17:29 +(@PATH,165,9699.86,-7432.892,13.52494,0,0,0,0,100,0), -- 20:17:39 +(@PATH,166,9707.11,-7429.142,13.52494,0,0,0,0,100,0), -- 20:17:39 +(@PATH,167,9713.61,-7426.142,13.52494,0,0,0,0,100,0), -- 20:17:39 +(@PATH,168,9720.36,-7422.642,13.52494,0,0,0,0,100,0), -- 20:17:39 +(@PATH,169,9760.865,-7418.738,13.57886,0,0,0,0,100,0), -- 20:17:53 +(@PATH,170,9766.886,-7402.463,13.85978,0,0,0,0,100,0), -- 20:18:08 +(@PATH,171,9767.136,-7400.463,13.85978,0,0,0,0,100,0), -- 20:18:08 +(@PATH,172,9767.636,-7397.713,14.10978,0,0,0,0,100,0), -- 20:18:08 +(@PATH,173,9769.994,-7396.318,14.46496,0,0,0,0,100,0), -- 20:18:18 +(@PATH,174,9775.994,-7396.568,14.96496,0,0,0,0,100,0), -- 20:18:18 +(@PATH,175,9788.744,-7397.568,14.96496,0,0,0,0,100,0), -- 20:18:18 +(@PATH,176,9789.994,-7397.818,14.96496,0,0,0,0,100,0), -- 20:18:18 +(@PATH,177,9792.994,-7398.068,14.46496,0,0,0,0,100,0), -- 20:18:18 +(@PATH,178,9795.314,-7400.193,14.02223,0,0,0,0,100,0), -- 20:18:29 +(@PATH,179,9795.564,-7402.443,14.02223,0,0,0,0,100,0), -- 20:18:29 +(@PATH,180,9796.064,-7407.193,14.02223,0,0,0,0,100,0), -- 20:18:29 +(@PATH,181,9796.564,-7412.443,14.02223,0,0,0,0,100,0); -- 20:18:29 + +-- Pathing for Silvermoon City Guardian Entry: 16222 'TDB FORMAT' +SET @NPC := 56891; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=9617.148,`position_y`=-7372.344,`position_z`=14.95278 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,9617.148,-7372.344,14.95278,0,0,0,0,100,0), -- 11:38:44 +(@PATH,2,9617.634,-7381.962,14.90948,0,0,0,0,100,0), -- 11:38:50 +(@PATH,3,9613.992,-7385.066,14.11522,0,0,0,0,100,0), -- 11:38:55 +(@PATH,4,9611.742,-7385.566,14.11522,0,0,0,0,100,0), -- 11:38:55 +(@PATH,5,9607.742,-7386.316,13.86522,0,0,0,0,100,0), -- 11:38:55 +(@PATH,6,9601.742,-7387.316,13.86522,0,0,0,0,100,0), -- 11:38:55 +(@PATH,7,9600.242,-7387.566,13.86522,0,0,0,0,100,0), -- 11:38:55 +(@PATH,8,9595.152,-7394.241,13.41057,0,0,0,0,100,0), -- 11:39:05 +(@PATH,9,9601.703,-7417.196,13.54557,0,0,0,0,100,0), -- 11:39:12 +(@PATH,10,9605.453,-7422.946,13.54557,0,0,0,0,100,0), -- 11:39:12 +(@PATH,11,9611.395,-7424.344,13.54924,0,0,0,0,100,0), -- 11:39:20 +(@PATH,12,9669.465,-7433.946,13.54404,0,0,0,0,100,0), -- 11:39:37 +(@PATH,13,9692.181,-7435.465,13.54329,0,0,0,0,100,0), -- 11:39:47 +(@PATH,14,9706.28,-7428.034,13.54329,0,0,0,0,100,0), -- 11:39:57 +(@PATH,15,9712.78,-7423.784,13.54329,0,0,0,0,100,0), -- 11:39:57 +(@PATH,16,9755.95,-7419.636,13.33486,0,0,0,0,100,0), -- 11:40:07 +(@PATH,17,9758.95,-7419.636,13.33486,0,0,0,0,100,0), -- 11:40:07 +(@PATH,18,9760.95,-7419.386,13.58486,0,0,0,0,100,0), -- 11:40:07 +(@PATH,19,9765.676,-7425.275,13.87941,0,0,0,0,100,0), -- 11:40:26 +(@PATH,20,9766.176,-7435.275,13.87941,0,0,0,0,100,0), -- 11:40:26 +(@PATH,21,9766.426,-7437.275,13.87941,0,0,0,0,100,0), -- 11:40:26 +(@PATH,22,9766.676,-7440.525,14.12941,0,0,0,0,100,0), -- 11:40:26 +(@PATH,23,9769.751,-7441.452,14.42178,0,0,0,0,100,0), -- 11:40:36 +(@PATH,24,9775.751,-7441.702,14.92178,0,0,0,0,100,0), -- 11:40:36 +(@PATH,25,9782.751,-7441.952,14.92178,0,0,0,0,100,0), -- 11:40:36 +(@PATH,26,9785.001,-7441.952,14.92178,0,0,0,0,100,0), -- 11:40:36 +(@PATH,27,9791.501,-7442.202,14.92178,0,0,0,0,100,0), -- 11:40:36 +(@PATH,28,9793.707,-7440.501,14.62286,0,0,0,0,100,0), -- 11:40:45 +(@PATH,29,9794.207,-7437.501,14.12286,0,0,0,0,100,0), -- 11:40:45 +(@PATH,30,9794.707,-7435.501,14.12286,0,0,0,0,100,0), -- 11:40:45 +(@PATH,31,9795.457,-7431.251,13.87286,0,0,0,0,100,0), -- 11:40:45 +(@PATH,32,9796.457,-7426.001,13.87286,0,0,0,0,100,0), -- 11:40:45 +(@PATH,33,9796.707,-7424.001,13.87286,0,0,0,0,100,0), -- 11:40:45 +(@PATH,34,9802.908,-7420.202,13.36064,0,0,0,0,100,0), -- 11:40:55 +(@PATH,35,9865.802,-7420.71,13.53932,0,0,0,0,100,0), -- 11:41:14 +(@PATH,36,9880.648,-7415.182,13.51911,0,0,0,0,100,0), -- 11:41:27 +(@PATH,37,9885.898,-7409.932,13.51911,0,0,0,0,100,0), -- 11:41:27 +(@PATH,38,9886.761,-7404.89,13.40958,0,0,0,0,100,0), -- 11:41:33 +(@PATH,39,9888.123,-7384.329,15.85358,0,0,0,0,100,0), -- 11:41:40 +(@PATH,40,9888.623,-7369.579,20.85358,0,0,0,0,100,0), -- 11:41:40 +(@PATH,41,9873.136,-7363.303,20.90705,0,0,0,0,100,0), -- 11:41:51 +(@PATH,42,9867.386,-7362.553,19.65705,0,0,0,0,100,0), -- 11:41:51 +(@PATH,43,9863.198,-7364.229,19.0695,0,0,0,0,100,0), -- 11:42:00 +(@PATH,44,9859.948,-7366.479,19.0695,0,0,0,0,100,0), -- 11:42:00 +(@PATH,45,9841.254,-7366.119,18.845,0,0,0,0,100,0), -- 11:42:07 +(@PATH,46,9836.004,-7362.869,18.845,0,0,0,0,100,0), -- 11:42:07 +(@PATH,47,9833.344,-7362.54,18.90108,0,0,0,0,100,0), -- 11:42:15 +(@PATH,48,9829.344,-7362.79,20.65108,0,0,0,0,100,0), -- 11:42:15 +(@PATH,49,9827.594,-7363.04,20.90108,0,0,0,0,100,0), -- 11:42:15 +(@PATH,50,9821.844,-7363.54,20.90108,0,0,0,0,100,0), -- 11:42:15 +(@PATH,51,9829.27,-7362.814,20.40145,0,0,0,0,100,0), -- 11:42:26 +(@PATH,52,9833.27,-7362.314,19.65145,0,0,0,0,100,0), -- 11:42:26 +(@PATH,53,9835.859,-7362.992,19.06359,0,0,0,0,100,0), -- 11:42:34 +(@PATH,54,9841.109,-7365.992,19.06359,0,0,0,0,100,0), -- 11:42:34 +(@PATH,55,9850.109,-7370.992,19.06359,0,0,0,0,100,0), -- 11:42:34 +(@PATH,56,9859.49,-7366.387,18.84956,0,0,0,0,100,0), -- 11:42:41 +(@PATH,57,9863.24,-7364.137,18.84956,0,0,0,0,100,0), -- 11:42:41 +(@PATH,58,9873.046,-7363.469,20.91313,0,0,0,0,100,0), -- 11:42:48 +(@PATH,59,9874.796,-7363.469,20.91313,0,0,0,0,100,0), -- 11:42:48 +(@PATH,60,9887.834,-7384.231,15.64358,0,0,0,0,100,0), -- 11:42:58 +(@PATH,61,9887.834,-7387.231,14.64358,0,0,0,0,100,0), -- 11:42:58 +(@PATH,62,9886.838,-7404.881,13.63869,0,0,0,0,100,0), -- 11:43:08 +(@PATH,63,9876.497,-7419.251,13.51794,0,0,0,0,100,0), -- 11:43:16 +(@PATH,64,9865.785,-7420.523,13.54063,0,0,0,0,100,0), -- 11:43:22 +(@PATH,65,9859.535,-7420.523,13.54063,0,0,0,0,100,0), -- 11:43:22 +(@PATH,66,9801.332,-7420.127,13.66687,0,0,0,0,100,0), -- 11:43:36 +(@PATH,67,9796.978,-7424.1,13.69735,0,0,0,0,100,0), -- 11:43:53 +(@PATH,68,9796.728,-7425.85,13.94735,0,0,0,0,100,0), -- 11:43:53 +(@PATH,69,9795.728,-7431.35,13.94735,0,0,0,0,100,0), -- 11:43:53 +(@PATH,70,9794.978,-7435.35,13.69735,0,0,0,0,100,0), -- 11:43:53 +(@PATH,71,9794.478,-7437.6,13.94735,0,0,0,0,100,0), -- 11:43:53 +(@PATH,72,9793.978,-7440.6,14.19735,0,0,0,0,100,0), -- 11:43:53 +(@PATH,73,9791.54,-7442.293,14.44685,0,0,0,0,100,0), -- 11:44:02 +(@PATH,74,9785.04,-7442.043,14.94685,0,0,0,0,100,0), -- 11:44:02 +(@PATH,75,9782.79,-7442.043,14.94685,0,0,0,0,100,0), -- 11:44:02 +(@PATH,76,9775.54,-7441.793,14.94685,0,0,0,0,100,0), -- 11:44:02 +(@PATH,77,9769.79,-7441.543,14.94685,0,0,0,0,100,0), -- 11:44:02 +(@PATH,78,9766.505,-7435.237,13.99367,0,0,0,0,100,0), -- 11:44:13 +(@PATH,79,9765.755,-7425.237,13.74367,0,0,0,0,100,0), -- 11:44:13 +(@PATH,80,9765.755,-7423.487,13.74367,0,0,0,0,100,0), -- 11:44:13 +(@PATH,81,9758.748,-7419.551,13.30211,0,0,0,0,100,0), -- 11:44:22 +(@PATH,82,9755.748,-7419.551,13.30211,0,0,0,0,100,0), -- 11:44:22 +(@PATH,83,9720.498,-7421.301,13.30211,0,0,0,0,100,0), -- 11:44:22 +(@PATH,84,9706.665,-7428.206,13.52816,0,0,0,0,100,0), -- 11:44:41 +(@PATH,85,9699.915,-7432.456,13.52816,0,0,0,0,100,0), -- 11:44:41 +(@PATH,86,9688.145,-7435.444,13.54329,0,0,0,0,100,0), -- 11:44:52 +(@PATH,87,9661.658,-7430.764,13.54354,0,0,0,0,100,0), -- 11:45:01 +(@PATH,88,9650.658,-7426.014,13.54354,0,0,0,0,100,0), -- 11:45:01 +(@PATH,89,9611.502,-7424.288,13.54895,0,0,0,0,100,0), -- 11:45:10 +(@PATH,90,9601.961,-7417.239,13.55362,0,0,0,0,100,0), -- 11:45:27 +(@PATH,91,9600.711,-7415.739,13.55362,0,0,0,0,100,0), -- 11:45:27 +(@PATH,92,9595.22,-7392.367,13.64975,0,0,0,0,100,0), -- 11:45:36 +(@PATH,93,9601.827,-7387.457,13.94776,0,0,0,0,100,0), -- 11:45:43 +(@PATH,94,9607.577,-7386.457,13.94776,0,0,0,0,100,0), -- 11:45:43 +(@PATH,95,9611.827,-7385.707,13.69776,0,0,0,0,100,0), -- 11:45:43 +(@PATH,96,9613.827,-7385.457,13.94776,0,0,0,0,100,0), -- 11:45:43 +(@PATH,97,9616.577,-7384.957,14.19776,0,0,0,0,100,0), -- 11:45:43 +(@PATH,98,9617.488,-7381.918,14.6536,0,0,0,0,100,0), -- 11:45:53 +(@PATH,99,9617.488,-7376.918,14.9036,0,0,0,0,100,0), -- 11:45:53 +(@PATH,100,9617.238,-7372.168,14.9036,0,0,0,0,100,0), -- 11:45:53 +(@PATH,101,9617.634,-7381.962,14.90948,0,0,0,0,100,0), -- 11:46:00 +(@PATH,102,9613.973,-7385.057,14.11319,0,0,0,0,100,0), -- 11:46:04 +(@PATH,103,9611.723,-7385.557,14.11319,0,0,0,0,100,0), -- 11:46:04 +(@PATH,104,9607.723,-7386.307,13.86319,0,0,0,0,100,0), -- 11:46:04 +(@PATH,105,9601.973,-7387.307,13.86319,0,0,0,0,100,0), -- 11:46:04 +(@PATH,106,9600.223,-7387.557,13.86319,0,0,0,0,100,0), -- 11:46:04 +(@PATH,107,9595.393,-7394.153,13.41572,0,0,0,0,100,0), -- 11:46:14 +(@PATH,108,9601.696,-7417.232,13.54363,0,0,0,0,100,0), -- 11:46:21 +(@PATH,109,9605.696,-7422.982,13.54363,0,0,0,0,100,0), -- 11:46:21 +(@PATH,110,9611.418,-7424.264,13.54923,0,0,0,0,100,0); -- 11:46:29 + +DELETE FROM `creature_formations` WHERE `leaderGUID`=56878; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(56878, 56878, 0, 0, 2), +(56878, 56877, 3, 90, 2); + +-- Pathing for Silvermoon Guardian Entry: 16221 'TDB FORMAT' +SET @NPC := 56878; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=9102.456,`position_y`=-7482.04,`position_z`=78.35519 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,9102.456,-7482.04,78.35519,0,0,0,0,100,0), -- 19:43:23 +(@PATH,2,9103.248,-7482.65,78.35519,0,0,0,0,100,0), -- 19:43:23 +(@PATH,3,9104.715,-7483.78,78.2541,0,0,0,0,100,0), -- 19:43:23 +(@PATH,4,9109.629,-7484.697,77.63239,0,0,0,0,100,0), -- 19:43:23 +(@PATH,5,9115.527,-7485.799,77.00739,0,0,0,0,100,0), -- 19:43:23 +(@PATH,6,9120.441,-7486.717,76.38239,0,0,0,0,100,0), -- 19:43:23 +(@PATH,7,9124.373,-7487.451,75.75739,0,0,0,0,100,0), -- 19:43:23 +(@PATH,8,9129.287,-7488.369,75.13239,0,0,0,0,100,0), -- 19:43:23 +(@PATH,9,9137.15,-7489.838,74.58031,0,0,0,0,100,0), -- 19:43:23 +(@PATH,10,9141.082,-7490.572,73.95531,0,0,0,0,100,0), -- 19:43:23 +(@PATH,11,9142.2,-7490.788,73.90916,0,0,0,0,100,0), -- 19:43:23 +(@PATH,12,9142.2,-7490.788,73.90916,0,0,0,0,100,0), -- 19:43:23 +(@PATH,13,9149.529,-7476.493,69.95045,0,0,0,0,100,0), -- 19:43:29 +(@PATH,14,9161.441,-7460.135,63.98,0,0,0,0,100,0), -- 19:43:35 +(@PATH,15,9179.331,-7453.608,56.39117,0,0,0,0,100,0), -- 19:43:44 +(@PATH,16,9198.095,-7455.712,49.39744,0,0,0,0,100,0), -- 19:43:52 +(@PATH,17,9232.926,-7447.019,39.44244,0,0,0,0,100,0), -- 19:44:00 +(@PATH,18,9244.291,-7433.579,36.1172,0,0,0,0,100,0), -- 19:44:16 +(@PATH,19,9245.047,-7432.797,36.07084,0,0,0,0,100,0), -- 19:44:22 +(@PATH,20,9258.551,-7433.484,36.12626,0,0,0,0,100,0), -- 19:44:28 +(@PATH,21,9265.053,-7448.939,36.07185,0,0,0,0,100,0), -- 19:44:34 +(@PATH,22,9260.291,-7466.419,35.95266,0,0,0,0,100,0), -- 19:44:41 +(@PATH,23,9259.721,-7483.818,35.70003,0,0,0,0,100,0), -- 19:44:49 +(@PATH,24,9260.23,-7465.513,35.81084,0,0,0,0,100,0), -- 19:44:56 +(@PATH,25,9248.131,-7424.455,35.23894,0,0,0,0,100,0), -- 19:45:04 +(@PATH,26,9250.974,-7376.712,29.71493,0,0,0,0,100,0), -- 19:45:17 +(@PATH,27,9269.848,-7341.41,22.52634,0,0,0,0,100,0), -- 19:45:36 +(@PATH,28,9290.326,-7305.721,18.07349,0,0,0,0,100,0), -- 19:45:53 +(@PATH,29,9309.75,-7283.949,14.86156,0,0,0,0,100,0), -- 19:46:10 +(@PATH,30,9296.104,-7297.955,16.94801,0,0,0,0,100,0), -- 19:46:23 +(@PATH,31,9273.268,-7335.548,21.18934,0,0,0,0,100,0), -- 19:46:32 +(@PATH,32,9252.006,-7373.276,28.924,0,0,0,0,100,0), -- 19:46:50 +(@PATH,33,9247.184,-7419.163,34.14049,0,0,0,0,100,0), -- 19:47:07 +(@PATH,34,9261.941,-7441.854,35.80672,0,0,0,0,100,0), -- 19:47:26 +(@PATH,35,9264.699,-7445.521,36.01838,0,0,0,0,100,0), -- 19:47:37 +(@PATH,36,9260.029,-7465.688,35.94786,0,0,0,0,100,0), -- 19:47:46 +(@PATH,37,9259.739,-7483.936,35.70295,0,0,0,0,100,0), -- 19:47:53 +(@PATH,38,9260.128,-7466.218,35.80263,0,0,0,0,100,0), -- 19:48:00 +(@PATH,39,9264.906,-7448.786,36.13476,0,0,0,0,100,0), -- 19:48:08 +(@PATH,40,9258.107,-7433.702,36.05851,0,0,0,0,100,0), -- 19:48:15 +(@PATH,41,9235.605,-7445.421,38.64949,0,0,0,0,100,0), -- 19:48:20 +(@PATH,42,9200.038,-7455.543,49.04723,0,0,0,0,100,0), -- 19:48:27 +(@PATH,43,9182.41,-7453.483,55.13942,0,0,0,0,100,0), -- 19:48:43 +(@PATH,44,9164.158,-7457.769,62.62826,0,0,0,0,100,0), -- 19:48:50 +(@PATH,45,9151.068,-7474.071,68.90013,0,0,0,0,100,0), -- 19:48:59 +(@PATH,46,9142.732,-7490.235,73.94332,0,0,0,0,100,0), -- 19:49:07 +(@PATH,47,9110.125,-7484.632,77.80888,0,0,0,0,100,0), -- 19:49:15 +(@PATH,48,9090.791,-7472.85,80.36261,0,0,0,0,100,0), -- 19:49:30 +(@PATH,49,9082.396,-7462.425,82.50674,0,0,0,0,100,0), -- 19:49:38 +(@PATH,50,9077.785,-7456.682,83.13695,0,0,0,0,100,0), -- 19:49:45 +(@PATH,51,9066.736,-7450.874,83.24338,0,0,0,0,100,0), -- 19:49:50 +(@PATH,52,9066.793,-7450.982,83.18549,0,0,0,0,100,0), -- 19:49:57 +(@PATH,53,9067.023,-7451.012,83.33182,0,0,0,0,100,0), -- 19:50:02 +(@PATH,54,9089.325,-7471.378,80.84378,0,0,0,0,100,0); -- 19:50:06 diff --git a/sql/updates/world/2015_04_02_00_world.sql b/sql/updates/world/2015_04_02_00_world.sql new file mode 100644 index 00000000000..683e5c01250 --- /dev/null +++ b/sql/updates/world/2015_04_02_00_world.sql @@ -0,0 +1,82 @@ +SET @CGUID := 76018; + +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+31; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@CGUID+0, 21664, 532, 3, 1, -11086.92, -1899.176, 220.7505, 0.7330383, 7200, 0, 0), -- 21664 (Area: 3457) (Auras: ) +(@CGUID+1, 21664, 532, 3, 1, -11104.63, -1877.507, 220.7505, 0.6806784, 7200, 0, 0), -- 21664 (Area: 3457) (Auras: ) +(@CGUID+2, 17469, 532, 3, 1, -11064.65, -1874.336, 220.7505, 3.839724, 7200, 0, 0), -- 17469 (Area: 3457) (Auras: ) +(@CGUID+3, 17211, 532, 3, 1, -11089.7, -1887.114, 220.7505, 0.715585, 7200, 0, 0), -- 17211 (Area: 3457) (Auras: ) +(@CGUID+4, 17211, 532, 3, 1, -11093.26, -1882.732, 220.7505, 0.6632251, 7200, 0, 0), -- 17211 (Area: 3457) (Auras: ) +(@CGUID+5, 17211, 532, 3, 1, -11096.65, -1878.406, 220.7505, 0.6632251, 7200, 0, 0), -- 17211 (Area: 3457) (Auras: ) +(@CGUID+6, 21160, 532, 3, 1, -11083.24, -1903.355, 220.7504, 0.6632251, 7200, 0, 0), -- 21160 (Area: 3457) (Auras: 32226 - 32226) +(@CGUID+7, 17211, 532, 3, 1, -11100.17, -1873.871, 220.7505, 0.6457718, 7200, 0, 0), -- 17211 (Area: 3457) (Auras: ) +(@CGUID+8, 17211, 532, 3, 1, -11079.32, -1900.23, 220.7504, 0.6632251, 7200, 0, 0), -- 17211 (Area: 3457) (Auras: ) +(@CGUID+9, 17211, 532, 3, 1, -11103.67, -1869.466, 220.7505, 0.6981317, 7200, 0, 0), -- 17211 (Area: 3457) (Auras: ) +(@CGUID+10, 17469, 532, 3, 1, -11068.14, -1869.956, 220.7505, 3.892084, 7200, 0, 0), -- 17469 (Area: 3457) (Auras: ) +(@CGUID+11, 17211, 532, 3, 1, -11082.71, -1895.736, 220.7505, 0.6632251, 7200, 0, 0), -- 17211 (Area: 3457) (Auras: ) +(@CGUID+12, 17469, 532, 3, 1, -11071.65, -1865.527, 220.7505, 3.822271, 7200, 0, 0), -- 17469 (Area: 3457) (Auras: ) +(@CGUID+13, 17211, 532, 3, 1, -11086.31, -1891.324, 220.7505, 0.6457718, 7200, 0, 0), -- 17211 (Area: 3457) (Auras: 32226 - 32226) +(@CGUID+14, 17469, 532, 3, 1, -11075.02, -1861.288, 220.7505, 3.735005, 7200, 0, 0), -- 17469 (Area: 3457) (Auras: ) +(@CGUID+15, 17469, 532, 3, 1, -11078.52, -1856.995, 220.7505, 3.892084, 7200, 0, 0), -- 17469 (Area: 3457) (Auras: 32226 - 32226) +(@CGUID+16, 21726, 532, 3, 1, -11053.46, -1879.717, 220.7505, 4.014257, 7200, 0, 0), -- 21726 (Area: 3457) (Auras: ) +(@CGUID+17, 17469, 532, 3, 1, -11057.62, -1883.089, 220.7505, 3.804818, 7200, 0, 0), -- 17469 (Area: 3457) (Auras: ) +(@CGUID+18, 17469, 532, 3, 1, -11082.03, -1852.191, 220.7505, 3.804818, 7200, 0, 0), -- 17469 (Area: 3457) (Auras: ) +(@CGUID+19, 21747, 532, 3, 1, -11060.35, -1870.903, 220.7505, 3.804818, 7200, 0, 0), -- 21747 (Area: 3457) (Auras: ) +(@CGUID+20, 21748, 532, 3, 1, -11056.89, -1875.286, 220.7505, 3.665191, 7200, 0, 0), -- 21748 (Area: 3457) (Auras: ) +(@CGUID+21, 21726, 532, 3, 1, -11077.72, -1848.789, 220.7505, 3.909538, 7200, 0, 0), -- 21726 (Area: 3457) (Auras: ) +(@CGUID+22, 17469, 532, 3, 1, -11061.3, -1878.629, 220.7505, 3.909538, 7200, 0, 0), -- 17469 (Area: 3457) (Auras: ) +(@CGUID+23, 21747, 532, 3, 1, -11070.86, -1857.749, 220.7505, 3.839724, 7200, 0, 0), -- 21747 (Area: 3457) (Auras: ) +(@CGUID+24, 21748, 532, 3, 1, -11074.35, -1853.261, 220.7505, 3.735005, 7200, 0, 0), -- 21748 (Area: 3457) (Auras: ) +(@CGUID+25, 21750, 532, 3, 1, -11067.6, -1861.944, 220.7505, 3.839724, 7200, 0, 0), -- 21750 (Area: 3457) (Auras: ) +(@CGUID+26, 21752, 532, 3, 1, -11063.64, -1866.364, 220.7505, 3.822271, 7200, 0, 0), -- 21752 (Area: 3457) (Auras: 32226 - 32226) +(@CGUID+27, 21160, 532, 3, 1, -11107.91, -1873.032, 220.7505, 0.715585, 7200, 0, 0), -- 21160 (Area: 3457) (Auras: ) +(@CGUID+28, 21682, 532, 3, 1, -11101.01, -1881.932, 220.7505, 0.6632251, 7200, 0, 0), -- 21682 (Area: 3457) (Auras: ) +(@CGUID+29, 21683, 532, 3, 1, -11097.45, -1886.197, 220.7505, 0.7853982, 7200, 0, 0), -- 21683 (Area: 3457) (Auras: 32226 - 32226) +(@CGUID+30, 21682, 532, 3, 1, -11090.56, -1894.994, 220.7505, 0.6283185, 7200, 0, 0), -- 21682 (Area: 3457) (Auras: ) +(@CGUID+31, 21684, 532, 3, 1, -11093.84, -1890.473, 220.7505, 0.6981317, 7200, 0, 0); -- 21684 (Area: 3457) (Auras: ) + +DELETE FROM `gossip_menu` WHERE `entry` IN(8404,8368,8354,8355,8366,8362,8367,7413,8345,8346,8347,8349,8348); +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES +(8404,10506), -- 16816 +(8404,10718), -- 16816 +(8368,10442), -- 21752 +(8354,10425), -- 17469 +(8355,10426), -- 21726 +(8366,10439), -- 21748 +(8362,10434), -- 21747 +(8367,10440), -- 21750 +(7413,8952), -- 17211 +(8345,10413), -- 21160 +(8346,10414), -- 21664 +(8347,10416), -- 21682 +(8349,10418), -- 21684 +(8348,10417); -- 21683 + +DELETE FROM `gossip_menu_option` WHERE `menu_id` IN(8404,8368,8354,8355,8366,8362,8367,7413,8345,8346,8347,8349,8348); +INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `OptionBroadcastTextID`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`, `BoxBroadcastTextID`) VALUES +(8368, 0, 0, 'Control Warchief Blackhand', 19384, 1, 1, 0, 0, 0, 0, NULL, 0), +(8349, 0, 0, 'Control King Llane', 19297, 1, 1, 0, 0, 0, 0, NULL, 0), +(8354, 0, 0, 'Control Orc Grunt', 19320, 1, 1, 0, 0, 0, 0, NULL, 0), +(8355, 0, 0, 'Control Summoned Daemon', 19323, 1, 1, 0, 0, 0, 0, NULL, 0), +(8366, 0, 0, 'Control Orc Wolf', 19375, 1, 1, 0, 0, 0, 0, NULL, 0), +(8362, 0, 0, 'Control Orc Necrolyte', 19367, 1, 1, 0, 0, 0, 0, NULL, 0), +(8367, 0, 0, 'Control Orc Warlock', 19377, 1, 1, 0, 0, 0, 0, NULL, 0), +(7413, 0, 0, 'Control Human Footman', 14008, 1, 1, 0, 0, 0, 0, NULL, 0), +(8345, 0, 0, 'Control Conjured Water Elemental.', 19285, 1, 1, 0, 0, 0, 0, NULL, 0), +(8346, 0, 0, 'Control Human Charger.', 19288, 1, 1, 0, 0, 0, 0, NULL, 0), +(8347, 0, 0, 'Control Human Cleric', 19293, 1, 1, 0, 0, 0, 0, NULL, 0), +(8348, 0, 0, 'Control Human Conjurer', 19295, 1, 1, 0, 0, 0, 0, NULL, 0); + +UPDATE `creature_template` SET `gossip_menu_id`=8404 WHERE `entry`=16816; +UPDATE `creature_template` SET `gossip_menu_id`=8368 WHERE `entry`=21752; +UPDATE `creature_template` SET `gossip_menu_id`=8354 WHERE `entry`=17469; +UPDATE `creature_template` SET `gossip_menu_id`=8355 WHERE `entry`=21726; +UPDATE `creature_template` SET `gossip_menu_id`=8366 WHERE `entry`=21748; +UPDATE `creature_template` SET `gossip_menu_id`=8362 WHERE `entry`=21747; +UPDATE `creature_template` SET `gossip_menu_id`=8367 WHERE `entry`=21750; +UPDATE `creature_template` SET `gossip_menu_id`=7413 WHERE `entry`=17211; +UPDATE `creature_template` SET `gossip_menu_id`=8345 WHERE `entry`=21160; +UPDATE `creature_template` SET `gossip_menu_id`=8346 WHERE `entry`=21664; +UPDATE `creature_template` SET `gossip_menu_id`=8347 WHERE `entry`=21682; +UPDATE `creature_template` SET `gossip_menu_id`=8348 WHERE `entry`=21683; + diff --git a/sql/updates/world/2015_04_02_01_world.sql b/sql/updates/world/2015_04_02_01_world.sql new file mode 100644 index 00000000000..135ad4aba65 --- /dev/null +++ b/sql/updates/world/2015_04_02_01_world.sql @@ -0,0 +1,86 @@ +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` IN (21302, 21316, 20683, 21314, 21500, 19740, 19755, 21499, 21501, 21305); +UPDATE `creature_template_addon` SET `emote`=0 WHERE `entry`=21302; +UPDATE `creature_addon` SET `emote`=0 WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id`=21302); +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=21316; +UPDATE `creature` SET `position_x`= -3441.672363, `position_y`= 2950.212646, `position_z`= 171.877686, `orientation`= 6.151093 WHERE `guid`= 74657; + +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (-74662, -74651, 21305, 21501, 21499, 19755, 19740, 21500, 21314, 21302, 20683) AND `source_type` = 0 ; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (21316*100, 21316*100+1) AND `source_type` = 9 ; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(21302,0,0,0,25,0,100,0,0,0,0,0,11,33346,0,0,0,0,0,19,21348,15,0,0,0,0,0,'Shadow Council Warlock - On Reset - Cast Green Beam'), +(21302,0,1,0,1,0,100,1,0,0,0,0,11,33346,0,0,0,0,0,19,21348,15,0,0,0,0,0,'Shadow Council Warlock- OOC - Cast Green Beam (No repeat)'), +(21302,0,2,0,0,0,100,0,1000,2000,5000,7000,11,9613,0,0,0,0,0,2,0,0,0,0,0,0,0,'Shadow Council Warlock- IC - Cast Shadow Bolt'), +(21302,0,3,0,0,0,100,0,6000,8000,10000,12000,11,37992,0,0,0,0,0,2,0,0,0,0,0,0,0,'Shadow Council Warlock- IC - Cast Drain Life'), +(19755,0,0,0,0,0,100,0,4000,5000,15000,17000,11,36253,0,0,0,0,0,2,0,0,0,0,0,0,0,'Mo''arg Weaponsmith- IC - Chemical Flames'), +(19755,0,1,0,0,0,100,0,6000,8000,10000,12000,11,37580,0,0,0,0,0,2,0,0,0,0,0,0,0,'Mo''arg Weaponsmith - IC - Drill Armor'), +(21499,0,0,0,0,0,100,0,4000,5000,15000,17000,11,35321,0,0,0,0,0,2,0,0,0,0,0,0,0,'Overseer Ripsaw - IC - Gushing Wound'), +(21499,0,1,0,0,0,100,0,6000,8000,9000,11000,11,32735,0,0,0,0,0,2,0,0,0,0,0,0,0,'Overseer Ripsaw - IC - Saw Blade'), +(21305,0,0,0,0,0,100,0,4000,5000,10000,12000,11,37950,0,0,0,0,0,2,0,0,0,0,0,0,0,'Mutant Horror - IC - Mutant Horror'), +(21305,0,1,0,0,0,100,0,15000,15000,15000,15000,11,8599,0,0,0,0,0,2,0,0,0,0,0,0,0,'Mutant Horror - IC - Enrage'), +(19740,0,0,0,0,0,100,0,1000,2000,9000,13000,11,33799,0,0,0,0,0,2,0,0,0,0,0,0,0,'wrathwalker - IC - Cast Flame Wave'), +(20683,0,0,0,0,0,100,0,1000,2000,15000,17000,11,37629,0,0,0,0,0,2,0,0,0,0,0,0,0,'Prophetess Cavrylin - IC - Cast Melt Flesh'), +(20683,0,1,0,0,0,100,0,6000,8000,10000,12000,11,37997,0,0,0,0,0,2,0,0,0,0,0,0,0,'Prophetess Cavrylin - IC - Cast Chaos Nova'), +(21314,0,0,0,0,0,100,0,1000,2000,4000,7000,11,15496,0,0,0,0,0,2,0,0,0,0,0,0,0,'Terrormaster - IC - Cast Cleave'), +(21314,0,1,0,0,0,100,0,9000,12000,20000,25000,11,38154,0,0,0,0,0,2,0,0,0,0,0,0,0,'Terrormaster - IC - Cast Fear'), +(21500,0,0,0,0,0,100,0,1000,2000,6000,9000,11,22859,0,0,0,0,0,2,0,0,0,0,0,0,0,'Morgroron - IC - Cast Mortal Cleave'), +(21500,0,1,0,0,0,100,0,12000,15000,20000,25000,11,38741,0,0,0,0,0,2,0,0,0,0,0,0,0,'Morgroron - IC - Rain of Fire'), +(21500,0,2,0,0,0,100,0,5000,7000,10000,13000,11,38750,0,0,0,0,0,2,0,0,0,0,0,0,0,'Morgroron - IC - War Stomp'), +(21501,0,0,0,0,0,100,0,1000,2000,8000,12000,11,11443,0,0,0,0,0,2,0,0,0,0,0,0,0,'Makazradon - IC - Cripple'), +(21501,0,1,0,0,0,100,0,4000,5000,7000,10000,11,38742,0,0,0,0,0,2,0,0,0,0,0,0,0,'Makazradon - IC - Fel Cleave'), +(21501,0,2,0,0,0,100,0,12000,15000,20000,25000,11,38741,0,0,0,0,0,2,0,0,0,0,0,0,0,'Makazradon - IC - Rain of Fire'), +(-74662,0,0,0,1,0,100,0,120000,120000,240000,240000,80,21316*100,0,0,0,0,0,1,0,0,0,0,0,0,0,'Deathforged Infernal - OOC - Action list'), +(-74651,0,0,0,1,0,100,0,180000,180000,300000,300000,80,21316*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Deathforged Infernal - OOC - Action liist'), +(-74662,0,1,0,40,0,100,0,1,7466200,0,0,54,5000,0,0,0,0,0,1,0,0,0,0,0,0,0,'Deathforged Infernal - On waypoint1 - pause wp)'), +(-74651,0,1,0,40,0,100,0,1,7465100,0,0,54,5000,0,0,0,0,0,1,0,0,0,0,0,0,0,'Deathforged Infernal - On waypoint1 - pause wp)'), +(-74662,0,2,0,40,0,100,0,2,7466200,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Deathforged Infernal - On waypoint2 - Set visible off'), +(-74651,0,2,0,40,0,100,0,2,7465100,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Deathforged Infernal - On waypoint2 - Set visible off'), +(-74662,0,3,4,40,0,100,0,3,7466200,0,0,28,36658,0,0,0,0,0,1,0,0,0,0,0,0,0,'Deathforged Infernal - On waypoint3 - Remove aura)'), +(-74662,0,4,5,61,0,100,0,0,0,0,0,47,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Deathforged Infernal - On waypoint3 - Set visible on'), +(-74662,0,5,6,61,0,100,0,0,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,6.265730,'Deathforged Infernal - On waypoint3 - Set orientation'), +(-74662,0,6,7,61,0,100,0,0,0,0,0,60,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Deathforged Infernal - On waypoint3 - Set fly Off'), +(-74662,0,7,0,61,0,100,0,0,0,0,0,11,16245,0,0,0,0,0,1,0,0,0,0,0,0,0,'Deathforged Infernal - On waypoint3 - Cast spell'), +(-74651,0,3,4,40,0,100,0,3,7465100,0,0,28,36658,0,0,0,0,0,1,0,0,0,0,0,0,0,'Deathforged Infernal - On waypoint1 - Remove aura)'), +(-74651,0,4,5,61,0,100,0,0,0,0,0,47,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Deathforged Infernal - On waypoint3 - Set visible on'), +(-74651,0,5,6,61,0,100,0,0,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,4.468040,'Deathforged Infernal - On waypoint3 - Set orientation'), +(-74651,0,6,7,61,0,100,0,0,0,0,0,60,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Deathforged Infernal - On waypoint3 - Set fly Off'), +(-74651,0,7,0,61,0,100,0,0,0,0,0,11,16245,0,0,0,0,0,1,0,0,0,0,0,0,0,'Deathforged Infernal - On waypoint3 - Cast spell'), +(21316*100,9,0,0,0,0,100,0,0,0,0,0,60,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Deathforged Infernal - Action list - Set fly off'), +(21316*100,9,1,0,0,0,100,0,0,0,0,0,28,16245,0,0,0,0,0,1,0,0,0,0,0,0,0,'Deathforged Infernal - Action list - Remove aura'), +(21316*100,9,2,0,0,0,100,0,0,0,0,0,53,1,7466200,0,0,0,0,1,0,0,0,0,0,0,0,'Deathforged Infernal - Action list - start wp'), +(21316*100,9,3,0,0,0,100,0,13000,13000,0,0,86,33346,0,19,20683,15,0,1,0,0,0,0,0,0,0,'Deathforged Infernal - Action list - Cross cast'), +(21316*100,9,4,0,0,0,100,0,3000,3000,0,0,86,36656,0,19,20683,15,0,1,0,0,0,0,0,0,0,'Deathforged Infernal - Action list - Cross cast'), +(21316*100,9,5,0,0,0,100,0,0,0,0,0,11,36658,0,0,0,0,0,1,0,0,0,0,0,0,0,'Deathforged Infernal - Action list - Cast Transform'), +(21316*100,9,6,0,0,0,100,0,0,0,0,0,60,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Deathforged Infernal - Action list - Set fly On'), +(21316*100+1,9,0,0,0,0,100,0,0,0,0,0,60,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Deathforged Infernal - Action list - Set fly off'), +(21316*100+1,9,1,0,0,0,100,0,0,0,0,0,28,16245,0,0,0,0,0,1,0,0,0,0,0,0,0,'Deathforged Infernal - Action list - Remove aura'), +(21316*100+1,9,2,0,0,0,100,0,0,0,0,0,53,1,7465100,0,0,0,0,1,0,0,0,0,0,0,0,'Deathforged Infernal - Action list - start wp'), +(21316*100+1,9,3,0,0,0,100,0,12000,12000,0,0,86,33346,0,19,20683,15,0,1,0,0,0,0,0,0,0,'Deathforged Infernal - Action list - Cross cast'), +(21316*100+1,9,4,0,0,0,100,0,3000,3000,0,0,86,36656,0,19,20683,15,0,1,0,0,0,0,0,0,0,'Deathforged Infernal - Action list - Cross cast'), +(21316*100+1,9,5,0,0,0,100,0,0,0,0,0,11,36658,0,0,0,0,0,1,0,0,0,0,0,0,0,'Deathforged Infernal - Action list - Cast Transform'), +(21316*100+1,9,6,0,0,0,100,0,0,0,0,0,60,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Deathforged Infernal - Action list - Set fly On'); + +DELETE FROM `waypoints` WHERE `entry` IN(7466200, 7465100); +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(7466200, 1, -3411.152100, 2979.670410, 169.896851, 'Deathforged Infernal'), +(7466200, 2, -3411.152100, 2979.670410, 293.973755, 'Deathforged Infernal'), +(7466200, 3, -3441.462891, 2974.701172, 171.833115, 'Deathforged Infernal'), +(7465100, 1, -3411.152100, 2979.670410, 169.896851, 'Deathforged Infernal'), +(7465100, 2, -3411.152100, 2979.670410, 293.973755, 'Deathforged Infernal'), +(7465100, 3, -3408.362061, 3007.351807, 171.597610, 'Deathforged Infernal'); + + +UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=74602; +DELETE FROM `creature_addon` WHERE `guid`=74602; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (74602,746020,0,0,4097,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=746020; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(746020,1,-3374.98, 3001.77, 170.893,0,0,0,0,100,0), +(746020,2,-3423.57, 3005.07, 171.273,0,0,0,0,100,0); + +UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=74601; +DELETE FROM `creature_addon` WHERE `guid`=74601; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (74601,746010,0,0,4097,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=746010; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(746010, 1, -3438.26, 2988.15, 171.462, 0, 0, 0, 0, 100, 0), +(746010, 2, -3437.38, 2950.23, 171.240, 0, 0, 0, 0, 100, 0); diff --git a/sql/updates/world/2015_04_03_00_world.sql b/sql/updates/world/2015_04_03_00_world.sql new file mode 100644 index 00000000000..b7471bb9b77 --- /dev/null +++ b/sql/updates/world/2015_04_03_00_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature` SET `spawnMask`=1 WHERE `map`=532; diff --git a/sql/updates/world/2015_04_03_01_world.sql b/sql/updates/world/2015_04_03_01_world.sql new file mode 100644 index 00000000000..18bb069439a --- /dev/null +++ b/sql/updates/world/2015_04_03_01_world.sql @@ -0,0 +1,6 @@ +DELETE FROM `disables` WHERE `sourceType`=1 AND `entry` IN(7181,7202,7381,7382); +INSERT INTO `disables` (`sourceType`, `entry`, `flags`, `params_0`, `params_1`, `comment`) VALUES +(1, 7181, 0, '', '', 'Deprecated quest'), +(1, 7202, 0, '', '', 'Deprecated quest'), +(1, 7381, 0, '', '', 'Deprecated quest'), +(1, 7382, 0, '', '', 'Deprecated quest'); diff --git a/sql/updates/world/2015_04_03_02_world.sql b/sql/updates/world/2015_04_03_02_world.sql new file mode 100644 index 00000000000..30198348624 --- /dev/null +++ b/sql/updates/world/2015_04_03_02_world.sql @@ -0,0 +1,3 @@ +-- +UPDATE `smart_scripts` SET `event_type`=23, `event_param1`=58627, `comment`="Burning Skeleton - On has aura - Cast 'Immolation'" WHERE `entryorguid`=31048 AND `source_type`=0 AND `id`=0; +UPDATE `smart_scripts` SET `comment`="Burning Skeleton - On has aura - Cast 'Skeleton Check Master'" WHERE `entryorguid`=31048 AND `source_type`=0 AND `id`=1; diff --git a/sql/updates/world/2015_04_03_03_world.sql b/sql/updates/world/2015_04_03_03_world.sql new file mode 100644 index 00000000000..175fdcb89ca --- /dev/null +++ b/sql/updates/world/2015_04_03_03_world.sql @@ -0,0 +1,104 @@ +-- +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry` IN (20142, 19918, 20069, 19959); +UPDATE `creature_template` SET `scale`=1.5 WHERE `Entry`=19959; +UPDATE `creature_addon` SET `bytes2`=4097 WHERE `guid` IN (23472, 23473); +UPDATE `creature_addon` SET `auras`="34712" WHERE `guid`=23078; +UPDATE `creature` SET `modelid`=0 WHERE `guid` = 23597; +UPDATE `creature` SET `modelid`=19278 WHERE `guid` = 23459; +UPDATE `creature` SET `modelid`=19282 WHERE `guid` = 23460; +UPDATE `creature` SET `modelid`=19280 WHERE `guid` = 23461; +UPDATE `creature` SET `modelid`=19281 WHERE `guid` = 23462; +DELETE FROM `creature_addon` WHERE `guid` IN (23441, 23428, 23431, 23430, 23434, 23427); +DELETE FROM `creature` WHERE `guid` IN (23428, 23441, 23431, 23430, 23434, 23427); +UPDATE `creature` SET `spawndist`=15 WHERE `id`=19918; + +SET @Andormu:= 19932; +SET @Nozari:= 19933; + +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (19918, @Andormu, @Nozari); +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (-23440, -23439, -23438, -23437, -23436, -23433, -23432, -23429, -23426, @Nozari, @Nozari*100, 19918*100+1, 19918*100); +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@Nozari,0,0,0,1,0,100,0,60000,60000,900000,900000,80,@Nozari*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Nozari - OOC - Action list"), +(@Nozari*100,9,0,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Nozari - Action list - Talk"), +(@Nozari*100,9,1,0,0,0,100,0,4000,4000,0,0,1,0,0,0,0,0,0,19,@Andormu,15,0,0,0,0,0,"Nozari - Action list - Talk"), +(@Nozari*100,9,2,0,0,0,100,0,7000,7000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Nozari - Action list - Talk"), +(@Nozari*100,9,3,0,0,0,100,0,5000,5000,0,0,1,1,0,0,0,0,0,19,@Andormu,15,0,0,0,0,0,"Nozari - Action list - Talk"), +(@Nozari*100,9,4,0,0,0,100,0,9000,9000,0,0,1,2,0,0,0,0,0,19,@Andormu,15,0,0,0,0,0,"Nozari - Action list - Talk"), +(@Nozari*100,9,5,0,0,0,100,0,7000,7000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Nozari - Action list - Talk"), +(@Nozari*100,9,6,0,0,0,100,0,10000,10000,0,0,1,3,0,0,0,0,0,19,@Andormu,15,0,0,0,0,0,"Nozari - Action list - Talk"), +(@Nozari*100,9,7,0,0,0,100,0,8000,8000,0,0,1,4,0,0,0,0,0,19,@Andormu,15,0,0,0,0,0,"Nozari - Action list - Talk"), +(@Nozari*100,9,8,0,0,0,100,0,7000,7000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Nozari - Action list - Talk"), +(@Nozari*100,9,9,0,0,0,100,0,5000,5000,0,0,1,5,0,0,0,0,0,19,@Andormu,15,0,0,0,0,0,"Nozari - Action list - Talk"), +(@Nozari*100,9,10,0,0,0,100,0,10000,10000,0,0,1,4,0,0,0,0,0,1,0,0,0,0,0,0,0,"Nozari - Action list - Talk"), +(-23440,0,0,0,1,0,100,0,1200000,1200000,1200000,1200000,53,0,2344000,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - OOC - Start wp"), +(-23440,0,1,0,40,0,100,0,2,0,0,0,11,34699,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - On wp2 - Cast"), +(-23440,0,2,0,58,0,100,0,6,0,0,0,80,19918*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - On wp Ended - Action list"), +(19918*100,9,0,0,0,0,100,0,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - Action list - Set invisible"), +(19918*100,9,1,0,0,0,100,0,5000,5000,0,0,28,34699,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - Action list - remove aura"), +(19918*100,9,2,0,0,0,100,0,180000,180000,0,0,47,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - Action list - Set visible"), +(-23440,0,3,0,25,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - On Reset - Set Active On"), +(-23438,0,0,0,1,0,100,0,1800000,1800000,1800000,1800000,53,0,2344000,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - OOC - Start wp"), +(-23438,0,1,0,40,0,100,0,2,0,0,0,11,34699,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - On wp2 - Cast"), +(-23438,0,2,0,58,0,100,0,6,0,0,0,80,19918*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - On wp Ended - Action list"), +(-23438,0,3,0,25,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - On Reset - Set Active On"), +(-23436,0,0,0,1,0,100,0,2200000,2200000,2200000,2200000,53,0,2344000,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - OOC - Start wp"), +(-23436,0,1,0,40,0,100,0,2,0,0,0,11,34699,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - On wp2 - Cast"), +(-23436,0,2,0,58,0,100,0,6,0,0,0,80,19918*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - On wp Ended - Action list"), +(-23436,0,3,0,25,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - On Reset - Set Active On"), +(-23433,0,0,0,1,0,100,0,2600000,2600000,2600000,2600000,53,0,2344000,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - OOC - Start wp"), +(-23433,0,1,0,40,0,100,0,2,0,0,0,11,34699,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - On wp2 - Cast"), +(-23433,0,2,0,58,0,100,0,6,0,0,0,80,19918*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - On wp Ended - Action list"), +(-23433,0,3,0,25,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - On Reset - Set Active On"), +(-23439,0,0,0,1,0,100,0,1200000,1200000,1200000,1200000,53,1,2344001,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - OOC - Start wp"), +(-23439,0,1,0,40,0,100,0,2,0,0,0,11,34702,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - On wp2 - Cast"), +(-23439,0,2,0,58,0,100,0,7,0,0,0,80,19918*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - On wp Ended - Action list"), +(19918*100+1,9,0,0,0,0,100,0,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - Action list - Set invisible"), +(19918*100+1,9,1,0,0,0,100,0,5000,5000,0,0,28,34702,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - Action list - remove aura"), +(19918*100+1,9,2,0,0,0,100,0,180000,180000,0,0,47,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - Action list - Set visible"), +(-23439,0,3,0,25,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - On Reset - Set Active On"), +(-23437,0,0,0,1,0,100,0,1800000,1800000,1800000,1800000,53,1,2344001,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - OOC - Start wp"), +(-23437,0,1,0,40,0,100,0,2,0,0,0,11,34702,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - On wp2 - Cast"), +(-23437,0,2,0,58,0,100,0,7,0,0,0,80,19918*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - On wp Ended - Action list"), +(-23437,0,3,0,25,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - On Reset - Set Active On"), +(-23432,0,0,0,1,0,100,0,2200000,2200000,2200000,2200000,53,1,2344001,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - OOC - Start wp"), +(-23432,0,1,0,40,0,100,0,2,0,0,0,11,34702,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - On wp2 - Cast"), +(-23432,0,2,0,58,0,100,0,7,0,0,0,80,19918*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - On wp Ended - Action list"), +(-23432,0,3,0,25,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - On Reset - Set Active On"), +(-23426,0,0,0,1,0,100,0,2600000,2600000,2600000,2600000,53,1,2344001,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - OOC - Start wp"), +(-23426,0,1,0,40,0,100,0,2,0,0,0,11,34702,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - On wp2 - Cast"), +(-23426,0,2,0,58,0,100,0,7,0,0,0,80,19918*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - On wp Ended - Action list"), +(-23426,0,3,0,25,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - On Reset - Set Active On"), +(-23429,0,0,0,1,0,100,0,3000000,3000000,3000000,3000000,53,1,2344001,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - OOC - Start wp"), +(-23429,0,1,0,40,0,100,0,2,0,0,0,11,34702,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - On wp2 - Cast"), +(-23429,0,2,0,58,0,100,0,7,0,0,0,80,19918*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - On wp Ended - Action list"), +(-23429,0,3,0,25,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Time Watcher - On Reset - Set Active On"); + +DELETE FROM `waypoints` WHERE `entry` IN(2344000, 2344001); +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(2344000, 1, -8450.692383, -4176.048340, -199.006653, 'Time Watcher'), +(2344000, 2, -8449.390625, -4160.058105, -209.984818, 'Time Watcher'), +(2344000, 3, -8448.969727, -4158.049805, -208.871887, 'Time Watcher'), +(2344000, 4, -8436.923828, -4107.062012, -209.587540, 'Time Watcher'), +(2344000, 5, -8393.622070, -4071.729736, -209.587540, 'Time Watcher'), +(2344000, 6, -8349.183594, -4058.919189, -209.033203, 'Time Watcher'), +(2344001, 1, -8340.623047, -4344.326172, -199.383408, 'Time Watcher'), +(2344001, 2, -8314.343750, -4348.677246, -209.548553, 'Time Watcher'), +(2344001, 3, -8246.214844, -4344.385742, -205.160355, 'Time Watcher'), +(2344001, 4, -8207.163086, -4307.918945, -196.205338, 'Time Watcher'), +(2344001, 5, -8186.439941, -4259.733398, -183.948654, 'Time Watcher'), +(2344001, 6, -8188.971191, -4211.268555, -174.056534, 'Time Watcher'), +(2344001, 7, -8169.538574, -4167.970703, -165.149277, 'Time Watcher'); + +DELETE FROM `creature_text` WHERE `entry` IN(@Nozari,@Andormu); +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextID`) VALUES +(@Nozari, 0, 0, 'Fascinating. What is it, Andormu?', 12, 0, 100, 1, 0, 0, 'Nozari',17541), +(@Nozari, 1, 0, 'Hrm, are they tampering with the timeways?', 12, 0, 100, 1, 0, 0, 'Nozari',17543), +(@Nozari, 2, 0, 'I hate it when you speak to me in that manner. I am your equal in every way, brother. Remember that the next time you are trapped amidst a temporal vortex, crying for help.', 12, 0, 100, 1, 0, 0, 'Nozari',17546), +(@Nozari, 3, 0, 'Shall we?', 12, 0, 100, 1, 0, 0, 'Nozari',17549), +(@Nozari, 4, 0, '%s nods.', 16, 0, 100, 1, 0, 0, 'Nozari',17551), +(@Andormu, 0, 0, 'Something very, very disturbing. We''re starting to see more of them across the timeways.', 12, 0, 100, 1, 0, 0, 'Andormu',17542), +(@Andormu, 1, 0, 'Nozari, I''m not talking about a greedy wizard looking to improve his station in life by making a small adjustment to the past.', 12, 0, 100, 1, 0, 0, 'Andormu',17544), +(@Andormu, 2, 0, 'These beings aren''t giving themselves the winning numbers for the Stormwind lottery, dear.', 12, 0, 100, 1, 0, 0, 'Andormu',17545), +(@Andormu, 3, 0, 'My apologies, Nozari. I have been a bit ''on edge'' as of late. These creatures are attempting to alter the timeways.', 12, 0, 100, 1, 0, 0, 'Andormu',17547), +(@Andormu, 4, 0, 'You do recall the last time that this occurred, yes? Let us hope that the master need not be involved.', 12, 0, 100, 1, 0, 0, 'Andormu',17548), +(@Andormu, 5, 0, 'Absolutely not. We must not place ourselves at risk. With the master away, we are all that is in place to keep the stream intact. Others are due to arrive any moment now. Heroes and adventurers from Azeroth...', 12, 0, 100, 1, 0, 0, 'Andormu',17550); diff --git a/sql/updates/world/2015_04_03_04_world.sql b/sql/updates/world/2015_04_03_04_world.sql new file mode 100644 index 00000000000..2f50193e413 --- /dev/null +++ b/sql/updates/world/2015_04_03_04_world.sql @@ -0,0 +1,5 @@ +-- +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=17584; +DELETE FROM `smart_scripts` WHERE `entryorguid`=17584 AND `source_type`=0 AND `id`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(17584, 0, 0, 0, 19, 0, 100, 0, 9625, 0, 0, 0, 11, 30781, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Torallius the Pack Handler - On Quest Accept - Cast credit spell 30781'); diff --git a/sql/updates/world/2015_04_03_05_world.sql b/sql/updates/world/2015_04_03_05_world.sql new file mode 100644 index 00000000000..e56d0d607d6 --- /dev/null +++ b/sql/updates/world/2015_04_03_05_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `quest_template` SET `PrevQuestId`=24429 WHERE `Id` IN (7493,7497); diff --git a/sql/updates/world/2015_04_03_06_world.sql b/sql/updates/world/2015_04_03_06_world.sql new file mode 100644 index 00000000000..77d7a82d9bb --- /dev/null +++ b/sql/updates/world/2015_04_03_06_world.sql @@ -0,0 +1,131 @@ +-- Baelmon the Hound-Master SAI +SET @ENTRY := 19747; +SET @SPELL1 := 39218; -- Baelmon Channeling (no duration) +SET @SPELL2 := 11443; -- Cripple +SET @SPELL3 := 31598; -- Rain of Fire +SET @SPELL4 := 39272; -- Summon Wrath Hound +UPDATE `creature_template` SET `AIName`= 'SmartAI' WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `source_type`=9 AND `entryorguid` IN (@ENTRY*100,@ENTRY*100+1,@ENTRY*100+2,@ENTRY*100+3,@ENTRY*100+4); +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,11,0,100,0,0,0,0,0,53,0,@ENTRY,1,0,0,2,1,0,0,0,0,0,0,0,'Baelmon the Hound-Master - On Spawn - Load Path'), +(@ENTRY,0,1,2,40,0,100,0,3,@ENTRY,0,0,54,6000,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Baelmon the Hound-Master - Reach wp 3 - pause path'), +(@ENTRY,0,2,0,61,0,100,0,0,0,0,0,80,@ENTRY*100,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Baelmon the Hound-Master - Reach wp 3 - run script'), +(@ENTRY,0,3,4,40,0,100,0,6,@ENTRY,0,0,54,21000,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Baelmon the Hound-Master - Reach wp 6 - pause path'), +(@ENTRY,0,4,0,61,0,100,0,0,0,0,0,80,@ENTRY*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Baelmon the Hound-Master - Reach wp 6 - run script'), +(@ENTRY,0,5,6,40,0,100,0,7,@ENTRY,0,0,54,49000,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Baelmon the Hound-Master - Reach wp 7 - pause path'), +(@ENTRY,0,6,0,61,0,100,0,0,0,0,0,80,@ENTRY*100+2,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Baelmon the Hound-Master - Reach wp 7 - run script'), +(@ENTRY,0,7,8,40,0,100,0,10,@ENTRY,0,0,54,8000,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Baelmon the Hound-Master - Reach wp 10 - pause path'), +(@ENTRY,0,8,0,61,0,100,0,0,0,0,0,80,@ENTRY*100+3,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Baelmon the Hound-Master - Reach wp 10 - run script'), +(@ENTRY,0,9,10,40,0,100,0,11,@ENTRY,0,0,54,300000,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Baelmon the Hound-Master - Reach wp 11 - pause path'), +(@ENTRY,0,10,0,61,0,100,0,0,0,0,0,80,@ENTRY*100+4,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Baelmon the Hound-Master - Reach wp 11 - run script'), +(@ENTRY,0,11,0,0,0,100,0,5000,9000,18000,25000,11,@SPELL2,0,0,0,0,0,2,0,0,0,0,0,0,0,'Baelmon the Hound-Master - combat - cast spell'), +(@ENTRY,0,12,0,0,0,100,0,20000,25000,25000,30000,11,@SPELL3,0,0,0,0,0,2,0,0,0,0,0,0,0,'Baelmon the Hound-Master - combat - cast spell'), +(@ENTRY,0,13,14,0,0,100,0,35000,40000,40000,45000,11,@SPELL4,0,0,0,0,0,1,0,0,0,0,0,0,0,'Baelmon the Hound-Master - combat - cast spell'), +(@ENTRY,0,14,0,61,0,100,0,0,0,0,0,1,4,0,0,0,0,0,1,0,0,0,0,0,0,0,'Baelmon the Hound-Master - combat - Say4'), +(@ENTRY*100,9,0,0,0,0,100,0,2000,2000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Baelmon the Hound-Master - Script - say 0'), +(@ENTRY*100+1,9,0,0,0,0,100,0,1000,1000,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,4.485496, 'Baelmon the Hound-Master - Script - turn to'), +(@ENTRY*100+1,9,1,0,0,0,100,0,5000,5000,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,2.513274, 'Baelmon the Hound-Master - Script - turn to'), +(@ENTRY*100+1,9,2,0,0,0,100,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Baelmon the Hound-Master - Script - say 1'), +(@ENTRY*100+1,9,3,0,0,0,100,0,0,0,0,0,12,21837,8,0,0,0,0,8,0,0,0,2282.145,5380.948,148.3864,3.060301, 'Baelmon the Hound-Master - Script - summon Summoned Wrath Hound'), +(@ENTRY*100+2,9,0,0,0,0,100,0,1000,1000,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,5.480334, 'Baelmon the Hound-Master - Script - turn to'), +(@ENTRY*100+2,9,1,0,0,0,100,0,2000,2000,0,0,11,@SPELL1,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Baelmon the Hound-Master - Script - cast spell'), +(@ENTRY*100+2,9,2,0,0,0,100,0,46000,46000,0,0,28,@SPELL1,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Baelmon the Hound-Master - Script - Stop Channeling'), +(@ENTRY*100+3,9,0,0,0,0,100,0,2000,2000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Baelmon the Hound-Master - Script - say 2'), +(@ENTRY*100+4,9,0,0,0,0,100,0,1000,1000,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,5.480334, 'Baelmon the Hound-Master - Script - turn to'), +(@ENTRY*100+4,9,1,0,0,0,100,0,2000,2000,0,0,11,@SPELL1,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Baelmon the Hound-Master - Script - cast spell'), +(@ENTRY*100+4,9,2,0,0,0,100,0,296000,296000,0,0,28,@SPELL1,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Baelmon the Hound-Master - Script - Stop Channeling'), +(@ENTRY,0,15,0,4,0,100,0,0,0,0,0,1, 3,0,0,0,0,0,2,0,0,0,0,0,0,0,'Summoned Wrath Hound - on aggro - Say3'); + +-- waypoints for Baelmon the Hound-Master +DELETE FROM `waypoints` WHERE `entry` IN (@ENTRY); +INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES +(@ENTRY,1,2251.221,5415.110,144.5944, 'Baelmon the Hound-Master'), +(@ENTRY,2,2253.267,5422.193,144.3444, 'Baelmon the Hound-Master'), +(@ENTRY,3,2251.017,5425.398,144.3444, 'Baelmon the Hound-Master'), +(@ENTRY,4,2250.168,5418.636,144.3444, 'Baelmon the Hound-Master'), +(@ENTRY,5,2263.631,5399.851,145.9176, 'Baelmon the Hound-Master'), +(@ENTRY,6,2273.678,5402.083,146.9626, 'Baelmon the Hound-Master'), +(@ENTRY,7,2270.231,5394.729,145.4702, 'Baelmon the Hound-Master'), +(@ENTRY,8,2264.036,5400.769,146.0911, 'Baelmon the Hound-Master'), +(@ENTRY,9,2234.945,5428.808,144.3444, 'Baelmon the Hound-Master'), +(@ENTRY,10,2223.490,5426.155,144.3497, 'Baelmon the Hound-Master'), +(@ENTRY,11,2270.231,5394.729,145.4702, 'Baelmon the Hound-Master'); + +-- NPC talk text insert from sniff +DELETE FROM `creature_text` WHERE `entry`=@ENTRY; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextID`) VALUES +(@ENTRY,0,0, 'Make ready the chambers, another ally will soon join our ranks!',14,0,100,0,0,0, 'Baelmon the Hound-Master', 19416), +(@ENTRY,1,0, 'Our ally has arrived! Clear the way to the materialization chamber!',14,0,100,0,0,0, 'Baelmon the Hound-Master', 19417), +(@ENTRY,2,0, 'Now, proceed to the translocator. Forge Camp Wrath awaits your arrival!',14,0,100,0,0,0, 'Baelmon the Hound-Master', 19418), +(@ENTRY,3,0, 'Prepare yourself for eternal torture, mortal!',14,0,100,0,0,0, 'Baelmon the Hound-Master', 20366), +(@ENTRY,3,1, 'WHAT?! Who dares to disturb the Burning Legion?',14,0,100,0,0,0, 'Baelmon the Hound-Master', 20365), +(@ENTRY,3,2, 'I shall enjoy the smell of the grease from your marrow crackling over the fire!',14,0,100,0,0,0, 'Baelmon the Hound-Master', 20368), +(@ENTRY,3,3, 'Nothing will prevent your doom!',14,0,100,0,0,0, 'Baelmon the Hound-Master', 20367), +(@ENTRY,3,4, 'You DARE to attack me?!',14,0,100,0,0,0, 'Baelmon the Hound-Master', 20369), +(@ENTRY,3,5, 'You will suffer slowly until the end of time for this affront!',14,0,100,0,0,0, 'Baelmon the Hound-Master', 20370), +(@ENTRY,4,0, 'Release the hounds!',14,0,100,0,0,0, 'Baelmon the Hound-Master', 20395); + +UPDATE `creature` SET `spawndist`=10, `MovementType`=1 WHERE `guid` IN (84894, 84893, 84896, 84897, 84898, 84895, 84889, 84892, 84886, 84890, 84891, 84885, 84883, 84882, 84879, 84880, 84878, 84877, 84876, 84874, 84872, 84873, 84865, 84867, 84871); + +-- Summoned Wrath Hound SAI +SET @ENTRY := 21837; +SET @SPELL1 := 22578; -- Glowy (Black) +SET @SPELL2 := 37312; -- Portal Exit Effect +SET @SPELL3 := 22911; -- Charge +SET @SPELL4 := 36406; -- Bouble Breath +UPDATE `creature_template` SET `AIName`= 'SmartAI' WHERE `entry` IN (@ENTRY, 22499); +DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`IN (@ENTRY, 22499); +DELETE FROM `smart_scripts` WHERE `source_type`=9 AND `entryorguid` IN (@ENTRY*100,@ENTRY*100+1,@ENTRY*100+2); +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,1,54,0,100,0,0,0,0,0,11,@SPELL1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Summoned Wrath Hound - On summon - cast aura'), +(@ENTRY,0,1,0,61,0,100,0,0,0,0,0,53,0,@ENTRY,0,0,0,2,1,0,0,0,0,0,0,0,'Summoned Wrath Hound - On summon - Load Path'), +(@ENTRY,0,2,3,40,0,100,0,1,@ENTRY,0,0,54,5000,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Summoned Wrath Hound - Reach wp 1 - pause path'), +(@ENTRY,0,3,0,61,0,100,0,0,0,0,0,80,@ENTRY*100,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Summoned Wrath Hound - Reach wp 1 - run script'), +(@ENTRY,0,4,5,40,0,100,0,7,@ENTRY,0,0,54,4000,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Summoned Wrath Hound - Reach wp 7 - pause path'), +(@ENTRY,0,5,0,61,0,100,0,0,0,0,0,80,@ENTRY*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Summoned Wrath Hound - Reach wp 7 - run script'), +(@ENTRY,0,6,7,40,0,100,0,22,@ENTRY,0,0,54,4000,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Summoned Wrath Hound - Reach wp 22 - pause path'), +(@ENTRY,0,7,0,61,0,100,0,0,0,0,0,80,@ENTRY*100+2,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Summoned Wrath Hound - Reach wp 22 - run script'), +(@ENTRY,0,8,0,4,0,100,0,0,0,0,0,11,@SPELL3,0,0,0,0,0,1,0,0,0,0,0,0,0,'Summoned Wrath Hound - on aggro - cast spell'), +(@ENTRY,0,9,0,0,0,100,0,4000,8000,6000,10000,11,@SPELL4,0,0,0,0,0,2,0,0,0,0,0,0,0,'Summoned Wrath Hound - combat - cast spell'), +(@ENTRY*100,9,0,0,0,0,100,0,4500,4500,0,0,11,@SPELL2,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Summoned Wrath Hound - Script - cast spell'), +(@ENTRY*100+1,9,0,0,0,0,100,0,500,500,0,0,19,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Summoned Wrath Hound - Script - Set unit flags'), +(@ENTRY*100+2,9,0,0,0,0,100,0,4500,4500,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Summoned Wrath Hound - Script - despawn'), +-- Lesser Wrath Hound SAI +(22499,0,0,0,0,0,100,0,4000,8000,6000,10000,11,36406,0,0,0,0,0,2,0,0,0,0,0,0,0,'Lesser Wrath Hound- combat - cast spell'), +(22499,0,1,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,30,0,0,0,0,0,0,'Lesser Wrath Hound- Just Summoned - Start Attack'); + +-- waypoints for Baelmon the Hound-Master +DELETE FROM `waypoints` WHERE `entry` IN (@ENTRY); +INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES +(@ENTRY,1,2268.924,5393.452,145.4471, 'Summoned Wrath Hound'), +(@ENTRY,2,2255.472,5407.068,145.0279, 'Summoned Wrath Hound'), +(@ENTRY,3,2243.098,5420.322,144.3444, 'Summoned Wrath Hound'), +(@ENTRY,4,2226.786,5438.047,144.3497, 'Summoned Wrath Hound'), +(@ENTRY,5,2211.937,5460.007,150.8571, 'Summoned Wrath Hound'), +(@ENTRY,6,2195.829,5463.447,153.6814, 'Summoned Wrath Hound'), +(@ENTRY,7,2188.094,5477.495,155.0914, 'Summoned Wrath Hound'), +(@ENTRY,8,2195.297,5464.697,153.6814, 'Summoned Wrath Hound'), +(@ENTRY,9,2208.225,5464.172,153.5997, 'Summoned Wrath Hound'), +(@ENTRY,10,2219.882,5446.347,144.3497, 'Summoned Wrath Hound'), +(@ENTRY,11,2210.560,5435.390,144.6450, 'Summoned Wrath Hound'), +(@ENTRY,12,2170.015,5423.634,144.2937, 'Summoned Wrath Hound'), +(@ENTRY,13,2142.269,5430.440,144.8000, 'Summoned Wrath Hound'), +(@ENTRY,14,2100.592,5447.438,145.3132, 'Summoned Wrath Hound'), +(@ENTRY,15,2046.968,5449.164,145.0331, 'Summoned Wrath Hound'), +(@ENTRY,16,2031.698,5416.583,144.7770, 'Summoned Wrath Hound'), +(@ENTRY,17,2009.996,5392.866,145.6075, 'Summoned Wrath Hound'), +(@ENTRY,18,1951.617,5362.657,148.1501, 'Summoned Wrath Hound'), +(@ENTRY,19,1958.205,5340.299,153.2451, 'Summoned Wrath Hound'), +(@ENTRY,20,1950.292,5312.918,154.0889, 'Summoned Wrath Hound'), +(@ENTRY,21,1960.221,5301.518,154.0889, 'Summoned Wrath Hound'), +(@ENTRY,22,1980.815,5314.191,156.4767, 'Summoned Wrath Hound'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=39218; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 4, 39218, 0, 31, 3, 20736, 0, 0, '', 'Baelmon Channeling target'); + +-- Blade's Edge - Legion - Invis Bunny update +UPDATE `creature_template` SET `InhabitType`=4,`flags_extra`=`flags_extra`|128 WHERE `entry`=20736; +-- Remove spawn +DELETE FROM `creature` WHERE `guid`=76416; diff --git a/sql/updates/world/2015_04_04_00_world.sql b/sql/updates/world/2015_04_04_00_world.sql new file mode 100644 index 00000000000..6b6621136e0 --- /dev/null +++ b/sql/updates/world/2015_04_04_00_world.sql @@ -0,0 +1,117 @@ +-- Lil Timmy c.8666 - Stormwind +-- correct spawn point, spawntime, waypoints. +SET @GUID:= 23427; -- 1 free guid set by tc +DELETE FROM `creature_formations` WHERE `leaderGUID`=45501; +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`) VALUES +(45501,45501,0,0,2), +(45501,@GUID,2,0,2); + +-- White Kitten - missing added +DELETE FROM `creature` WHERE `guid`=@GUID; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `curhealth`, `spawndist`, `MovementType`) VALUES +(@GUID, 7386, 0, 1, 1, -8632.046875, 921.279480, 99.382813, 3.897803, 180, 42, 0, 0); + +UPDATE `creature` SET `position_x` =-8634.505859, `position_y` = 918.960571, `position_z` = 99.354980, `orientation` = 3.832987, `MovementType` = 2, `spawntimesecs` = 5400 WHERE `guid` = 45501; +UPDATE `creature` SET `position_x` =-8583.879883 , `position_y` =633.127014 , `position_z` =96.338028 , `orientation` =4.989326 WHERE `guid` = 79816; +UPDATE `creature` SET `position_x` =-8582.030273 , `position_y` =633.633972 , `position_z` =96.338028 , `orientation` =4.989326 WHERE `guid` = 79815; +UPDATE `creature` SET `position_x` =-8580.509766 , `position_y` =635.107971 , `position_z` =96.338028 , `orientation` =4.989326 WHERE `guid` = 79817; + +UPDATE `creature_template` SET `MovementType` = 2 WHERE `entry` = 8666; +DELETE FROM `creature_addon` WHERE `guid`=45501; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(45501,455010,0,0,1,0,''); + +DELETE FROM `waypoint_data` WHERE `id`=455010; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(455010,1,-8641.4,912.342,99.1397,0,0,0,0,100,0), +(455010,2,-8661.71,894.74,97.6239,0,0,0,0,100,0), +(455010,3,-8679.15,880.967,97.0168,0,0,0,0,100,0), +(455010,4,-8681.12,877.654,97.0168,0,0,0,0,100,0), +(455010,5,-8679.29,873.082,97.0168,0,0,0,0,100,0), +(455010,6,-8659.98,849.329,97.0168,0,0,0,0,100,0), +(455010,7,-8639.96,825.073,96.6251,0,0,0,0,100,0), +(455010,8,-8636.74,813.025,96.6486,0,0,0,0,100,0), +(455010,9,-8634,793.001,96.6508,0,0,0,0,100,0), +(455010,10,-8635.94,785.58,96.6515,0,0,0,0,100,0), +(455010,11,-8651.43,775.162,96.6714,0,0,0,0,100,0), +(455010,12,-8661.39,764.974,96.6998,0,0,0,0,100,0), +(455010,13,-8662.58,758.134,96.6947,0,0,0,0,100,0), +(455010,14,-8647.73,738.576,96.6965,0,0,0,0,100,0), +(455010,15,-8630.74,726.606,96.7377,0,0,0,0,100,0), +(455010,16,-8618.88,711.997,96.7248,0,0,0,0,100,0), +(455010,17,-8614.67,709.545,96.7549,0,0,0,0,100,0), +(455010,18,-8606.13,711.345,96.7382,0,0,0,0,100,0), +(455010,19,-8598.07,712.945,96.6746,0,0,0,0,100,0), +(455010,20,-8588.25,706.887,97.0168,0,0,0,0,100,0), +(455010,21,-8566.09,678.512,97.0168,0,0,0,0,100,0), +(455010,22,-8561.86,674.735,97.0168,0,0,0,0,100,0), +(455010,23,-8556.46,676.784,97.0168,0,0,0,0,100,0), +(455010,24,-8542.79,686.774,97.6239,0,0,0,0,100,0), +(455010,25,-8536.45,686.854,97.6775,0,0,0,0,100,0), +(455010,26,-8531.64,683.194,98.4422,0,0,0,0,100,0), +(455010,27,-8524.58,673.178,102.5,0,0,0,0,100,0), +(455010,28,-8519.8,666.4,102.615,0,0,0,0,100,0), +(455010,29,-8512.94,656.648,100.901,0,0,0,0,100,0), +(455010,30,-8513.15,648.714,100.292,0,0,0,0,100,0), +(455010,31,-8518.18,642.361,100.092,0,0,0,0,100,0), +(455010,32,-8538.04,630.723,100.404,0,0,0,0,100,0), +(455010,33,-8554.03,617.81,102.053,0,0,0,0,100,0), +(455010,34,-8564.5,613.48,102.435,0,0,0,0,100,0), +(455010,35,-8576.12,601.799,103.26,0,0,0,0,100,0), +(455010,36,-8582.44,589.572,103.691,0,0,0,0,100,0), +(455010,37,-8586.68,575.605,102.985,0,0,0,0,100,0), +(455010,38,-8585.96,565.941,102.26,0,0,0,0,100,0), +(455010,39,-8578.9,545.988,101.779,0,0,0,0,100,0), +(455010,40,-8581.73,541.012,102.09,0,0,0,0,100,0), +(455010,41,-8590.09,533.912,104.76,0,0,0,0,100,0), +(455010,42,-8598.32,527.164,106.399,0,0,0,0,100,0), +(455010,43,-8605.67,520.882,105.748,0,0,0,0,100,0), +(455010,44,-8610.26,515.735,103.79,0,0,0,0,100,0), +(455010,45,-8613.43,514.684,103.401,0,0,0,0,100,0), +(455010,46,-8618.8,518.794,103.068,0,0,0,0,100,0), +(455010,47,-8635.17,535.152,99.9833,0,0,0,0,100,0), +(455010,48,-8647.39,546.721,97.8568,0,0,0,0,100,0), +(455010,49,-8655.78,552.938,96.9435,0,0,0,0,100,0), +(455010,50,-8671.86,552.874,97.2037,0,0,0,0,100,0), +(455010,51,-8679.66,549.654,97.5031,0,0,0,0,100,0), +(455010,52,-8689.63,540.268,97.828,0,0,0,0,100,0), +(455010,53,-8698.98,530.295,97.7173,0,0,0,0,100,0), +(455010,54,-8712.64,520.242,97.2398,0,0,0,0,100,0), +(455010,55,-8715.24,521.571,97.4039,0,0,0,0,100,0), +(455010,56,-8720.77,528.729,99.1496,0,0,0,0,100,0), +(455010,57,-8729.84,539.87,101.105,0,0,0,0,100,0), +(455010,58,-8735.95,547.101,100.845,0,0,0,0,100,0), +(455010,59,-8745.79,557.737,97.7107,0,0,0,0,100,0), +(455010,60,-8746.01,564.915,97.4001,0,0,0,0,100,0), +(455010,61,-8729.92,581.294,97.6775,0,0,0,0,100,0), +(455010,62,-8719.58,591.033,98.4713,0,0,0,0,100,0), +(455010,63,-8712.04,594.001,98.6079,0,0,0,0,100,0), +(455010,64,-8707.26,600.676,98.9982,0,0,0,0,100,0), +(455010,65,-8704.46,616.407,100.215,0,0,0,0,100,0), +(455010,66,-8705.6,629.078,100.477,0,0,0,0,100,0), +(455010,67,-8708.67,645.787,99.9994,0,0,0,0,100,0), +(455010,68,-8716.46,666.585,98.8681,0,0,0,0,100,0), +(455010,69,-8724.09,676.482,98.6317,0,0,0,0,100,0), +(455010,70,-8728.54,684.167,98.7324,0,0,0,0,100,0), +(455010,71,-8733.47,695.151,98.723,0,0,0,0,100,0), +(455010,72,-8743.6,709.876,98.2678,0,0,0,0,100,0), +(455010,73,-8741.08,714.561,98.9815,0,0,0,0,100,0), +(455010,74,-8734.46,720.119,101.647,0,0,0,0,100,0), +(455010,75,-8726.79,726.231,100.924,0,0,0,0,100,0), +(455010,76,-8718.09,733.687,97.9511,0,0,0,0,100,0), +(455010,77,-8716.42,737.269,97.7782,0,0,0,0,100,0), +(455010,78,-8721.01,746.752,97.9693,0,0,0,0,100,0), +(455010,79,-8730.96,759.107,98.1572,0,0,0,0,100,0), +(455010,80,-8731.99,769.385,98.0161,0,0,0,0,100,0), +(455010,81,-8724.64,778.108,98.0604,0,0,0,0,100,0), +(455010,82,-8717.55,792.762,97.1197,0,0,0,0,100,0), +(455010,83,-8717.68,798.804,97.1792,0,0,0,0,100,0), +(455010,84,-8728.3,817.744,96.9777,0,0,0,0,100,0), +(455010,85,-8726.79,830.504,96.3102,0,0,0,0,100,0), +(455010,86,-8723.42,841.35,96.0764,0,0,0,0,100,0), +(455010,87,-8709.57,857.779,96.978,0,0,0,0,100,0), +(455010,88,-8692.38,870.557,97.0284,0,0,0,0,100,0), +(455010,89,-8679.35,880.974,97.0167,0,0,0,0,100,0), +(455010,90,-8661.22,896.239,97.5968,0,0,0,0,100,0), +(455010,91,-8643.7,912.233,98.9288,0,0,0,0,100,0), +(455010,92,-8634.58,918.926,99.3551,0,0,0,0,100,0); diff --git a/sql/updates/world/2015_04_04_01_world.sql b/sql/updates/world/2015_04_04_01_world.sql new file mode 100644 index 00000000000..78036014011 --- /dev/null +++ b/sql/updates/world/2015_04_04_01_world.sql @@ -0,0 +1,118 @@ +SET @OGUID := 29742; +SET @CGUID := 143505; + +UPDATE `gameobject_template` SET `flags`=32 WHERE `entry`IN (177257,177258,177259,179504,179505,179503,179506); + +DELETE FROM `gameobject` where `id` IN (177257,177258,177259,179504,179505,179503,179506,179563,177219,179563,177219,177221,177211,177212,177215,179549,177217) AND `map`=429; +INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES +(@OGUID+0, 177258, 429, 3, 1, 121.2223, 429.0921, 28.45481, 0.4188786, 0, 0, 1, -4.371139E-08, 7200, 255, 1), -- 177258 (Area: 0) +(@OGUID+1, 177259, 429, 3, 1, 12.94134, 277.9307, -8.932899, 0, 0, 0, 1, -4.371139E-08, 7200, 255, 1), -- 177259 (Area: 5915) +(@OGUID+2, 177257, 429, 3, 1, -92.34557, 442.6703, 28.54704, 0.4188786, 0, 0, 1, -4.371139E-08, 7200, 255, 1), -- 177257 (Area: 5915) +(@OGUID+3, 179504, 429, 3, 1, 78.13875, 737.4021, -24.62163, 0, 0, 0, 1, -4.371139E-08, 7200, 255, 1), -- 179504 (Area: 5915) +(@OGUID+4, 179505, 429, 3, 1, -155.4332, 734.1661, -24.62163, 0, 0, 0, 1, -4.371139E-08, 7200, 255, 1), -- 179505 (Area: 5915) +(@OGUID+5, 179503, 429, 3, 1, -38.96511, 813.7094, -27.31784, 0, 0, 0, 1, -4.371139E-08, 7200, 255, 1), -- 179503 (Area: 5913) +(@OGUID+6, 179506, 429, 3, 1, -38.75632, 812.5867, -3.8761, 0, 0, 0, 1, -4.371139E-08, 7200, 255, 1), -- 179506 (Area: 5913) +(@OGUID+7, 179563, 429, 3, 1, 116.1046, 638.89, -48.46696, 4.520406, 0, 0, 0, 1, 7200, 255, 1), -- 179563 (Area: 5915) +(@OGUID+8, 177219, 429, 3, 1, 385.3268, 374.2315, -1.34314, 1.570796, 0, 0, 1, -4.371139E-08, 7200, 255, 1), -- 177219 (Area: 5913) +(@OGUID+9, 177221, 429, 3, 1, 50.58631, 501.9406, -23.14985, 4.71239, 0, 0, 1, -4.371139E-08, 7200, 255, 1), -- 177221 (Area: 5913) +(@OGUID+10, 177211, 429, 3, 1, -41.8254, 159.8736, -3.448337, 0, 0, 0, 1, -4.371139E-08, 7200, 255, 1), -- 177211 (Area: 5913) +(@OGUID+11, 177212, 429, 3, 1, 10.72159, 159.4589, -3.448351, 3.141593, 0, 0, 1, -4.371139E-08, 7200, 255, 1), -- 177212 (Area: 5913) +(@OGUID+12, 177215, 429, 3, 1, 255.4084, 10.3791, -2.693807, 1.570796, 0, 0, 1, -4.371139E-08, 7200, 255, 1), -- 177215 (Area: 5913) +(@OGUID+13, 179549, 429, 3, 1, 351.5679, 88.67347, -36.39297, 1.570796, 0, 0, 1, -4.371139E-08, 7200, 255, 1), -- 179549 (Area: 5913) +(@OGUID+14, 177217, 429, 3, 1, 491.2043, 515.1331, 29.46753, 1.570796, 0, 0, 1, -4.371139E-08, 7200, 255, 1); -- 177217 (Area: 5913) + +DELETE FROM `creature` WHERE `id` IN(11480,11483,13916,13160); + +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@CGUID+0, 11480, 429, 3, 1, 130.4702, 422.0486, 28.68438, 5.5676, 7200, 0, 0), -- 11480 (Area: 0) +(@CGUID+1, 11480, 429, 3, 1, 129.8357, 437.4243, 28.68438, 0.6457718, 7200, 0, 0), -- 11480 (Area: 0) +(@CGUID+2, 11483, 429, 3, 1, 112.3598, 421.3277, 28.68438, 3.979351, 7200, 0, 0), -- 11483 (Area: 0) +(@CGUID+3, 11483, 429, 3, 1, 112.2285, 437.3398, 28.68438, 2.495821, 7200, 0, 0), -- 11483 (Area: 0) +(@CGUID+4, 11483, 429, 3, 1, 24.50517, 278.4114, -8.422497, 0.8726646, 7200, 0, 0), -- 11483 (Area: 5915) +(@CGUID+5, 11480, 429, 3, 1, 3.030073, 275.064, -8.27089, 3.036873, 7200, 0, 0), -- 11480 (Area: 5915) +(@CGUID+6, 11483, 429, 3, 1, 18.33997, 262.5933, -7.229755, 5.044002, 7200, 0, 0), -- 11483 (Area: 5915) +(@CGUID+7, 11480, 429, 3, 1, -99.35272, 434.2773, 28.68608, 3.926991, 7200, 0, 0), -- 11480 (Area: 5915) +(@CGUID+8, 11483, 429, 3, 1, -83.95709, 435.4832, 28.68626, 5.61996, 7200, 0, 0), -- 11483 (Area: 5915) +(@CGUID+9, 11480, 429, 3, 1, -100.4601, 449.052, 28.6875, 2.321288, 7200, 0, 0), -- 11480 (Area: 5915) +(@CGUID+10, 11483, 429, 3, 1, -83.53941, 449.507, 28.6862, 0.9599311, 7200, 5, 1), -- 11483 (Area: 5915) (possible waypoints or random movement) +(@CGUID+11, 11483, 429, 3, 1, 90.66621, 740.4608, -24.49702, 0.3490658, 7200, 0, 0), -- 11483 (Area: 5915) +(@CGUID+12, 11480, 429, 3, 1, 75.12427, 748.4026, -24.49702, 1.553343, 7200, 0, 0), -- 11480 (Area: 5915) +(@CGUID+13, 11483, 429, 3, 1, 81.96804, 725.6087, -24.49635, 5.166174, 7200, 5, 1), -- 11483 (Area: 5915) (Auras: ) (possible waypoints or random movement) +(@CGUID+14, 11480, 429, 3, 1, 67.98151, 733.5004, -24.49676, 3.665191, 7200, 0, 0), -- 11480 (Area: 5915) +(@CGUID+15, 11480, 429, 3, 1, -151.3329, 721.8649, -24.49508, 4.904375, 7200, 0, 0), -- 11480 (Area: 5915) +(@CGUID+16, 11483, 429, 3, 1, -142.6175, 736.7474, -24.49702, 6.108652, 7200, 0, 0), -- 11483 (Area: 5915) +(@CGUID+17, 11483, 429, 3, 1, -166.1358, 729.3408, -24.49702, 3.525565, 7200, 0, 0), -- 11483 (Area: 5915) +(@CGUID+18, 11480, 429, 3, 1, -157.8231, 746.3584, -24.49702, 1.623156, 7200, 0, 0),-- 11480 (Area: 5915) +(@CGUID+19, 11480, 429, 3, 1, 10.1239, 287.949, -8.78406, 1.62106, 7200, 0, 0),-- 11480 (Area: 5915) +(@CGUID+20, 13916, 429, 3, 1, 13.45142, 277.6283, 1.514334, 2.286381, 7200, 0, 0), -- 13916 (Area: 5915) +(@CGUID+21, 13160, 429, 3, 1, 462.8175, 251.535, 8.817377, 4.555309, 7200, 5, 1), -- 13160 (Area: 0) (possible waypoints or random movement) +(@CGUID+22, 13160, 429, 3, 1, 452.7207, 247.395, 11.30013, 4.642576, 7200, 5, 1), -- 13160 (Area: 0) (possible waypoints or random movement) +(@CGUID+23, 13160, 429, 3, 1, 448.1017, 251.626, 11.29641, 4.677482, 7200, 5, 1), -- 13160 (Area: 0) (possible waypoints or random movement) +(@CGUID+24, 13160, 429, 3, 1, 455.3728, 253.9155, 11.3039, 4.625123, 7200, 5, 1), -- 13160 (Area: 0) (possible waypoints or random movement) +(@CGUID+25, 13160, 429, 3, 1, 448.4704, 258.7166, 11.29889, 4.677482, 7200, 5, 1), -- 13160 (Area: 0) (possible waypoints or random movement) +(@CGUID+26, 13160, 429, 3, 1, 449.7683, 243.4786, 11.29772, 4.660029, 7200, 5, 1), -- 13160 (Area: 0) (possible waypoints or random movement) +(@CGUID+27, 13160, 429, 3, 1, 452.4716, 260.4895, 11.30317, 4.642576, 7200, 5, 1), -- 13160 (Area: 0) (possible waypoints or random movement) +(@CGUID+28, 13160, 429, 3, 1, 477.2956, 252.6243, 2.873334, 2.817438, 7200, 5, 1), -- 13160 (Area: 0) (possible waypoints or random movement) +(@CGUID+29, 13160, 429, 3, 1, 462.7784, 260.8503, 8.751555, 2.073882, 7200, 5, 1), -- 13160 (Area: 0) (possible waypoints or random movement) +(@CGUID+30, 13160, 429, 3, 1, 471.8947, 252.9371, 4.882514, 4.475661, 7200, 5, 1), -- 13160 (Area: 0) (possible waypoints or random movement) +(@CGUID+31, 13160, 429, 3, 1, 486.488, 313.6001, 2.936218, 4.485496, 7200, 5, 1), -- 13160 (Area: 0) (possible waypoints or random movement) +(@CGUID+32, 13160, 429, 3, 1, 494.2127, 319.3602, 2.936227, 4.45059, 7200, 5, 1), -- 13160 (Area: 0) (possible waypoints or random movement) +(@CGUID+33, 13160, 429, 3, 1, 474.5892, 316.7031, 2.936239, 4.537856, 7200, 5, 1), -- 13160 (Area: 0) (possible waypoints or random movement) +(@CGUID+34, 13160, 429, 3, 1, 478.2815, 324.038, 2.936251, 4.537856, 7200, 5, 1), -- 13160 (Area: 0) (possible waypoints or random movement) +(@CGUID+35, 13160, 429, 3, 1, 493.1786, 309.8522, 2.936205, 4.433136, 7200, 5, 1), -- 13160 (Area: 0) (possible waypoints or random movement) +(@CGUID+36, 13160, 429, 3, 1, 467.4713, 316.5861, 2.93625, 4.590216, 7200, 5, 1), -- 13160 (Area: 0) (possible waypoints or random movement) +(@CGUID+37, 13160, 429, 3, 1, 471.9471, 324.6326, 2.936259, 4.572762, 7200, 5, 1), -- 13160 (Area: 0) (possible waypoints or random movement) +(@CGUID+38, 13160, 429, 3, 1, 485.187, 320.7115, 2.936234, 4.485496, 7200, 5, 1), -- 13160 (Area: 0) (possible waypoints or random movement) +(@CGUID+39, 13160, 429, 3, 1, 490.0086, 329.4991, 2.852889, 1.889038, 7200, 5, 1), -- 13160 (Area: 0) (possible waypoints or random movement) +(@CGUID+40, 13160, 429, 3, 1, 484.4862, 327.5917, 2.85289, 3.664191, 7200, 5, 1), -- 13160 (Area: 0) (possible waypoints or random movement) +(@CGUID+41, 13160, 429, 3, 1, 479.4313, 534.1829, -25.30033, 4.625123, 7200, 0, 0), -- 13160 (Area: 0) (Auras: ) +(@CGUID+42, 13160, 429, 3, 1, 494.0698, 531.7256, -25.30895, 4.590216, 7200, 0, 0), -- 13160 (Area: 0) (Auras: ) +(@CGUID+43, 13160, 429, 3, 1, 480.5341, 542.3371, -25.3806, 6.065704, 7200, 0, 0), -- 13160 (Area: 0) (Auras: ) +(@CGUID+44, 13160, 429, 3, 1, 518.8744, 532.2348, -25.39863, 2.637258, 7200, 0, 0), -- 13160 (Area: 0) (Auras: ) +(@CGUID+45, 13160, 429, 3, 1, 521.4735, 543.2216, -25.39985, 2.595782, 7200, 0, 0), -- 13160 (Area: 0) (Auras: ) +(@CGUID+46, 13160, 429, 3, 1, 532.2884, 535.4186, -25.40494, 0.08802468, 7200, 0, 0), -- 13160 (Area: 0) (Auras: ) +(@CGUID+47, 13160, 429, 3, 1, 507.4343, 541.1744, -25.39325, 4.851843, 7200, 0, 0), -- 13160 (Area: 0) (Auras: ) +(@CGUID+48, 13160, 429, 3, 1, 481.1589, 552.1213, -25.3825, 0.2103749, 7200, 0, 0), -- 13160 (Area: 0) (Auras: ) +(@CGUID+49, 13160, 429, 3, 1, 511.5812, 556.6573, -25.39854, 3.27448, 7200, 5, 1), -- 13160 (Area: 0) (Auras: ) (possible waypoints or random movement) +(@CGUID+50, 13160, 429, 3, 1, 532.3871, 552.1505, -25.40498, 2.640144, 7200, 5, 1), -- 13160 (Area: 0) (Auras: ) (possible waypoints or random movement) +(@CGUID+51, 13160, 429, 3, 1, 472.9739, -32.42187, -3.903387, 6.217165, 7200, 0, 0), -- 13160 (Area: 0) +(@CGUID+52, 13160, 429, 3, 1, 460.5289, -24.7918, -3.886683, 1.132865, 7200, 0, 0), -- 13160 (Area: 0) +(@CGUID+53, 13160, 429, 3, 1, 472.9483, -21.3704, -3.911369, 2.103442, 7200, 0, 0), -- 13160 (Area: 0) +(@CGUID+54, 13160, 429, 3, 1, 460.5975, -39.44626, -3.886727, 5.271253, 7200, 0, 0), -- 13160 (Area: 0) +(@CGUID+55, 13160, 429, 3, 1, 471.0815, -48.29583, -3.886039, 1.733511, 7200, 0, 0), -- 13160 (Area: 0) +(@CGUID+56, 13160, 429, 3, 1, 456.1195, -58.02909, -4.279171, 3.795121, 7200, 0, 0), -- 13160 (Area: 0) +(@CGUID+57, 13160, 429, 3, 1, 470.6244, -60.59518, -3.886099, 0.863512, 7200, 0, 0), -- 13160 (Area: 0) +(@CGUID+58, 13160, 429, 3, 1, 463.9873, -52.75054, -3.886564, 2.476561, 7200, 0, 0), -- 13160 (Area: 0) +(@CGUID+59, 13160, 429, 3, 1, 460.2359, -68.97313, -3.886916, 3.776749, 7200, 0, 0), -- 13160 (Area: 0) +(@CGUID+60, 13160, 429, 3, 1, 469.8415, -70.88819, -3.886191, 4.886696, 7200, 0, 0), -- 13160 (Area: 0) +(@CGUID+61, 13160, 429, 3, 1, 396.9608, -98.32198, -3.887123, 2.894927, 7200, 0, 0), -- 13160 (Area: 0) +(@CGUID+62, 13160, 429, 3, 1, 404.5128, -110.0931, -3.886247, 0.1595933, 7200, 0, 0), -- 13160 (Area: 0) +(@CGUID+63, 13160, 429, 3, 1, 445.6248, -113.9238, -3.886032, 5.102283, 7200, 0, 0), -- 13160 (Area: 0) +(@CGUID+64, 13160, 429, 3, 1, 414.6084, -108.6204, -3.886377, 0.0039941, 7200, 0, 0), -- 13160 (Area: 0) +(@CGUID+65, 13160, 429, 3, 1, 443.4119, -99.60896, -3.887109, 2.986769, 7200, 0, 0), -- 13160 (Area: 0) +(@CGUID+66, 13160, 429, 3, 1, 401.1027, -104.8092, -3.88664, 0.2074864, 7200, 0, 0), -- 13160 (Area: 0) +(@CGUID+67, 13160, 429, 3, 1, 438.3328, -108.5529, -3.886425, 5.919142, 7200, 0, 0), -- 13160 (Area: 0) +(@CGUID+68, 13160, 429, 3, 1, 426.5037, -100.5517, -3.887007, 2.909149, 7200, 0, 0), -- 13160 (Area: 0) +(@CGUID+69, 13160, 429, 3, 1, 414.977, -98.74563, -3.887123, 2.845945, 7200, 0, 0), -- 13160 (Area: 0) +(@CGUID+70, 13160, 429, 3, 1, 424.4419, -108.6975, -3.886389, 1.076339, 7200, 0, 0), -- 13160 (Area: 0) +(@CGUID+71, 13160, 429, 3, 1, 396.8296, -98.32212, -3.803594, 1.37881, 7200, 5, 1), -- 13160 (Area: 5913) (possible waypoints or random movement) +(@CGUID+72, 13160, 429, 3, 1, 414.977, -98.74563, -3.803658, 1.448623, 7200, 5, 1), -- 13160 (Area: 5913) (possible waypoints or random movement) +(@CGUID+73, 13160, 429, 3, 1, 400.0482, -105.0312, -3.803111, 1.396263, 7200, 5, 1), -- 13160 (Area: 5913) (possible waypoints or random movement) +(@CGUID+74, 13160, 429, 3, 1, 437.5299, -108.435, -3.803006, 1.553343, 7200, 5, 1), -- 13160 (Area: 5913) (possible waypoints or random movement) +(@CGUID+75, 13160, 429, 3, 1, 424.8745, -110.3578, -3.802841, 1.500983, 7200, 5, 1), -- 13160 (Area: 5913) (possible waypoints or random movement) +(@CGUID+76, 13160, 429, 3, 1, 460.3629, -24.53695, -3.803384, 1.658063, 7200, 5, 1), -- 13160 (Area: 5913) (possible waypoints or random movement) +(@CGUID+77, 13160, 429, 3, 1, 403.6488, -110.2321, -3.802753, 1.413717, 7200, 5, 1), -- 13160 (Area: 5913) (possible waypoints or random movement) +(@CGUID+78, 13160, 429, 3, 1, 427.6517, -100.8249, -3.803568, 1.500983, 7200, 5, 1), -- 13160 (Area: 5913) (possible waypoints or random movement) +(@CGUID+79, 13160, 429, 3, 1, 414.4864, -108.6242, -3.802916, 1.448623, 7200, 5, 1), -- 13160 (Area: 5913) (possible waypoints or random movement) +(@CGUID+80, 13160, 429, 3, 1, 456.6826, -57.28893, -4.25341, 1.623156, 7200, 5, 1), -- 13160 (Area: 5913) (possible waypoints or random movement) +(@CGUID+81, 13160, 429, 3, 1, 471.2401, -46.80048, -3.802765, 1.710423, 7200, 5, 1), -- 13160 (Area: 5913) (possible waypoints or random movement) +(@CGUID+82, 13160, 429, 3, 1, 473.4761, -22.86045, -3.80176, 1.745329, 7200, 5, 1), -- 13160 (Area: 5913) (possible waypoints or random movement) +(@CGUID+83, 13160, 429, 3, 1, 470.647, -70.00087, -3.802982, 1.692969, 7200, 5, 1), -- 13160 (Area: 5913) (possible waypoints or random movement) +(@CGUID+84, 13160, 429, 3, 1, 472.6571, -33.71276, -3.802353, 1.727876, 7200, 5, 1), -- 13160 (Area: 5913) (possible waypoints or random movement) +(@CGUID+85, 13160, 429, 3, 1, 461.8682, -40.83654, -3.803358, 1.658063, 7200, 5, 1), -- 13160 (Area: 5913) (possible waypoints or random movement) +(@CGUID+86, 13160, 429, 3, 1, 444.67, -99.75545, -3.803718, 1.570796, 7200, 5, 1), -- 13160 (Area: 5913) (possible waypoints or random movement) +(@CGUID+87, 13160, 429, 3, 1, 460.2359, -68.97313, -3.803645, 1.64061, 7200, 5, 1), -- 13160 (Area: 5913) (possible waypoints or random movement) +(@CGUID+88, 13160, 429, 3, 1, 464.6496, -53.98102, -3.803182, 1.658063, 7200, 5, 1), -- 13160 (Area: 5913) (possible waypoints or random movement) +(@CGUID+89, 13160, 429, 3, 1, 445.7453, -113.9387, -3.802556, 1.570796, 7200, 5, 1), -- 13160 (Area: 5913) (possible waypoints or random movement) +(@CGUID+90, 13160, 429, 3, 1, 470.4993, -60.37534, -3.802882, 1.692969, 7200, 5, 1); -- 13160 (Area: 5913) (possible waypoints or random movement) + diff --git a/sql/updates/world/2015_04_04_02_world.sql b/sql/updates/world/2015_04_04_02_world.sql new file mode 100644 index 00000000000..1cc2cb61ea3 --- /dev/null +++ b/sql/updates/world/2015_04_04_02_world.sql @@ -0,0 +1,9 @@ +-- +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=16 AND `SourceEntry`=4163; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(16,0,26813,0,0,23,0,4163,0,0,0,0,'','Dismount player from Kor''kron War Rider when not in intended zone(Icemist Village)'); + +UPDATE `creature_template` SET `InhabitType`=5, `npcflag`=16777216 WHERE `entry`=26813; +DELETE FROM `creature_template_addon` WHERE `entry`=26813; +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES +(26813, 0, 0, 33554432, 0, 0, '55971'); diff --git a/sql/updates/world/2015_04_04_03_world.sql b/sql/updates/world/2015_04_04_03_world.sql new file mode 100644 index 00000000000..78e5f2b50b5 --- /dev/null +++ b/sql/updates/world/2015_04_04_03_world.sql @@ -0,0 +1,42 @@ +-- Pathing for Entry: Entry: 21801 (Vhel'kur) +SET @NPC := 21801; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-5140.628,`position_y`=537.6068,`position_z`=225.5867 WHERE `guid`=76114; +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=76114; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(76114,@PATH,0,33554432,1,0, '55971'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-5140.628,537.6068,225.5867,0,0,0,0,100,0), +(@PATH,2,-5047.682,660.9525,148.8644,0,0,0,0,100,0), +(@PATH,3,-5011.98,674.3496,148.8644,0,0,0,0,100,0), +(@PATH,4,-4981.461,669.827,148.8644,0,0,0,0,100,0), +(@PATH,5,-4959.014,632.2751,148.8644,0,0,0,0,100,0), +(@PATH,6,-4943.981,608.1472,148.8644,0,0,0,0,100,0), +(@PATH,7,-4929.495,593.4562,148.8644,0,0,0,0,100,0), +(@PATH,8,-4910.322,557.0013,148.8644,0,0,0,0,100,0), +(@PATH,9,-4886.5,522.941,148.8644,0,0,0,0,100,0), +(@PATH,10,-4860.481,492.9438,148.8644,0,0,0,0,100,0), +(@PATH,11,-4853.529,472.7724,148.8644,0,0,0,0,100,0), +(@PATH,12,-4853.905,449.3954,148.8644,0,0,0,0,100,0), +(@PATH,13,-4862.35,417.3469,148.8644,0,0,0,0,100,0), +(@PATH,14,-4904.073,347.1447,148.8644,0,0,0,0,100,0), +(@PATH,15,-4938.952,289.3222,148.8644,0,0,0,0,100,0), +(@PATH,16,-4959.224,247.5302,148.8644,0,0,0,0,100,0), +(@PATH,17,-4971.73,201.8298,148.8644,0,0,0,0,100,0), +(@PATH,18,-4979.256,156.9421,148.8644,0,0,0,0,100,0), +(@PATH,19,-4987.867,132.5271,148.8644,0,0,0,0,100,0), +(@PATH,20,-4998.63,107.5142,148.8644,0,0,0,0,100,0), +(@PATH,21,-5020.076,73.21224,148.8644,0,0,0,0,100,0), +(@PATH,22,-5061.159,55.51009,148.8644,0,0,0,0,100,0), +(@PATH,23,-5077.839,49.82715,148.8644,0,0,0,0,100,0), +(@PATH,24,-5112.819,49.43273,148.8644,0,0,0,0,100,0), +(@PATH,25,-5175.664,65.2347,163.3922,0,0,0,0,100,0), +(@PATH,26,-5198.992,107.9043,173.1977,0,0,0,0,100,0), +(@PATH,27,-5165.273,219.0713,198.2255,0,0,0,0,100,0), +(@PATH,28,-5113.013,300.7207,198.2255,0,0,0,0,100,0), +(@PATH,29,-5109.759,353.3949,226.7533,0,0,0,0,100,0), +(@PATH,30,-5113.028,378.9975,240.6144,0,0,0,0,100,0), +(@PATH,31,-5122.197,411.4973,243.2811,0,0,0,0,100,0); +-- 0x1C39A84240154A4000002100000AE735 .go -5140.628 537.6068 225.5867 diff --git a/sql/updates/world/2015_04_04_04_world.sql b/sql/updates/world/2015_04_04_04_world.sql new file mode 100644 index 00000000000..58314391994 --- /dev/null +++ b/sql/updates/world/2015_04_04_04_world.sql @@ -0,0 +1,124 @@ +-- +SET @ENTRY := 10978; +SET @Sprinkle:=7583; +SET @Quixxil:=10977; + +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry` IN (@ENTRY, @Sprinkle, @Quixxil); +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Sprinkle AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Quixxil AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,8,0,100,0,17166,0,0,0,80,1097800,2,0,0,0,0,1,0,0,0,0,0,0,0,"Legacki - On Spellhit 'Release Umi's Yeti' - Run Script"), +(@ENTRY,0,1,0,40,0,100,0,15,10978,0,0,80,@ENTRY*100+01,2,0,0,0,0,1,0,0,0,0,0,0,0,"Legacki - On Waypoint 15 Reached - Run Script"), +(@Sprinkle,0,0,0,8,0,100,0,17166,0,0,0,80,@Sprinkle*100,2,0,0,0,0,1,0,0,0,0,0,0,0,"Sprinkle - On Spellhit 'Release Umi's Yeti' - Run Script"), +(@Sprinkle,0,1,0,40,0,100,0,7,@Sprinkle,0,0,80,@Sprinkle*100+01,2,0,0,0,0,1,0,0,0,0,0,0,0,"Sprinkle - On Waypoint 7 Reached - Run Script"), +(@Quixxil,0,0,0,8,0,100,0,17166,0,0,0,80,@Quixxil*100,2,0,0,0,0,1,0,0,0,0,0,0,0,"Quixxil - On Spellhit 'Release Umi's Yeti' - Run Script"), +(@Quixxil,0,1,0,40,0,100,0,11,@Quixxil,0,0,80,@Quixxil*100+01,2,0,0,0,0,1,0,0,0,0,0,0,0,"Quixxil - On Waypoint 11 Reached - Run Script"); + +-- Actionlist SAI +SET @ENTRY := 1097800; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Sprinkle*100 AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Quixxil*100 AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,1000,1000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Legacki - On Script - Say Line 0"), +(@ENTRY,9,1,0,0,0,100,0,1000,1000,0,0,53,1,10978,0,0,0,2,1,0,0,0,0,0,0,0,"Legacki -On Script - Start Waypoint"), +(@ENTRY,9,2,0,0,0,100,0,0,0,0,0,45,0,1,0,0,0,0,19,10980,20,0,0,0,0,0,"Legacki -On Script - Say Line 1"), +(@ENTRY,9,3,0,0,0,100,0,1000,1000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Legacki -On Script - Say Line 1"), +(@ENTRY,9,4,0,0,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,"Legacki -On Script - Store target"), +(@Sprinkle*100,9,0,0,0,0,100,0,1000,1000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sprinkle - On Script - Say Line 0"), +(@Sprinkle*100,9,1,0,0,0,100,0,1000,1000,0,0,53,1,@Sprinkle,0,0,0,2,1,0,0,0,0,0,0,0,"Sprinkle - On Script - Start Waypoint"), +(@Sprinkle*100,9,2,0,0,0,100,0,0,0,0,0,45,0,2,0,0,0,0,19,10980,20,0,0,0,0,0,"Sprinkle - On Script - Say Line 1"), +(@Sprinkle*100,9,3,0,0,0,100,0,1000,1000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sprinkle - On Script - Say Line 1"), +(@Sprinkle*100,9,4,0,0,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,"Sprinkle - On Script - Store target"), +(@Quixxil*100,9,0,0,0,0,100,0,1000,1000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Quixxil - On Script - Say Line 0"), +(@Quixxil*100,9,1,0,0,0,100,0,1000,1000,0,0,53,1,@Quixxil,0,0,0,2,1,0,0,0,0,0,0,0,"Quixxil - On Script - Start Waypoint"), +(@Quixxil*100,9,2,0,0,0,100,0,0,0,0,0,45,0,3,0,0,0,0,19,10980,20,0,0,0,0,0,"Quixxil - On Script - Say Line 1"), +(@Quixxil*100,9,3,0,0,0,100,0,1000,1000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Quixxil - On Script - Say Line 1"), +(@Quixxil*100,9,4,0,0,0,100,0,4000,4000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Quixxil - On Script - Say Line 2"), +(@Quixxil*100,9,5 ,0,0,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,"Quixxil - On Script - Store target"); + +-- Actionlist SAI +SET @ENTRY := 1097801; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Sprinkle*100+1 AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Quixxil*100+1 AND `source_type`=9; + + +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,2000,2000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Legacki - On Script - Say Line 2"), +(@ENTRY,9,1,0,0,0,100,0,2000,2000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Legacki - On Script - Say Line 3"), +(@ENTRY,9,2,0,0,0,100,0,2000,2000,0,0,1,4,0,0,0,0,0,1,0,0,0,0,0,0,0,"Legacki - On Script - Say Line 4"), +(@ENTRY,9,3,0,0,0,100,0,2000,2000,0,0,33,10978,0,0,0,0,0,12,1,0,0,0,0,0,0,"Legacki - On Script - Credit quest"), +(@Sprinkle*100+1,9,0,0,0,0,100,0,2000,2000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sprinkle - On Script - Say Line 2"), +(@Sprinkle*100+1,9,1,0,0,0,100,0,2000,2000,0,0,33,@Sprinkle,0,0,0,0,0,12,1,0,0,0,0,0,0,"Sprinkle - On Script - Credit quest"), +(@Quixxil*100+1,9,1,0,0,0,100,0,2000,2000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Quixxil - On Script - Say Line 3"), +(@Quixxil*100+1,9,2,0,0,0,100,0,2000,2000,0,0,1,4,0,0,0,0,0,1,0,0,0,0,0,0,0,"Quixxil - On Script - Say Line 4"), +(@Quixxil*100+1,9,3,0,0,0,100,0,2000,2000,0,0,33,@Quixxil,0,0,0,0,0,12,1,0,0,0,0,0,0,"Quixxil - On Script - Credit quest"); + +-- Umi's Mechanical Yeti SAI +SET @ENTRY := 10980; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,38,0,100,0,0,1,0,0,29,5,10,0,0,0,0,19,10978,10,0,0,0,0,0,"Umi's Mechanical Yeti - On Just Summoned - Start Follow Closest Creature 'Legacki'"), +(@ENTRY,0,1,0,38,0,100,0,0,2,0,0,29,5,10,0,0,0,0,19,@Sprinkle,10,0,0,0,0,0,"Umi's Mechanical Yeti - On Just Summoned - Start Follow Closest Creature 'Legacki'"), +(@ENTRY,0,2,0,38,0,100,0,0,3,0,0,29,5,10,0,0,0,0,19,@Quixxil,10,0,0,0,0,0,"Umi's Mechanical Yeti - On Just Summoned - Start Follow Closest Creature 'Legacki'"), +(@ENTRY,0,3,4,54,0,100,0,0,0,0,0,1,0,1000,0,0,0,0,1,0,0,0,0,0,0,0,"Umi's Mechanical Yeti - On Just Summoned - Say Line 0"), +(@ENTRY,0,4,0,61,0,100,0,0,0,0,0,41,30000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Umi's Mechanical Yeti - On Just Summoned - Despawn In 30000 ms"), +(@ENTRY,0,5,0,52,0,100,0,0,10980,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Umi's Mechanical Yeti - On Text 0 Over - Say Line 1"); + +DELETE FROM `creature_text` WHERE `entry` IN (10980, 10978, @Quixxil, @Sprinkle); +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(10978, 0, 0, '%s jumps in fright!', 16, 0, 100, 0, 0, 0, 6301, 0, 'Legacki'), +(10978, 1, 0, 'Ahhhhh!!!', 12, 0, 100, 0, 0, 0, 6302, 0, 'Legacki'), +(10978, 2, 0, 'You big meanie! Who put you up to this?', 12, 0, 100, 0, 0, 0, 6303, 0, 'Legacki'), +(10978, 3, 0, 'It was Umi, wasn''t it?! She''s always playing jokes on me, and now she''s got you in on it too!', 12, 0, 100, 0, 0, 0, 6304, 0, 'Legacki'), +(10978, 4, 0, '%s sighs.', 16, 0, 100, 0, 0, 0, 6305, 0, 'Legacki'), +(@Quixxil, 0, 0, 'Oh!!! Get that thing away from me!', 12, 0, 100, 0, 0, 0, 6314, 0, 'Quixxil'), +(@Quixxil, 1, 0, '%s runs quickly away from Umi''s Mechanical yeti.', 16, 0, 100, 0, 0, 0, 6318, 0, 'Quixxil'), +(@Quixxil, 2, 0, 'Why do you chase me, Mechanical yeti?! WHY?!', 12, 0, 100, 0, 0, 0, 6317, 0, 'Quixxil'), +(@Quixxil, 3, 0, '%s looks relieved.', 16, 0, 100, 0, 0, 0, 6322, 0, 'Quixxil'), +(@Quixxil, 4, 0, 'I''m jumpy as it is... and people insist on scaring me... Next time, though, I''ll be ready!', 12, 0, 100, 0, 0, 0, 6320, 0, 'Quixxil'), +(@Sprinkle, 0, 0, '%s jumps in fright!', 16, 0, 100, 0, 0, 0, 6306, 0, 'Legacki'), +(@Sprinkle, 1, 0, 'Ahhhhh!!! What is that thing?!', 12, 0, 100, 0, 0, 0, 6307, 0, 'Legacki'), +(@Sprinkle, 2, 0, 'Umi sent you, didn''t she? She told me to expect a surprise, but I never thought that this is what she meant!', 12, 0, 100, 0, 0, 0, 6308, 0, 'Legacki'), +(10980, 0, 0, '%s marches around, roaring and making a ruckus.', 16, 0, 100, 0, 0, 0, 6327, 0, 'Umi''s Mechanical Yeti'), +(10980, 1, 0, 'RAAAAAAAR!', 12, 0, 100, 0, 0, 0, 6329, 0, 'Umi''s Mechanical Yeti'); + + +DELETE FROM `waypoints` WHERE `entry` IN (10978, @Quixxil, @Sprinkle); +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(10978, 1,6713.694,-4682.374,721.6163, 'Legacki'), +(10978, 2,6731.523,-4675.635,721.2076, 'Legacki'), +(10978, 3,6736.806,-4672.955,721.9132, 'Legacki'), +(10978, 4,6749.889,-4662.13,725.0011, 'Legacki'), +(10978, 5,6750.157,-4661.562,724.9875, 'Legacki'), +(10978, 6,6732.859,-4641.781,722.8784, 'Legacki'), +(10978, 7,6727.719,-4641.233,721.6862, 'Legacki'), +(10978, 8,6715.982,-4643.644,721.1971, 'Legacki'), +(10978, 9,6719.307,-4652.817,721.231, 'Legacki'), +(10978, 10,6715.004,-4685.518,721.466, 'Legacki'), +(10978, 11,6718.75,-4705.675,721.9097, 'Legacki'), +(10978, 12,6712.263,-4717.947,721.5077, 'Legacki'), +(10978, 13,6701.636,-4714.284,721.6529, 'Legacki'), +(10978, 14,6701.108,-4695.846,722.3613, 'Legacki'), +(10978, 15,6705.608,-4686.181,721.9736, 'Legacki'), +(@Quixxil, 1, -6186.462402, -1096.938965, -213.828033, 'Quixxil'), +(@Quixxil, 2, -6165.831543, -1100.158203, -210.395004, 'Quixxil'), +(@Quixxil, 3, -6146.718750, -1120.232056, -212.840530, 'Quixxil'), +(@Quixxil, 4, -6160.913574, -1141.027466, -217.996246, 'Quixxil'), +(@Quixxil, 5, -6184.303711, -1125.439087, -217.041824, 'Quixxil'), +(@Quixxil, 6, -6203.271484, -1111.438354, -219.371887, 'Quixxil'), +(@Quixxil, 7, -6213.762695, -1080.857422, -211.627533, 'Quixxil'), +(@Quixxil, 8, -6184.807129, -1050.598633, -191.913223, 'Quixxil'), +(@Quixxil, 9, -6173.853516, -1054.144165, -190.152405, 'Quixxil'), +(@Quixxil, 10, -6179.203613, -1041.906372, -185.499283, 'Quixxil'), +(@Quixxil, 11, -6197.859863, -1082.170044, -209.164001, 'Quixxil'), +(@Sprinkle, 1, -7114.151855, -3811.191406, 8.390815, 'Sprinkle'), +(@Sprinkle, 2, -7155.397949, -3820.387695, 8.370462, 'Sprinkle'), +(@Sprinkle, 3, -7178.134766, -3791.506836, 8.370436, 'Sprinkle'), +(@Sprinkle, 4, -7160.750488, -3758.740723, 8.370436, 'Sprinkle'), +(@Sprinkle, 5, -7136.473145, -3747.802246, 8.407521, 'Sprinkle'), +(@Sprinkle, 6, -7109.993652, -3739.603760, 9.105528, 'Sprinkle'), +(@Sprinkle, 7, -7111.109863, -3741.780029, 8.609260, 'Sprinkle'); diff --git a/sql/updates/world/2015_04_04_05_world.sql b/sql/updates/world/2015_04_04_05_world.sql new file mode 100644 index 00000000000..dccc4f0c082 --- /dev/null +++ b/sql/updates/world/2015_04_04_05_world.sql @@ -0,0 +1,40 @@ +-- +DELETE FROM `creature_text` +WHERE `entry` IN (1506, 1507, 1667); +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(1506, 0, 0, 'You carry the taint of the Scourge. Prepare to enter the Twisting Nether.', 12, 7, 25, 0, 0, 0, 2625, 0, 'Scarlet Convert 1'), +(1506, 0, 1, 'There is no escape for you. The Crusade shall destroy all who carry the Scourge''s taint.', 12, 7, 25, 0, 0, 0, 2626, 0, 'Scarlet Convert 2'), +(1506, 0, 2, 'The Light condemns all who harbor evil. Now you will die!', 12, 7, 25, 0, 0, 0, 2627, 0, 'Scarlet Convert 3'), +(1506, 0, 3, 'The Scarlet Crusade shall smite the wicked and drive evil from these lands!', 12, 7, 25, 0, 0, 0, 2628, 0, 'Scarlet Convert 4'), +(1507, 0, 0, 'You carry the taint of the Scourge. Prepare to enter the Twisting Nether.', 12, 7, 25, 0, 0, 0, 2625, 0, 'Scarlet Initiate 1'), +(1507, 0, 1, 'There is no escape for you. The Crusade shall destroy all who carry the Scourge''s taint.', 12, 7, 25, 0, 0, 0, 2626, 0, 'Scarlet Initiate 2'), +(1507, 0, 2, 'The Light condemns all who harbor evil. Now you will die!', 12, 7, 25, 0, 0, 0, 2627, 0, 'Scarlet Initiate 3'), +(1507, 0, 3, 'The Scarlet Crusade shall smite the wicked and drive evil from these lands!', 12, 7, 25, 0, 0, 0, 2628, 0, 'Scarlet Initiate 4'), +(1667, 0, 0, 'These lands shall be cleansed!', 12, 0, 100, 5, 0, 0, 314, 0, 'Meven Korgal - Nearby aggro'), +(1667, 1, 0, 'These undead atrocities will be destroyed!', 12, 0, 100, 5, 0, 0, 316, 0, 'Meven Korgal - Spawn'), +(1667, 2, 0, 'The Scarlet Crusade shall not fail in its mission!', 12, 0, 100, 0, 0, 0, 317, 0, 'Meven Korgal - On aggro'); + +-- Scarlet Initiate SAI +SET @ENTRY := 1507; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,7,0,0,0,100,0,0,0,3500,5000,11,20793,64,0,0,0,0,2,0,0,0,0,0,0,0,"Scarlet Initiate - In Combat - Cast 'Fireball'"), +(@ENTRY,0,10,0,23,0,100,0,12544,0,5000,10000,11,12544,0,0,0,0,0,1,0,0,0,0,0,0,0,"Scarlet Initiate - On Has Aura 'Frost Armor' - Cast 'Frost Armor'"), +(@ENTRY,0,11,0,4,0,50,0,0,0,0,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,"Scarlet Initiate - On Aggro - Say Line 0"); + +-- Scarlet Convert SAI +SET @ENTRY := 1506; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,4,0,50,0,0,0,0,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,"Scarlet Convert - On Aggro - Say Line 0"); + +-- Meven Korgal SAI +SET @ENTRY := 1667; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,25,0,100,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Meven Korgal - On Reset - Say Line 1"), +(@ENTRY,0,1,0,1,0,100,0,10000,30000,45000,120000,1,0,0,0,0,0,0,17,1,30,0,0,0,0,0,"Meven Korgal - Out of Combat - Say Line 0"), +(@ENTRY,0,2,0,4,0,100,0,0,0,0,0,1,2,0,0,0,0,0,2,0,0,0,0,0,0,0,"Meven Korgal - On Aggro - Say Line 2"); diff --git a/sql/updates/world/2015_04_04_06_world.sql b/sql/updates/world/2015_04_04_06_world.sql new file mode 100644 index 00000000000..16034938010 --- /dev/null +++ b/sql/updates/world/2015_04_04_06_world.sql @@ -0,0 +1,7 @@ +-- +-- Valiance Keep Rifleman SAI +SET @ENTRY := 25311; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,0,1000,1000,6000,6000,11,45761,0,0,0,0,0,19,24921,50,0,0,0,0,0,"Valiance Keep Rifleman - Out of Combat - Cast 'Shoot Gun'"); diff --git a/sql/updates/world/2015_04_05_00_world.sql b/sql/updates/world/2015_04_05_00_world.sql new file mode 100644 index 00000000000..d37c91586bf --- /dev/null +++ b/sql/updates/world/2015_04_05_00_world.sql @@ -0,0 +1,234 @@ + SET @OGUID := 16926; + + -- Creatures : + SET @MOGRAINE := 20345; + SET @ISILLIEN := 20346; + SET @ABBENDIS := 20347; + SET @FAIRBANKS := 20348; + SET @TIRION := 20349; + SET @DOAN := 20352; + SET @TARGET := 20391; -- for spells + -- DB Guids : + SET @MGUID := 83685; + SET @FGUID := 83686; + SET @DGUID := 83689; + SET @TGUID := 83690; + SET @IGUID := 83691; + SET @AGUID := 83692; + -- Event + SET @TRIGG := 4498; + -- Default difference between events + SET @DELAY := 3000000; + -- Objects + SET @CHAIR := 184305; + SET @DARK := 184306; + SET @LIGHT := 184307; + SET @CHEST := 184308; + -- Positions + SET @CHESTX := 1816.698; + SET @CHESTY := 1031.316; + SET @CHESTZ := 11.84751; + -- Spells + SET @TBTL := 35172; + SET @JUDGE := 35170; + SET @SHOCK := 35160; + SET @SMITE := 35155; + SET @HEALS := 35162; + + DELETE FROM `gameobject` WHERE `id` BETWEEN 22882 AND 22887 AND `map`=560; + INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES + (@OGUID+0, 22882, 560, 3, 1, 1823.365, 1029.282, 11.64124, 1.439896, 0, 0, 0.7071069, 0.7071066, 7200, 255, 1), + (@OGUID+1, 22883, 560, 3, 1, 1824.24, 1031.343, 11.64124, 0.5061446, 0, 0, 0.7071069, 0.7071066, 7200, 255, 1), + (@OGUID+2, 22884, 560, 3, 1, 1822.9, 1032.183, 11.64124, 3.141593, 0, 0, 0.7071069, 0.7071066, 7200, 255, 1), + (@OGUID+3, 22885, 560, 3, 1, 1813.827, 999.6839, 12.13165, 0.1047193, 0, 0, 0.7071069, 0.7071066, 7200, 255, 1), + (@OGUID+4, 22886, 560, 3, 1, 1822.891, 1030.719, 11.64124, 4.232424, 0, 0, 0.7071069, 0.7071066, 7200, 255, 1), + (@OGUID+5, 22887, 560, 3, 1, 1812.618, 999.1037, 12.13165, 1.509709, 0, 0, 0.7071069, 0.7071066, 7200, 255, 1); + + DELETE FROM `conditions` WHERE `SourceEntry` IN (@SMITE,@SHOCK,@JUDGE,@HEALS); + INSERT INTO `conditions`(`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES + (13,1,@SMITE,0,0,31,0,3,@TARGET,0,0,0,'','Spell casts only on Creature 20391'), + (13,1,@SHOCK,0,0,31,0,3,@TARGET,0,0,0,'','Spell casts only on Creature 20391'), + (13,1,@JUDGE,0,0,31,0,3,@TARGET,0,0,0,'','Spell casts only on Creature 20391'), + (13,1,@HEALS,0,0,31,0,3,@TARGET,0,0,0,'','Spell casts only on Creature 20391'); + + DELETE FROM `creature_text` WHERE `entry` IN (@MOGRAINE,@ISILLIEN,@ABBENDIS,@FAIRBANKS,@TIRION,@DOAN); + INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `BroadcastTextId`, `comment`) VALUES + -- Commander Mograine + (@MOGRAINE, 0 , 0, 'Keep your voices down. There are strangers about...' ,12 ,0,100,1,18084, ' Mograine - 1'), + (@MOGRAINE, 1 , 0, 'Brothers and sisters, I have called you here today to discuss the fate of Lordaeron.' ,12 ,0,100,1,18085, ' Mograine - 2'), + (@MOGRAINE, 2 , 0, 'I hear things... Things that should not be.' ,12 ,0,100,1,18087, ' Mograine - 3'), + (@MOGRAINE, 3 , 0, 'The dead rise... Undead, from the frozen northlands. Whole cities have gone missing. I...' ,12 ,0,100,1,18088, ' Mograine - 4'), + (@MOGRAINE, 4 , 0, 'I have heard that Northrend is lost...' ,12 ,0,100,274,18089, ' Mograine - 5'), + (@MOGRAINE, 5 , 0, 'We must stand at the ready. I have faced undead before. They are ruthless killing machines, devoid of any emotion or compassion.' ,12 ,0,100,1,18091, ' Mograine - 6'), + (@MOGRAINE, 6 , 0, 'Propose? I propose that we prepare. That we prepare our loved ones, family and friends for the possibility of an undead holocaust.' ,12 ,0,100,6,18095, ' Mograine - 7'), + (@MOGRAINE, 7 , 0, 'And there is this...' ,12 ,0,100,6,18096, ' Mograine - 8'), + (@MOGRAINE, 8 , 0, 'I have had this object in my possession for 10 years. Since Blackrock Spire...' ,12 ,0,100,1,18099, ' Mograine - 9'), + (@MOGRAINE, 9 , 0, 'I wrested it free from the remains of an orc lieutenant - a dark caster... It is from their homeworld.' ,12 ,0,100,1,18100, ' Mograine - 10'), + (@MOGRAINE, 10 , 0, 'Do not get too close. I laid a hand upon it once... Only once and never again. The memories of that day still linger.' ,12 ,0,100,1,18101, ' Mograine - 11'), + (@MOGRAINE, 11 , 0, 'I surmise that this object is the living embodiment of shadows... darkness... It is a manifestation. It is a void.' ,12 ,0,100,1,18103, ' Mograine - 12'), + (@MOGRAINE, 12 , 0, 'No, old friend, it is very relevant.' ,12 ,0,100,1,18107, ' Mograine - 13'), + (@MOGRAINE, 13 , 0, 'Let me ask you this, brothers and sisters: Can good exist without evil? Can there be light without dark?' ,12 ,0,100,1,18108, ' Mograine - 14'), + (@MOGRAINE, 14 , 0, 'And if that answer is no, then could it be possible that because this artifact exists, its polar opposite must also exist?' ,12 ,0,100,25,18109, ' Mograine - 15'), + (@MOGRAINE, 15 , 0, 'Could you imagine what the material manifestation of the Light could do against the undead?' ,12 ,0,100,1,18110, ' Mograine - 16'), + (@MOGRAINE, 16 , 0, 'It consumed the Light!' ,12 ,0,100,25,18117, ' Mograine - 17'), + (@MOGRAINE, 17 , 0, 'BY THE LIGHT! Could it be? Could this be it?' ,12 ,0,100,5,18122, ' Mograine - 18'), + (@MOGRAINE, 18 , 0, 'I must know... I will know.' ,12 ,0,100,5,18123, ' Mograine - 19'), + (@MOGRAINE, 19 , 0, 'I... It... It is beautiful. What I felt when I touched it... The Light coursed through me and I through it... It healed my spirit.' ,12 ,0,100,1,18125, ' Mograine - 20'), + (@MOGRAINE, 20 , 0, 'Let us never again speak of this day. Our enemies are many. They need not know we hold such artifacts.' ,12 ,0,100,1,18128, ' Mograine - 21'), + (@MOGRAINE, 21 , 0, 'I have seen it... From this blessed crystal we will forge a weapon. This weapon will hold inside it a piece of each of us... And when it is used against undead, it shall cast them down. And in its wake, it will leave only ashes...' ,12 ,0,100,1,18129, ' Mograine - 22'), + (@MOGRAINE, 22 , 0, '%s lowers his voice to a whisper.' ,16,0,100,0,18086, ' Emote - 1'), + (@MOGRAINE, 23 , 0, 'Gasps can be heard throughout the room.' ,16,0,100,0,18090, ' Emote - 2'), + (@MOGRAINE, 25 , 0, '%s unlocks the chest.' ,16,0,100,25,18097, ' Emote - 4'), + (@MOGRAINE, 26 , 0, '%s removes the gauntlet from his right arm and shows everyone his mangled hand.' ,16,0,100,0,18102, ' Emote - 5'), + (@MOGRAINE, 27 , 0, '%s shakes his head.' ,16,0,100,0,18106, ' Emote - 6'), + (@MOGRAINE, 28 , 0, 'Shock then silence overtakes the crowd.' ,16,0,100,0,18113, ' Emote - 7'), + (@MOGRAINE, 29 , 0, '%s reaches out to touch the light crystal.' ,16,0,100,25,18124, ' Emote - 8'), + (@MOGRAINE, 30 , 0, '%s puts the crystal back inside the chest.' ,16,0,100,0,18127, ' Emote - 9'), + -- Isillien + (@ISILLIEN, 0 , 0, 'I do not see how this evil artifact is relevant to the undead. We must destroy it!' ,12 ,0,100,5,18104, ' Isillien - 1'), + (@ISILLIEN, 1 , 0, 'Nonsense, Mograine! It must be destroyed!' ,12 ,0,100,5,18112, ' Isillien - 2'), + (@ISILLIEN, 2 , 0, 'Your hand! It is healed!' ,12 ,0,100,25,18126, ' Isillien - 3'), + (@ISILLIEN, 3 , 0, 'The Ashbringer...' ,12 ,0,100,66,18130, ' Isillien - 4'), + -- Abbendis + (@ABBENDIS, 0 , 0, 'By the Light! What is it?' ,12 ,0,100,25,18098, ' Abbendis - 1'), + (@ABBENDIS, 1 , 0, 'The Ashbringer...' ,12 ,0,100,66,18130, ' Abbendis - 2'), + -- Fairbanks + (@FAIRBANKS, 0 , 0, 'Is... Is it getting lighter? Its coloration... It is changing.' ,12 ,0,100,1,18121, ' Fairbanks - 1'), + (@FAIRBANKS, 1 , 0, 'The Ashbringer...' ,12 ,0,100,66,18130, ' Fairbanks - 2'), + -- Tirion Fordring + (@TIRION, 0 , 0, 'Aye, I''ve battled them as well. We are ill-prepared as a kingdom to withstand such an assault.' ,12 ,0,100,1,18093, ' Tirion - 1'), + (@TIRION, 1 , 0, 'Impossible!' ,12 ,0,100,5,18118, ' Tirion - 2'), + (@TIRION, 2 , 0, 'The Ashbringer...' ,12 ,0,100,66,18130, ' Tirion - 3'), + (@TIRION, 3 , 0, '%s nods.' ,16,0,100,0,18092, ' Emote - 3'), + -- Archanist Doan + (@DOAN, 0 , 0, 'What do you propose, Mograine?' ,12 ,0,100,6,18094, ' Doan - 1'), + (@DOAN, 1 , 0, 'The Ashbringer...' ,12 ,0,100,66,18130, ' Doan - 2'); + + UPDATE `creature` SET `position_x`=1818.420044, `position_y`=1031.170044, `position_z`=11.0651, `orientation`=3.14155 WHERE `guid`=@MGUID; + UPDATE `creature_template` SET `AIName`= 'SmartAI' WHERE `entry` IN (@MOGRAINE,@TIRION,@ABBENDIS,@FAIRBANKS,@ISILLIEN); + UPDATE `creature_template` SET `scale` = 1.5 WHERE `entry` = @TARGET; + + DELETE FROM `creature_addon` WHERE `guid` = @MGUID; + INSERT INTO `creature_addon` (`guid`,`bytes1`) VALUES (@MGUID,4); + + DELETE FROM `areatrigger_scripts` WHERE `entry` = @TRIGG; + INSERT INTO `areatrigger_scripts`(`entry`, `ScriptName`) VALUES + (@TRIGG,'SmartTrigger'); + + DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@TRIGG,@MOGRAINE,@MOGRAINE*100,@TIRION,@TIRION*100,@ABBENDIS,@ABBENDIS*100,@ISILLIEN,@ISILLIEN*100,@FAIRBANKS,@FAIRBANKS*100); + INSERT INTO `smart_scripts`(`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES + -- Trigger sets data on involved NPCs + (@TRIGG,2,0,1,46,0,100,0,@TRIGG,0,0,0,45,1,1,0,0,0,0,10,@MGUID,@MOGRAINE,0,0,0,0,0,"Set data - On Enter inn"), + (@TRIGG,2,1,2,61,0,100,0,@TRIGG,0,0,0,45,1,1,0,0,0,0,10,@TGUID,@TIRION,0,0,0,0,0,"Set data - On Enter inn"), + (@TRIGG,2,2,3,61,0,100,0,@TRIGG,0,0,0,45,1,1,0,0,0,0,10,@AGUID,@ABBENDIS,0,0,0,0,0,"Set data - On Enter inn"), + (@TRIGG,2,3,4,61,0,100,0,@TRIGG,0,0,0,45,1,1,0,0,0,0,10,@IGUID,@ISILLIEN,0,0,0,0,0,"Set data - On Enter inn"), + (@TRIGG,2,4,5,61,0,100,0,@TRIGG,0,0,0,45,1,1,0,0,0,0,10,@FGUID,@FAIRBANKS,0,0,0,0,0,"Set data - On Enter inn"), + -- NPCs run scripts + (@MOGRAINE,0,0,1,38,0,100,0,1,1,@DELAY,@DELAY,80,@MOGRAINE*100,2,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - On set data - Run Script"), + (@ISILLIEN,0,0,1,38,0,100,0,1,1,@DELAY,@DELAY,80,@ISILLIEN*100,2,0,0,0,0,1,0,0,0,0,0,0,0,"Isillien - On set data - Run Script"), + (@TIRION,0,0,1,38,0,100,0,1,1,@DELAY,@DELAY,80,@TIRION*100,2,0,0,0,0,1,0,0,0,0,0,0,0,"Tirion - On set data - Run Script"), + (@FAIRBANKS,0,0,1,38,0,100,0,1,1,@DELAY,@DELAY,80,@FAIRBANKS*100,2,0,0,0,0,1,0,0,0,0,0,0,0,"Fairbanks - On set data - Run Script"), + (@ABBENDIS,0,0,1,38,0,100,0,1,1,@DELAY,@DELAY,80,@ABBENDIS*100,2,0,0,0,0,1,0,0,0,0,0,0,0,"Abbendis - On set data - Run Script"), + -- Mograine (main) script + (@MOGRAINE*100,9,0,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Say Line 1"),-- 56:34.5 + (@MOGRAINE*100,9,1,0,0,0,100,0,5000,5000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Say Line 2"),-- 39 + (@MOGRAINE*100,9,2,0,0,0,100,0,7000,7000,0,0,1,22,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Emote 1"), -- 46 + (@MOGRAINE*100,9,3,0,0,0,100,0,1000,1000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Say Line 3"),-- 47 + (@MOGRAINE*100,9,4,0,0,0,100,0,4000,4000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Say Line 4"),-- 51 + (@MOGRAINE*100,9,5,0,0,0,100,0,9000,9000,0,0,1,4,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Say Line 5"), -- 00 + (@MOGRAINE*100,9,6,0,0,0,100,0,6000,6000,0,0,1,23,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Emote 2"), -- 06 + (@MOGRAINE*100,9,7,0,0,0,100,0,2000,2000,0,0,1,5,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Say Line 6"), -- 08 + (@MOGRAINE*100,9,8,0,0,0,100,0,6000,6000,0,0,1,3,0,0,0,0,0,10,@TGUID,@TIRION,0,0,0,0,0,"Tirion - Script - Emote 3"), -- 14 + (@MOGRAINE*100,9,9,0,0,0,100,0,3000,3000,0,0,1,0,0,0,0,0,0,10,@TGUID,@TIRION,0,0,0,0,0,"Tirion - Script - Say Line 1"), -- 17 + (@MOGRAINE*100,9,10,0,0,0,100,0,6000,6000,0,0,1,0,0,0,0,0,0,10,@DGUID,@DOAN,0,0,0,0,0,"Doan - Say Line 1"), -- 23 + (@MOGRAINE*100,9,11,0,0,0,100,0,5000,5000,0,0,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Say Line 7"), -- 28 + (@MOGRAINE*100,9,12,0,0,0,100,0,7000,7000,0,0,1,7,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Say Line 8"), -- 35 + (@MOGRAINE*100,9,13,0,0,0,100,0,4000,4000,0,0,50,@CHEST,155,0,0,0,0,8,0,0,0,@CHESTX,@CHESTY,@CHESTZ,0,"Mograine - Script - Spawn chest"), -- 39 + (@MOGRAINE*100,9,14,0,0,0,100,0,2000,2000,0,0,1,25,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Emote 4"), -- 41 + (@MOGRAINE*100,9,15,0,0,0,100,0,1000,1000,0,0,9,0,0,0,0,0,0,15,@CHEST,10,0,0,0,0,0,"Mograine - Script - Open Chest"), -- 42 + (@MOGRAINE*100,9,16,0,0,0,100,0,0,0,0,0,12,@TARGET,1,120000,0,0,0,8,0,0,0,1816.784,1031.313,12.4703,6.265732,"Mograine - Script - Spawn dummy"), -- 42 + (@MOGRAINE*100,9,17,0,0,0,100,0,0,0,0,0,50,@DARK,110,0,0,0,0,8,0,0,0,@CHESTX,@CHESTY,@CHESTZ,0,"Mograine - Script - Spawn crystal"), -- 42 + (@MOGRAINE*100,9,18,0,0,0,100,0,2000,2000,0,0,5,34,0,0,0,0,0,10,@AGUID,@ABBENDIS,0,0,0,0,0,"Abbendis - Script - Emote"), -- 44 + (@MOGRAINE*100,9,19,0,0,0,100,0,2000,2000,0,0,1,0,0,0,0,0,0,10,@AGUID,@ABBENDIS,0,0,0,0,0,"Abbendis - Script - Say Line 1"), -- 46 + (@MOGRAINE*100,9,20,0,0,0,100,0,5000,5000,0,0,1,8,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Say Line 9"), -- 50 + (@MOGRAINE*100,9,21,0,0,0,100,0,4000,4000,0,0,1,9,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Say Line 10"), -- 54 + (@MOGRAINE*100,9,22,0,0,0,100,0,6000,6000,0,0,1,10,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Say Line 11"), -- 00 + (@MOGRAINE*100,9,23,0,0,0,100,0,3000,3000,0,0,1,26,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Emote 5"), + (@MOGRAINE*100,9,24,0,0,0,100,0,4000,4000,0,0,1,11,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Say Line 12"), + (@MOGRAINE*100,9,25,0,0,0,100,0,9000,9000,0,0,1,0,0,0,0,0,0,10,@IGUID,@ISILLIEN,0,0,0,0,0,"Isillien - Script - Say Line 1"), + (@MOGRAINE*100,9,26,0,0,0,100,0,5000,5000,0,0,1,27,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Emote 6"), + (@MOGRAINE*100,9,27,0,0,0,100,0,1000,1000,0,0,1,12,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Say Line 13"), + (@MOGRAINE*100,9,28,0,0,0,100,0,4000,4000,0,0,1,13,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Say Line 14"), + (@MOGRAINE*100,9,29,0,0,0,100,0,3000,3000,0,0,5,6,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Emote"), + (@MOGRAINE*100,9,30,0,0,0,100,0,3000,3000,0,0,1,14,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Say Line 15"), + (@MOGRAINE*100,9,31,0,0,0,100,0,2000,2000,0,0,5,6,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Emote"), + (@MOGRAINE*100,9,32,0,0,0,100,0,2000,2000,0,0,1,15,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Say Line 16"), + (@MOGRAINE*100,9,33,0,0,0,100,0,4000,4000,0,0,5,6,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Emote"), + (@MOGRAINE*100,9,34,0,0,0,100,0,4000,4000,0,0,1,1,0,0,0,0,0,10,@IGUID,@ISILLIEN,0,0,0,0,0,"Isillien - Script - Say Line 2"), + (@MOGRAINE*100,9,35,0,0,0,100,0,3000,3000,0,0,5,25,0,0,0,0,0,10,@IGUID,@ISILLIEN,0,0,0,0,0,"Isillien - Script - Emote"), + (@MOGRAINE*100,9,36,0,0,0,100,0,5000,5000,0,0,1,28,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Emote 7"), + (@MOGRAINE*100,9,37,0,0,0,100,0,0,0,0,0,5,5,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Emote"), -- 52 + (@MOGRAINE*100,9,38,0,0,0,100,0,2000,2000,0,0,91,@MGUID,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Set unit bytes"), + (@MOGRAINE*100,9,39,0,0,0,100,0,0,0,0,0,69,0,0,0,0,0,0,8,0,0,0,1818.665,1029.883,11.09751,2.553278,"Mograine - Script - Start WP"), + (@MOGRAINE*100,9,40,0,0,0,100,0,1000,1000,0,0,66,0,0,0,0,0,0,15,@CHEST,50,0,0,0,0,0,"Mograine - Script - Set orientation"), + (@MOGRAINE*100,9,41,0,0,0,100,0,4000,4000,0,0,1,16,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Say Line 17"), -- 58 + (@MOGRAINE*100,9,42,0,0,0,100,0,2000,2000,0,0,5,5,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Emote"), -- 00 + (@MOGRAINE*100,9,43,0,0,0,100,0,3000,3000,0,0,1,1,0,0,0,0,0,10,@TGUID,@TIRION,0,0,0,0,0,"Tirion - Say Line 2"), -- 03 + (@MOGRAINE*100,9,44,0,0,0,100,0,9000,9000,0,0,1,0,0,0,0,0,0,10,@FGUID,@FAIRBANKS,0,0,0,0,0,"Fairbanks - Say Line 2"), -- 11 + (@MOGRAINE*100,9,45,0,0,0,100,0,20000,20000,0,0,50,@LIGHT,32,0,0,0,0,8,0,0,0,1816.681,1031.386,12.78501,0,"Mograine - Script - Spawn crystal"), + (@MOGRAINE*100,9,46,0,0,0,100,0,3000,3000,0,0,1,17,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Say Line 18"), -- 34 + (@MOGRAINE*100,9,47,0,0,0,100,0,2000,2000,0,0,5,25,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Emote"), -- 36 + (@MOGRAINE*100,9,48,0,0,0,100,0,2000,2000,0,0,1,18,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Say Line 19"), -- 38 + (@MOGRAINE*100,9,49,0,0,0,100,0,4000,4000,0,0,1,29,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Emote 8"), -- 42 + (@MOGRAINE*100,9,50,0,0,0,100,0,1500,1500,0,0,5,16,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Emote"), + (@MOGRAINE*100,9,51,0,0,0,100,0,0,0,0,0,11,@TBTL,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Cast TBLT"), + (@MOGRAINE*100,9,52,0,0,0,100,0,4000,4000,0,0,5,18,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Emote"), + (@MOGRAINE*100,9,53,0,0,0,100,0,7000,7000,0,0,1,19,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Say Line 20"), + (@MOGRAINE*100,9,54,0,0,0,100,0,7000,7000,0,0,1,2,0,0,0,0,0,10,@IGUID,@ISILLIEN,0,0,0,0,0,"Isillien - Script - Say Line 3"), + (@MOGRAINE*100,9,55,0,0,0,100,0,4000,4000,0,0,1,30,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Emote 9"), + (@MOGRAINE*100,9,56,0,0,0,100,0,0,0,0,0,32,0,0,0,0,0,0,15,@CHEST,10,0,0,0,0,0,"Mograine - Script - Close Chest"), + (@MOGRAINE*100,9,57,0,0,0,100,0,4000,4000,0,0,1,20,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Say Line 21"), + (@MOGRAINE*100,9,58,0,0,0,100,0,0,0,0,0,69,0,0,0,0,0,0,8,0,0,0,1818.346,1031.224,11.09751,3.124123,"Mograine - Script - Start WP"), + (@MOGRAINE*100,9,59,0,0,0,100,0,500,500,0,0,50,@CHAIR,5000,0,0,0,0,8,0,0,0,1818.346,1031.224,11.09751,3.124123,"Mograine - Script - Spawn chair"), + (@MOGRAINE*100,9,60,0,0,0,100,0,1000,1000,0,0,66,0,0,0,0,0,0,10,@TGUID,@TIRION,0,0,0,0,0,"Mograine - Script - Set orientation"), + (@MOGRAINE*100,9,61,0,0,0,100,0,0,0,0,0,90,4,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Set unit bytes"), + (@MOGRAINE*100,9,62,0,0,0,100,0,8000,8000,0,0,1,21,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mograine - Script - Say Line 22"), + (@MOGRAINE*100,9,63,0,0,0,100,0,11000,11000,0,0,1,2,0,0,0,0,0,10,@TGUID,@TIRION,0,0,0,0,0,"Tirion - Say Line 3"), + (@MOGRAINE*100,9,64,0,0,0,100,0,3000,3000,0,0,1,3,0,0,0,0,0,10,@IGUID,@ISILLIEN,0,0,0,0,0,"Isillien - Script - Say line 4"), + (@MOGRAINE*100,9,65,0,0,0,100,0,0,0,0,0,1,1,0,0,0,0,0,10,@DGUID,@DOAN,0,0,0,0,0,"Doan - Script - Say line 2"), + (@MOGRAINE*100,9,66,0,0,0,100,0,0,0,0,0,1,1,0,0,0,0,0,10,@FGUID,@FAIRBANKS,0,0,0,0,0,"Fairbanks - Script - Say line 2"), + (@MOGRAINE*100,9,67,0,0,0,100,0,0,0,0,0,1,1,0,0,0,0,0,10,@AGUID,@ABBENDIS,0,0,0,0,0,"Abbendis - Script - Say line 2"), + -- Tirion script + (@TIRION*100,9,0,0,0,0,100,0,0,0,0,0,50,@CHAIR,215,0,0,0,0,8,0,0,0,1818.346,1031.224,11.09751,3.124123,"Mograine - Script - Spawn chair"), + (@TIRION*100,9,1,0,0,0,100,0,152000,152000,0,0,11,@SHOCK,2,0,0,0,0,1,0,0,0,0,0,0,0,"Tirion - Script - Cast Holy Shock"), + (@TIRION*100,9,2,0,0,0,100,0,12500,12500,0,0,11,@SHOCK,2,0,0,0,0,1,0,0,0,0,0,0,0,"Tirion - Script - Cast Holy Shock"), + (@TIRION*100,9,3,0,0,0,100,0,3500,3500,0,0,11,@JUDGE,2,0,0,0,0,1,0,0,0,0,0,0,0,"Tirion - Script - Cast Judgement"), + (@TIRION*100,9,4,0,0,0,100,0,2000,2000,0,0,11,@JUDGE,2,0,0,0,0,1,0,0,0,0,0,0,0,"Tirion - Script - Cast Judgement"), + (@TIRION*100,9,5,0,0,0,100,0,2500,2500,0,0,11,@HEALS,2,0,0,0,0,1,0,0,0,0,0,0,0,"Tirion - Script - Cast Heal"), + (@TIRION*100,9,6,0,0,0,100,0,4000,4000,0,0,11,@SHOCK,2,0,0,0,0,1,0,0,0,0,0,0,0,"Tirion - Script - Cast Holy Shock"), + -- Fairbanks script + (@FAIRBANKS*100,9,0,0,0,0,100,0,155000,155000,0,0,66,0,0,0,0,0,0,15,@CHEST,50,0,0,0,0,0,"Fairbanks - Script - Set orientation"), + (@FAIRBANKS*100,9,1,0,0,0,100,0,6000,6000,0,0,11,@HEALS,2,0,0,0,0,1,0,0,0,0,0,0,0,"Fairbanks - Script - Cast Heal"), + (@FAIRBANKS*100,9,2,0,0,0,100,0,5000,5000,0,0,11,@SMITE,2,0,0,0,0,1,0,0,0,0,0,0,0,"Fairbanks - Script - Cast Smite"), + (@FAIRBANKS*100,9,3,0,0,0,100,0,2500,2500,0,0,11,@HEALS,2,0,0,0,0,1,0,0,0,0,0,0,0,"Fairbanks - Script - Cast Heal"), + (@FAIRBANKS*100,9,4,0,0,0,100,0,2500,2500,0,0,11,@SMITE,2,0,0,0,0,1,0,0,0,0,0,0,0,"Fairbanks - Script - Cast Smite"), + (@FAIRBANKS*100,9,5,0,0,0,100,0,2500,2500,0,0,11,@SMITE,2,0,0,0,0,1,0,0,0,0,0,0,0,"Fairbanks - Script - Cast Smite"), + (@FAIRBANKS*100,9,6,0,0,0,100,0,2500,2500,0,0,11,@HEALS,2,0,0,0,0,1,0,0,0,0,0,0,0,"Fairbanks - Script - Cast Heal"), + (@FAIRBANKS*100,9,7,0,0,0,100,0,70000,70000,0,0,66,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Fairbanks - Script - Set orientation"), + -- Abbendis script + (@ABBENDIS*100,9,0,0,0,0,100,0,68500,68500,0,0,66,0,0,0,0,0,0,15,@CHEST,50,0,0,0,0,0,"Abbendis - Script - Set orientation"), + (@ABBENDIS*100,9,1,0,0,0,100,0,96000,96000,0,0,11,@SHOCK,2,0,0,0,0,1,0,0,0,0,0,0,0,"Abbendis - Script - Cast Holy Shock"), + (@ABBENDIS*100,9,2,0,0,0,100,0,3500,3500,0,0,11,@JUDGE,2,0,0,0,0,1,0,0,0,0,0,0,0,"Abbendis - Script - Cast Judgement"), + (@ABBENDIS*100,9,3,0,0,0,100,0,3500,3500,0,0,11,@SHOCK,2,0,0,0,0,1,0,0,0,0,0,0,0,"Abbendis - Script - Cast Holy Shock"), + (@ABBENDIS*100,9,4,0,0,0,100,0,5000,5000,0,0,11,@HEALS,2,0,0,0,0,1,0,0,0,0,0,0,0,"Abbendis - Script - Cast Heal"), + (@ABBENDIS*100,9,5,0,0,0,100,0,2500,2500,0,0,11,@SHOCK,2,0,0,0,0,1,0,0,0,0,0,0,0,"Abbendis - Script - Cast Holy Shock"), + (@ABBENDIS*100,9,6,0,0,0,100,0,67000,67000,0,0,66,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Abbendis - Script - Set orientation"), + -- Isillien script + (@ISILLIEN*100,9,0,0,0,0,100,0,68000,68000,0,0,66,0,0,0,0,0,0,15,@CHEST,50,0,0,0,0,0,"Isillien - Script - Set orientation"), + (@ISILLIEN*100,9,1,0,0,0,100,0,66000,66000,0,0,11,@SMITE,2,0,0,0,0,1,0,0,0,0,0,0,0,"Isillien - Script - Cast Smite"), + (@ISILLIEN*100,9,2,0,0,0,100,0,32000,32000,0,0,11,@SMITE,2,0,0,0,0,1,0,0,0,0,0,0,0,"Isillien - Script - Cast Smite"), + (@ISILLIEN*100,9,3,0,0,0,100,0,2500,2500,0,0,11,@HEALS,2,0,0,0,0,1,0,0,0,0,0,0,0,"Isillien - Script - Cast Heal"), + (@ISILLIEN*100,9,4,0,0,0,100,0,2500,2500,0,0,11,@SMITE,2,0,0,0,0,1,0,0,0,0,0,0,0,"Isillien - Script - Cast Smite"), + (@ISILLIEN*100,9,5,0,0,0,100,0,2500,2500,0,0,11,@SMITE,2,0,0,0,0,1,0,0,0,0,0,0,0,"Isillien - Script - Cast Smite"), + (@ISILLIEN*100,9,6,0,0,0,100,0,2500,2500,0,0,11,@HEALS,2,0,0,0,0,1,0,0,0,0,0,0,0,"Isillien - Script - Cast Heal"), + (@ISILLIEN*100,9,7,0,0,0,100,0,70000,70000,0,0,66,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Isillien - Script - Set orientation"); diff --git a/sql/updates/world/2015_04_05_01_world.sql b/sql/updates/world/2015_04_05_01_world.sql new file mode 100644 index 00000000000..8b8d98fc558 --- /dev/null +++ b/sql/updates/world/2015_04_05_01_world.sql @@ -0,0 +1,72 @@ +UPDATE `creature_template` SET `AIName`='SmartAI',`ScriptName`='' WHERE `entry` IN(12858,12859); + +DELETE FROM `smart_scripts` WHERE `entryorguid` IN(12858,12859) AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN(1285800) AND `source_type`=9; + +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES + +(12858, 0, 0, 0, 11, 0, 100, 0, 0, 0, 0, 0, 2, 113, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Torek - On Spawn - Set Faction'), +(12858, 0, 1, 2, 19, 0, 100, 0, 6544, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Torek - On Quest Accept - Store Targetlist'), +(12858, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 80, 1285800, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Torek - On Quest Accept - Run Script'), +(12858, 0, 3, 0, 40, 0, 100, 1, 1, 12858, 0, 0, 1, 1, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Torek - On Reached WP1 - Say Line 1'), +(12858, 0, 4, 0, 40, 0, 100, 1, 8, 12858, 0, 0, 1, 2, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Torek - On Reached WP8 - Say Line 2'), +(12858, 0, 5, 0, 40, 0, 100, 1, 19, 12858, 0, 0, 107, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Torek - On Reached WP19 - Summon Group'), +(12858, 0, 6, 7, 40, 0, 100, 1, 20, 12858, 0, 0, 1, 3, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Torek - On Reached WP20 - Say Line 3'), +(12858, 0, 7, 0, 61, 0, 100, 0, 0, 0, 0, 0, 15, 6544, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Torek - On Reached WP20 - Complete Quest'), +(12858, 0, 8, 9, 40, 0, 100, 1, 21, 12858, 0, 0, 1, 4, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Torek - On Reached WP21 - Say Line 4'), +(12858, 0, 9, 0, 61, 0, 100, 0, 0, 0, 0, 0, 54, 60000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Torek - On Reached WP21 - Pause WP'), +(12858, 0, 10, 11, 40, 0, 100, 0, 22, 12858, 0, 0, 45, 2, 2, 0, 0, 0, 0, 9, 12859, 0, 100, 0, 0, 0, 0, 'Torek - On Reached WP22 - Set Data on Splintertree Raider'), +(12858, 0, 11, 0, 61, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Torek - On Reached WP22 - Despawn'), +(12858, 0, 12, 13, 6, 0, 100, 0, 0, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 9, 12859, 0, 200, 0, 0, 0, 0, 'Torek - On Death - Set Data on Splintertree Raider'), +(12858, 0, 13, 0, 61, 0, 100, 0, 0, 0, 0, 0, 6, 6544, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Torek - On Death - Fail Quest'), +(12858, 0, 14, 0, 9, 0, 100, 0, 0, 5, 15000, 20000, 11, 11977, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Torek - IC - Cast Rend'), +(12858, 0, 15, 0, 0, 0, 100, 0, 0, 5000, 20000, 30000, 11, 8078, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Torek - IC - Cast Thunderclap'), +(12858, 0, 16, 0, 40, 0, 100, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'On reached WP - Set Home Position'), + +(12859, 0, 0, 0, 11, 0, 100, 0, 0, 0, 0, 0, 2, 113, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Splintertree Raider - On Spawn - Set Faction'), +(12859, 0, 1, 2, 38, 0, 100, 0, 1, 1, 0, 0, 2, 83, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Splintertree Raider - On Data Set 1 1 - Set Faction'), +(12859, 0, 2, 3, 61, 0, 100, 0, 0, 0, 0, 0, 91, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Splintertree Raider - On Data Set 1 1 - Set Bytes 1'), +(12859, 0, 3, 4, 61, 0, 100, 0, 0, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Splintertree Raider - On Data Set 1 1 - Set Aggresive'), + +(12859, 0, 4, 0, 61, 0, 100, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 19, 12858, 0, 0, 0, 0, 0, 0, 'Splintertree Raider - On Data Set 1 1 - Follow Torek'), +(12859, 0, 5, 0, 7, 0, 100, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 19, 12858, 0, 0, 0, 0, 0, 0, 'Splintertree Raider - On Evade - Follow Torek'), +(12859, 0, 6, 0, 38, 0, 100, 0, 2, 2, 0, 0, 41, 1000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Splintertree Raider - On Data Set 2 2 - Despawn'), +(12859, 0, 7, 0, 1, 0, 100, 0, 1000, 1000, 1000, 1000, 101, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Splintertree Raider - OOC - Set Home Position'), + +(1285800, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Torek - Script - Set NPC Flags'), +(1285800, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 2, 83, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Torek - Script - Set Faction'), +(1285800, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Torek - Script - Say Line 0'), +(1285800, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 9, 12859, 0, 200, 0, 0, 0, 0, 'Torek - Script - Set Data on Splintertree Raider'), +(1285800, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 53, 0, 12858, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 'Torek - Script - Start WP'); + +DELETE FROM `creature_summon_groups` WHERE `summonerId`=12858; +INSERT INTO `creature_summon_groups` (`summonerId`, `summonerType`, `groupId`, `entry`, `position_x`, `position_y`, `position_z`, `orientation`, `summonType`, `summonTime`) VALUES +(12858, 0, 0, 12860, 1776.73, -2049.06, 109.83, 1.54, 4, 25000), +(12858, 0, 0, 12896, 1774.64, -2049.41, 109.83, 1.40, 4, 25000), +(12858, 0, 0, 12897, 1778.73, -2049.50, 109.83, 1.67, 4, 25000); + +DELETE FROM `script_waypoint` WHERE `entry`=12858; +DELETE FROM `waypoints` WHERE `entry`=12858; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES + (12858, 1, 1788.88, -2240.17, 111.71, ''), + (12858, 2, 1797.49, -2238.11, 112.31, ''), + (12858, 3, 1803.83, -2232.77, 111.22, ''), + (12858, 4, 1806.65, -2217.83, 107.36, ''), + (12858, 5, 1811.81, -2208.01, 107.45, ''), + (12858, 6, 1820.85, -2190.82, 100.49, ''), + (12858, 7, 1829.6, -2177.49, 96.44, ''), + (12858, 8, 1837.98, -2164.19, 96.71, 'prepare'), + (12858, 9, 1839.99, -2149.29, 96.78, ''), + (12858, 10, 1835.14, -2134.98, 96.8, ''), + (12858, 11, 1823.57, -2118.27, 97.43, ''), + (12858, 12, 1814.99, -2110.35, 98.38, ''), + (12858, 13, 1806.6, -2103.09, 99.19, ''), + (12858, 14, 1798.27, -2095.77, 100.04, ''), + (12858, 15, 1783.59, -2079.92, 100.81, ''), + (12858, 16, 1776.79, -2069.48, 101.77, ''), + (12858, 17, 1776.82, -2054.59, 109.82, ''), + (12858, 18, 1776.88, -2047.56, 109.83, ''), + (12858, 19, 1776.86, -2036.55, 109.83, ''), + (12858, 20, 1776.9, -2024.56, 109.83, 'win'), + (12858, 21, 1776.87, -2028.31, 109.83, 'stay'), + (12858, 22, 1776.9, -2028.3, 109.83, ''); diff --git a/sql/updates/world/2015_04_05_02_world.sql b/sql/updates/world/2015_04_05_02_world.sql new file mode 100644 index 00000000000..7b6816fc41e --- /dev/null +++ b/sql/updates/world/2015_04_05_02_world.sql @@ -0,0 +1,2 @@ +-- Add Quest rewards for quest Teron Gorefiend, I am... +UPDATE `quest_template` SET `RewardChoiceItemId1`=31104, `RewardChoiceItemId2`=31110, `RewardChoiceItemId3`=31109, `RewardChoiceItemId4`=31107, `RewardChoiceItemId5`=31106, `RewardChoiceItemId6`=31105 WHERE `Id` IN (10645,10639); diff --git a/sql/updates/world/2015_04_05_03_world.sql b/sql/updates/world/2015_04_05_03_world.sql new file mode 100644 index 00000000000..261dd6c2a9f --- /dev/null +++ b/sql/updates/world/2015_04_05_03_world.sql @@ -0,0 +1,4 @@ +-- +UPDATE `creature` SET `spawnMask`=1 WHERE `map`=429; +UPDATE `gameobject` SET `spawnMask`=1 WHERE `map`=429; +UPDATE `quest_template` SET `RewardChoiceItemCount1`=1, `RewardChoiceItemCount2`=1, `RewardChoiceItemCount3`=1, `RewardChoiceItemCount4`=1, `RewardChoiceItemCount5`=1, `RewardChoiceItemCount6`=1 WHERE `Id` IN (10645,10639); diff --git a/sql/updates/world/2015_04_05_04_world.sql b/sql/updates/world/2015_04_05_04_world.sql new file mode 100644 index 00000000000..12fabf12d97 --- /dev/null +++ b/sql/updates/world/2015_04_05_04_world.sql @@ -0,0 +1,33 @@ +UPDATE `creature_template` SET `ainame`='SmartAI', `scriptname`='' WHERE `entry` IN(12256,12255,12254,12253,12252,12251,12249,12244); + +DELETE FROM `smart_scripts` WHERE `entryorguid` IN(12256,12255,12254,12253,12252,12251,12249,12244) AND `source_type`=0; + +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(12256, 0, 0, 1, 8, 0, 100, 0, 19250, 0, 120000, 120000, 33, 12247, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Mark of Detonation - On Spellhit - Kill Credit'), +(12255, 0, 0, 1, 8, 0, 100, 0, 19250, 0, 120000, 120000, 33, 12247, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Mark of Detonation - On Spellhit - Kill Credit'), +(12254, 0, 0, 1, 8, 0, 100, 0, 19250, 0, 120000, 120000, 33, 12247, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Mark of Detonation - On Spellhit - Kill Credit'), +(12253, 0, 0, 1, 8, 0, 100, 0, 19250, 0, 120000, 120000, 33, 12247, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Mark of Detonation - On Spellhit - Kill Credit'), +(12252, 0, 0, 1, 8, 0, 100, 0, 19250, 0, 120000, 120000, 33, 12247, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Mark of Detonation - On Spellhit - Kill Credit'), +(12251, 0, 0, 1, 8, 0, 100, 0, 19250, 0, 120000, 120000, 33, 12247, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Mark of Detonation - On Spellhit - Kill Credit'), +(12249, 0, 0, 1, 8, 0, 100, 0, 19250, 0, 120000, 120000, 33, 12247, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Mark of Detonation - On Spellhit - Kill Credit'), +(12244, 0, 0, 1, 8, 0, 100, 0, 19250, 0, 120000, 120000, 33, 12247, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Mark of Detonation - On Spellhit - Kill Credit'), +(12256, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 70, 120, 0, 0, 0, 0, 0, 20, 177668, 0, 0, 0, 0, 0, 0, 'Mark of Detonation - On Spellhit - Despawn Mark of Detonation'), +(12255, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 70, 120, 0, 0, 0, 0, 0, 20, 177668, 0, 0, 0, 0, 0, 0, 'Mark of Detonation - On Spellhit - Despawn Mark of Detonation'), +(12254, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 70, 120, 0, 0, 0, 0, 0, 20, 177668, 0, 0, 0, 0, 0, 0, 'Mark of Detonation - On Spellhit - Despawn Mark of Detonation'), +(12253, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 70, 120, 0, 0, 0, 0, 0, 20, 177668, 0, 0, 0, 0, 0, 0, 'Mark of Detonation - On Spellhit - Despawn Mark of Detonation'), +(12252, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 70, 120, 0, 0, 0, 0, 0, 20, 177668, 0, 0, 0, 0, 0, 0, 'Mark of Detonation - On Spellhit - Despawn Mark of Detonation'), +(12251, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 70, 120, 0, 0, 0, 0, 0, 20, 177668, 0, 0, 0, 0, 0, 0, 'Mark of Detonation - On Spellhit - Despawn Mark of Detonation'), +(12249, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 70, 120, 0, 0, 0, 0, 0, 20, 177668, 0, 0, 0, 0, 0, 0, 'Mark of Detonation - On Spellhit - Despawn Mark of Detonation'), +(12244, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 70, 120, 0, 0, 0, 0, 0, 20, 177668, 0, 0, 0, 0, 0, 0, 'Mark of Detonation - On Spellhit - Despawn Mark of Detonation'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=19250; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, 19250, 0, 0, 31, 0, 3, 12256, 0, 0, 0, 0, '', 'Place Smokeys Mixture targets Mark of Detonation'), +(13, 1, 19250, 0, 1, 31, 0, 3, 12255, 0, 0, 0, 0, '', 'Place Smokeys Mixture targets Mark of Detonation'), +(13, 1, 19250, 0, 2, 31, 0, 3, 12254, 0, 0, 0, 0, '', 'Place Smokeys Mixture targets Mark of Detonation'), +(13, 1, 19250, 0, 3, 31, 0, 3, 12253, 0, 0, 0, 0, '', 'Place Smokeys Mixture targets Mark of Detonation'), +(13, 1, 19250, 0, 4, 31, 0, 3, 12252, 0, 0, 0, 0, '', 'Place Smokeys Mixture targets Mark of Detonation'), +(13, 1, 19250, 0, 5, 31, 0, 3, 12251, 0, 0, 0, 0, '', 'Place Smokeys Mixture targets Mark of Detonation'), +(13, 1, 19250, 0, 6, 31, 0, 3, 12249, 0, 0, 0, 0, '', 'Place Smokeys Mixture targets Mark of Detonation'), +(13, 1, 19250, 0, 7, 31, 0, 3, 12244, 0, 0, 0, 0, '', 'Place Smokeys Mixture targets Mark of Detonation'), +(13, 4, 19250, 0, 0, 31, 0, 3, 12247, 0, 0, 0, 0, '', 'Place Smokeys Mixture targets Scourge Structure'); diff --git a/sql/updates/world/2015_04_05_05_world.sql b/sql/updates/world/2015_04_05_05_world.sql new file mode 100644 index 00000000000..4d23ec8a4c4 --- /dev/null +++ b/sql/updates/world/2015_04_05_05_world.sql @@ -0,0 +1,7 @@ +UPDATE `creature_template` SET `ainame`='SmartAI', `scriptname`='' WHERE `entry` =29217; + +DELETE FROM `smart_scripts` WHERE `entryorguid` =29217 AND `source_type`=0; + +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(29217, 0, 0, 0, 0, 0, 100, 2, 0, 2000, 2000, 4000, 11, 53617, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Anub ar Venomancer - On Range - Cast Poison Bolt (Normal)'), +(29217, 0, 1, 0, 0, 0, 100, 4, 0, 2000, 2000, 4000, 11, 59359, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Anub ar Venomancer - On Range - Cast Poison Bolt (Heroic)'); diff --git a/sql/updates/world/2015_04_05_06_world_335.sql b/sql/updates/world/2015_04_05_06_world_335.sql new file mode 100644 index 00000000000..ed7071282ab --- /dev/null +++ b/sql/updates/world/2015_04_05_06_world_335.sql @@ -0,0 +1,2 @@ +-- +UPDATE `game_event` SET `start_time`='2015-04-05 00:01:00' WHERE `eventEntry`=9; diff --git a/sql/updates/world/2015_04_05_07_world.sql b/sql/updates/world/2015_04_05_07_world.sql new file mode 100644 index 00000000000..af5fb8a8390 --- /dev/null +++ b/sql/updates/world/2015_04_05_07_world.sql @@ -0,0 +1,118 @@ +-- Pathing for Kor'kron Defender Entry: 19362 'TDB FORMAT' +SET @NPC := 69082; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2973.116,`position_y`=2556.282,`position_z`=105.8032 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-2973.116,2556.282,105.8032,0,0,0,0,100,0), -- 13:50:20 +(@PATH,2,-2962.696,2547.778,105.8032,0,0,0,0,100,0), -- 13:50:24 +(@PATH,3,-2953.723,2551.618,105.8032,0,0,0,0,100,0), -- 13:50:29 +(@PATH,4,-2954.077,2563.904,105.8032,0,0,0,0,100,0), -- 13:50:33 +(@PATH,5,-2967.127,2567.316,105.8032,0,0,0,0,100,0), -- 13:50:38 +(@PATH,6,-2968.788,2567.15,105.8032,0,0,0,0,100,0); -- 13:50:43 +-- 0x1C09FC424012E88000001A00019B696A .go -2973.116 2556.282 105.8032 + +-- Pathing for Kor'kron Defender Entry: 19362 'TDB FORMAT' +SET @NPC := 69087; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-3089.103,`position_y`=2508.026,`position_z`=83.78547 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-3089.103,2508.026,83.78547,0,0,0,0,100,0), -- 13:47:23 +(@PATH,2,-3087.197,2507.859,83.85033,0,0,0,0,100,0), -- 13:47:23 +(@PATH,3,-3081.65,2516.463,84.05411,0,0,0,0,100,0), -- 13:47:26 +(@PATH,4,-3090.028,2524.237,84.04036,0,0,0,0,100,0), -- 13:47:30 +(@PATH,5,-3094.658,2522.566,84.06168,0,0,0,0,100,0), -- 13:47:33 +(@PATH,6,-3096.908,2520.316,83.81168,0,0,0,0,100,0), -- 13:47:33 +(@PATH,7,-3098.908,2518.066,84.06168,0,0,0,0,100,0), -- 13:47:33 +(@PATH,8,-3099.196,2517.561,84.04745,0,0,0,0,100,0), -- 13:47:37 +(@PATH,9,-3097.946,2514.811,84.04745,0,0,0,0,100,0), -- 13:47:37 +(@PATH,10,-3096.946,2512.061,84.04745,0,0,0,0,100,0); -- 13:47:37 +-- 0x1C09FC424012E88000001A00009B6969 .go -3089.103 2508.026 83.78547 + +DELETE FROM `creature_formations` WHERE `leaderGUID`=69091; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(69091, 69091, 0, 0, 2), +(69091, 69092, 3, 270, 2); + +-- Pathing for Kor'kron Defender Entry: 19362 'TDB FORMAT' +SET @NPC := 69091; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-3146.969,`position_y`=2563.808,`position_z`=61.37704 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-3146.969,2563.808,61.37704,0,0,0,0,100,0), -- 13:54:58 +(@PATH,2,-3120.494,2564.844,61.75181,0,0,0,0,100,0), -- 13:54:58 +(@PATH,3,-3120.494,2564.844,61.75181,0,0,0,0,100,0), -- 13:54:58 +(@PATH,4,-3120.175,2565.024,61.98759,0,0,0,0,100,0), -- 13:55:06 +(@PATH,5,-3105.344,2573.74,61.804,0,0,0,0,100,0), -- 13:55:12 +(@PATH,6,-3091.726,2572.44,62.09174,0,0,0,0,100,0), -- 13:55:18 +(@PATH,7,-3088.27,2558.042,62.11543,0,0,0,0,100,0), -- 13:55:24 +(@PATH,8,-3100.597,2545.807,62.11351,0,0,0,0,100,0), -- 13:55:32 +(@PATH,9,-3094.525,2537.95,61.9211,0,0,0,0,100,0), -- 13:55:35 +(@PATH,10,-3079.098,2537.322,62.08109,0,0,0,0,100,0), -- 13:55:43 +(@PATH,11,-3062.423,2502.734,63.59535,0,0,0,0,100,0), -- 13:55:52 +(@PATH,12,-3063.66,2507.985,63.10339,0,0,0,0,100,0), -- 13:56:00 +(@PATH,13,-3065.486,2517.504,62.46205,0,0,0,0,100,0), -- 13:56:04 +(@PATH,14,-3079.187,2537.478,62.18378,0,0,0,0,100,0), -- 13:56:14 +(@PATH,15,-3094.9,2537.977,62.13345,0,0,0,0,100,0), -- 13:56:20 +(@PATH,16,-3100.354,2544.985,61.87681,0,0,0,0,100,0), -- 13:56:30 +(@PATH,17,-3100.963,2545.778,61.87681,0,0,0,0,100,0), -- 13:56:30 +(@PATH,18,-3088.325,2558.04,61.854,0,0,0,0,100,0), -- 13:56:30 +(@PATH,19,-3088.325,2558.04,61.854,0,0,0,0,100,0), -- 13:56:30 +(@PATH,20,-3088.377,2558.176,62.10567,0,0,0,0,100,0), -- 13:56:32 +(@PATH,21,-3091.65,2572.547,62.05435,0,0,0,0,100,0), -- 13:56:38 +(@PATH,22,-3105.591,2573.866,62.01907,0,0,0,0,100,0), -- 13:56:43 +(@PATH,23,-3120.379,2565.042,61.81473,0,0,0,0,100,0), -- 13:56:50 +(@PATH,24,-3120.494,2564.844,61.75181,0,0,0,0,100,0); -- 13:57:02 +-- 0x1C09FC424012E88000001A00039B696A .go -3146.969 2563.808 61.37704 + +-- Remove too many spawns +DELETE FROM `creature` WHERE `guid` IN (74221,74220); + +-- Pathing for Kor'kron Wyvern Rider Entry: 21153 'TDB FORMAT' +SET @NPC := 74219; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-3014.283,`position_y`=2567.434,`position_z`=141.6225 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,17722,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-3014.283,2567.434,141.6225,0,0,1,0,100,0), -- 13:51:11 +(@PATH,2,-2997.179,2547.184,141.6225,0,0,1,0,100,0), -- 13:51:11 +(@PATH,3,-2975.056,2527.355,141.6225,0,0,1,0,100,0), -- 13:51:11 +(@PATH,4,-2944.816,2526.003,141.6225,0,0,1,0,100,0), -- 13:51:11 +(@PATH,5,-2925.329,2546.514,141.6225,0,0,1,0,100,0), -- 13:51:11 +(@PATH,6,-2919.246,2565.872,141.6225,0,0,1,0,100,0), -- 13:51:11 +(@PATH,7,-2920.081,2589.365,141.6225,0,0,1,0,100,0), -- 13:51:11 +(@PATH,8,-2931.993,2608.762,141.6225,0,0,1,0,100,0), -- 13:51:11 +(@PATH,9,-2955.626,2618.87,141.6225,0,0,1,0,100,0), -- 13:51:11 +(@PATH,10,-2977.497,2619.666,141.6225,0,0,1,0,100,0), -- 13:51:11 +(@PATH,11,-3014.667,2609.543,141.6225,0,0,1,0,100,0), -- 13:51:11 +(@PATH,12,-3055.036,2590.46,141.6225,0,0,1,0,100,0), -- 13:51:11 +(@PATH,13,-3085.538,2571.631,141.6225,0,0,1,0,100,0), -- 13:51:11 +(@PATH,14,-3114.716,2555.922,141.6225,0,0,1,0,100,0), -- 13:51:11 +(@PATH,15,-3143.012,2552.032,141.6225,0,0,1,0,100,0), -- 13:51:11 +(@PATH,16,-3176.688,2560.458,141.6225,0,0,1,0,100,0), -- 13:51:11 +(@PATH,17,-3190.569,2587.816,141.6225,0,0,1,0,100,0), -- 13:51:11 +(@PATH,18,-3187.101,2615.266,141.6225,0,0,1,0,100,0), -- 13:51:11 +(@PATH,19,-3164.5,2634.338,141.6225,0,0,1,0,100,0), -- 13:51:11 +(@PATH,20,-3137.512,2639.929,141.6225,0,0,1,0,100,0), -- 13:51:11 +(@PATH,21,-3099.443,2633.703,141.6225,0,0,1,0,100,0), -- 13:51:11 +(@PATH,22,-3074.344,2622.916,141.6225,0,0,1,0,100,0), -- 13:51:11 +(@PATH,23,-3057.397,2608.769,141.6225,0,0,1,0,100,0), -- 13:51:11 +(@PATH,24,-3045.574,2592.941,140.8448,0,0,1,0,100,0), -- 13:51:11 +(@PATH,25,-3046.095,2591.678,139.9281,0,0,1,0,100,0), -- 13:51:11 +(@PATH,26,-3028.975,2582.002,141.6225,0,0,1,0,100,0); -- 13:51:11 +-- 0x1C09FC424014A84000001A00001B6969 .go -3014.283 2567.434 141.6225 + +DELETE FROM `creature_formations` WHERE `leaderGUID`=69079; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(69079, 69079, 0, 0, 2), +(69079, 69081, 3, 270, 2); diff --git a/sql/updates/world/2015_04_06_00_world.sql b/sql/updates/world/2015_04_06_00_world.sql new file mode 100644 index 00000000000..7ba78d72963 --- /dev/null +++ b/sql/updates/world/2015_04_06_00_world.sql @@ -0,0 +1,94 @@ +-- Pathing for Barash the Den Mother Entry: 23269 'TDB FORMAT' +SET @NPC := 40645; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-5028.414,`position_y`=385.6584,`position_z`=171.0149 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-5028.414,385.6584,171.0149,0,0,1,0,100,0), -- 20:05:15 +(@PATH,2,-5037.621,373.1704,171.0173,0,0,1,0,100,0), -- 20:05:18 +(@PATH,3,-5051.44,373.3133,171.0181,0,0,1,0,100,0), -- 20:05:20 +(@PATH,4,-5055.748,366.6401,171.0181,0,0,1,0,100,0), -- 20:05:21 +(@PATH,5,-5058.255,357.087,171.0151,0,0,1,0,100,0), -- 20:05:23 +(@PATH,6,-5055.19,345.9996,170.9724,0,0,1,0,100,0), -- 20:05:25 +(@PATH,7,-5034.827,346.2221,171.0174,0,0,1,0,100,0), -- 20:05:27 +(@PATH,8,-5025.357,353.0934,170.6913,0,0,1,0,100,0), -- 20:05:31 +(@PATH,9,-5019.042,361.9999,170.704,0,0,1,0,100,0), -- 20:05:33 +(@PATH,10,-5018.177,373.4781,170.964,0,0,1,0,100,0); -- 20:05:34 + +-- Update position Ja'y Nosliw <Skybreaker General> 22433 +UPDATE `creature` SET `position_x`=-5144.404, `position_y`=600.9089, `position_z`=82.75489, `orientation`=6.021386 WHERE `guid`=78787; + +-- Update position Taskmaster Varkule Dragonbreath 23140 +UPDATE `creature` SET `position_x`=-5114.439, `position_y`=588.4843, `position_z`=85.87241, `orientation`=3.036873 WHERE `guid`=51876; + +-- Pathing for Arvoar the Rapacious Entry: 23267 'TDB FORMAT' +SET @NPC := 40619; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-5115.436,`position_y`=144.5614,`position_z`=130.1606 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-5115.436,144.5614,130.1606,0,0,0,0,100,0), -- 07:19:51 +(@PATH,2,-5127.696,139.5475,130.1854,0,0,0,0,100,0), -- 07:19:53 +(@PATH,3,-5122.23,120.3736,129.9845,0,0,0,0,100,0), -- 07:19:56 +(@PATH,4,-5117.039,117.6734,129.9086,0,0,0,0,100,0), -- 07:19:58 +(@PATH,5,-5107.681,117.8557,129.8407,0,0,0,0,100,0), -- 07:19:59 +(@PATH,6,-5100.675,122.349,130.0891,0,0,0,0,100,0), -- 07:20:01 +(@PATH,7,-5105.304,139.7458,130.1348,0,0,0,0,100,0); -- 07:20:04 + +-- Update fly speed of Dragonmaw Skybreakers +UPDATE `waypoint_data` SET `move_type`=1 WHERE `id` IN (782940, 782970, 782910, 782920, 782930, 782940, 782950, 782960, 782970, 782980, 782990, 783000); + +-- Pathing for Dragonmaw Transporter Entry: 23188 'TDB FORMAT' +SET @NPC := 132814; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4584.821,`position_y`=56.05914,`position_z`=260.3116 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,16314,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-4584.821,56.05914,260.3116,0,0,1,0,100,0), -- 07:28:22 +(@PATH,2,-4554.921,74.39236,250.4782,0,0,1,0,100,0), -- 07:28:22 +(@PATH,3,-4532.374,72.2015,243.3948,0,0,1,0,100,0), -- 07:28:22 +(@PATH,4,-4508.559,67.28505,241.6727,0,0,1,0,100,0), -- 07:28:22 +(@PATH,5,-4487.302,56.6492,242.2004,0,0,1,0,100,0), -- 07:28:22 +(@PATH,6,-4470.297,28.84614,244.756,0,0,1,0,100,0), -- 07:28:22 +(@PATH,7,-4461.818,-8.348633,247.9227,0,0,1,0,100,0), -- 07:28:22 +(@PATH,8,-4477.97,-44.38118,242.3393,0,0,1,0,100,0), -- 07:28:22 +(@PATH,9,-4516.678,-59.03483,240.2283,0,0,1,0,100,0), -- 07:28:22 +(@PATH,10,-4543.176,-60.92849,240.2838,0,0,1,0,100,0), -- 07:28:22 +(@PATH,11,-4566.225,-51.06413,247.3116,0,0,1,0,100,0), -- 07:28:22 +(@PATH,12,-4581.653,-29.58301,254.2004,0,0,1,0,100,0), -- 07:28:22 +(@PATH,13,-4591.782,0.532661,260.3116,0,0,1,0,100,0), -- 07:28:22 +(@PATH,14,-4594.208,28.59668,260.3116,0,0,1,0,100,0); -- 07:28:22 + +-- Pathing for Dragonmaw Transporter Entry: 23188 'TDB FORMAT' +SET @NPC := 132818; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4735.987,`position_y`=122.2487,`position_z`=106.433 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,16314,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-4735.987,122.2487,106.433,0,0,1,0,100,0), -- 07:15:27 +(@PATH,2,-4744.92,149.3799,106.433,0,0,1,0,100,0), -- 07:15:27 +(@PATH,3,-4751.057,182.3161,106.433,0,0,1,0,100,0), -- 07:15:27 +(@PATH,4,-4767.275,216.0688,106.433,0,0,1,0,100,0), -- 07:15:27 +(@PATH,5,-4776.866,248.6194,106.433,0,0,1,0,100,0), -- 07:15:27 +(@PATH,6,-4781.172,280.7835,106.433,0,0,1,0,100,0), -- 07:15:27 +(@PATH,7,-4783.174,319.2545,106.433,0,0,1,0,100,0), -- 07:15:27 +(@PATH,8,-4752.483,324.3357,106.433,0,0,1,0,100,0), -- 07:15:27 +(@PATH,9,-4729.643,316.453,106.433,0,0,1,0,100,0), -- 07:15:27 +(@PATH,10,-4715.97,309.7697,106.433,0,0,1,0,100,0), -- 07:15:27 +(@PATH,11,-4709.104,290.6015,106.433,0,0,1,0,100,0), -- 07:15:27 +(@PATH,12,-4710.651,264.7013,106.433,0,0,1,0,100,0), -- 07:15:27 +(@PATH,13,-4709.572,256.6543,106.433,0,0,1,0,100,0), -- 07:15:27 +(@PATH,14,-4706.147,218.4914,106.433,0,0,1,0,100,0), -- 07:15:27 +(@PATH,15,-4709.459,193.1469,106.433,0,0,1,0,100,0), -- 07:15:27 +(@PATH,16,-4704.721,157.6649,106.433,0,0,1,0,100,0), -- 07:15:27 +(@PATH,17,-4695.498,116.758,106.433,0,0,1,0,100,0), -- 07:15:27 +(@PATH,18,-4713.938,87.04405,101.2085,0,0,1,0,100,0), -- 07:15:27 +(@PATH,19,-4726.667,100.212,106.433,0,0,1,0,100,0); -- 07:15:27 diff --git a/sql/updates/world/2015_04_06_01_world.sql b/sql/updates/world/2015_04_06_01_world.sql new file mode 100644 index 00000000000..2b82c2e3210 --- /dev/null +++ b/sql/updates/world/2015_04_06_01_world.sql @@ -0,0 +1,114 @@ +DELETE FROM `page_text` WHERE `entry` IN (3587, 3588, 3589, 3590, 3591, 3592, 3593, 3581, 3582, 3584, 3585, 3586, 3583); +INSERT INTO `page_text` (`entry`, `Text`, `next_page`, `VerifiedBuild`) VALUES +(3587, 'How to date a Dwarven woman: + +1. Ask her to buy you a drink.', 0, 19831), -- 3587 +(3588, 'Let''s be honest. Since the end of the Third War, Night Elf girls have heard it all. In fact, they''d already heard it all long before you or I was born. + +If you want to engage the mind of a Night Elf girl, you''re going to have to stand out. Sure, we''ve all heard the tales of Night Elf lasses dancing on mailboxes and stripping to pay for Nightsaber training. True or not, if you want to light that lovely lady''s lips up with a smile, you gotta be unique, memorable and confident. + +Start off by showing that you''re looking for more than a gal with looks. Sure, she can bounce, she can dance, but can she hold a decent conversation? Does she even understand the proper use of a samophlange? Does she know how to have a fun time? + +There''s nothing worse than bringing a Night Elf to a party, only to watch her stand awkwardly by herself, breaking conversation only to lament the loss of her Highborne sister during the War of the Ancients.', 0, 19831), -- 3588 +(3589, 'There''s nothing like wooing the heart of a human girl. Infinitely forgiving, endlessly caring and fantastically fun, human girls have been the downfall of countless heroes throughout the ages. (See Chapter 3: "Jaina Proudmoore and the men who loved her") + +However, generation after generation has proven it takes something more than just money, looks or an epic suit of armor to attract the woman of your dreams. Not even the power of Gnomish invention can help you here. + +To truly charm the heart of another, you should possess these qualities. + +* Be Fun & Friendly +* Be a Challenge +* Be a Man + +', 3590, 19831), -- 3589 +(3590, 'Be Fun & Friendly + +Ever have at friend who shows up at your house and brings everybody down? Yep. Everyone does. Does he get invited back to the parties? Not unless he''s bringing the ale. If you want to be an attractive person, live an attractive lifestyle. + +You''ll find that the more you enjoy socializing with others, the more they will enjoy socializing with you! + +There''s no faster way to ruin a girl''s night than bringing in that needy, apologetic vibe. Let it go, embrace the fun and your confidence will soar.', 3591, 19831), -- 3590 +(3591, 'Be a Challenge + +Too many Gnomes these days walk with their head slung low, shuffling along sadly from tavern to tavern, hopelessly holding on these limiting beliefs that no human girl would ever want them. They rush into the tavern, shower her with compliments and free drinks, then go home dejected. + +Well, let me be the first to tell you, friend, when you give your self away so cheaply, you diminsh the value of your unique, exquisite personality. You''ve been told by society that you are not the prize, that women will never acknowledge you, that you must beg for love and attention. + +They are wrong. Don''t give your affection away so freely. Instead of asking yourself, "Does she like me?" ask yourself instead, "Do I like her?" + +Challenge her - show her you''re looking for a girl who offers more than a pretty face. If she can''t keep up with your life, move on. If she shows she''s got something to offer, you''re at the beginning of a beautiful thing. ', 3592, 19831), -- 3591 +(3592, 'Be a Man + +In an age where we''ve been banished from our homes, forced to fight for our very survival and faced down horrors never before known to Azeroth, you would think that the nature of manhood would be better understood. + +Sadly, the art of masculinity has been lost, washed away in the glitz and glamor of battle. However, all is not lost! With practice and confidence, you can come back in touch with yourself. + +Once you''ve met the human girl of your dreams and she''s shown herself to be worthy of your affections: + +* Take the lead - show her everything that is beautiful about your world +* Hold her hand - develop a close, affectionate relationship +* Show respect - for yourself, for her and for the world around you + +Above all: + +* Be responsible +', 3593, 19831), -- 3592 +(3593, 'Troubleshooting + +While everything doesn''t always go the way you expect, that''s what make life unpredictable and exciting. However, there''s a few tips to help you a long way in improving your life. Here''s some common blunders: + +* Don''t chase +* Don''t be needy +* Don''t get stuck on someone who dislikes you + +These all stem from a core belief that women you must have the woman you''re talking to right now. Break free - there''s many women out there in this beautiful world and if one doesn''t work out, let go. You''ll find you become more attractive the less clingy you are. +', 0, 19831), -- 3593 +(3581, '"Roleplaying" + +Good roleplaying skills are essential. No Genius Gnomish gal wants a giant bore. Regale her with tales of your future cross-continental adventures: + + "You and me, babe, we''re gonna fly to Kalimdor, etch our names into the side of Teldrassil and spend the rest of our lives swinging from the trees in Un''goro Crater." + +"Storytelling" + +Share stores of your exciting future together! The more implausible, the better. Nothing gets a Gnomish girl excited like an ambitious plan. It also makes for great conversation starters! + + "With our brilliant minds combined, we could retake Gnomeregan. ... why haven''t we retaken Gnomeregan anyways?"', 3582, 19831), -- 3581 +(3582, '"Teasing" + +Teasing is the art of making fun of a woman in a humorous way. Be careful, you can easily go too far. Calling her a "Goblin Ganking Gnat" will leave you walking home wearing that Green Gordok Grog you just bought. Try something a bit more subtle. + +If she acts childish and refuses to stop jumping onto tables in the middle of the bar try: + +"I hear there''s an opening for star entertainer at the Stormwind orphanage." + +If she won''t stop talking about herself playfully try: + +"Where''s your off switch?" + +IMPORTANT NOTE: Gnomish girls do NOT have an off switch. Attempting to find it may result in the loss of life, limbs or wallet.', 0, 19831), -- 3582 +(3584, 'I''d just arrived off the boat to Azuremyst when I stopped a group of Draenei dames around the ripe young age of 230. They were laughing and having a great time. What luck, still on the docks and I''d found exactly the type of fun, energetic Draenei women I wanted to meet on this trip. + +At first a bit anxious, I breathed deeply and reminded myself, "they too are here in Azeroth on vacation, looking to meet new people and have a great time." + +Sure enough, they were delighted to see one devilishly charming Gnome like myself in the Exodar. It even turned out we were both staying near the Vault of Lights. We exchanged deep, penetrating glances into each others eyes, promising to meet again near A''dal later that night. ', 3585, 19831), -- 3584 +(3585, 'The next day, I met another beautiful Draenei woman - the gleam of her horns gave only the gentlest of glimpses into her refined tastes. I asked why she was visiting the Exodar, when in shock, she told me she wasn''t visiting - she lived here. + +The words I spoke to myself before returned to my mind: + +"She is on vacation, looking to meet amazing people and have a great time." + +I had it all wrong, she wasn''t on vacation at all! Then suddenly, the grinding gears of my mind clicked: I''d been claiming to myself that they were so receptive because they were on vacation. What a gnollish excuse! + +I''m a fun, interesting guy who any sensible minded girl would love to group with, on vacation or not! Now when I meet Draenei girls, I remind myself of the simple truth: + +"She too is looking to meet people and have a great time."', 3586, 19831), -- 3585 +(3586, 'The following 497 pages of this dictionary consistent entirely of oddly angled pictures taken from a Super Snapper FX 2000. ', 0, 19831), -- 3586 +(3583, 'Are your tastes more exotic? +Do you desire someone a little out of this world? +Are hooves your thing, but succubi a little too much for you? + +Read on, my friend...', 3584, 19831); -- 3583 + +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid` IN(20349,20345,20346,20347,20348) AND `source_type`=0 AND `id`=0 AND `link`=1; +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=4498 AND `source_type`=2 AND `id`=4 AND `link`=5; diff --git a/sql/updates/world/2015_04_06_02_world.sql b/sql/updates/world/2015_04_06_02_world.sql new file mode 100644 index 00000000000..3e04c2250bf --- /dev/null +++ b/sql/updates/world/2015_04_06_02_world.sql @@ -0,0 +1,31 @@ +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 16222; + +DELETE FROM `smart_scripts` WHERE `entryorguid` = 16222; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +-- Eye (Paladin's only) +(16222,0,0,1,22,0,100,0,38,5000,5000,0,66,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Silvermoon City Guardian - On Receive Emote Eye (Paladin Only) - Set Orientation Invoker'), +(16222,0,1,15,61,0,100,0,0,0,0,0,67,1,1000,1000,0,0,100,1,0,0,0,0,0,0,0,'Silvermoon City Guardian - On Event Link - Create Timed Event 1'), +(16222,0,2,0,59,0,100,0,1,0,0,0,5,16,0,0,0,0,100,1,0,0,0,0,0,0,0,'Silvermoon City Guardian - On Timed Event - Play Emote Kneel'), +-- Kiss +(16222,0,3,4,22,0,100,0,58,5000,5000,0,66,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Silvermoon City Guardian - On Receive Emote Kiss - Set Orientation Invoker'), +(16222,0,4,15,61,0,100,0,0,0,0,0,67,2,1000,1000,0,0,100,1,0,0,0,0,0,0,0,'Silvermoon City Guardian - On Event Link - Create Timed Event 2'), +(16222,0,5,0,59,0,100,0,2,0,0,0,5,2,0,0,0,0,100,1,0,0,0,0,0,0,0,'Silvermoon City Guardian - On Timed Event - Play Emote Bow'), +-- Salute +(16222,0,6,7,22,0,100,0,78,5000,5000,0,66,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Silvermoon City Guardian - On Receive Emote Salute - Set Orientation Invoker'), +(16222,0,7,15,61,0,100,0,0,0,0,0,67,3,1000,1000,0,0,100,1,0,0,0,0,0,0,0,'Silvermoon City Guardian - On Event Link - Create Timed Event 3'), +(16222,0,8,0,59,0,100,0,3,0,0,0,5,66,0,0,0,0,100,1,0,0,0,0,0,0,0,'Silvermoon City Guardian - On Timed Event - Play Emote Salute'), +-- Rude +(16222,0,9,10,22,0,100,0,77,5000,5000,0,66,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Silvermoon City Guardian - On Receive Emote Rude - Set Orientation Invoker'), +(16222,0,10,15,61,0,100,0,0,0,0,0,67,4,1000,1000,0,0,100,1,0,0,0,0,0,0,0,'Silvermoon City Guardian - On Event Link - Create Timed Event 4'), +(16222,0,11,0,59,0,100,0,4,0,0,0,5,25,0,0,0,0,100,1,0,0,0,0,0,0,0,'Silvermoon City Guardian - On Timed Event - Play Emote Poinit'), +-- Shy +(16222,0,12,13,22,0,100,0,84,5000,5000,0,66,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Silvermoon City Guardian - On Receive Emote Shy - Set Orientation Invoker'), +(16222,0,13,15,61,0,100,0,0,0,0,0,67,5,1000,1000,0,0,100,1,0,0,0,0,0,0,0,'Silvermoon City Guardian - On Event Link - Create Timed Event 5'), +(16222,0,14,0,59,0,100,0,5,0,0,0,5,23,0,0,0,0,100,1,0,0,0,0,0,0,0,'Silvermoon City Guardian - On Timed Event - Play Emote Flex'), +-- Clean up +(16222,0,15,0,61,0,100,0,0,0,0,0,67,6,5000,5000,0,0,100,1,0,0,0,0,0,0,0,'Silvermoon City Guardian - On Event Link - Create Timed Event 6'), +(16222,0,16,0,59,0,100,0,6,0,0,0,66,0,0,0,0,0,100,1,0,0,0,0,0,0,0,'Silvermoon City Guardian - On Timed Event - Reset Orientation'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 22 AND `SourceEntry` = 16222; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22, 1, 16222, 0, 0, 15, 0, 2, 0, 0, 0, 0, 0, '', 'Silvermoon Guardian - Only Kneel to Paladins'); diff --git a/sql/updates/world/2015_04_06_03_world.sql b/sql/updates/world/2015_04_06_03_world.sql new file mode 100644 index 00000000000..1241c231ec2 --- /dev/null +++ b/sql/updates/world/2015_04_06_03_world.sql @@ -0,0 +1,19 @@ +UPDATE `gameobject_template` SET `AIName`='', `ScriptName`='', `data2`=13685, `data3`=3000, `data5`=1 WHERE `entry`=184729; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=21319; + +DELETE FROM `event_scripts` WHERE id IN (13685); +INSERT INTO `event_scripts` (`id`, `delay`, `command`, `datalong`, `datalong2`, `dataint`, `x`, `y`, `z`, `o`) VALUES +(13685, 1, 10, 21319, 90000, 0, 1316.469, 6686.669, -18.59028, 1.072638); + +DELETE FROM `smart_scripts` WHERE `entryorguid`=184729 AND `source_type`=1; +DELETE FROM `smart_scripts` WHERE `entryorguid`=21319 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(21319, 0, 0, 1, 63, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 21, 20, 0, 0, 0, 0, 0,0,'Gor Grimgut- Just Summoned - Talk'), +(21319, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 21, 20, 0, 0, 0, 0, 0,0,'Gor Grimgut- Just Summoned - Attack'), +(21319, 0, 2, 0, 0, 0, 100, 0, 3000, 5000, 7000, 10000, 75, 35492, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,0,'Gor Grimgut - In Combat - Cast Exhaustion'), +(21319, 0, 3, 0, 0, 0, 100, 0, 10000, 12000, 12000, 15000, 11, 35491, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,0,'Gor Grimgut - In Combat - Cast Furious Rage'); + +DELETE FROM `creature_text` WHERE `entry` IN (21319); +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(21319, 0, 0, 'Puny $r cannot lift spear. Gor lift spear!', 12, 0, 100, 0, 0, 0, 18980, 0, 'Gor Grimgut'), +(21319, 0, 1, 'Hah! The Thunderspike is mine. Die!', 12, 0, 100, 0, 0, 0, 18979, 0, 'Gor Grimgut'); diff --git a/sql/updates/world/2015_04_06_04_world.sql b/sql/updates/world/2015_04_06_04_world.sql new file mode 100644 index 00000000000..0b6adc4f550 --- /dev/null +++ b/sql/updates/world/2015_04_06_04_world.sql @@ -0,0 +1,4 @@ +UPDATE `gameobject_template` SET `data5`=1 WHERE `entry`=184867; +DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = 37639 AND `spell_effect` = 36326; +INSERT INTO `spell_linked_spell` (`spell_trigger`,`spell_effect`,`type`,`comment`) VALUES +( 37639, 36326, 0, 'Nether Whelp'); diff --git a/sql/updates/world/2015_04_06_05_world.sql b/sql/updates/world/2015_04_06_05_world.sql new file mode 100644 index 00000000000..d6e63790a36 --- /dev/null +++ b/sql/updates/world/2015_04_06_05_world.sql @@ -0,0 +1,117 @@ +SET @OGUID := 5596; -- 1 free guid set by TC +SET @QUEST := 12326; +SET @TANK := 27587; -- Alliance Steam Tank +SET @ELITE := 27588; -- 7th Legion Elite +SET @ENGI := 27163; -- 7th Legion Siege Engineer +SET @SPELL_1 := 49315; -- Ice Cannon +SET @SPELL_2 := 49333; -- Ice Prison +SET @SPELL_3 := 49109; -- Drop Off Gnome +SET @SPELL_4 := 49081; -- Drop Off Soldier + +DELETE FROM `gameobject` WHERE `guid` = @OGUID; +INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES +(@OGUID+0, 189331, 571, 1, 1, 3707.753418, -1182.235840, 120.745689, 1.24532, 0, 0, 0, 1, 120, 0, 1); + +UPDATE `creature_template` SET `npcflag`=16777216, `unit_flags`=32768, `spell1`=49315, `spell2`=49333, `spell3`=49109, `spell4`=49081 WHERE `entry`=@TANK; +UPDATE `creature_template` SET `faction` = 1975 WHERE `entry`=27335; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (@ENGI, 27607, @TANK); + +DELETE FROM `npc_spellclick_spells` WHERE `npc_entry`=@TANK; +INSERT INTO `npc_spellclick_spells`(`npc_entry`,`spell_id`,`cast_flags`,`user_type`) VALUES +(@TANK,49078,1,0), -- player +(@TANK,46598,1,1); -- npc + +DELETE FROM `vehicle_template_accessory` WHERE `entry`=@TANK; +INSERT INTO `vehicle_template_accessory`(`entry`,`accessory_entry`,`seat_id`,`minion`,`description`,`summontype`,`summontimer`) VALUES +(@TANK,@ENGI,1,1,"7th Legion Siege Engineer Rides Alliance Steam Tank",5,0), +(@TANK,@ELITE,2,1,"7th Legion Elite Rides Alliance Steam Tank",5,0), +(@TANK,@ELITE,3,1,"7th Legion Elite Rides Alliance Steam Tank",5,0); +DELETE FROM `creature` WHERE `id` IN (27163,27588); + +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId`=16 AND `SourceEntry`=@TANK) OR (`SourceTypeOrReferenceId`=13 AND `SourceEntry` IN (@SPELL_2,@SPELL_3)) OR (`SourceTypeOrReferenceId`=18 AND `SourceEntry` IN (46598,49078)); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(16,0,@TANK,0,0,23,0,4246,0,0,0,0,'','Dismount player when not in intended zone'), +(16,0,@TANK,0,1,23,0,4190,0,0,0,0,'','Dismount player when not in intended zone'), +(16,0,@TANK,0,2,23,0,4188,0,0,0,0,'','Dismount player when not in intended zone'), +(13,1,@SPELL_2,0,0,31,0,3,27288,0,0,0,'','Ice Prison can target Death Knight Champion'), +(13,1,@SPELL_2,0,1,31,0,3,27410,0,0,0,'','Ice Prison can target Scourge SeigeSmith'), +(13,1,@SPELL_2,0,2,31,0,3,27286,0,0,0,'','Ice Prison can target Dreadbone Invader'), +(13,1,@SPELL_2,0,3,31,0,3,27283,0,0,0,'','Ice Prison can target Risen Winterguarde Mage'), +(13,2,@SPELL_3,0,0,31,0,3,@ENGI,0,0,0,'','Drop Off Gnome target 7th Legion Siege Engineer'), +(18,@TANK,46598,0,0,31,0,3,0,0,0,0,'','Only npc for spellclick'), +(18,@TANK,49078,0,0,9,0,@QUEST,0,0,0,0,'','Required quest active for spellclick'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=3 AND `SourceEntry`=@TANK; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`, `ConditionTarget`, `ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`, `ErrorTextId`,`ScriptName`,`Comment`) VALUES +(22,3,@TANK,0,1,1,49078,0,0,0,'','event require aura 49078'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=1 AND `SourceEntry`=@ENGI; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`, `ConditionTarget`, `ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`, `ErrorTextId`,`ScriptName`,`Comment`) VALUES +(22,1,@ENGI,0,1,29,27607,14,0,0,'','event require creature distance'); + +DELETE FROM `creature_template_addon` WHERE `entry` IN (@ENGI,@ELITE); +INSERT INTO `creature_template_addon` (`entry`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@ENGI,0,0,0,257,133,NULL), +(@ELITE,0,0,0,257,333,NULL); + +DELETE FROM `smart_scripts` WHERE `entryorguid` = 27607 AND `source_type` = 0; +DELETE FROM `smart_scripts` WHERE `entryorguid` = 27607*100 AND `source_type` = 9; +DELETE FROM `smart_scripts` WHERE `entryorguid` = @TANK AND `source_type` = 0; +DELETE FROM `smart_scripts` WHERE `entryorguid` = @TANK*100 AND `source_type` = 9; +DELETE FROM `smart_scripts` WHERE `entryorguid` = @ENGI AND `source_type` = 0; +DELETE FROM `smart_scripts` WHERE `entryorguid` = @ENGI*100 AND `source_type` = 9; +DELETE FROM `smart_scripts` WHERE `entryorguid` = @ENGI*100+1 AND `source_type` = 9; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(@ENGI, 0, 0, 0, 8, 0, 100, 0, @SPELL_3, 0, 0, 0, 80, @ENGI*100, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, '7th Legion Siege Engineer - On spell hit - action list'), +(@ENGI*100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, '7th Legion Siege Engineer - action list - Set visible off'), +(@ENGI*100, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 12, @ENGI, 3, 18000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, '7th Legion Siege Engineer - action list - Summon'), +(@ENGI*100, 9, 2, 0, 0, 0, 100, 0, 15000, 15000, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, '7th Legion Siege Engineer - action list - Set visible on'), +(@ENGI, 0, 1, 0, 23, 0, 100, 1, 46598, 0, 0, 0, 80, @ENGI*100+1, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, '7th Legion Siege Engineer - Has aura - action list'), +(@ENGI*100+1, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, '7th Legion Siege Engineer - action list - Talk'), +(@ENGI*100+1, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, '7th Legion Siege Engineer - action list - React passif'), +(@ENGI*100+1, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 29, 3, 0, 0, 0, 0, 0, 19, 27607, 15, 0, 0, 0, 0, 0, '7th Legion Siege Engineer - action list - follow'), +(@ENGI*100+1, 9, 3, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 11, 49114, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, '7th Legion Siege Engineer - action list - Cast to summon a GO'), +(@ENGI*100+1, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, '7th Legion Siege Engineer - action list - Talk'), +(@ENGI*100+1, 9, 5, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 75, 49215, 0, 0, 0, 0, 0, 19, 27607, 15, 0, 0, 0, 0, 0, '7th Legion Siege Engineer - action list - Add aura'), +(@ENGI*100+1, 9, 6, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, '7th Legion Siege Engineer - action list - Talk'), +(@ENGI*100+1, 9, 7, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 29, 1, 0, 0, 0, 0, 0, 19, @TANK, 15, 0, 0, 0, 0, 0, '7th Legion Siege Engineer - action list - follow'), +(@TANK,0,0,0,38,0,100,0,0,1,0,0,11,49122,0,0,0,0,0,23,0,0,0,0,0,0,0,"Tank - On data set- cast spell credit"), +(@TANK,0,1,0,25,0,100,0,0,0,0,0,8,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tank - On reset- react passif"), +(@TANK,0,2,0,1,0,100,0,30000,30000,50000,50000,1,1,0,0,0,0,0,19,@ELITE,10,0,0,0,0,0,'Tank - OOC - Talk'), +(@TANK,0,4,0,25,0,100,0,0,0,0,0,59,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tank - On reset- Set Run on"), +(@TANK, 0, 3, 0, 8, 0, 100, 0, @SPELL_4, 0, 0, 0, 80, @TANK*100, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, '7th Legion Siege Engineer - On spell hit - action list'), +(@TANK*100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 11, @ELITE, 10, 0, 0, 0, 0, 0, '7th Legion Siege Engineer - action list - Set visible off'), +(@TANK*100, 9, 1, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 11, @ELITE, 10, 0, 0, 0, 0, 0, '7th Legion Siege Engineer - action list - Summon'), +(@TANK*100, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, '7th Legion Siege Engineer - action list - Set visible on'), +(27607, 0, 1, 0, 23, 0, 100, 1, 49215, 1, 0, 0, 80, 27607*100, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Plague Wagon - Has aura - action list'), +(27607*100, 9, 0, 0, 0, 0, 100, 0, 11000, 11000, 0, 0, 45, 0, 1, 0, 0, 0, 0, 19, @TANK, 30, 0, 0, 0, 0, 0, 'Plague Wagon - action list - Set data'), +(27607*100, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Plague Wagon - action list - despawn'); + +DELETE FROM `creature_text` WHERE `entry` IN (@ELITE, @ENGI); +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(@ELITE, 0, 0, 'Without you we''d be lost. Thanks for the ride!', 12, 7, 100, 0, 0, 0, 26844, 0, '7th Legion Elite'), +(@ELITE, 0, 1, 'For the Alliance and Lord Fordragon!', 12, 7, 100, 0, 0, 0, 26841, 0, '7th Legion Elite'), +(@ELITE, 0, 2, 'HOO-WAH! The cavalry has arrived!', 12, 7, 100, 0, 0, 0, 26842, 0, '7th Legion Elite'), +(@ELITE, 0, 3, 'Great driving, soldier! Not a scratch on us!', 12, 7, 100, 0, 0, 0, 26843, 0, '7th Legion Elite'), +(@ELITE, 1, 0, 'I think I see one of their plague wagons!', 12, 0, 100, 0, 0, 0, 26971, 0, '7th Legion Elite'), +(@ELITE, 1, 1, 'Did I ever tell you soldiers about the time I destroyed the Thandol Span? Yep, weren''t no dark irons destroyed that bridge! Was me!', 12, 7, 100, 0, 0, 0, 26972, 0, '7th Legion Elite'), +(@ELITE, 1, 2, 'It doesn''t make any sense. Why don''t they just fly Naxxramas over Wintergarde Keep and blow it up? I mean, that''s what I would do if I were Kel''Thuzad.', 12, 7, 100, 0, 0, 0, 26973, 0, '7th Legion Elite'), +(@ELITE, 1, 3, 'I wonder if we''ll ever solve the mystery of the strange ore. There''s gotta be some use for it!', 12, 0, 100, 0, 0, 0, 26974, 0, '7th Legion Elite'), +(@ELITE, 1, 4, 'Hey, do any of you know McGoyver over at Valgarde? He''s my uncle. You know what his title is? Pro. Yea, just "Pro." I want to be a pro too.', 12, 0, 100, 0, 0, 0, 26975, 0, '7th Legion Elite'), +(@ELITE, 1, 5, 'Something straight up stinks in here! It''s definitely not me. Gnomes smell like butter and sunshine. Not like those dwarves that smell like they were born from a trogg''s armpit! None of you are dwarves, are you?', 12, 0, 100, 0, 0, 0, 26976, 0, '7th Legion Elite'), +(@ELITE, 1, 6, 'I used to know a dwarf that claimed gnomes evolved from beneath the earth. That we all started out as sand gnomes. What a load of nonsense! Sand gnomes? PUH-LEASE!', 12, 0, 100, 0, 0, 0, 26977, 0, '7th Legion Elite'), +(@ELITE, 1, 7, 'I''ve never seen destruction like this...', 12, 0, 100, 0, 0, 0, 26978, 0, '7th Legion Elite'), +(@ELITE, 1, 8, 'Keep the chatter down, people. We need to stay alert!', 12, 0, 100, 0, 0, 0, 26979, 0, '7th Legion Elite'), +(@ELITE, 1, 9, 'The smell of death covers every inch of this place.', 12, 0, 100, 0, 0, 0, 26980, 0, '7th Legion Elite'), +(@ELITE, 1, 10, 'Driver, I hear you single handedly airlifted our villagers out of this hell-hole. Is that true?', 12, 0, 100, 0, 0, 0, 26981, 0, '7th Legion Elite'), +(@ELITE, 1, 11, 'So does anyone know anything about Thel''zan? Who is he? How did he come to leading the Scourge armies on the ground?', 12, 0, 100, 0, 0, 0, 26982, 0, '7th Legion Elite'), +(@ELITE, 1, 12, 'Look at this mess... The Scourge will pay for this!', 12, 0, 100, 0, 0, 0, 26983, 0, '7th Legion Elite'), +(@ELITE, 1, 13, 'Where are all the corpses? What have they done to our people?', 12, 0, 100, 0, 0, 0, 26984, 0, '7th Legion Elite'), +(@ELITE, 1, 14, 'I hope I''m alive to see Arthas get what''s coming to him.', 12, 0, 100, 0, 0, 0, 26985, 0, '7th Legion Elite'), +(@ELITE, 2, 0, 'Reporting for duty, sir!', 12, 7, 100, 0, 0, 0, 26954, 0, '7th Legion Elite'), +(@ENGI, 0, 1, 'Keep ''em off me for about 15 seconds and this thing is as good as dead.', 12, 7, 100, 0, 0, 0, 26854, 0, '7th Legion Siege Engineer'), +(@ENGI, 0, 2, 'Cover me!', 12, 7, 100, 0, 0, 0, 26852, 0, '7th Legion Siege Engineer'), +(@ENGI, 0, 3, 'When I''m done with this plague wagon it''ll look like a goblin built it! Keep me safe!', 12, 7, 100, 0, 0, 0, 26855, 0, '7th Legion Siege Engineer'), +(@ENGI, 0, 4, 'Keep the bad guys off me!', 12, 7, 100, 0, 0, 0, 26853, 0, '7th Legion Siege Engineer'), +(@ENGI, 1, 0, '%s deftly assembles a strange machine.', 16, 7, 100, 0, 0, 0, 26856, 0, '7th Legion Siege Engineer'), +(@ENGI, 2, 0, 'That oughta do it! Just a few more seconds now.', 12, 7, 100, 0, 0, 0, 26858, 0, '7th Legion Siege Engineer'); diff --git a/sql/updates/world/2015_04_07_00_world.sql b/sql/updates/world/2015_04_07_00_world.sql new file mode 100644 index 00000000000..e5cec5e1812 --- /dev/null +++ b/sql/updates/world/2015_04_07_00_world.sql @@ -0,0 +1,21 @@ +UPDATE `creature_template` SET `gossip_menu_id`=5708, `npcflag`=1 WHERE `entry`=14353; +UPDATE `creature_template` SET `gossip_menu_id`=5733, `npcflag`=1 WHERE `entry`=14323; +UPDATE `creature_template` SET `gossip_menu_id`=5746, `npcflag`=1 WHERE `entry`=11441; +UPDATE `creature_template` SET `gossip_menu_id`=5735, `npcflag`=1 WHERE `entry`=14326; + +DELETE FROM `gossip_menu` WHERE `entry` IN(5708,5715,5740,5733,5746,5735); +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES +(5708, 6876), +(5708, 6895), +(5715, 6882), +(5740, 6916), +(5733, 6905), +(5746, 6922), +(5735, 6907); + +DELETE FROM `gossip_menu_option` WHERE `menu_id` IN(5708,5715,5740,5733,5746,5735); +INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `OptionBroadcastTextID`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`, `BoxBroadcastTextID`) VALUES +(5708, 0, 0, 'I''m the new king? What are you talking about?', 9365, 1, 1, 5715, 0, 0, 0, NULL, 0), -- Entry: 14353 +(5708, 1, 0, 'Henchmen? Tribute?', 9440, 1, 1, 5740, 0, 0, 0, NULL, 0), -- Entry: 14353 +(5715, 0, 0, 'It''s good to be the king! Now, let''s get back to what you were talking about before...', 9441, 1, 1, 0, 0, 0, 0, NULL, 0), -- Entry: 14353 +(5740, 0, 0, 'Well then... show me the tribute!', 9367, 1, 1, 0, 0, 0, 0, NULL, 0); -- Entry: 14353 diff --git a/sql/updates/world/2015_04_07_02_world.sql b/sql/updates/world/2015_04_07_02_world.sql new file mode 100644 index 00000000000..f7df3a0fecc --- /dev/null +++ b/sql/updates/world/2015_04_07_02_world.sql @@ -0,0 +1,358 @@ +-- Cleanup on Dragonmaw Ascendant! +DELETE FROM `creature` WHERE `guid` IN (52283, 52284, 52285, 52286, 52287, 52288, 52289, 52290, 52291, 52292, 52293, 52294, 52295, 52296, 52297, 52298, 52299, 52300, 52301, 52302, 52303, 52304, 52305, 52306, 52307, 52308, 52309, 52310, 52311, 52312, 52313, 52314, 52315, 52316, 52317, 52318, 52319, 52320, 52321, 52322, 52323, 52324, 52325, 52326, 52327, 52328, 52329, 52332, 52333); + +-- Update Pos +UPDATE `creature` SET `position_x`=-4932.889, `position_y`=22.40549, `position_z`=62.24448, `orientation`=3.612832, `MovementType`=0 WHERE `guid`=52330; +UPDATE `creature` SET `position_x`=-4941.292, `position_y`=35.20237, `position_z`=62.73532, `orientation`=3.612832, `MovementType`=0 WHERE `guid`=52331; + +-- Pathing for Dragonmaw Ascendant Entry: 22253 'TDB FORMAT' +SET @NPC := 52275; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-5195.857,`position_y`=90.12917,`position_z`=70.22656 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-5195.857,90.12917,70.22656,0,0,0,0,100,0), -- 20:28:25 +(@PATH,2,-5191.49,106.8146,71.93172,0,0,0,0,100,0), -- 20:28:37 +(@PATH,3,-5195.716,138.8907,71.36693,0,0,0,0,100,0), -- 20:28:39 +(@PATH,4,-5200.492,147.7713,70.40874,0,0,0,0,100,0), -- 20:28:47 +(@PATH,5,-5209.126,186.8668,72.33409,0,0,0,0,100,0), -- 20:28:51 +(@PATH,6,-5208.013,200.6249,73.10587,0,0,0,0,100,0), -- 20:28:59 +(@PATH,7,-5201.791,256.0194,71.98375,0,0,0,0,100,0), -- 20:29:08 +(@PATH,8,-5188.366,291.6975,73.16975,0,0,0,0,100,0), -- 20:29:12 +(@PATH,9,-5182.603,302.7376,73.64639,0,0,0,0,100,0), -- 20:29:21 +(@PATH,10,-5176.891,356.321,72.7616,0,0,0,0,100,0), -- 20:29:28 +(@PATH,11,-5182.551,367.8651,72.34415,0,0,0,0,100,0), -- 20:29:34 +(@PATH,12,-5180.885,365.6959,72.57543,0,0,0,0,100,0), -- 20:29:42 +(@PATH,13,-5179.66,364.4311,72.66841,0,0,0,0,100,0), -- 20:29:46 +(@PATH,14,-5174.673,325.8635,73.72121,0,0,0,0,100,0), -- 20:29:53 +(@PATH,15,-5198.33,272.533,72.0965,0,0,0,0,100,0), -- 20:30:00 +(@PATH,16,-5200.696,243.5709,72.67114,0,0,0,0,100,0), -- 20:30:07 +(@PATH,17,-5201.835,233.1574,73.37646,0,0,0,0,100,0), -- 20:30:13 +(@PATH,18,-5210.627,167.8349,70.08221,0,0,0,0,100,0), -- 20:30:20 +(@PATH,19,-5198.43,145.466,70.45454,0,0,0,0,100,0), -- 20:30:29 +(@PATH,20,-5195.288,134.2268,72.13242,0,0,0,0,100,0), -- 20:30:34 +(@PATH,21,-5195.829,90.17783,70.22305,0,0,0,0,100,0); -- 20:30:41 +-- 0x1C09FC424015BB4000001A00002191E8 .go -5195.857 90.12917 70.22656 + +-- Pathing for Dragonmaw Ascendant Entry: 22253 'TDB FORMAT' +SET @NPC := 52276; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-5218.906,`position_y`=565.3663,`position_z`=50.85233 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-5218.906,565.3663,50.85233,0,0,0,0,100,0), -- 06:57:51 +(@PATH,2,-5208.237,539.7261,64.97557,0,0,0,0,100,0), -- 06:58:07 +(@PATH,3,-5207.74,528.3329,71.45394,0,0,0,0,100,0), -- 06:58:12 +(@PATH,4,-5203.943,505.6842,74.86707,0,0,0,0,100,0), -- 06:58:15 +(@PATH,5,-5201.894,495.4175,74.75183,0,0,0,0,100,0), -- 06:58:22 +(@PATH,6,-5200.353,477.0113,74.51066,0,0,0,0,100,0), -- 06:58:25 +(@PATH,7,-5196.964,442.6382,74.37379,0,0,0,0,100,0), -- 06:58:31 +(@PATH,8,-5206.846,402.5792,75.1168,0,0,0,0,100,0), -- 06:58:37 +(@PATH,9,-5195.471,385.1235,72.39382,0,0,0,0,100,0), -- 06:58:41 +(@PATH,10,-5175.989,405.5393,74.1407,0,0,0,0,100,0), -- 06:58:46 +(@PATH,11,-5170.418,417.7219,75.94295,0,0,0,0,100,0), -- 06:58:52 +(@PATH,12,-5166.691,432.0739,76.86201,0,0,0,0,100,0), -- 06:58:55 +(@PATH,13,-5163.314,446.5266,77.07475,0,0,0,0,100,0), -- 06:59:00 +(@PATH,14,-5123.884,478.5325,80.71776,0,0,0,0,100,0), -- 06:59:04 +(@PATH,15,-5110.585,482.2175,83.02201,0,0,0,0,100,0), -- 06:59:11 +(@PATH,16,-5099.746,484.6776,83.24095,0,0,0,0,100,0), -- 06:59:16 +(@PATH,17,-5067.211,481.675,84.28523,0,0,0,0,100,0), -- 06:59:20 +(@PATH,18,-5042.09,468.0539,84.99848,0,0,0,0,100,0), -- 06:59:25 +(@PATH,19,-5020.597,458.8485,87.52278,0,0,0,0,100,0), -- 06:59:28 +(@PATH,20,-5014.573,456.4386,88.06664,0,0,0,0,100,0), -- 06:59:34 +(@PATH,21,-4981.055,419.6735,87.5862,0,0,0,0,100,0), -- 06:59:39 +(@PATH,22,-4971.752,413.9452,86.63638,0,0,0,0,100,0), -- 06:59:46 +(@PATH,23,-4981.293,436.6361,87.37029,0,0,0,0,100,0), -- 06:59:48 +(@PATH,24,-5000.16,465.5633,87.46753,0,0,0,0,100,0), -- 06:59:57 +(@PATH,25,-5003.161,469.669,87.71191,0,0,0,0,100,0), -- 07:00:01 +(@PATH,26,-5024.007,485.0092,86.62108,0,0,0,0,100,0), -- 07:00:05 +(@PATH,27,-5052.383,491.6175,85.6012,0,0,0,0,100,0), -- 07:00:10 +(@PATH,28,-5089.974,495.1535,84.65902,0,0,0,0,100,0), -- 07:00:15 +(@PATH,29,-5131.202,491.5916,82.67003,0,0,0,0,100,0), -- 07:00:23 +(@PATH,30,-5104.979,495.0316,84.09554,0,0,0,0,100,0), -- 07:00:24 +(@PATH,31,-5136.438,490.7238,82.10683,0,0,0,0,100,0), -- 07:00:32 +(@PATH,32,-5148.315,486.5536,80.46145,0,0,0,0,100,0), -- 07:00:36 +(@PATH,33,-5176.314,497.1033,78.8902,0,0,0,0,100,0), -- 07:00:40 +(@PATH,34,-5191.643,517.5717,76.7062,0,0,0,0,100,0), -- 07:00:46 +(@PATH,35,-5209.542,551.1528,59.1912,0,0,0,0,100,0), -- 07:00:52 +(@PATH,36,-5218.914,591.9361,58.3474,0,0,0,0,100,0), -- 07:01:01 +(@PATH,37,-5216.641,622.2191,67.05342,0,0,0,0,100,0), -- 07:01:09 +(@PATH,38,-5219.429,635.3921,68.57317,0,0,0,0,100,0), -- 07:01:16 +(@PATH,39,-5219.883,633.0313,68.81996,0,0,0,0,100,0), -- 07:01:19 +(@PATH,40,-5220.871,599.2662,61.02921,0,0,0,0,100,0), -- 07:01:21 +(@PATH,41,-5218.937,565.3672,50.85265,0,0,0,0,100,0); -- 07:01:27 +-- 0x1C09FC424015BB40000019000022140B .go -5218.906 565.3663 50.85233 + +-- Pathing for Dragonmaw Ascendant Entry: 22253 'TDB FORMAT' +SET @NPC := 52277; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4898.732,`position_y`=216.78,`position_z`=54.74985 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-4898.732,216.78,54.74985,0,0,0,0,100,0), -- 07:15:21 +(@PATH,2,-4885.031,236.3208,52.61034,0,0,0,0,100,0), -- 07:15:29 +(@PATH,3,-4889.695,229.7686,52.92027,0,0,0,0,100,0), -- 07:15:32 +(@PATH,4,-4887.056,233.156,52.68503,0,0,0,0,100,0), -- 07:15:40 +(@PATH,5,-4858.93,265.0389,48.16708,0,0,0,0,100,0), -- 07:15:41 +(@PATH,6,-4851.827,284.8839,47.34936,0,0,0,0,100,0), -- 07:15:48 +(@PATH,7,-4846.079,316.0757,55.46541,0,0,0,0,100,0), -- 07:15:54 +(@PATH,8,-4843.175,349.7769,58.46518,0,0,0,0,100,0), -- 07:16:01 +(@PATH,9,-4845.812,366.7672,60.97961,0,0,0,0,100,0), -- 07:16:07 +(@PATH,10,-4856.089,402.1339,59.56307,0,0,0,0,100,0), -- 07:16:12 +(@PATH,11,-4857.438,423.075,61.22576,0,0,0,0,100,0), -- 07:16:18 +(@PATH,12,-4859.081,457.2928,64.90662,0,0,0,0,100,0), -- 07:16:25 +(@PATH,13,-4846.12,505.6395,50.40051,0,0,0,0,100,0), -- 07:16:33 +(@PATH,14,-4851.98,549.8719,48.70653,0,0,0,0,100,0), -- 07:16:40 +(@PATH,15,-4878.309,576.0837,60.99225,0,0,0,0,100,0), -- 07:16:54 +(@PATH,16,-4877.338,605.8702,68.93106,0,0,0,0,100,0), -- 07:17:02 +(@PATH,17,-4879.686,577.7703,61.86221,0,0,0,0,100,0), -- 07:17:09 +(@PATH,18,-4853.525,555.9883,49.47371,0,0,0,0,100,0), -- 07:17:14 +(@PATH,19,-4845.978,509.1451,49.54256,0,0,0,0,100,0), -- 07:17:22 +(@PATH,20,-4846.321,510.5673,48.53417,0,0,0,0,100,0), -- 07:17:35 +(@PATH,21,-4846,508.4746,49.31151,0,0,0,0,100,0), -- 07:17:42 +(@PATH,22,-4859.021,476.5473,64.16699,0,0,0,0,100,0), -- 07:17:43 +(@PATH,23,-4857.8,436.0128,60.95083,0,0,0,0,100,0), -- 07:17:50 +(@PATH,24,-4857.147,413.6607,60.26784,0,0,0,0,100,0), -- 07:17:58 +(@PATH,25,-4848.22,378.149,60.79633,0,0,0,0,100,0), -- 07:18:04 +(@PATH,26,-4843.683,354.1476,59.12819,0,0,0,0,100,0), -- 07:18:10 +(@PATH,27,-4844.921,324.3129,56.56282,0,0,0,0,100,0), -- 07:18:15 +(@PATH,28,-4848.563,297.3202,46.17633,0,0,0,0,100,0), -- 07:18:21 +(@PATH,29,-4856.53,270.7361,47.4738,0,0,0,0,100,0), -- 07:18:28 +(@PATH,30,-4881.715,240.4737,51.88027,0,0,0,0,100,0); -- 07:18:34 +-- 0x1C09FC424015BB4000001900002230F5 .go -4898.732 216.78 54.74985 + +-- Pathing for Dragonmaw Ascendant Entry: 22253 'TDB FORMAT' +SET @NPC := 52278; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-5004.888,`position_y`=702.8807,`position_z`=82.04395 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-5004.888,702.8807,82.04395,0,0,0,0,100,0), -- 07:09:09 +(@PATH,2,-5011.663,699.3098,81.89692,0,0,0,0,100,0), -- 07:09:11 +(@PATH,3,-5015.312,687.5909,82.03319,0,0,0,0,100,0), -- 07:09:13 +(@PATH,4,-4996.903,700.0056,82.65056,0,0,0,0,100,0), -- 07:09:17 +(@PATH,5,-4992.215,702.6887,83.10714,0,0,0,0,100,0), -- 07:09:19 +(@PATH,6,-4969.132,707.9535,83.95985,0,0,0,0,100,0), -- 07:09:23 +(@PATH,7,-4964.693,690.9923,83.32875,0,0,0,0,100,0), -- 07:09:25 +(@PATH,8,-4954.07,677.088,77.76302,0,0,0,0,100,0), -- 07:09:29 +(@PATH,9,-4949.576,659.408,77.40804,0,0,0,0,100,0), -- 07:09:34 +(@PATH,10,-4960.746,641.1125,76.67274,0,0,0,0,100,0), -- 07:09:37 +(@PATH,11,-4961.855,639.7071,77.21989,0,0,0,0,100,0), -- 07:09:43 +(@PATH,12,-4956.266,612.0739,75.91876,0,0,0,0,100,0), -- 07:09:47 +(@PATH,13,-4954.515,605.1003,75.18854,0,0,0,0,100,0), -- 07:09:51 +(@PATH,14,-4956.737,589.0807,74.53506,0,0,0,0,100,0), -- 07:09:54 +(@PATH,15,-4969.977,557.0493,76.5106,0,0,0,0,100,0), -- 07:09:59 +(@PATH,16,-4988.75,549.4487,83.39151,0,0,0,0,100,0), -- 07:10:01 +(@PATH,17,-4988.618,539.1655,83.00819,0,0,0,0,100,0), -- 07:10:05 +(@PATH,18,-4981.907,532.507,78.12585,0,0,0,0,100,0), -- 07:10:07 +(@PATH,19,-4959.939,531.2402,73.84925,0,0,0,0,100,0), -- 07:10:10 +(@PATH,20,-4946.729,533.6745,66.42971,0,0,0,0,100,0), -- 07:10:15 +(@PATH,21,-4926.818,538.8672,65.0467,0,0,0,0,100,0), -- 07:10:18 +(@PATH,22,-4911.734,530.0341,55.14276,0,0,0,0,100,0), -- 07:10:22 +(@PATH,23,-4898.571,547.2958,47.75196,0,0,0,0,100,0), -- 07:10:27 +(@PATH,24,-4890.054,557.7857,57.1432,0,0,0,0,100,0), -- 07:10:33 +(@PATH,25,-4876.696,566.1863,57.93503,0,0,0,0,100,0), -- 07:10:38 +(@PATH,26,-4862.715,575.6901,52.22014,0,0,0,0,100,0), -- 07:10:40 +(@PATH,27,-4858.512,594.1106,60.68968,0,0,0,0,100,0), -- 07:10:45 +(@PATH,28,-4856.906,612.0919,65.71946,0,0,0,0,100,0), -- 07:10:49 +(@PATH,29,-4854.059,628.2389,66.45804,0,0,0,0,100,0), -- 07:10:53 +(@PATH,30,-4849.357,642.4513,59.23316,0,0,0,0,100,0), -- 07:10:56 +(@PATH,31,-4839.23,658.6438,54.41743,0,0,0,0,100,0), -- 07:11:01 +(@PATH,32,-4840.304,673.9675,51.38053,0,0,0,0,100,0), -- 07:11:05 +(@PATH,33,-4849.471,676.6252,54.26706,0,0,0,0,100,0), -- 07:11:08 +(@PATH,34,-4862.514,682.0897,59.79738,0,0,0,0,100,0), -- 07:11:10 +(@PATH,35,-4880.908,688.1571,66.10199,0,0,0,0,100,0), -- 07:11:13 +(@PATH,36,-4863.878,682.674,59.87488,0,0,0,0,100,0), -- 07:11:15 +(@PATH,37,-4880.722,688.0911,66.16837,0,0,0,0,100,0), -- 07:11:22 +(@PATH,38,-4896.763,688.6787,70.71627,0,0,0,0,100,0), -- 07:11:24 +(@PATH,39,-4905.12,669.2037,74.99036,0,0,0,0,100,0), -- 07:11:28 +(@PATH,40,-4907.025,659.6029,77.51676,0,0,0,0,100,0), -- 07:11:33 +(@PATH,41,-4917.011,663.6454,73.60014,0,0,0,0,100,0), -- 07:11:35 +(@PATH,42,-4927.575,673.5298,75.48451,0,0,0,0,100,0), -- 07:11:38 +(@PATH,43,-4938.423,682.1601,78.2296,0,0,0,0,100,0), -- 07:11:41 +(@PATH,44,-4954.518,695.4416,84.32332,0,0,0,0,100,0), -- 07:11:45 +(@PATH,45,-4969.985,709.3942,83.46222,0,0,0,0,100,0), -- 07:11:51 +(@PATH,46,-4971.432,710.7948,83.43773,0,0,0,0,100,0), -- 07:11:55 +(@PATH,47,-4986.938,716.7153,82.9008,0,0,0,0,100,0); -- 07:11:58 +-- 0x1C09FC424015BB4000001900002230F7 .go -5004.888 702.8807 82.04395 + +-- Pathing for Dragonmaw Ascendant Entry: 22253 'TDB FORMAT' +SET @NPC := 52279; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-5022.057,`position_y`=479.9312,`position_z`=87.00283 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-5022.057,479.9312,87.00283,0,0,0,0,100,0), -- 20:22:29 +(@PATH,2,-5014.553,472.7912,88.03943,0,0,0,0,100,0), -- 20:22:39 +(@PATH,3,-4999.62,456.4922,87.46286,0,0,0,0,100,0), -- 20:22:47 +(@PATH,4,-4967.545,406.6447,86.09462,0,0,0,0,100,0), -- 20:22:56 +(@PATH,5,-4963.545,398.6447,85.84462,0,0,0,0,100,0), -- 20:22:56 +(@PATH,6,-4966.199,380.3893,84.58515,0,0,0,0,100,0), -- 20:23:05 +(@PATH,7,-4969.449,369.8893,84.33515,0,0,0,0,100,0), -- 20:23:05 +(@PATH,8,-4971.571,363.7757,84.01563,0,0,0,0,100,0), -- 20:23:11 +(@PATH,9,-4981.193,315.1064,82.50433,0,0,0,0,100,0), -- 20:23:18 +(@PATH,10,-4982.943,308.6064,82.00433,0,0,0,0,100,0), -- 20:23:18 +(@PATH,11,-4985.527,270.3568,80.93662,0,0,0,0,100,0), -- 20:23:31 +(@PATH,12,-4984.912,261.6664,80.87724,0,0,0,0,100,0), -- 20:23:39 +(@PATH,13,-4984.194,254.0232,80.98643,0,0,0,0,100,0), -- 20:23:41 +(@PATH,14,-4983.671,226.0687,80.50131,0,0,0,0,100,0), -- 20:23:46 +(@PATH,15,-5002.183,198.7367,80.73076,0,0,0,0,100,0), -- 20:23:54 +(@PATH,16,-4997.445,147.227,79.09719,0,0,0,0,100,0), -- 20:24:01 +(@PATH,17,-4996.195,142.477,78.59719,0,0,0,0,100,0), -- 20:24:01 +(@PATH,18,-4996.078,134.5595,77.47847,0,0,0,0,100,0), -- 20:24:06 +(@PATH,19,-4996.328,129.5595,76.97847,0,0,0,0,100,0), -- 20:24:06 +(@PATH,20,-4996.578,121.8095,76.72847,0,0,0,0,100,0), -- 20:24:06 +(@PATH,21,-4997.078,112.0595,75.97847,0,0,0,0,100,0), -- 20:24:06 +(@PATH,22,-5003.599,85.19402,76.17677,0,0,0,0,100,0), -- 20:24:13 +(@PATH,23,-5000.918,93.57802,75.89561,0,0,0,0,100,0), -- 20:24:18 +(@PATH,24,-4996.32,127.891,76.83911,0,0,0,0,100,0), -- 20:24:21 +(@PATH,25,-4996.07,133.891,77.33911,0,0,0,0,100,0), -- 20:24:21 +(@PATH,26,-4995.82,139.891,78.08911,0,0,0,0,100,0), -- 20:24:21 +(@PATH,27,-4997.385,146.7997,78.94779,0,0,0,0,100,0), -- 20:24:29 +(@PATH,28,-4998.385,151.2997,79.44779,0,0,0,0,100,0), -- 20:24:29 +(@PATH,29,-4999.885,157.0497,79.94779,0,0,0,0,100,0), -- 20:24:29 +(@PATH,30,-5000.678,159.7069,80.21076,0,0,0,0,100,0), -- 20:24:32 +(@PATH,31,-5002.248,199.0518,80.65829,0,0,0,0,100,0), -- 20:24:41 +(@PATH,32,-4983.636,226.4841,80.61127,0,0,0,0,100,0), -- 20:24:47 +(@PATH,33,-4986.27,283.0035,81.57057,0,0,0,0,100,0), -- 20:24:53 +(@PATH,34,-4980.688,317.2732,82.73731,0,0,0,0,100,0), -- 20:25:02 +(@PATH,35,-4979.188,322.0232,83.23731,0,0,0,0,100,0), -- 20:25:02 +(@PATH,36,-4976.569,330.6879,83.80838,0,0,0,0,100,0), -- 20:25:09 +(@PATH,37,-4964.715,384.6398,85.10558,0,0,0,0,100,0), -- 20:25:15 +(@PATH,38,-4969.031,409.8725,86.30847,0,0,0,0,100,0), -- 20:25:22 +(@PATH,39,-4975.031,422.3725,87.05847,0,0,0,0,100,0), -- 20:25:22 +(@PATH,40,-5003.537,460.994,88.00166,0,0,0,0,100,0), -- 20:25:31 +(@PATH,41,-5022.101,479.8282,87.23804,0,0,0,0,100,0), -- 20:25:39 +(@PATH,42,-5029.75,486.7083,86.9541,0,0,0,0,100,0); -- 20:25:54 +-- 0x1C09FC424015BB4000001A0000219932 .go -5022.057 479.9312 87.00283 + +-- Pathing for Dragonmaw Ascendant Entry: 22253 'TDB FORMAT' +SET @NPC := 52280; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-5210.222,`position_y`=418.9368,`position_z`=73.92104 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-5210.222,418.9368,73.92104,0,0,0,0,100,0), -- 07:02:01 +(@PATH,2,-5194.546,459.6038,74.90173,0,0,0,0,100,0), -- 07:02:06 +(@PATH,3,-5198.185,476.6735,74.56579,0,0,0,0,100,0), -- 07:02:16 +(@PATH,4,-5205.193,489.9176,74.52521,0,0,0,0,100,0), -- 07:02:20 +(@PATH,5,-5205.922,514.9041,74.24827,0,0,0,0,100,0), -- 07:02:25 +(@PATH,6,-5197.391,548.4199,71.05492,0,0,0,0,100,0), -- 07:02:30 +(@PATH,7,-5202.769,580.7711,57.59827,0,0,0,0,100,0), -- 07:02:35 +(@PATH,8,-5207.66,619.1582,66.18312,0,0,0,0,100,0), -- 07:02:42 +(@PATH,9,-5203.323,643.3531,69.50911,0,0,0,0,100,0), -- 07:02:50 +(@PATH,10,-5209.102,642.1717,68.62796,0,0,0,0,100,0), -- 07:02:54 +(@PATH,11,-5223.636,616.6403,64.28975,0,0,0,0,100,0), -- 07:02:59 +(@PATH,12,-5236.8,572.5868,43.20554,0,0,0,0,100,0), -- 07:03:04 +(@PATH,13,-5230.435,558.9042,52.97427,0,0,0,0,100,0), -- 07:03:14 +(@PATH,14,-5236.423,533.6864,54.42358,0,0,0,0,100,0), -- 07:03:25 +(@PATH,15,-5257.124,507.9855,45.40817,0,0,0,0,100,0), -- 07:03:31 +(@PATH,16,-5275.066,487.7511,39.84113,0,0,0,0,100,0), -- 07:03:38 +(@PATH,17,-5276.403,465.4868,50.2813,0,0,0,0,100,0), -- 07:03:44 +(@PATH,18,-5260.017,431.7862,58.83994,0,0,0,0,100,0), -- 07:03:49 +(@PATH,19,-5264.36,398.4801,59.6331,0,0,0,0,100,0), -- 07:03:58 +(@PATH,20,-5247.507,387.5706,65.87028,0,0,0,0,100,0), -- 07:04:05 +(@PATH,21,-5218.22,394.0266,74.48222,0,0,0,0,100,0), -- 07:04:10 +(@PATH,22,-5197.534,385.7352,72.49537,0,0,0,0,100,0), -- 07:04:17 +(@PATH,23,-5194.736,383.3604,72.18273,0,0,0,0,100,0), -- 07:04:22 +(@PATH,24,-5180.763,356.1179,72.43773,0,0,0,0,100,0), -- 07:04:28 +(@PATH,25,-5175.956,317.8983,74.14841,0,0,0,0,100,0), -- 07:04:33 +(@PATH,26,-5192.369,287.6161,72.80084,0,0,0,0,100,0), -- 07:04:36 +(@PATH,27,-5215.688,268.9493,70.65274,0,0,0,0,100,0), -- 07:04:43 +(@PATH,28,-5234.928,266.7101,71.72028,0,0,0,0,100,0), -- 07:04:50 +(@PATH,29,-5261.104,267.6116,66.5541,0,0,0,0,100,0), -- 07:04:53 +(@PATH,30,-5269.087,272.336,70.12495,0,0,0,0,100,0), -- 07:04:59 +(@PATH,31,-5286.044,309.7126,70.90472,0,0,0,0,100,0), -- 07:05:03 +(@PATH,32,-5281.2,352.0699,63.69888,0,0,0,0,100,0), -- 07:05:09 +(@PATH,33,-5272.806,362.6875,62.99657,0,0,0,0,100,0), -- 07:05:19 +(@PATH,34,-5246.281,400.4454,59.19219,0,0,0,0,100,0), -- 07:05:23 +(@PATH,35,-5225.892,410.2588,65.93465,0,0,0,0,100,0); -- 07:05:31 +-- 0x1C09FC424015BB4000001A0000216370 .go -5210.222 418.9368 73.92104 + +-- Pathing for Dragonmaw Ascendant Entry: 22253 'TDB FORMAT' +SET @NPC := 52281; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-5285.737,`position_y`=354.3048,`position_z`=58.63031 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-5285.737,354.3048,58.63031,0,0,0,0,100,0), -- 19:31:06 +(@PATH,2,-5294.725,316.1119,67.75787,0,0,0,0,100,0), -- 19:31:14 +(@PATH,3,-5301.147,281.1097,59.07014,0,0,0,0,100,0), -- 19:31:23 +(@PATH,4,-5304.806,249.8802,62.29091,0,0,0,0,100,0), -- 19:31:30 +(@PATH,5,-5314.573,202.0623,63.99271,0,0,0,0,100,0), -- 19:31:37 +(@PATH,6,-5314.016,154.8896,48.03545,0,0,0,0,100,0), -- 19:31:47 +(@PATH,7,-5299.288,117.1861,34.29665,0,0,0,0,100,0), -- 19:31:57 +(@PATH,8,-5306.702,135.3764,38.50175,0,0,0,0,100,0), -- 19:32:03 +(@PATH,9,-5299.126,117.1948,34.29574,0,0,0,0,100,0), -- 19:32:10 +(@PATH,10,-5283.754,81.68874,36.04304,0,0,0,0,100,0), -- 19:32:14 +(@PATH,11,-5272.062,57.64223,42.34082,0,0,0,0,100,0), -- 19:32:21 +(@PATH,12,-5264.497,27.00165,48.20856,0,0,0,0,100,0), -- 19:32:27 +(@PATH,13,-5250.226,-6.593673,46.53293,0,0,0,0,100,0), -- 19:32:36 +(@PATH,14,-5242.217,-36.79307,41.91159,0,0,0,0,100,0), -- 19:32:43 +(@PATH,15,-5227.656,-66.75511,59.73492,0,0,0,0,100,0), -- 19:32:49 +(@PATH,16,-5240.584,-40.47152,44.62254,0,0,0,0,100,0), -- 19:32:58 +(@PATH,17,-5247.443,-12.82116,46.7327,0,0,0,0,100,0), -- 19:33:05 +(@PATH,18,-5261.27,18.16552,48.98127,0,0,0,0,100,0), -- 19:33:12 +(@PATH,19,-5270.131,51.50296,42.63126,0,0,0,0,100,0), -- 19:33:19 +(@PATH,20,-5282.171,78.36816,34.01592,0,0,0,0,100,0), -- 19:33:27 +(@PATH,21,-5295.439,108.8647,33.0154,0,0,0,0,100,0), -- 19:33:33 +(@PATH,22,-5313.281,152.3893,47.28299,0,0,0,0,100,0), -- 19:33:41 +(@PATH,23,-5315.114,198.1515,63.51984,0,0,0,0,100,0), -- 19:33:50 +(@PATH,24,-5307.13,236.8966,62.42439,0,0,0,0,100,0), -- 19:34:00 +(@PATH,25,-5301.88,277.6213,59.22523,0,0,0,0,100,0), -- 19:34:11 +(@PATH,26,-5295.718,311.9755,66.89128,0,0,0,0,100,0), -- 19:34:18 +(@PATH,27,-5300.28,287.5018,64.20296,0,0,0,0,100,0), -- 19:34:20 +(@PATH,28,-5295.666,312.1795,67.10269,0,0,0,0,100,0), -- 19:34:28 +(@PATH,29,-5286.51,351.3247,58.38956,0,0,0,0,100,0), -- 19:34:31 +(@PATH,30,-5281.85,390.6465,55.83143,0,0,0,0,100,0), -- 19:34:41 +(@PATH,31,-5273.968,437.0849,54.09414,0,0,0,0,100,0), -- 19:34:48 +(@PATH,32,-5280.505,398.1873,55.13199,0,0,0,0,100,0); -- 19:35:01 +-- 0x1C09FC424015BB4000001A0000240362 .go -5285.737 354.3048 58.63031 + +-- Pathing for Dragonmaw Ascendant Entry: 22253 'TDB FORMAT' +SET @NPC := 52282; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-5026.082,`position_y`=30.3253,`position_z`=78.81156 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-5026.082,30.3253,78.81156,0,0,0,0,100,0), -- 19:59:18 +(@PATH,2,-5044.674,33.37571,80.91895,0,0,0,0,100,0), -- 19:59:19 +(@PATH,3,-5100.418,46.22721,80.36517,0,0,0,0,100,0), -- 19:59:25 +(@PATH,4,-5120.707,43.68564,79.09943,0,0,0,0,100,0), -- 19:59:35 +(@PATH,5,-5168.205,29.74817,77.34432,0,0,0,0,100,0), -- 19:59:41 +(@PATH,6,-5187.383,4.068243,74.23724,0,0,0,0,100,0), -- 19:59:48 +(@PATH,7,-5192.171,-27.60443,74.06621,0,0,0,0,100,0), -- 19:59:54 +(@PATH,8,-5187.181,-39.73703,74.54796,0,0,0,0,100,0), -- 20:00:02 +(@PATH,9,-5162.415,-82.17906,72.73651,0,0,0,0,100,0), -- 20:00:09 +(@PATH,10,-5132.202,-120.9739,65.05319,0,0,0,0,100,0), -- 20:00:16 +(@PATH,11,-5108.869,-123.2847,60.21478,0,0,0,0,100,0), -- 20:00:23 +(@PATH,12,-5065.221,-116.5905,61.09086,0,0,0,0,100,0), -- 20:00:31 +(@PATH,13,-5032.96,-83.59184,63.18661,0,0,0,0,100,0), -- 20:00:39 +(@PATH,14,-5018.273,-72.75426,67.76162,0,0,0,0,100,0), -- 20:00:48 +(@PATH,15,-5003.304,-38.36306,73.39491,0,0,0,0,100,0), -- 20:00:51 +(@PATH,16,-4982.256,-5.512026,72.68662,0,0,0,0,100,0), -- 20:01:01 +(@PATH,17,-4970.602,8.782578,71.2607,0,0,0,0,100,0), -- 20:01:08 +(@PATH,18,-4956.99,19.62778,67.81738,0,0,0,0,100,0), -- 20:01:12 +(@PATH,19,-4965.795,7.546585,69.8514,0,0,0,0,100,0), -- 20:01:16 +(@PATH,20,-4973.835,-2.793668,71.32764,0,0,0,0,100,0), -- 20:01:19 +(@PATH,21,-4995.399,-29.66144,72.97089,0,0,0,0,100,0), -- 20:01:23 +(@PATH,22,-5000.069,-61.59894,66.50253,0,0,0,0,100,0), -- 20:01:30 +(@PATH,23,-5007.126,-33.22968,75.18976,0,0,0,0,100,0), -- 20:01:36 +(@PATH,24,-5014.227,5.722984,77.4781,0,0,0,0,100,0); -- 20:01:44 +-- 0x1C09FC424015BB4000001A0000241AC7 .go -5026.082 30.3253 78.81156 diff --git a/sql/updates/world/2015_04_08_00_world.sql b/sql/updates/world/2015_04_08_00_world.sql new file mode 100644 index 00000000000..f2e13c01bd8 --- /dev/null +++ b/sql/updates/world/2015_04_08_00_world.sql @@ -0,0 +1,7 @@ +-- Kill some database errors +DELETE FROM `creature_addon` WHERE `guid` IN (52306, 52317, 52312, 52303, 52296, 127436, 127437); +UPDATE `creature` SET `spawndist`=0 WHERE `guid`=52331; +UPDATE `creature` SET `spawndist`=0 WHERE `guid`=52330; +UPDATE `creature` SET `spawndist`=0 WHERE `guid`=120692; +DELETE FROM `linked_respawn` WHERE `guid`=127436 AND `linkType`=0; +DELETE FROM `linked_respawn` WHERE `guid`=127437 AND `linkType`=0; diff --git a/sql/updates/world/2015_04_08_01_world.sql b/sql/updates/world/2015_04_08_01_world.sql new file mode 100644 index 00000000000..b96621a1fd7 --- /dev/null +++ b/sql/updates/world/2015_04_08_01_world.sql @@ -0,0 +1,16 @@ +-- Dragonmaw Tower Controller +-- Actionlist SAI +SET @ENTRY := 23370; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (@ENTRY); +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY, 0, 0,0,10,0,100,0,1,20,15000,15000,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Tower Controller - ooc los - Say Line 0"); + +-- Add text +DELETE FROM `creature_text` WHERE `entry`=23370; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextID`) VALUES +(23370, 0, 0, 'MULVERICK!', 14, 0, 100, 22, 0, 0, 'Dragonmaw Tower Controller', 21429); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=1 AND `SourceEntry`=@ENTRY; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`, `ConditionTarget`, `ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`, `ErrorTextId`,`ScriptName`,`Comment`) VALUES +(22,1,@ENTRY,0,0,31,3,22274,0,0,'','event require creature 22274'); diff --git a/sql/updates/world/2015_04_09_00_world.sql b/sql/updates/world/2015_04_09_00_world.sql new file mode 100644 index 00000000000..75b342ffd00 --- /dev/null +++ b/sql/updates/world/2015_04_09_00_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `smart_scripts` SET `action_type`=85 WHERE `entryorguid` IN (27226, 27224, 27225, 27229) AND `source_type`=0 AND `id`=0; diff --git a/sql/updates/world/2015_04_09_01_world.sql b/sql/updates/world/2015_04_09_01_world.sql new file mode 100644 index 00000000000..55da6309cbc --- /dev/null +++ b/sql/updates/world/2015_04_09_01_world.sql @@ -0,0 +1,3 @@ +-- +UPDATE `creature` SET `position_x`=3592.494, `position_y`=191.1563, `position_z`=-113.6729, `orientation`=1.22173, `VerifiedBuild`=12340 WHERE `guid`=131056; +UPDATE `creature` SET `position_x`=3611.361, `position_y`=204.7483, `position_z`=-113.6808, `orientation`=3.665191, `VerifiedBuild`=12340 WHERE `guid`=131059; diff --git a/sql/updates/world/2015_04_09_02_world.sql b/sql/updates/world/2015_04_09_02_world.sql new file mode 100644 index 00000000000..e6951cbef50 --- /dev/null +++ b/sql/updates/world/2015_04_09_02_world.sql @@ -0,0 +1,2 @@ +-- Deathbound Wards should be taunt immune +UPDATE `creature_template` SET `flags_extra` = `flags_extra` | 256 WHERE `entry` IN (37007, 38031); diff --git a/sql/updates/world/2015_04_09_03_world.sql b/sql/updates/world/2015_04_09_03_world.sql new file mode 100644 index 00000000000..041c517b861 --- /dev/null +++ b/sql/updates/world/2015_04_09_03_world.sql @@ -0,0 +1,14 @@ + +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=19380; +DELETE FROM `smart_scripts` WHERE `entryorguid`=19380 AND `source_type`=0; +DELETE FROM `creature_text` WHERE `entry` IN(19380,19383); + +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextID`, `comment`) VALUES +(19383, 0, 0, 'I don''t understand you!', 12, 7, 100, 18, 0, 0, 16540, 'Captured Gnome to Guard Untula'), +(19383, 0, 1, 'Please don''t beat me!', 12, 7, 100, 33, 0, 0, 16541, 'Captured Gnome to Guard Untula'), +(19380, 0, 0, 'Hurry up with that axe, you! I want it sharp enough to cut the wind!', 12, 1, 100, 60, 0, 1040, 16532, 'Guard Untula to 0'), +(19380, 0, 1, 'If you''re no good at fixing, we''ll see if you''re good for eating. Now WORK!', 12, 1, 100, 5, 0, 0, 16538, 'Guard Untula to 0'); + +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(19380, 0, 0, 1, 1, 0, 100, 0, 15000, 45000, 120000, 180000, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Guard Untula - OOC - Say Line 0'), +(19380, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, 19383, 0, 0, 0, 0, 0,0,'Guard Untula - OOC - Say Line 0 on Captured Gnome'); diff --git a/sql/updates/world/2015_04_10_00_world.sql b/sql/updates/world/2015_04_10_00_world.sql new file mode 100644 index 00000000000..9ca98f0f428 --- /dev/null +++ b/sql/updates/world/2015_04_10_00_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `smart_scripts` SET `event_flags`=1 WHERE `entryorguid` IN (23625,23626,23624,23623) AND `source_type`=0 AND `id`=1 AND `link`=0; diff --git a/sql/updates/world/2015_04_10_01_world.sql b/sql/updates/world/2015_04_10_01_world.sql new file mode 100644 index 00000000000..7ef397fd6cc --- /dev/null +++ b/sql/updates/world/2015_04_10_01_world.sql @@ -0,0 +1,46 @@ +DELETE FROM `smart_scripts` WHERE `entryorguid`=19995 AND `source_type`=0 AND `id`IN(3,4,5,6); +DELETE FROM `smart_scripts` WHERE `entryorguid` IN(1999500,1999501) AND `source_type`=9; + +UPDATE `creature_template` SET `AIName`='SmartAI',`ScriptName`='' WHERE `entry` IN(21241); +DELETE FROM `smart_scripts` WHERE `entryorguid`=21241 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(19995, 0, 4, 5, 75, 1, 100, 0, 0, 21241, 5, 5000, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bladespire Brute - On Creature Range - Set Phase 2'), +(19995, 0, 5, 0, 61, 0, 100, 0, 0, 0, 0, 0, 80, 1999500, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bladespire Brute - On Creature Range - Run Script'), +(19995, 0, 6, 0, 38, 0, 100, 0, 1, 1, 0, 0, 80, 1999501, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bladespire Brute - On Data Set 1 1 - Run Script 2'), +(21241, 0, 0, 1, 54, 0, 100, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Bloodmaul Brutebane Stout Trigger - On Just Summoned - Store Targetlist'), +(21241, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 100, 1, 0, 0, 0, 0, 0, 19, 19995, 0, 0, 0, 0, 0, 0, 'Bloodmaul Brutebane Stout Trigger - On Just Summoned - Send Target List to Bladespire Brute'), +(21241, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 19995, 0, 0, 0, 0, 0, 0, 'Bloodmaul Brutebane Stout Trigger - On Just Summoned - Set Data to Bladespire Brute'), +(1999500, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 19, 21241, 0, 0, 0, 0, 0, 0, 'Bladespire Brute - Script - Despawn Trigger'), +(1999500, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 5, 16, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bladespire Brute - Script - Play Emote OneShotKneel (16)'), +(1999500, 9, 2, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 70, 300, 0, 0, 0, 0, 0, 20, 184315, 0, 0, 0, 0, 0, 0, 'Bladespire Brute - Script - Despawn GO'), +(1999500, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 71, 0, 0, 2703, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bladespire Brute - Script - Update Virtual Item Slot ID 1'), +(1999500, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bladespire Brute - Script - Say Line 4'), +(1999500, 9, 5, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 5, 92, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bladespire Brute - Script - Play Emote OneShotEatNoSheathe'), +(1999500, 9, 6, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 5, 92, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bladespire Brute - Script - Play Emote OneShotEatNoSheathe'), +(1999500, 9, 7, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 5, 92, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bladespire Brute - Script - Play Emote OneShotEatNoSheathe'), +(1999500, 9, 8, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 5, 92, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bladespire Brute - Script - Play Emote OneShotEatNoSheathe'), +(1999500, 9, 9, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 5, 92, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bladespire Brute - Script - Play Emote OneShotEatNoSheathe'), +(1999500, 9, 10, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 5, 92, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bladespire Brute - Script - Play Emote OneShotEatNoSheathe'), +(1999500, 9, 11, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 5, 92, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bladespire Brute - Script - Play Emote OneShotEatNoSheathe'), +(1999500, 9, 12, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 5, 92, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bladespire Brute - Script - Play Emote OneShotEatNoSheathe'), +(1999500, 9, 13, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 5, 92, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bladespire Brute - Script - Play Emote OneShotEatNoSheathe'), +(1999500, 9, 14, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 11, 35240, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bladespire Brute - Script - Cast Bloodmaul Intoxication'), +(1999500, 9, 15, 0, 0, 0, 100, 0, 0, 0, 0, 0, 71, 0, 0, 14874, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bladespire Brute - Script - Update Virtual Item Slot ID 1'), +(1999500, 9, 16, 0, 0, 0, 100, 0, 0, 0, 0, 0, 17, 93, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bladespire Brute - Script - Set Emote State 93'), +(1999500, 9, 17, 0, 0, 0, 100, 0, 0, 0, 0, 0, 33, 21241, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Bladespire Brute - Script - Kill Credit'), +(1999500, 9, 18, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bladespire Brute - Script - Say Line 5'), +(1999500, 9, 19, 0, 0, 0, 100, 0, 30000, 30000, 0, 0, 17, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bladespire Brute - Script - Set Emote State 93'), +(1999500, 9, 20, 0, 0, 0, 100, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bladespire Brute - Script - Set Phase 1'), +(1999500, 9, 21, 0, 0, 0, 100, 0, 0, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bladespire Brute - Script - Set Aggresive'), +(1999500, 9, 22, 0, 0, 0, 100, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bladespire Brute - Script - Evade'), +(1999501, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bladespire Brute - Script 2 - Set Defensive'), +(1999501, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bladespire Brute - Script 2 - Set Set Phase 1'), +(1999501, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 19, 21241, 0, 0, 0, 0, 0, 0, 'Bladespire Brute - Script 2 - Move to Position'); + +DELETE FROM `creature_text` WHERE `entry`=19995 AND `groupid` IN(4,5); +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextID`, `comment`) VALUES +(19995, 4, 0, 'Ohh, look! Bloodmaul Brew! Mmmm...', 12, 0, 100, 16, 0, 0, 18170, 'Bladespire Brute to 21241'), +(19995, 4, 1, 'Bloodmaul Brew? Me favorite!', 12, 0, 100, 16, 0, 0, 18171, 'Bladespire Brute to 21241'), +(19995, 4, 2, 'Ohh, look! Bloodmaul Brew! Mmmm...', 12, 0, 100, 16, 0, 398, 18170, 'Bladespire Brute to 21241'), +(19995, 4, 3, 'Mmmm, Bloodmaul Brew!', 12, 0, 100, 16, 0, 0, 17844, 'Bladespire Brute to 21241'), +(19995, 5, 0, 'Ugh... Me not feel so guud.', 12, 0, 100, 92, 0, 0, 18197, 'Bladespire Brute to 21241'); diff --git a/sql/updates/world/2015_04_11_00_world.sql b/sql/updates/world/2015_04_11_00_world.sql new file mode 100644 index 00000000000..b5f9dcc48db --- /dev/null +++ b/sql/updates/world/2015_04_11_00_world.sql @@ -0,0 +1,23 @@ +DELETE FROM `creature` WHERE `guid` IN (52283, 52284, 52285, 52286, 69717, 69718, 69719, 69720); + +SET @GUID := 69717; -- 4 creature guid Set by TC +SET @OGUID := 5510; -- 1 GOB guid set by TC +DELETE FROM `creature` WHERE `id`=23142; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`,`curhealth`) VALUES +(@GUID+0, 23142, 530, 1, 1, -5121.06, 598.424, 84.7603, 0.0581088, 600, 6542), +(@GUID+1, 23142, 530, 1, 1, -5119.60, 601.834, 84.8180, 5.1726200, 600, 6542), +(@GUID+2, 23142, 530, 1, 1, -5115.02, 601.537, 85.0292, 4.0204400, 600, 6542), +(@GUID+3, 23142, 530, 1, 1, -5114.25, 597.062, 85.1574, 2.7049000, 600, 6542); + +DELETE FROM `gameobject` WHERE `guid` IN (@OGUID); +INSERT INTO `gameobject` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`animprogress`,`state`) VALUES +(@OGUID,50983,530,1,1, -5116.788574, 631.188660, 85.055522,0.949811,0,0,0.457254, 0.889336, 300, 0, 1); + +DELETE FROM `creature_equip_template` WHERE `entry`=23146; +INSERT INTO `creature_equip_template` (`entry`, `id`, `itemEntry1`, `itemEntry2`, `itemEntry3`, `VerifiedBuild`) VALUES (23146, 1, 31603, 0, 0, 0); +UPDATE `creature` SET `position_x`= -5158.237305, `position_y`= 584.302612, `position_z`= 81.074142, `orientation`= 5.954358 WHERE `guid`= 78136; +UPDATE `creature` SET `position_x`= -5156.172363, `position_y`= 590.695251, `position_z`= 80.769630, `orientation`= 5.502757 WHERE `guid`= 78135; +UPDATE `creature` SET `position_x`= -5152.365723, `position_y`= 592.303040, `position_z`= 81.361931, `orientation`= 4.705578 WHERE `guid`= 78137; +UPDATE `creature` SET `position_x`= -5113.345703, `position_y`= 623.850159, `position_z`= 86.736343, `orientation`= 1.033840 WHERE `guid`= 78160; +UPDATE `creature` SET `position_x`= -5123.593750, `position_y`= 626.638916, `position_z`= 86.629669, `orientation`= 1.395123 WHERE `guid`= 78159; +UPDATE `creature` SET `position_x`= -5165.503418, `position_y`= 568.109131, `position_z`= 80.523895, `orientation`= 2.707489 WHERE `guid`= 52107; diff --git a/sql/updates/world/2015_04_11_01_world.sql b/sql/updates/world/2015_04_11_01_world.sql new file mode 100644 index 00000000000..cf227f03976 --- /dev/null +++ b/sql/updates/world/2015_04_11_01_world.sql @@ -0,0 +1,1126 @@ +-- Add Gug +SET @ENTRY := 23144; +SET @GUID := 23428; +DELETE FROM `creature` WHERE `guid`=@GUID; +INSERT INTO `creature` (`guid`, `id`, `map`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `curhealth`) VALUES +(@GUID, @ENTRY, 530, -5119.803, 624.7665, 86.82748, 1.256637, 300, 3858); +DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY; +INSERT INTO `creature_template_addon` (`entry`, `bytes2`, `emote`) VALUES (@ENTRY, 4097, 133); + +-- Add spawns +SET @CGUID := 143596; +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+297; +INSERT INTO `creature` (`guid`, `id`, `map`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `curhealth`) VALUES +(@CGUID+0, 23146, 530, -5143.491, 515.507, 84.50488, 4.834562, 300, 88860), -- Dragonmaw Enforcer +(@CGUID+1, 23146, 530, -5162.25, 534.2803, 82.78862, 5.183628, 300, 88860), +(@CGUID+2, 23146, 530, -5160.024, 561.3785, 82.47646, 0.05235988, 300, 88860), +(@CGUID+3, 23289, 530, -5141.078, 637.8817, 36.18917, 0, 300, 4299), -- 143599 -- Mine Car +(@CGUID+4, 23289, 530, -5158.637, 727.454, 45.57201, 0, 300, 4299), -- 143600 +(@CGUID+5, 23287, 530, -5229.827, 626.3266, 48.93023, 4.223697, 300, 4299), -- 23287 (Area: 3965) -- Murkblood Miner +(@CGUID+6, 23287, 530, -5160.776, 616.7452, 36.24147, 5.044002, 300, 4299), -- 23287 (Area: 3965) +(@CGUID+7, 23287, 530, -5160.416, 658.8326, 38.73607, 3.106686, 300, 4299), -- 23287 (Area: 3965) +(@CGUID+8, 23287, 530, -5163.108, 651.5301, 37.39709, 2.460914, 300, 4299), -- 23287 (Area: 3965) +(@CGUID+9, 23287, 530, -5160.553, 678.9923, 41.02322, 2.792527, 300, 4299), -- 23287 (Area: 3965) +(@CGUID+10, 23287, 530, -5161.212, 668.8508, 40.50122, 3.281219, 300, 4299), -- 23287 (Area: 3965) +(@CGUID+11, 23287, 530, -5152.85, 621.4561, 35.87352, 5.166174, 300, 4299), -- 23287 (Area: 3965) +(@CGUID+12, 23287, 530, -5157.459, 707.9813, 42.97822, 2.75762, 300, 4299), -- 23287 (Area: 3965) +(@CGUID+13, 23287, 530, -5156.376, 687.0754, 41.27747, 2.80998, 300, 4299), -- 23287 (Area: 3965) +(@CGUID+14, 23287, 530, -5138.036, 646.6555, 36.65028, 0.2443461, 300, 4299), -- 23287 (Area: 3965) +(@CGUID+15, 23287, 530, -5144.963, 630.1486, 35.9286, 5.61996, 300, 4299), -- 23287 (Area: 3965) +(@CGUID+16, 23287, 530, -5158.104, 699.1263, 42.52824, 3.473205, 300, 4299), -- 23287 (Area: 3965) +(@CGUID+17, 23287, 530, -5139.44, 637.2499, 36.16368, 5.689773, 300, 4299), -- 23287 (Area: 3965) +(@CGUID+18, 23287, 530, -5131.758, 701.3122, 41.26741, 0.5235988, 300, 4299), -- 23287 (Area: 3965) +(@CGUID+19, 23287, 530, -5156.701, 715.8916, 43.45729, 3.106686, 300, 4299), -- 23287 (Area: 3965) +(@CGUID+20, 23287, 530, -5121.366, 693.678, 38.92881, 1.361357, 300, 4299), -- 23287 (Area: 3965) +(@CGUID+21, 23287, 530, -5097.448, 680.2379, 32.88943, 3.001966, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+22, 23287, 530, -5135.893, 721.6864, 44.35764, 0.08726646, 300, 4299), -- 23287 (Area: 3965) +(@CGUID+23, 23287, 530, -5159.912, 725.4135, 45.55035, 3.333579, 300, 4299), -- 23287 (Area: 3965) +(@CGUID+24, 23287, 530, -5140.923, 729.5199, 45.31025, 0.8726646, 300, 4299), -- 23287 (Area: 3965) +(@CGUID+25, 23287, 530, -5079.597, 669.6569, 33.3003, 3.124139, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+26, 23287, 530, -5133.994, 712.6088, 42.61035, 0.2268928, 300, 4299), -- 23287 (Area: 3965) +(@CGUID+27, 23287, 530, -5063.482, 624.7257, 27.56281, 2.338741, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+28, 23287, 530, -5080.878, 644.967, 32.68097, 2.426008, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+29, 23287, 530, -5100.418, 654.4422, 33.49445, 2.303835, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+30, 23287, 530, -5164.475, 734.2371, 47.03968, 3.438299, 300, 4299), -- 23287 (Area: 3965) +(@CGUID+31, 23287, 530, -5058.134, 647.3507, 29.36781, 2.80998, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+32, 23287, 530, -5219.054, 621.868, 47.97065, 4.310963, 300, 4299), -- 23287 (Area: 3965) +(@CGUID+33, 23287, 530, -5040.079, 627.7264, 19.75634, 2.373648, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+34, 23287, 530, -5018.824, 584.2097, 22.70727, 2.059489, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+35, 23287, 530, -4983.617, 632.3187, 20.58379, 3.054326, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+36, 23287, 530, -5019.396, 638.6277, 23.41907, 3.281219, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+37, 23287, 530, -5043.952, 595.3922, 18.24016, 2.094395, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+38, 23287, 530, -4969.858, 654.9359, 20.92751, 3.420845, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+39, 23287, 530, -4959.944, 591.9269, 12.99098, 1.989675, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+40, 23287, 530, -4968.715, 620.0629, 16.17488, 2.670354, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+41, 23287, 530, -4942.414, 582.1096, 9.914608, 2.129302, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+42, 23287, 530, -4959.944, 591.9269, 12.99098, 1.989675, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+43, 23287, 530, -4944.878, 561.5024, 7.636816, 2.094395, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+44, 23287, 530, -4921.915, 547.6068, 6.501626, 2.042035, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+45, 23287, 530, -4940.023, 535.2883, 7.127902, 1.675516, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+46, 23287, 530, -4904.557, 530.2072, 4.563097, 2.129302, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+47, 23287, 530, -4921.108, 528.4734, 6.568361, 2.042035, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+48, 23287, 530, -4887.938, 531.7214, 0.6247723, 3.054326, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+49, 23287, 530, -4965.987, 483.2187, 4.143906, 0.03490658, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+50, 23287, 530, -4918.072, 502.0591, 2.48006, 1.570796, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+51, 23287, 530, -4926.752, 455.5083, 1.527722, 1.396263, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+52, 23287, 530, -4981.036, 460.0726, 4.207428, 0.1745329, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+53, 23287, 530, -4937.384, 438.7227, 2.34031, 1.291544, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+54, 23287, 530, -4907.827, 475.5659, 0.8901013, 2.042035, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+55, 23287, 530, -4882.042, 472.4888, -3.117535, 3.228859, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+56, 23287, 530, -4941.028, 469.1831, 0.2023413, 1.064651, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+57, 23287, 530, -4950.465, 451.1373, 0.7255403, 0.9424778, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+58, 23287, 530, -4904.538, 420.0294, -5.088545, 2.443461, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+59, 23287, 530, -4959.418, 393.7061, -0.9294897, 4.520403, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+60, 23287, 530, -4956.983, 356.4414, -2.264346, 4.468043, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+61, 23287, 530, -4919.892, 307.3166, -13.13219, 3.403392, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+62, 23287, 530, -4970.338, 322.2038, -2.636889, 3.909538, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+63, 23287, 530, -4969.645, 298.882, -3.503148, 3.420845, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+64, 23287, 530, -4941.545, 294.6626, -8.814796, 3.263766, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+65, 23287, 530, -4994.479, 281.7764, -3.49516, 2.687807, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+66, 23287, 530, -5014.456, 279.3217, 0.06473933, 2.356194, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+67, 23287, 530, -4981.001, 267.0449, -6.299074, 2.565634, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+68, 23287, 530, -4966.653, 279.1325, -5.876964, 2.844887, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+69, 23287, 530, -4991.896, 300.7972, -1.304715, 3.281219, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+70, 23287, 530, -5009.957, 296.281, 2.063254, 2.792527, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+71, 23287, 530, -4973.297, 220.8183, -10.63328, 2.216568, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+72, 23287, 530, -4977.839, 252.8167, -8.2034, 2.408554, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+73, 23287, 530, -5011.099, 222.092, -10.51172, 1.815142, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+74, 23287, 530, -4995.983, 254.4959, -4.699264, 2.216568, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+75, 23287, 530, -5023.841, 241.114, -4.392029, 1.32645, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+76, 23287, 530, -5044.643, 201.4753, -11.86366, 0.8726646, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+77, 23287, 530, -5069.865, 170.6837, -9.401138, 0.8203048, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+78, 23287, 530, -5009.812, 160.8324, -14.7209, 2.75762, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+79, 23287, 530, -5067.464, 192.5109, -8.89424, 0.6457718, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+80, 23287, 530, -5041.76, 179.2009, -14.23692, 0.9599311, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+81, 23287, 530, -5051.51, 155.655, -12.63313, 1.396263, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+82, 23287, 530, -5090.02, 180.6597, -8.299232, 0.3490658, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+83, 23287, 530, -5085.621, 154.5083, -10.88531, 0.9075712, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+84, 23287, 530, -5056.444, 120.8188, -17.15018, 2.059489, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+85, 23287, 530, -5068.56, 141.5665, -13.4759, 1.082104, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+86, 23287, 530, -5115.295, 147.5993, -11.40529, 0.6457718, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+87, 23287, 530, -5109.351, 129.4899, -13.61424, 0.6283185, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+88, 23287, 530, -5107.625, 169.4426, -8.387082, 0.3490658, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+89, 23287, 530, -5118.663, 105.1847, -12.59805, 1.256637, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+90, 23287, 530, -5149.458, 152.029, -12.39146, 6.178465, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+91, 23287, 530, -5174.084, 155.2752, -12.23319, 6.021386, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+92, 23287, 530, -5198.479, 157.0766, -13.41456, 0.4712389, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+93, 23287, 530, -5178.485, 174.8304, -11.48918, 5.340707, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+94, 23287, 530, -5198.593, 202.2049, -13.6357, 5.113815, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+95, 23287, 530, -5189.779, 135.4848, -12.0408, 0.6806784, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+96, 23287, 530, -5229.695, 136.8613, -13.63386, 0.5585054, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+97, 23287, 530, -5218.991, 222.2088, -11.34154, 5.218534, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+98, 23287, 530, -5220.694, 199.7151, -12.80523, 5.951573, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+99, 23287, 530, -5247.149, 212.4612, -13.82043, 5.637414, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+100, 23287, 530, -5241.209, 231.7721, -11.93106, 5.51524, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+101, 23287, 530, -5023.841, 241.114, -4.392029, 1.32645, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+102, 23287, 530, -4937.384, 438.7227, 2.34031, 1.291544, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+103, 23287, 530, -4940.023, 535.2883, 7.127902, 1.675516, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+104, 23287, 530, -4959.944, 591.9269, 12.99098, 1.989675, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+105, 23287, 530, -4950.465, 451.1373, 0.7255403, 0.9424778, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+106, 23287, 530, -4991.896, 300.7972, -1.304715, 3.281219, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+107, 23287, 530, -4970.338, 322.2038, -2.636889, 3.909538, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+108, 23287, 530, -4969.645, 298.882, -3.503148, 3.420845, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+109, 23287, 530, -5069.865, 170.6837, -9.401138, 0.8203048, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+110, 23287, 530, -4959.418, 393.7061, -0.9294897, 4.520403, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+111, 23287, 530, -4926.752, 455.5083, 1.527722, 1.396263, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+112, 23287, 530, -4940.023, 535.2883, 7.127902, 1.675516, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+113, 23287, 530, -4921.108, 528.4734, 6.568361, 2.042035, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+114, 23287, 530, -4904.557, 530.2072, 4.563097, 2.129302, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+115, 23287, 530, -4983.617, 632.3187, 20.58379, 3.054326, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+116, 23287, 530, -4956.983, 356.4414, -2.264346, 4.468043, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+117, 23287, 530, -4965.987, 483.2187, 4.143906, 0.03490658, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+118, 23287, 530, -4941.028, 469.1831, 0.2023413, 1.064651, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+119, 23287, 530, -4940.023, 535.2883, 7.127902, 1.675516, 300, 4299), -- 23287 (Area: 3965) (Auras: 31261 - 31261) +(@CGUID+120, 23287, 530, -5178.181, 642.9128, 39.79438, 1.919862, 300, 4299), -- 23287 (Area: 3965) +(@CGUID+121, 23287, 530, -5187.549, 638.7712, 41.74369, 1.954769, 300, 4299), -- 23287 (Area: 3965) +(@CGUID+122, 23287, 530, -5170.539, 614.4111, 37.59125, 4.921828, 300, 4299), -- 23287 (Area: 3965) +(@CGUID+123, 23287, 530, -5186.184, 617.5848, 42.23409, 4.34587, 300, 4299), -- 23287 (Area: 3965) +(@CGUID+124, 23287, 530, -5219.594, 636.9407, 48.11805, 1.605703, 300, 4299), -- 23287 (Area: 3965 +(@CGUID+125, 23287, 530, -5209.468, 636.0561, 45.94989, 1.780236, 300, 4299), -- 23287 (Area: 3965) +(@CGUID+126, 23287, 530, -5209.135, 619.5105, 46.42957, 4.502949, 300, 4299), -- 23287 (Area: 3965) +(@CGUID+127, 23287, 530, -5197.959, 636.2016, 44.08671, 1.64061, 300, 4299), -- 23287 (Area: 3965) +(@CGUID+128, 23287, 530, -5195.912, 618.5502, 44.35371, 4.555309, 300, 4299), -- 23287 (Area: 3965) +(@CGUID+129, 23169, 530, -5009.558, 687.8375, 18.86654, 1.480325, 300, 4299), -- 23169 (Area: 3965) -- Nethermine Flayer +(@CGUID+130, 23169, 530, -4967.988, 620.9315, 15.97108, 4.676374, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+131, 23169, 530, -4958.076, 598.2208, 13.32545, 5.52459, 300, 4299), -- 23169 (Area: 3965) (Auras: ) +(@CGUID+132, 23169, 530, -4979.914, 633.551, 20.30668, 2.572264, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+133, 23169, 530, -5013.305, 639.0559, 23.55437, 1.450203, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+134, 23169, 530, -4966.186, 655.6455, 20.22517, 2.583087, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+135, 23169, 530, -5010.128, 689.9114, 18.92688, 5.894914, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+136, 23169, 530, -4979.914, 633.551, 20.30668, 2.465721, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+137, 23169, 530, -5013.305, 639.0559, 23.55437, 1.212913, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+138, 23169, 530, -4958.076, 598.2208, 13.32545, 5.791277, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+139, 23169, 530, -4979.914, 633.551, 20.30668, 5.372581, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+140, 23169, 530, -5010.128, 689.9114, 18.92688, 6.151822, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+141, 23169, 530, -4966.186, 655.6455, 20.22517, 5.770682, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+142, 23169, 530, -4958.076, 598.2208, 13.32545, 5.80118, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+143, 23169, 530, -5013.305, 639.0559, 23.55437, 1.466077, 300, 4299), -- 23169 (Area: 3965 +(@CGUID+144, 23169, 530, -4919.305, 584.1595, 5.835848, 5.860526, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+145, 23169, 530, -4945.825, 567.2396, 8.357429, 4.963535, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+146, 23169, 530, -4920.444, 554.3483, 6.81108, 1.592739, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+147, 23169, 530, -4885.112, 529.7742, -0.07188316, 3.104875, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+148, 23169, 530, -4905.904, 531.3935, 4.766143, 4.255386, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+149, 23169, 530, -4958.076, 598.2208, 13.32545, 2.345144, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+150, 23169, 530, -4946.532, 565.8182, 8.39564, 2.171958, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+151, 23169, 530, -4971.019, 481.9048, 4.255131, 5.742048, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+152, 23169, 530, -4978.048, 461.4908, 3.580604, 1.284639, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+153, 23169, 530, -4910.448, 466.246, 1.150314, 4.61044, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+154, 23169, 530, -4922.486, 452.6082, 1.741542, 1.848747, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+155, 23169, 530, -4883.248, 474.9959, -2.790574, 0.4947965, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+156, 23169, 530, -4954.734, 439.9607, 2.19193, 0.7067229, 300, 4299), -- 23169 (Area: 3965) (Auras: ) +(@CGUID+157, 23169, 530, -4917.937, 430.3383, -1.619577, 5.612211, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+158, 23169, 530, -4958.768, 351.7107, -2.247269, 1.772254, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+159, 23169, 530, -5038.031, 350.875, 2.62308, 3.72062, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+160, 23169, 530, -4973.916, 319.2121, -2.417306, 1.525316, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+161, 23169, 530, -4931.086, 298.9532, -11.71306, 3.185381, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+162, 23169, 530, -5005.922, 290.7715, 0.05161196, 0.369805, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+163, 23169, 530, -5039.163, 319.1835, -3.561619, 3.754901, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+164, 23169, 530, -5010.779, 274.0312, -1.596922, 4.01841, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+165, 23169, 530, -4954.379, 295.0413, -5.898067, 2.82695, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+166, 23169, 530, -4991.504, 250.8047, -5.723885, 4.988063, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+167, 23169, 530, -5062.854, 293.8755, -8.149835, 3.967818, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+168, 23169, 530, -5018.055, 224.3272, -10.22529, 0.6886171, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+169, 23169, 530, -4976.179, 227.3799, -10.6006, 0.5956746, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+170, 23169, 530, -4935.262, 463.8304, 0.3223694, 0.1625037, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+171, 23169, 530, -4922.94, 501.7582, 2.849531, 5.342018, 300, 4299), -- 23169 (Area: 3965) (Auras: ) +(@CGUID+172, 23169, 530, -4975.554, 269.0946, -6.799523, 5.499429, 300, 4299), -- 23169 (Area: 3965) (Auras: ) +(@CGUID+173, 23169, 530, -4960.398, 355.0888, -1.787407, 5.133213, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+174, 23169, 530, -5016.044, 224.2127, -10.37248, 2.795499, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+175, 23169, 530, -5060.153, 197.7174, -9.609101, 3.258459, 300, 4299), -- 23169 (Area: 3965) (Auras: ) +(@CGUID+176, 23169, 530, -5049.03, 166.6831, -12.72408, 2.162152, 300, 4299), -- 23169 (Area: 3965) (Auras: ) +(@CGUID+177, 23169, 530, -4991.019, 249.8632, -5.817747, 2.753308, 300, 4299), -- 23169 (Area: 3965) (Auras: ) +(@CGUID+178, 23169, 530, -4977.148, 226.7941, -10.30185, 2.419013, 300, 4299), -- 23169 (Area: 3965) (Auras: ) +(@CGUID+179, 23169, 530, -5002.327, 291.3423, -0.9251177, 3.278219, 300, 4299), -- 23169 (Area: 3965) (Auras: ) +(@CGUID+180, 23169, 530, -5074.881, 159.3353, -10.2591, 1.89717, 300, 4299), -- 23169 (Area: 3965) (Auras: ) +(@CGUID+181, 23169, 530, -5094.841, 177.7091, -8.408723, 4.038786, 300, 4299), -- 23169 (Area: 3965) (Auras: ) +(@CGUID+182, 23169, 530, -5059.071, 126.2977, -16.5597, 5.170018, 300, 4299), -- 23169 (Area: 3965) (Auras: ) +(@CGUID+183, 23169, 530, -5109.454, 127.173, -13.81656, 1.71806, 300, 4299), -- 23169 (Area: 3965) (Auras: ) +(@CGUID+184, 23169, 530, -4954.41, 294.5933, -5.898048, 0.8626862, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+185, 23169, 530, -5116.198, 103.0558, -12.65989, 4.638427, 300, 4299), -- 23169 (Area: 3965) (Auras: ) +(@CGUID+186, 23169, 530, -5143.03, 145.8997, -12.47764, 2.741143, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+187, 23169, 530, -5110.538, 154.916, -10.57434, 1.115047, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+188, 23169, 530, -5047.887, 169.4041, -12.75727, 4.620065, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+189, 23169, 530, -5003.257, 159.8983, -14.73863, 0.2256795, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+190, 23169, 530, -5009.199, 275.662, -1.798863, 0.7142927, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+191, 23169, 530, -4975.545, 227.9456, -10.74416, 0.6228198, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+192, 23169, 530, -4991.768, 250.8438, -5.681248, 2.223132, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+193, 23169, 530, -5062.847, 293.5673, -8.190778, 4.098309, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+194, 23169, 530, -5001.911, 292.2764, -0.9095231, 1.151772, 300, 4299), -- 23169 (Area: 3965 +(@CGUID+195, 23169, 530, -4971.963, 318.408, -2.593545, 1.286586, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+196, 23169, 530, -5037.165, 349.7794, 2.602906, 3.60786, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+197, 23169, 530, -4932.7, 299.3089, -11.32172, 1.003917, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+198, 23169, 530, -5040.047, 317.9085, -4.035919, 4.635794, 300, 4299), -- 23169 (Area: 396 +(@CGUID+199, 23169, 530, -4957.847, 405.2784, 0.9240213, 3.046554, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+200, 23169, 530, -4948.438, 460.1876, 0.1027715, 0.9935466, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+201, 23169, 530, -4917.532, 431.2552, -1.466718, 2.644402, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+202, 23169, 530, -4955.563, 438.1111, 2.453238, 3.585394, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+203, 23169, 530, -4924.495, 453.2117, 1.67316, 0.4023848, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+204, 23169, 530, -4978.226, 457.8618, 3.579613, 5.989014, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+205, 23169, 530, -4910.379, 470.4026, 0.8641118, 1.141848, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+206, 23169, 530, -4970.949, 480.7429, 4.06482, 5.434553, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+207, 23169, 530, -4885.628, 472.7194, -2.342252, 6.117043, 300, 4299), -- 23169 (Area: 396 +(@CGUID+208, 23169, 530, -4919.86, 502.4582, 2.580096, 3.676699, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+209, 23169, 530, -4919.363, 552.8414, 6.88634, 6.262745, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+210, 23169, 530, -4946.429, 566.189, 8.320451, 0.8319092, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+211, 23169, 530, -4884.078, 530.2368, -0.2521183, 4.288206, 300, 4299), -- 23169 (Area: 396 +(@CGUID+212, 23169, 530, -4934.582, 535.1161, 6.564591, 4.536118, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+213, 23169, 530, -4906.604, 532.5593, 4.957226, 1.968214, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+214, 23169, 530, -4920.163, 587.0939, 6.468598, 2.24315, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+215, 23169, 530, -4959.686, 596.4736, 13.12449, 5.048675, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+216, 23169, 530, -4978.36, 633.9875, 19.98329, 0.7612703, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+217, 23169, 530, -4962.661, 656.2208, 19.60664, 2.322476, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+218, 23169, 530, -5015.241, 641.3285, 23.3768, 3.365274, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+219, 23169, 530, -5010.128, 689.9114, 18.78944, 2.978981, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+220, 23169, 530, -5077.739, 333.02, 5.179652, 2.509581, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+221, 23169, 530, -5019.065, 222.1603, -10.62667, 4.953171, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+222, 23169, 530, -4979.019, 269.4832, -6.478584, 3.350721, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+223, 23169, 530, -5058.351, 196.9229, -9.941554, 5.702285, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+224, 23169, 530, -5092.194, 181.7484, -8.519144, 6.063996, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+225, 23169, 530, -5071.979, 158.8044, -10.67218, 0.01778779, 300, 4299), -- 23169 (Area: 3965) +(@CGUID+226, 23326, 530, -5001.687, 643.4487, 22.84591, 5.311926, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) -- nethermine ravager +(@CGUID+227, 23326, 530, -5016.762, 689.4977, 18.98941, 4.254198, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+228, 23326, 530, -4948.338, 574.87, 9.780287, 5.182978, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+229, 23326, 530, -4978.119, 622.5638, 18.00215, 2.614223, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+230, 23326, 530, -4967.506, 658.9974, 20.74481, 3.170801, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+231, 23326, 530, -4957.431, 584.6068, 12.20244, 1.852743, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+232, 23326, 530, -5005.486, 644.3996, 22.76456, 1.884956, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+233, 23326, 530, -5015.393, 692.0869, 18.86917, 2.075273, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+234, 23326, 530, -4967.506, 658.9974, 20.74481, 0.5888432, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+235, 23326, 530, -4978.119, 622.5638, 18.00215, 1.621879, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+236, 23326, 530, -5005.486, 644.3996, 22.76456, 1.646531, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+237, 23326, 530, -5015.393, 692.0869, 18.86917, 3.379317, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+238, 23326, 530, -4951.823, 581.4465, 11.22198, 2.676563, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+239, 23326, 530, -4946.557, 579.6539, 10.15224, 1.13619, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+240, 23326, 530, -4928.474, 480.4054, -0.1783632, 0.9677349, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+241, 23326, 530, -4918.411, 483.8331, 0.07626688, 2.36952, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+242, 23326, 530, -4921.181, 439.6729, 0.8384005, 0.5438383, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+243, 23326, 530, -4952.597, 401.4749, -0.3538051, 3.418738, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+244, 23326, 530, -4868.084, 531.6934, -1.683346, 3.018919, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+245, 23326, 530, -4965.881, 349.554, -1.536497, 4.615863, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+246, 23326, 530, -4971.478, 304.6561, -3.048606, 5.414115, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+247, 23326, 530, -4953.476, 284.0535, -6.819366, 4.314682, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+248, 23326, 530, -5014.135, 288.1924, 1.793531, 5.620615, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+249, 23326, 530, -4962.295, 381.2368, -1.744818, 4.602769, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+250, 23326, 530, -4995.37, 236.0123, -7.475551, 5.915942, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+251, 23326, 530, -5046.238, 204.7434, -11.17455, 0.3013434, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+252, 23326, 530, -5015.046, 264.2135, -0.9630037, 4.380797, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+253, 23326, 530, -5054.073, 191.3642, -11.12945, 4.913056, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+254, 23326, 530, -5068.295, 161.4686, -10.65775, 3.185342, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+255, 23326, 530, -5084.805, 170.5898, -8.363562, 2.470629, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+256, 23326, 530, -5118.899, 113.8509, -12.95813, 1.053266, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+257, 23326, 530, -5121.38, 140.2108, -12.24173, 4.717645, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+258, 23326, 530, -5028.928, 162.4327, -14.69674, 4.598915, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+259, 23326, 530, -5013.326, 287.5868, 1.554583, 2.353504, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+260, 23326, 530, -5162.3, 147.2595, -13.68486, 2.213196, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+261, 23326, 530, -5195.16, 185.9774, -12.47411, 2.135337, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+262, 23326, 530, -5185.331, 154.8984, -12.49722, 5.532097, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+263, 23326, 530, -5028.03, 163.2786, -14.87766, 0.7552983, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+264, 23326, 530, -5055.308, 191.3719, -10.81202, 0.5039104, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+265, 23326, 530, -4995.011, 236.3476, -7.462594, 6.063029, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+266, 23326, 530, -5037.676, 207.097, -11.84669, 3.400416, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+267, 23326, 530, -5038.441, 207.0967, -11.75817, 3.849093, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732 +(@CGUID+268, 23326, 530, -4949.182, 294.4462, -6.966339, 0.678574, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+269, 23326, 530, -4973.03, 308.0056, -2.714836, 1.892263, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+270, 23326, 530, -4967.495, 349.8932, -1.395857, 2.333905, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+271, 23326, 530, -4950.731, 403.7043, -0.1075567, 0.8233353, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+272, 23326, 530, -4921.817, 439.4337, 0.8760551, 3.996498, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+273, 23326, 530, -4906.549, 472.265, 0.7405176, 2.369046, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+274, 23326, 530, -4942.342, 455.2948, 0.785726, 3.048413, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+275, 23326, 530, -4927.634, 480.4459, -0.2140773, 3.812036, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+276, 23326, 530, -4917.617, 533.3819, 6.377127, 4.497816, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+277, 23326, 530, -4947.289, 577.6053, 9.956731, 4.047926, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+278, 23326, 530, -4916.31, 586.3352, 5.467452, 0.6311421, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+279, 23326, 530, -4979.853, 626.7228, 18.89969, 2.537099, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+280, 23326, 530, -4968.971, 659.8459, 20.95211, 0.4729249, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+281, 23326, 530, -5002.798, 646.2766, 22.85282, 0.4368325, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+282, 23326, 530, -5084.679, 170.6154, -8.364773, 2.919591, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+283, 23326, 530, -5069.651, 161.7928, -10.45241, 3.358221, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+284, 23326, 530, -5122.319, 139.8094, -12.27753, 4.208749, 300, 3224), -- 23326 (Area: 3965) (Auras: 32732 - 32732) +(@CGUID+285, 23309, 530, -4860.765, 468.7788, -5.74204, 4.24115, 300, 4299), -- 23309 (Area: 3965) -- murkblood overseer +(@CGUID+286, 23324, 530, -5196.179, 166.8186, -12.59387, 4.930552, 300, 4299), -- 23324 (Area: 3965) (Auras: 40743 - 40743) Crazed Murkblood Miner +(@CGUID+287, 23324, 530, -5210.658, 146.5081, -14.06982, 3.909939, 300, 4299), -- 23324 (Area: 3965) (Auras: 40743 - 40743) +(@CGUID+288, 23324, 530, -5178.911, 173.927, -11.54059, 1.130439, 300, 4299), -- 23324 (Area: 3965) (Auras: 40743 - 40743) (possible waypoints or random movement) +(@CGUID+289, 23324, 530, -5192.216, 133.6122, -12.00781, 2.232028, 300, 4299), -- 23324 (Area: 3965) (possible waypoints or random movement) +(@CGUID+290, 23324, 530, -5179.031, 152.351, -12.46348, 4.376995, 300, 4299), -- 23324 (Area: 3965) (possible waypoints or random movement) +(@CGUID+291, 23324, 530, -5236.018, 198.761, -13.93909, 1.100167, 300, 4299), -- 23324 (Area: 3965) (Auras: 40743 - 40743) +(@CGUID+292, 23324, 530, -5210.276, 207.8238, -12.79146, 1.512519, 300, 4299), -- 23324 (Area: 3965) (Auras: 40743 - 40743) (possible waypoints or random movement) +(@CGUID+293, 23324, 530, -5230.436, 213.0719, -12.7647, 4.868175, 300, 4299), -- 23324 (Area: 3965) (Auras: 40743 - 40743) (possible waypoints or random movement) +(@CGUID+294, 23324, 530, -5254.496, 210.4873, -13.75615, 5.228326, 300, 4299), -- 23324 (Area: 3965) (Auras: 40743 - 40743) (possible waypoints or random movement) +(@CGUID+295, 23324, 530, -5224.815, 227.1456, -10.97935, 5.068825, 300, 4299), -- 23324 (Area: 3965) (possible waypoints or random movement) +(@CGUID+296, 23305, 530, -5223.799, 139.1362, -13.6459, 5.91905, 300, 4299), -- 23305 (Area: 3965) (Auras: 40743 - 40743) (possible waypoints or random movement) Crazed Murkblood Foreman +(@CGUID+297, 23305, 530, -5247.993, 226.5564, -12.5696, 3.970754, 300, 4299); -- 23305 (Area: 3965) (Auras: 40743 - 40743) + +-- Remove dubble spawns +DELETE FROM `creature` WHERE `guid` IN (143638, 143631, 143641, 143643, 143642, 143714, 143707, 143701, 143649, 143706, 143656, 143658, 143659, 143665, 48234, 48235, 48236, 48237, 48241, 48240, 48239, 48238, 48242, 48243, 48229, 48232, 48233, 48231, 48230, 48245, 48244, 48251, 48246, 48248, 48247, 48253, 48252, 48256, 48255, 48254, 48249, 48250, 143880, 143820, 143878, 143820, 143776, 143820, 143847, 143860, 143784, 143771, 143862, 143817, 143770, 143774, 143765, 143773, 143772, 143786, 143855, 143758, 143775, 143818, 143761, 143793, 143842, 143791, 143866, 143754, 143867, 143752, 143797, 143868, 143750, 143749, 143803, 143836, 143748, 143747, 143804, 143744, 143807, 143805, 143740, 143741, 143806, 143824, 143873, 143835, 143727, 143738, 143734, 143825, 143831, 143728, 143812, 143835, 143730, 143813, 143826, 143828, 143739, 143814, 143729, 143823, 143829, 143725, 143736, 143815, 143832, 143830, 143732, 143811, 52032, 143792, 143759, 143789, 52021, 52023, 52022, 52020, 52024, 52016, 52017, 52018, 52015, 52014,52019, 48257, 52013, 52011, 52012, 48258, 52030, 52031, 143762, 143846); + +-- update spawn distance +UPDATE `creature` SET `spawndist`=4 WHERE `id` IN (23326, 23169); +UPDATE `creature` SET `MovementType`=1 WHERE `id` IN (23326, 23169); + +-- Change weapons are sheathed for 23376 +SET @ENTRY := 23376; +DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY; +INSERT INTO `creature_template_addon` (`entry`) VALUES (@ENTRY); + +-- Remove existing mine cars +DELETE FROM `creature` WHERE `guid` IN (370643, 52334, 52335); + +-- Make Murkblood Miner spawn dead +DELETE FROM `creature_template_addon` WHERE `entry`=23287; +INSERT INTO `creature_template_addon` (`entry`, `bytes1`, `bytes2`, `auras`) VALUES (23287, 0, 1, 31261); + +-- Add aura to nethermine ravager +DELETE FROM `creature_template_addon` WHERE `entry`=23326; +INSERT INTO `creature_template_addon` (`entry`, `bytes1`, `bytes2`, `auras`) VALUES (23326, 0, 0, 32732); + +-- Mine Car SAI +SET @ENTRY := 23289; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,25,0,100,0,0,0,0,0,11,40684,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mine Car - On Reset - Cast 'Mine Cart'"), +(@ENTRY,0,1,0,38,0,100,0,1,1,0,0,103,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mine Car - On Data Set 1 1 - Set Rooted On"), +(@ENTRY,0,2,0,38,0,100,0,1,0,0,0,65,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Mine Car - On Data Set 1 0 - Resume Waypoint"); + +-- Dragonmaw Foreman SAI +SET @ENTRY := 23376; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,143599,23289,0,0,0,0,0,"Dragonmaw Foreman - In Combat - Set Data 1 1"), +(@ENTRY,0,1,0,25,0,100,0,0,0,0,0,45,1,0,0,0,0,0,10,143599,23289,0,0,0,0,0,"Dragonmaw Foreman - On Reset - Set Data 1 0"), +(@ENTRY,0,2,0,25,0,100,0,0,0,0,0,45,1,0,0,0,0,0,10,143600,23289,0,0,0,0,0,"Dragonmaw Foreman - On Reset - Set Data 1 0"), +(@ENTRY,0,3,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,143600,23289,0,0,0,0,0,"Dragonmaw Foreman - In Combat - Set Data 1 1"); + +-- Crazed Murkblood Miner SAI +SET @ENTRY := 23324; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,0,60000,120000,60000,120000,11,40743,0,0,0,0,0,1,0,0,0,0,0,0,0,"Crazed Murkblood Miner - Out of Combat - Cast 'Frenzy'"); + +-- Crazed Murkblood Foreman SAI +SET @ENTRY := 23305; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,0,60000,120000,60000,120000,11,40743,0,0,0,0,0,1,0,0,0,0,0,0,0,"Crazed Murkblood Foreman - Out of Combat - Cast 'Frenzy'"); + +-- Add creature addon +DELETE FROM `creature_addon` WHERE `guid` IN (143601, 143628, 143720, 143721, 143724, 143719, 143718, 143602, 143607, 143611, 143613, 143610, 143616, 143614, 143622, 143618, 143620, 143626, 143619, 143615, 143612, 143609, 1436058, 143606, 143603, 143604, 143716, 143717, 143723, 143605, 143722); +INSERT INTO `creature_addon` (`guid`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES +(143601, 0, 1, 233, NULL), +(143628, 0, 1, 233, NULL), +(143720, 0, 1, 233, NULL), +(143721, 0, 1, 233, NULL), +(143724, 0, 1, 233, NULL), +(143719, 0, 1, 233, NULL), +(143718, 0, 1, 233, NULL), +(143602, 0, 1, 233, NULL), +(143607, 0, 1, 233, NULL), +(143611, 0, 1, 233, NULL), +(143613, 0, 1, 233, NULL), +(143610, 0, 1, 233, NULL), +(143616, 0, 1, 233, NULL), +(143614, 0, 1, 233, NULL), +(143622, 0, 1, 233, NULL), +(143618, 0, 1, 233, NULL), +(143620, 0, 1, 233, NULL), +(143626, 0, 1, 233, NULL), +(143619, 0, 1, 233, NULL), +(143615, 0, 1, 233, NULL), +(143612, 0, 1, 233, NULL), +(143609, 0, 1, 233, NULL), +(143605, 0, 1, 233, NULL), +(143606, 0, 1, 233, NULL), +(143603, 0, 1, 233, NULL), +(143604, 0, 1, 233, NULL), +(143716, 0, 1, 233, NULL), +(143717, 0, 1, 233, NULL), +(143723, 0, 1, 233, NULL), +(143722, 0, 1, 233, NULL); + +-- Update position +UPDATE `creature` SET `position_x`=-5165.002, `position_y`=534.0313, `position_z`=82.90166, `orientation`=3.857178 WHERE `guid`=52106; +UPDATE `creature` SET `position_x`=-5146.481, `position_y`=517.6528, `position_z`=85.1688, `orientation`=3.351032 WHERE `guid`=52109; +UPDATE `creature` SET `position_x`=-5166.383, `position_y`=563.9937, `position_z`=80.58907, `orientation`=3.211406 WHERE `guid`=52107; +UPDATE `creature` SET `position_x`=-5128.689, `position_y`=579.8379, `position_z`=85.25567, `orientation`=0.2617994 WHERE `guid`=52112; +UPDATE `creature` SET `position_x`=-5133.728, `position_y`=591.6107, `position_z`=84.34083, `orientation`=0.08726646 WHERE `guid`=52111; +UPDATE `creature` SET `position_x`=-5103.687, `position_y`=585.6875, `position_z`=85.79736, `orientation`=2.111848 WHERE `guid`=52114; +UPDATE `creature` SET `position_x`=-5079.457, `position_y`=538.1425, `position_z`=86.41579, `orientation`=5.5676 WHERE `guid`=52231; +UPDATE `creature` SET `position_x`=-5094.562, `position_y`=596.6859, `position_z`=86.2102, `orientation`=2.617994 WHERE `guid`=52115; +UPDATE `creature` SET `position_x`=-5102.299, `position_y`=623.4721, `position_z`=86.07585, `orientation`=1.413717 WHERE `guid`=52113; +UPDATE `creature` SET `position_x`=-5089.073, `position_y`=616.179, `position_z`=85.79301, `orientation`=1.082104 WHERE `guid`=52230; +UPDATE `creature` SET `position_x`=-5162.11, `position_y`=629.679, `position_z`=79.66261, `orientation`=2.199115 WHERE `guid`=52108; +UPDATE `creature` SET `position_x`=-5146.516, `position_y`=639.3836, `position_z`=81.87501, `orientation`=2.321288 WHERE `guid`=52110; + +-- Update position Ronag the slave driver +UPDATE `creature` SET `position_x`=-5161.059, `position_y`=288.1674, `position_z`=-27.11326, `orientation`=5.078908 WHERE `guid`=40729; + +-- Update mistress of the mine positions +UPDATE `creature` SET `position_x`=-5254.184, `position_y`=628.4734, `position_z`=48.99072, `orientation`=2.617994 WHERE `guid`=88898; + +-- Update toranaku position +UPDATE `creature` SET `position_x`=-5133.719, `position_y`=227.1979, `position_z`=-26.26821, `orientation`=2.059489 WHERE `guid`=40740; + +-- Update murkblood overseer positions +UPDATE `creature` SET `position_x`=-4898.184, `position_y`=411.9311, `position_z`=-5.810406, `orientation`=3.368485 WHERE `guid`=43919; +UPDATE `creature` SET `position_x`=-4907.272, `position_y`=314.5579, `position_z`=-12.17146, `orientation`=1.518436 WHERE `guid`=40742; +UPDATE `creature` SET `position_x`=-4961.051, `position_y`=211.6252, `position_z`=-10.97874, `orientation`=4.031711 WHERE `guid`=42566; +UPDATE `creature` SET `position_x`=-4979.739, `position_y`=161.6144, `position_z`=-15.42497, `orientation`=2.670354 WHERE `guid`=48228; + +-- Add missing mistress of the mine +SET @ENTRY := 23149; +SET @GUID := 23430; +DELETE FROM `creature` WHERE `guid`=@GUID; +INSERT INTO `creature` (`guid`, `id`, `map`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `curhealth`) VALUES +(@GUID, @ENTRY, 530, -5165.22, 757.3012, 49.79086, 2.932153, 25, 104790); + +DELETE FROM `creature_addon` WHERE `guid` IN (143846, 143847, 52283, 23144); + +DELETE FROM `creature_formations` WHERE `leaderGUID`=143599; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(143599, 143599, 0, 0, 1), +(143599, 52345, 2, 0, 2); + +-- Pathing for Mine Car Entry: 23289 'TDB FORMAT' +SET @NPC := 143599; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-5141.078,`position_y`=637.8817,`position_z`=36.18917 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-5141.078,637.8817,36.18917,0,0,0,0,100,0), -- 17:08:25 +(@PATH,2,-5140.013,643.7603,36.68985,0,0,0,0,100,0), -- 17:08:26 +(@PATH,3,-5139.763,645.5103,36.93985,0,0,0,0,100,0), -- 17:08:26 +(@PATH,4,-5139.761,650.6669,37.334,0,0,0,0,100,0), -- 17:08:30 +(@PATH,5,-5140.261,653.6669,37.834,0,0,0,0,100,0), -- 17:08:30 +(@PATH,6,-5140.511,657.9169,38.084,0,0,0,0,100,0), -- 17:08:30 +(@PATH,7,-5147.932,667.6057,41.11486,0,0,0,0,100,0), -- 17:08:36 +(@PATH,8,-5151.682,670.6057,41.36486,0,0,0,0,100,0), -- 17:08:36 +(@PATH,9,-5154.71,670.9447,41.20504,0,0,0,0,100,0), -- 17:08:42 +(@PATH,10,-5157.904,664.1409,40.12909,0,0,0,0,100,0), -- 17:08:44 +(@PATH,11,-5157.904,660.6409,39.87909,0,0,0,0,100,0), -- 17:08:44 +(@PATH,12,-5161.058,651.3033,37.78137,0,0,0,0,100,0), -- 17:08:49 +(@PATH,13,-5164.057,648.1979,37.81743,0,0,0,0,100,0), -- 17:08:51 +(@PATH,14,-5165.057,647.4479,37.56743,0,0,0,0,100,0), -- 17:08:51 +(@PATH,15,-5167.557,645.1979,37.81743,0,0,0,0,100,0), -- 17:08:51 +(@PATH,16,-5170.843,644.0839,38.46222,0,0,0,0,100,0), -- 17:08:55 +(@PATH,17,-5172.093,643.3339,38.71222,0,0,0,0,100,0), -- 17:08:55 +(@PATH,18,-5173.593,642.8339,38.96222,0,0,0,0,100,0), -- 17:08:55 +(@PATH,19,-5186.051,637.8183,41.7608,0,0,0,0,100,0), -- 17:09:00 +(@PATH,20,-5189.714,636.5399,42.51512,0,0,0,0,100,0), -- 17:09:04 +(@PATH,21,-5191.214,636.2899,42.76512,0,0,0,0,100,0), -- 17:09:04 +(@PATH,22,-5197.214,634.7899,44.26512,0,0,0,0,100,0), -- 17:09:04 +(@PATH,23,-5203.103,634.7686,45.08968,0,0,0,0,100,0), -- 17:09:09 +(@PATH,24,-5206.103,634.7686,45.58968,0,0,0,0,100,0), -- 17:09:09 +(@PATH,25,-5209.806,634.6367,46.42096,0,0,0,0,100,0), -- 17:09:13 +(@PATH,26,-5213.186,634.7311,46.78786,0,0,0,0,100,0), -- 17:09:16 +(@PATH,27,-5213.186,634.7311,46.78786,3.057303,13000,0,0,100,0), -- 17:09:16 +(@PATH,28,-5220.281,635.3306,48.28771,0,0,0,0,100,0), -- 17:09:23 +(@PATH,29,-5225.046,631.6472,48.62878,0,0,0,0,100,0), -- 17:09:24 +(@PATH,30,-5226.796,630.3972,48.62878,0,0,0,0,100,0), -- 17:09:24 +(@PATH,31,-5228.296,629.1472,48.87878,0,0,0,0,100,0), -- 17:09:24 +(@PATH,32,-5229.272,628.4141,49.11567,0,0,0,0,100,0), -- 17:09:29 +(@PATH,33,-5212.051,622.3498,47.22783,0,0,0,0,100,0), -- 17:09:34 +(@PATH,34,-5206.287,621.1569,46.21485,0,0,0,0,100,0), -- 17:09:39 +(@PATH,35,-5186.77,619.8926,42.72266,0,0,0,0,100,0), -- 17:09:44 +(@PATH,36,-5183.428,619.211,41.72144,0,0,0,0,100,0), -- 17:09:47 +(@PATH,37,-5180.678,618.461,40.97144,0,0,0,0,100,0), -- 17:09:47 +(@PATH,38,-5177.428,617.961,39.97144,0,0,0,0,100,0), -- 17:09:47 +(@PATH,39,-5163.798,617.6891,36.96609,0,0,0,0,100,0), -- 17:09:53 +(@PATH,40,-5157.38,620.9669,36.305,0,0,0,0,100,0), -- 17:09:58 +(@PATH,41,-5155.63,622.2169,36.305,0,0,0,0,100,0), -- 17:09:58 +(@PATH,42,-5151.773,625.8492,36.2674,0,0,0,0,100,0), -- 17:10:02 +(@PATH,43,-5147.023,630.5992,36.0174,0,0,0,0,100,0), -- 17:10:02 +(@PATH,44,-5151.613,626.0107,36.01761,0,0,0,0,100,0), -- 17:10:04 +(@PATH,45,-5151.613,626.0107,36.01761,0.7864318,13000,0,0,100,0), -- 17:10:04 +(@PATH,46,-5147.015,630.6146,36.24972,0,0,0,0,100,0), -- 17:10:12 +(@PATH,47,-5146.276,631.5181,36.09008,0,0,0,0,100,0), -- 17:10:13 +(@PATH,48,-5139.943,643.661,36.66342,0,0,0,0,100,0), -- 17:10:17 +(@PATH,49,-5139.693,645.661,36.91342,0,0,0,0,100,0), -- 17:10:17 +(@PATH,50,-5139.456,647.1063,37.25185,0,0,0,0,100,0), -- 17:10:20 +(@PATH,51,-5139.706,650.6063,37.25185,0,0,0,0,100,0), -- 17:10:20 +(@PATH,52,-5140.206,653.6063,37.75185,0,0,0,0,100,0), -- 17:10:20 +(@PATH,53,-5140.706,657.8563,38.25185,0,0,0,0,100,0), -- 17:10:20 +(@PATH,54,-5148.056,667.8259,41.13531,0,0,0,0,100,0), -- 17:10:26 +(@PATH,55,-5151.806,670.5759,41.38531,0,0,0,0,100,0), -- 17:10:26 +(@PATH,56,-5154.813,670.973,41.23766,0,0,0,0,100,0), -- 17:10:34 +(@PATH,57,-5157.935,667.3557,40.72045,0,0,0,0,100,0), -- 17:10:35 +(@PATH,58,-5157.935,664.1057,40.22045,0,0,0,0,100,0), -- 17:10:35 +(@PATH,59,-5157.935,660.6057,39.72045,0,0,0,0,100,0), -- 17:10:35 +(@PATH,60,-5158.109,661.8198,39.61253,0,0,0,0,100,0), -- 17:10:40 +(@PATH,61,-5158.109,661.8198,39.61253,4.732054,13000,0,0,100,0), -- 17:10:40 +(@PATH,62,-5158.071,660.382,39.43446,0,0,0,0,100,0), -- 17:10:47 +(@PATH,63,-5161.05,651.4003,37.68608,0,0,0,0,100,0), -- 17:10:48 +(@PATH,64,-5164.23,648.3284,37.75933,0,0,0,0,100,0), -- 17:10:51 +(@PATH,65,-5164.98,647.5784,37.75933,0,0,0,0,100,0), -- 17:10:51 +(@PATH,66,-5167.73,645.3284,37.75933,0,0,0,0,100,0), -- 17:10:51 +(@PATH,67,-5170.907,644.0687,38.51237,0,0,0,0,100,0), -- 17:10:54 +(@PATH,68,-5172.157,643.5687,38.76237,0,0,0,0,100,0), -- 17:10:54 +(@PATH,69,-5173.657,642.8187,39.01237,0,0,0,0,100,0), -- 17:10:54 +(@PATH,70,-5186.038,637.9409,41.76183,0,0,0,0,100,0), -- 17:10:58 +(@PATH,71,-5189.85,636.6265,42.57893,0,0,0,0,100,0), -- 17:11:03 +(@PATH,72,-5191.35,636.3765,42.82893,0,0,0,0,100,0), -- 17:11:03 +(@PATH,73,-5197.35,634.8765,44.32893,0,0,0,0,100,0), -- 17:11:03 +(@PATH,74,-5202.985,634.672,45.20214,0,0,0,0,100,0), -- 17:11:07 +(@PATH,75,-5206.235,634.672,45.45214,0,0,0,0,100,0), -- 17:11:07 +(@PATH,76,-5209.681,634.6359,46.49954,0,0,0,0,100,0), -- 17:11:12 +(@PATH,77,-5225.227,631.6835,48.47477,0,0,0,0,100,0), -- 17:11:16 +(@PATH,78,-5226.727,630.4335,48.72477,0,0,0,0,100,0), -- 17:11:16 +(@PATH,79,-5228.477,629.1835,48.97477,0,0,0,0,100,0), -- 17:11:16 +(@PATH,80,-5229.123,628.397,49.13941,0,0,0,0,100,0), -- 17:11:21 +(@PATH,81,-5212.127,622.4219,47.1857,0,0,0,0,100,0), -- 17:11:26 +(@PATH,82,-5206.309,621.397,46.11539,0,0,0,0,100,0), -- 17:11:29 +(@PATH,83,-5200.812,620.8071,45.10049,0,0,0,0,100,0), -- 17:11:34 +(@PATH,84,-5200.812,620.8071,45.10049,6.201494,13000,0,0,100,0), -- 17:11:34 +(@PATH,85,-5196.44,620.4492,44.38279,0,0,0,0,100,0), -- 17:11:42 +(@PATH,86,-5186.816,619.8555,42.8981,0,0,0,0,100,0), -- 17:11:43 +(@PATH,87,-5183.516,619.1785,41.63834,0,0,0,0,100,0), -- 17:11:46 +(@PATH,88,-5180.766,618.4285,40.88834,0,0,0,0,100,0), -- 17:11:46 +(@PATH,89,-5177.516,617.9285,39.88834,0,0,0,0,100,0), -- 17:11:46 +(@PATH,90,-5163.909,617.6057,37.10681,0,0,0,0,100,0), -- 17:11:53 +(@PATH,91,-5157.449,621.0334,36.26365,0,0,0,0,100,0), -- 17:11:57 +(@PATH,92,-5155.699,622.2834,36.26365,0,0,0,0,100,0), -- 17:11:57 +(@PATH,93,-5154.149,623.4669,36.08303,0,0,0,0,100,0), -- 17:12:00 +(@PATH,94,-5152.149,625.7169,36.08303,0,0,0,0,100,0), -- 17:12:00 +(@PATH,95,-5146.899,630.7169,36.08303,0,0,0,0,100,0), -- 17:12:00 +(@PATH,96,-5146.199,631.3462,36.08583,0,0,0,0,100,0), -- 17:12:05 +(@PATH,97,-5139.907,643.7687,36.67455,0,0,0,0,100,0), -- 17:12:08 +(@PATH,98,-5139.657,645.5187,36.92455,0,0,0,0,100,0), -- 17:12:08 +(@PATH,99,-5139.875,650.5488,37.28083,0,0,0,0,100,0), -- 17:12:12 +(@PATH,100,-5140.125,653.5488,37.78083,0,0,0,0,100,0), -- 17:12:12 +(@PATH,101,-5140.625,657.7988,38.28083,0,0,0,0,100,0), -- 17:12:12 +(@PATH,102,-5148.108,667.7523,40.98037,0,0,0,0,100,0), -- 17:12:18 +(@PATH,103,-5151.608,670.7523,41.48037,0,0,0,0,100,0), -- 17:12:18 +(@PATH,104,-5141.205,661.6332,38.87123,0,0,0,0,100,0), -- 17:12:19 +(@PATH,105,-5141.205,661.6332,38.87123,1.692706,13000,0,0,100,0), -- 17:12:19 +(@PATH,106,-5151.783,670.6835,41.29935,0,0,0,0,100,0), -- 17:12:27 +(@PATH,107,-5154.538,671.0463,41.41257,0,0,0,0,100,0), -- 17:12:31 +(@PATH,108,-5157.866,664.149,40.19033,0,0,0,0,100,0), -- 17:12:34 +(@PATH,109,-5157.866,660.649,39.69033,0,0,0,0,100,0), -- 17:12:34 +(@PATH,110,-5159.319,655.634,38.41046,0,0,0,0,100,0), -- 17:12:39 +(@PATH,111,-5161.069,651.384,37.91046,0,0,0,0,100,0), -- 17:12:39 +(@PATH,112,-5164.453,648.3511,37.68428,0,0,0,0,100,0), -- 17:12:42 +(@PATH,113,-5164.953,647.6011,37.68428,0,0,0,0,100,0), -- 17:12:42 +(@PATH,114,-5167.703,645.3511,37.93428,0,0,0,0,100,0), -- 17:12:42 +(@PATH,115,-5171.067,643.7227,38.57786,0,0,0,0,100,0), -- 17:12:46 +(@PATH,116,-5172.317,643.4727,38.57786,0,0,0,0,100,0), -- 17:12:46 +(@PATH,117,-5173.567,642.9727,39.07786,0,0,0,0,100,0), -- 17:12:46 +(@PATH,118,-5186.047,637.7537,41.88425,0,0,0,0,100,0), -- 17:12:50 +(@PATH,119,-5177.467,641.3476,39.69143,0,0,0,0,100,0), -- 17:12:51 +(@PATH,120,-5177.467,641.3476,39.69143,3.542526,13000,0,0,100,0), -- 17:12:51 +(@PATH,121,-5186.172,637.7469,41.72967,0,0,0,0,100,0), -- 17:12:58 +(@PATH,122,-5189.829,636.4236,42.40816,0,0,0,0,100,0), -- 17:13:02 +(@PATH,123,-5191.579,636.1736,42.90816,0,0,0,0,100,0), -- 17:13:02 +(@PATH,124,-5197.329,634.9236,44.40816,0,0,0,0,100,0), -- 17:13:02 +(@PATH,125,-5203.01,634.6678,45.16574,0,0,0,0,100,0), -- 17:13:05 +(@PATH,126,-5206.01,634.6678,45.41574,0,0,0,0,100,0), -- 17:13:05 +(@PATH,127,-5209.636,634.6382,46.55074,0,0,0,0,100,0), -- 17:13:10 +(@PATH,128,-5225.139,631.7184,48.56197,0,0,0,0,100,0), -- 17:13:15 +(@PATH,129,-5226.889,630.4684,48.56197,0,0,0,0,100,0), -- 17:13:15 +(@PATH,130,-5228.389,629.2184,48.81197,0,0,0,0,100,0), -- 17:13:15 +(@PATH,131,-5229.226,628.3779,48.93416,0,0,0,0,100,0), -- 17:13:20 +(@PATH,132,-5212.188,622.4875,47.14201,0,0,0,0,100,0), -- 17:13:25 +(@PATH,133,-5206.112,621.292,46.29193,0,0,0,0,100,0), -- 17:13:28 +(@PATH,134,-5186.827,619.9382,42.81411,0,0,0,0,100,0), -- 17:13:33 +(@PATH,135,-5193.917,620.2497,43.88791,0,0,0,0,100,0), -- 17:13:36 +(@PATH,136,-5193.917,620.2497,43.88791,6.204306,13000,0,0,100,0), -- 17:13:36 +(@PATH,137,-5186.842,619.9473,42.7837,0,0,0,0,100,0), -- 17:13:43 +(@PATH,138,-5183.527,619.1399,41.53972,0,0,0,0,100,0), -- 17:13:46 +(@PATH,139,-5180.777,618.3899,40.78972,0,0,0,0,100,0), -- 17:13:46 +(@PATH,140,-5177.527,617.8899,40.03972,0,0,0,0,100,0), -- 17:13:46 +(@PATH,141,-5163.918,617.7509,36.96921,0,0,0,0,100,0), -- 17:13:51 +(@PATH,142,-5158.669,620.3835,36.38764,0,0,0,0,100,0), -- 17:13:55 +(@PATH,143,-5157.419,621.1335,36.38764,0,0,0,0,100,0), -- 17:13:55 +(@PATH,144,-5155.669,622.3835,36.38764,0,0,0,0,100,0), -- 17:13:55 +(@PATH,145,-5151.717,625.7791,36.29499,0,0,0,0,100,0), -- 17:13:59 +(@PATH,146,-5146.967,630.5291,36.04499,0,0,0,0,100,0), -- 17:13:59 +(@PATH,147,-5146.07,631.4751,36.08121,0,0,0,0,100,0), -- 17:14:04 +(@PATH,148,-5140.069,643.69,36.68766,0,0,0,0,100,0), -- 17:14:07 +(@PATH,149,-5139.569,645.69,36.93766,0,0,0,0,100,0), -- 17:14:07 +(@PATH,150,-5139.775,650.586,37.32704,0,0,0,0,100,0), -- 17:14:11 +(@PATH,151,-5140.275,653.586,37.82704,0,0,0,0,100,0), -- 17:14:11 +(@PATH,152,-5140.525,657.836,38.07704,0,0,0,0,100,0), -- 17:14:11 +(@PATH,153,-5139.893,650.9125,36.97102,0,0,0,0,100,0), -- 17:14:13 +(@PATH,154,-5139.893,650.9125,36.97102,1.692638,13000,0,0,100,0), -- 17:14:13 +(@PATH,155,-5140.585,657.8174,38.23678,0,0,0,0,100,0), -- 17:14:21 +(@PATH,156,-5147.919,667.7463,41.09047,0,0,0,0,100,0), -- 17:14:24 +(@PATH,157,-5151.669,670.7463,41.34047,0,0,0,0,100,0), -- 17:14:24 +(@PATH,158,-5154.635,670.886,41.44817,0,0,0,0,100,0), -- 17:14:30 +(@PATH,159,-5157.795,664.1933,40.14152,0,0,0,0,100,0), -- 17:14:33 +(@PATH,160,-5157.795,660.6933,39.89152,0,0,0,0,100,0), -- 17:14:33 +(@PATH,161,-5161.06,651.3977,37.80369,0,0,0,0,100,0), -- 17:14:38 +(@PATH,162,-5164.019,648.2813,37.58054,0,0,0,0,100,0), -- 17:14:40 +(@PATH,163,-5165.019,647.5313,37.58054,0,0,0,0,100,0), -- 17:14:40 +(@PATH,164,-5167.769,645.2813,37.83054,0,0,0,0,100,0), -- 17:14:40 +(@PATH,165,-5171.026,643.8893,38.4648,0,0,0,0,100,0), -- 17:14:44 +(@PATH,166,-5172.276,643.3893,38.7148,0,0,0,0,100,0), -- 17:14:44 +(@PATH,167,-5173.776,642.8893,38.9648,0,0,0,0,100,0), -- 17:14:44 +(@PATH,168,-5185.981,637.8439,41.74332,0,0,0,0,100,0), -- 17:14:49 +(@PATH,169,-5189.904,636.5654,42.50515,0,0,0,0,100,0), -- 17:14:52 +(@PATH,170,-5191.154,636.3154,42.75515,0,0,0,0,100,0), -- 17:14:52 +(@PATH,171,-5197.154,634.8154,44.50515,0,0,0,0,100,0), -- 17:14:52 +(@PATH,172,-5186.579,637.4847,41.6531,0,0,0,0,100,0), -- 17:14:54 +(@PATH,173,-5186.579,637.4847,41.6531,3.542525,13000,0,0,100,0), -- 17:14:54 +(@PATH,174,-5197.299,634.7244,44.4835,0,0,0,0,100,0), -- 17:15:01 +(@PATH,175,-5203.041,634.7999,45.31844,0,0,0,0,100,0), -- 17:15:04 +(@PATH,176,-5206.041,634.7999,45.56844,0,0,0,0,100,0), -- 17:15:04 +(@PATH,177,-5209.731,634.6368,46.40524,0,0,0,0,100,0), -- 17:15:09 +(@PATH,178,-5225.014,631.6444,48.62695,0,0,0,0,100,0), -- 17:15:13 +(@PATH,179,-5226.764,630.3944,48.62695,0,0,0,0,100,0), -- 17:15:13 +(@PATH,180,-5228.514,629.1444,48.87695,0,0,0,0,100,0), -- 17:15:13 +(@PATH,181,-5229.223,628.2013,49.11297,0,0,0,0,100,0), -- 17:15:18 +(@PATH,182,-5212.107,622.3733,47.2334,0,0,0,0,100,0), -- 17:15:23 +(@PATH,183,-5210.747,621.8912,46.56211,0,0,0,0,100,0), -- 17:15:28 +(@PATH,184,-5210.747,621.8912,46.56211,6.052472,13000,0,0,100,0), -- 17:15:28 +(@PATH,185,-5208.978,621.4757,46.32497,0,0,0,0,100,0), -- 17:15:35 +(@PATH,186,-5206.209,621.2124,46.10388,0,0,0,0,100,0), -- 17:15:36 +(@PATH,187,-5186.642,619.9025,42.74264,0,0,0,0,100,0), -- 17:15:40 +(@PATH,188,-5183.583,619.2233,41.50294,0,0,0,0,100,0), -- 17:15:43 +(@PATH,189,-5180.833,618.4733,41.00294,0,0,0,0,100,0), -- 17:15:43 +(@PATH,190,-5177.333,617.9733,40.00294,0,0,0,0,100,0), -- 17:15:43 +(@PATH,191,-5164.016,617.6649,37.10645,0,0,0,0,100,0), -- 17:15:51 +(@PATH,192,-5157.269,621.1954,36.32607,0,0,0,0,100,0), -- 17:15:54 +(@PATH,193,-5155.769,622.1954,36.32607,0,0,0,0,100,0), -- 17:15:54 +(@PATH,194,-5151.916,625.7462,36.27628,0,0,0,0,100,0), -- 17:15:58 +(@PATH,195,-5146.916,630.4962,36.02628,0,0,0,0,100,0), -- 17:15:58 +(@PATH,196,-5146.043,631.5037,36.0778,0,0,0,0,100,0), -- 17:16:03 +(@PATH,197,-5143.677,634.6373,36.08821,0,0,0,0,100,0), -- 17:16:05 +(@PATH,198,-5143.677,634.6373,36.08821,0.8953364,13000,0,0,100,0); -- 17:16:05 +-- 0x1C09FC424016BE4000001900001FD78F .go -5141.078 637.8817 36.18917 + +DELETE FROM `creature_formations` WHERE `leaderGUID`=143600; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(143600, 143600, 0, 0, 1), +(143600, 52344, 2, 0, 2); + +-- Pathing for Mine Car Entry: 23289 'TDB FORMAT' +SET @NPC := 143600; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-5158.637,`position_y`=727.454,`position_z`=45.57201 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-5158.637,727.454,45.57201,0,0,0,0,100,0), -- 17:09:07 +(@PATH,2,-5155.599,718.3636,44.29898,0,0,0,0,100,0), -- 17:09:09 +(@PATH,3,-5154.974,714.7401,43.48943,0,0,0,0,100,0), -- 17:09:11 +(@PATH,4,-5155.224,712.9901,43.48943,0,0,0,0,100,0), -- 17:09:11 +(@PATH,5,-5155.724,705.7401,43.23943,0,0,0,0,100,0), -- 17:09:11 +(@PATH,6,-5155.974,700.4901,42.98943,0,0,0,0,100,0), -- 17:09:11 +(@PATH,7,-5155.34,696.4957,42.45358,0,0,0,0,100,0), -- 17:09:18 +(@PATH,8,-5154.84,693.2457,42.20358,0,0,0,0,100,0), -- 17:09:18 +(@PATH,9,-5157.657,679.5804,41.46281,0,0,0,0,100,0), -- 17:09:23 +(@PATH,10,-5156.473,678.8619,41.37924,0,0,0,0,100,0), -- 17:09:27 +(@PATH,11,-5153.473,678.8619,41.62924,0,0,0,0,100,0), -- 17:09:27 +(@PATH,12,-5149.723,678.6119,41.37924,0,0,0,0,100,0), -- 17:09:27 +(@PATH,13,-5146.723,678.6119,41.62924,0,0,0,0,100,0), -- 17:09:27 +(@PATH,14,-5142.223,678.3619,41.37924,0,0,0,0,100,0), -- 17:09:27 +(@PATH,15,-5139.723,678.3619,41.37924,0,0,0,0,100,0), -- 17:09:27 +(@PATH,16,-5129.718,680.8803,40.1742,0,0,0,0,100,0), -- 17:09:38 +(@PATH,17,-5123.968,688.6303,39.4242,0,0,0,0,100,0), -- 17:09:38 +(@PATH,18,-5122.718,690.3803,39.4242,0,0,0,0,100,0), -- 17:09:38 +(@PATH,19,-5123.011,691.2361,39.35996,0,0,0,0,100,0), -- 17:09:45 +(@PATH,20,-5124.511,690.9861,39.60996,0,0,0,0,100,0), -- 17:09:45 +(@PATH,21,-5127.261,690.4861,40.35996,0,0,0,0,100,0), -- 17:09:45 +(@PATH,22,-5129.767,692.5929,40.48572,2.039433,13000,0,0,100,0), -- 17:09:50 +(@PATH,23,-5132.671,699.1042,41.48306,0,0,0,0,100,0), -- 17:09:57 +(@PATH,24,-5134.28,703.5355,41.8651,0,0,0,0,100,0), -- 17:10:00 +(@PATH,25,-5134.28,705.0355,42.1151,0,0,0,0,100,0), -- 17:10:00 +(@PATH,26,-5135.78,711.5355,42.6151,0,0,0,0,100,0), -- 17:10:00 +(@PATH,27,-5136.954,718.392,44.09182,0,0,0,0,100,0), -- 17:10:04 +(@PATH,28,-5140.083,725.0063,45.31725,0,0,0,0,100,0), -- 17:10:08 +(@PATH,29,-5146.963,732.4551,46.1476,0,0,0,0,100,0), -- 17:10:12 +(@PATH,30,-5151.213,736.2051,46.3976,0,0,0,0,100,0), -- 17:10:12 +(@PATH,31,-5156.23,735.8439,46.26311,0,0,0,0,100,0), -- 17:10:17 +(@PATH,32,-5159.73,735.3439,46.26311,0,0,0,0,100,0), -- 17:10:17 +(@PATH,33,-5161.024,735.1243,46.05744,3.305536,13000,0,0,100,0), -- 17:10:21 +(@PATH,34,-5162.643,734.8564,46.45791,0,0,0,0,100,0), -- 17:10:29 +(@PATH,35,-5158.645,727.4257,45.9726,0,0,0,0,100,0), -- 17:10:30 +(@PATH,36,-5157.451,725.0515,45.61901,0,0,0,0,100,0), -- 17:10:32 +(@PATH,37,-5156.701,722.0515,44.86901,0,0,0,0,100,0), -- 17:10:32 +(@PATH,38,-5155.451,718.5515,44.36901,0,0,0,0,100,0), -- 17:10:32 +(@PATH,39,-5155.159,714.8245,43.45316,0,0,0,0,100,0), -- 17:10:36 +(@PATH,40,-5155.159,712.8245,43.45316,0,0,0,0,100,0), -- 17:10:36 +(@PATH,41,-5155.659,705.8245,43.20316,0,0,0,0,100,0), -- 17:10:36 +(@PATH,42,-5156.159,700.5745,43.20316,0,0,0,0,100,0), -- 17:10:36 +(@PATH,43,-5155.351,696.5886,42.4476,0,0,0,0,100,0), -- 17:10:43 +(@PATH,44,-5154.851,693.3386,42.1976,0,0,0,0,100,0), -- 17:10:43 +(@PATH,45,-5157.878,679.6798,41.45091,0,0,0,0,100,0), -- 17:10:48 +(@PATH,46,-5156.542,678.974,41.3766,0,0,0,0,100,0), -- 17:10:52 +(@PATH,47,-5153.542,678.724,41.6266,0,0,0,0,100,0), -- 17:10:52 +(@PATH,48,-5150.326,678.3993,41.2695,6.244667,13000,0,0,100,0), -- 17:10:57 +(@PATH,49,-5139.679,678.0468,41.18186,0,0,0,0,100,0), -- 17:11:04 +(@PATH,50,-5129.634,680.8771,40.41336,0,0,0,0,100,0), -- 17:11:10 +(@PATH,51,-5124.134,688.6271,39.66336,0,0,0,0,100,0), -- 17:11:10 +(@PATH,52,-5122.634,690.3771,39.41336,0,0,0,0,100,0), -- 17:11:10 +(@PATH,53,-5123.205,691.313,39.34991,0,0,0,0,100,0), -- 17:11:17 +(@PATH,54,-5124.455,691.063,39.59991,0,0,0,0,100,0), -- 17:11:17 +(@PATH,55,-5127.455,690.563,40.34991,0,0,0,0,100,0), -- 17:11:17 +(@PATH,56,-5132.663,698.9817,41.54927,0,0,0,0,100,0), -- 17:11:20 +(@PATH,57,-5134.165,703.3019,41.89793,0,0,0,0,100,0), -- 17:11:25 +(@PATH,58,-5134.415,705.0519,42.14793,0,0,0,0,100,0), -- 17:11:25 +(@PATH,59,-5135.665,711.5519,42.64793,0,0,0,0,100,0), -- 17:11:25 +(@PATH,60,-5137.015,718.4344,44.11918,0,0,0,0,100,0), -- 17:11:29 +(@PATH,61,-5140.138,725.0566,45.36108,0,0,0,0,100,0), -- 17:11:33 +(@PATH,62,-5146.898,732.4678,46.15642,0,0,0,0,100,0), -- 17:11:37 +(@PATH,63,-5151.148,736.2178,46.40642,0,0,0,0,100,0), -- 17:11:37 +(@PATH,64,-5156.207,735.7999,46.2761,0,0,0,0,100,0), -- 17:11:42 +(@PATH,65,-5159.707,735.2999,46.2761,0,0,0,0,100,0), -- 17:11:42 +(@PATH,66,-5161.614,733.5115,46.41948,0,0,0,0,100,0), -- 17:11:45 +(@PATH,67,-5159.614,729.7615,45.91948,0,0,0,0,100,0), -- 17:11:45 +(@PATH,68,-5158.364,727.2615,45.66948,0,0,0,0,100,0), -- 17:11:45 +(@PATH,69,-5157.527,724.9576,45.59089,0,0,0,0,100,0), -- 17:11:50 +(@PATH,70,-5156.777,721.9576,44.84089,0,0,0,0,100,0), -- 17:11:50 +(@PATH,71,-5155.527,718.4576,44.34089,0,0,0,0,100,0), -- 17:11:50 +(@PATH,72,-5155.046,714.7384,43.62848,0,0,0,0,100,0), -- 17:11:54 +(@PATH,73,-5155.11,713.8632,43.32977,4.644619,13000,0,0,100,0), -- 17:11:56 +(@PATH,74,-5155.853,700.3505,42.94897,0,0,0,0,100,0), -- 17:12:03 +(@PATH,75,-5155.375,696.4696,42.43354,0,0,0,0,100,0), -- 17:12:08 +(@PATH,76,-5154.875,693.2196,42.18354,0,0,0,0,100,0), -- 17:12:08 +(@PATH,77,-5157.808,679.5703,41.4225,0,0,0,0,100,0), -- 17:12:13 +(@PATH,78,-5156.457,678.8987,41.37038,0,0,0,0,100,0), -- 17:12:17 +(@PATH,79,-5153.457,678.8987,41.62038,0,0,0,0,100,0), -- 17:12:17 +(@PATH,80,-5149.707,678.6487,41.37038,0,0,0,0,100,0), -- 17:12:17 +(@PATH,81,-5146.707,678.3987,41.62038,0,0,0,0,100,0), -- 17:12:17 +(@PATH,82,-5142.207,678.3987,41.37038,0,0,0,0,100,0), -- 17:12:17 +(@PATH,83,-5139.707,678.1487,41.37038,0,0,0,0,100,0), -- 17:12:17 +(@PATH,84,-5129.718,680.8611,40.35927,0,0,0,0,100,0), -- 17:12:28 +(@PATH,85,-5123.968,688.6111,39.60927,0,0,0,0,100,0), -- 17:12:28 +(@PATH,86,-5122.117,691.4048,39.21569,0,0,0,0,100,0), -- 17:12:34 +(@PATH,87,-5124.367,691.1548,39.71569,0,0,0,0,100,0), -- 17:12:34 +(@PATH,88,-5127.367,690.6548,40.21569,0,0,0,0,100,0), -- 17:12:34 +(@PATH,89,-5132.795,699.1715,41.39445,0,0,0,0,100,0), -- 17:12:37 +(@PATH,90,-5133.877,703.4885,42.01696,0,0,0,0,100,0), -- 17:12:41 +(@PATH,91,-5134.377,704.7385,42.01696,0,0,0,0,100,0), -- 17:12:41 +(@PATH,92,-5135.627,711.4885,42.76696,0,0,0,0,100,0), -- 17:12:41 +(@PATH,93,-5136.911,716.5974,43.53514,1.753501,13000,0,0,100,0), -- 17:12:50 +(@PATH,94,-5137.376,718.6188,44.1994,0,0,0,0,100,0), -- 17:12:57 +(@PATH,95,-5139.936,725.0667,45.3965,0,0,0,0,100,0), -- 17:12:58 +(@PATH,96,-5145.418,730.9333,45.83433,0,0,0,0,100,0), -- 17:13:01 +(@PATH,97,-5146.918,732.4333,46.08433,0,0,0,0,100,0), -- 17:13:01 +(@PATH,98,-5151.168,736.1833,46.33433,0,0,0,0,100,0), -- 17:13:01 +(@PATH,99,-5156.112,735.9399,46.28493,0,0,0,0,100,0), -- 17:13:06 +(@PATH,100,-5159.612,735.1899,46.28493,0,0,0,0,100,0), -- 17:13:06 +(@PATH,101,-5161.833,733.4753,46.65749,0,0,0,0,100,0), -- 17:13:10 +(@PATH,102,-5159.583,729.7253,45.90749,0,0,0,0,100,0), -- 17:13:10 +(@PATH,103,-5158.583,727.2253,45.65749,0,0,0,0,100,0), -- 17:13:10 +(@PATH,104,-5161.203,732.0187,46.14994,5.182036,13000,0,0,100,0); -- 17:13:31 +-- 0x1C09FC424016BE4000001900009FD78F .go -5158.637 727.454 45.57201 + +-- Pathing for Nethermine Burster Entry: 23285 'TDB FORMAT' +SET @NPC := 52061; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-5041.84,`position_y`=389.8085,`position_z`=-12.50461 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-5041.84,389.8085,-12.50461,0,0,0,0,100,0), -- 18:10:14 +(@PATH,2,-5030.222,418.1729,-10.5541,0,0,0,0,100,0), -- 18:10:30 +(@PATH,3,-5025.323,437.285,-9.860763,0,0,0,0,100,0), -- 18:10:42 +(@PATH,4,-5018.703,470.1522,-7.756811,0,0,0,0,100,0), -- 18:10:53 +(@PATH,5,-5001.123,509.9958,-5.460767,0,0,0,0,100,0), -- 18:11:05 +(@PATH,6,-4988.681,532.6278,-6.128869,0,0,0,0,100,0), -- 18:11:20 +(@PATH,7,-5005.017,551.2161,-4.296617,0,0,0,0,100,0), -- 18:11:31 +(@PATH,8,-4989.901,535.1989,-5.819852,0,0,0,0,100,0), -- 18:11:45 +(@PATH,9,-4997.614,515.9099,-5.108593,0,0,0,0,100,0), -- 18:11:55 +(@PATH,10,-5015.447,481.5337,-7.364,0,0,0,0,100,0), -- 18:12:06 +(@PATH,11,-5022.034,451.5206,-8.870285,0,0,0,0,100,0), -- 18:12:21 +(@PATH,12,-5027.991,425.6957,-10.12456,0,0,0,0,100,0); -- 18:12:33 +-- 0x1C09FC424016BD4000001A000024139A .go -5041.84 389.8085 -12.50461 + +-- Pathing for Nethermine Burster Entry: 23285 'TDB FORMAT' +SET @NPC := 52086; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-5145.625,`position_y`=491.5528,`position_z`=-13.89787 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-5145.625,491.5528,-13.89787,0,0,0,0,100,0), -- 18:23:20 +(@PATH,2,-5132.041,468.5541,-13.29704,0,0,0,0,100,0), -- 18:23:25 +(@PATH,3,-5110.197,448.1371,-10.01901,0,0,0,0,100,0), -- 18:23:38 +(@PATH,4,-5126.933,460.5002,-11.57316,0,0,0,0,100,0), -- 18:23:49 +(@PATH,5,-5145.124,490.6877,-13.89787,0,0,0,0,100,0); -- 18:25:03 +-- 0x1C09FC424016BD4000001A00002414A1 .go -5145.625 491.5528 -13.89787 + +-- Pathing for Nethermine Burster Entry: 23285 'TDB FORMAT' +SET @NPC := 52084; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-5012.641,`position_y`=527.0723,`position_z`=-4.429356 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-5012.641,527.0723,-4.429356,0,0,0,0,100,0), -- 17:53:03 +(@PATH,2,-5013.526,533.334,-4.454225,0,0,0,0,100,0), -- 17:53:03 +(@PATH,3,-5016.438,541.4922,-4.275333,0,0,0,0,100,0), -- 17:53:03 +(@PATH,4,-5017.101,543.3494,-4.186446,0,0,0,0,100,0), -- 17:53:03 +(@PATH,5,-5019.346,549.6407,-3.932599,0,0,0,0,100,0), -- 17:53:03 +(@PATH,6,-5019.346,549.6407,-3.932599,0,0,0,0,100,0), -- 17:53:03 +(@PATH,7,-5013.449,533.623,-4.201852,0,0,0,0,100,0), -- 17:53:08 +(@PATH,8,-5013.044,507.5332,-5.770618,0,0,0,0,100,0), -- 17:53:15 +(@PATH,9,-5013.313,503.3087,-6.890712,0,0,0,0,100,0), -- 17:53:38 +(@PATH,10,-5013.553,499.3347,-7.32141,0,0,0,0,100,0), -- 17:55:36 +(@PATH,11,-5013.988,492.2674,-7.856032,0,0,0,0,100,0), -- 17:55:36 +(@PATH,12,-5014.288,487.3993,-7.717823,0,0,0,0,100,0), -- 17:55:36 +(@PATH,13,-5014.653,481.4716,-7.740697,0,0,0,0,100,0), -- 17:55:36 +(@PATH,14,-5014.934,476.9202,-7.658531,0,0,0,0,100,0); -- 17:55:36 +-- 0x1C09FC424016BD4000001A000024163A .go -5012.641 527.0723 -4.429356 + +-- Pathing for Nethermine Burster Entry: 23285 'TDB FORMAT' +SET @NPC := 52054; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-5097.479,`position_y`=383.4904,`position_z`=-13.35386 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-5097.479,383.4904,-13.35386,0,0,0,0,100,0), -- 18:09:28 +(@PATH,2,-5105.978,382.3359,-12.87995,0,0,0,0,100,0), -- 18:09:33 +(@PATH,3,-5140.72,361.3568,-18.36172,0,0,0,0,100,0), -- 18:09:39 +(@PATH,4,-5153.877,344.0262,-19.23454,0,0,0,0,100,0), -- 18:09:54 +(@PATH,5,-5146.007,355.4137,-18.91095,0,0,0,0,100,0), -- 18:12:22 +(@PATH,6,-5145.439,356.2371,-18.91095,0,0,0,0,100,0), -- 18:12:22 +(@PATH,7,-5144.646,357.3877,-18.79898,0,0,0,0,100,0), -- 18:12:22 +(@PATH,8,-5143.475,359.0869,-18.80667,0,0,0,0,100,0), -- 18:12:22 +(@PATH,9,-5141.084,360.9994,-18.86554,0,0,0,0,100,0), -- 18:12:22 +(@PATH,10,-5138.581,363.001,-18.69712,0,0,0,0,100,0), -- 18:12:22 +(@PATH,11,-5134.565,366.2131,-17.01051,0,0,0,0,100,0), -- 18:12:22 +(@PATH,12,-5131.742,368.4709,-16.21124,0,0,0,0,100,0), -- 18:12:22 +(@PATH,13,-5130.425,369.5245,-15.74924,0,0,0,0,100,0), -- 18:12:22 +(@PATH,14,-5127.633,371.7576,-15.0621,0,0,0,0,100,0), -- 18:12:22 +(@PATH,15,-5124.102,374.582,-14.24547,0,0,0,0,100,0), -- 18:12:22 +(@PATH,16,-5117.077,380.2002,-12.9527,0,0,0,0,100,0); -- 18:12:22 +-- 0x1C09FC424016BD4000001A0000241848 .go -5097.479 383.4904 -13.35386 + +-- Pathing for Nethermine Burster Entry: 23285 'TDB FORMAT' +SET @NPC := 52083; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-5142.954,`position_y`=424.2722,`position_z`=-10.0708 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-5142.954,424.2722,-10.0708,0,0,0,0,100,0), -- 18:09:46 +(@PATH,2,-5166.739,417.5524,-10.24546,0,0,0,0,100,0), -- 18:09:57 +(@PATH,3,-5174.002,422.4801,-10.30893,0,0,0,0,100,0), -- 18:10:04 +(@PATH,4,-5170.584,419.3948,-10.41781,0,0,0,0,100,0), -- 18:12:22 +(@PATH,5,-5169.813,418.7582,-10.41781,0,0,0,0,100,0), -- 18:12:22 +(@PATH,6,-5168.172,417.4039,-10.38332,0,0,0,0,100,0), -- 18:12:22 +(@PATH,7,-5167.688,417.0048,-10.36478,0,0,0,0,100,0), -- 18:12:22 +(@PATH,8,-5159.976,420.4402,-10.22841,0,0,0,0,100,0), -- 18:12:22 +(@PATH,9,-5157.938,421.3475,-10.24158,0,0,0,0,100,0), -- 18:12:22 +(@PATH,10,-5154.572,422.8471,-10.04827,0,0,0,0,100,0), -- 18:12:22 +(@PATH,11,-5151.838,424.0645,-10.09287,0,0,0,0,100,0), -- 18:12:22 +(@PATH,12,-5123.059,424.4661,-11.98086,3.589592,6000,0,0,100,0); -- 18:12:39 +-- 0x1C09FC424016BD4000001A0000241877 .go -5142.954 424.2722 -10.0708 + +-- Pathing for Nethermine Burster Entry: 23285 'TDB FORMAT' +SET @NPC := 52086; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-5100.122,`position_y`=472.3237,`position_z`=-8.886364 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-5100.122,472.3237,-8.886364,0,0,0,0,100,0), -- 18:10:53 +(@PATH,2,-5117.763,467.3499,-11.16238,0,0,0,0,100,0), -- 18:11:04 +(@PATH,3,-5131.067,444.1735,-10.89796,0,0,0,0,100,0), -- 18:11:35 +(@PATH,4,-5132.473,440.0923,-10.73675,0,0,0,0,100,0), -- 18:11:35 +(@PATH,5,-5130.348,437.1649,-10.71613,0,0,0,0,100,0), -- 18:11:35 +(@PATH,6,-5127.024,432.5856,-11.19165,0,0,0,0,100,0), -- 18:11:35 +(@PATH,7,-5118.549,420.9109,-12.51914,0,0,0,0,100,0), -- 18:11:35 +(@PATH,8,-5088.664,403.9553,-12.69664,0,0,0,0,100,0), -- 18:11:36 +(@PATH,9,-5070.439,406.9981,-11.93173,0,0,0,0,100,0), -- 18:11:49 +(@PATH,10,-5062.364,426.8455,-11.17576,0,0,0,0,100,0), -- 18:11:58 +(@PATH,11,-5063.076,458.8389,-11.47571,0,0,0,0,100,0), -- 18:12:09 +(@PATH,12,-5067.343,465.1718,-10.02644,0,0,0,0,100,0), -- 18:12:18 +(@PATH,13,-5100.08,472.3515,-8.843109,0,0,0,0,100,0); -- 18:12:26 +-- 0x1C09FC424016BD4000001A00002418CF .go -5100.122 472.3237 -8.886364 + +-- Pathing for Nethermine Burster Entry: 23285 'TDB FORMAT' +SET @NPC := 52085; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-5082.33,`position_y`=474.2946,`position_z`=-7.784039 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-5082.33,474.2946,-7.784039,0,0,0,0,100,0), -- 18:09:27 +(@PATH,2,-5091.409,496.4387,-10.14975,0,0,0,0,100,0), -- 18:09:40 +(@PATH,3,-5094.309,513.0909,-11.32626,0,0,0,0,100,0), -- 18:09:50 +(@PATH,4,-5105.632,522.7634,-10.2628,0,0,0,0,100,0), -- 18:09:56 +(@PATH,5,-5107.463,534.7469,-10.20918,0,0,0,0,100,0), -- 18:10:04 +(@PATH,6,-5108.773,528.9429,-10.17007,0,0,0,0,100,0), -- 18:10:10 +(@PATH,7,-5103.452,521.2954,-10.52877,0,0,0,0,100,0), -- 18:10:12 +(@PATH,8,-5093.061,503.7095,-11.10897,0,0,0,0,100,0); -- 18:10:21 +-- 0x1C09FC424016BD4000001A0000241940 .go -5082.33 474.2946 -7.784039 + +-- Pathing for Nethermine Burster Entry: 23285 'TDB FORMAT' +SET @NPC := 52061; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-5015.721,`position_y`=393.4803,`position_z`=-13.56352 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-5015.721,393.4803,-13.56352,0,0,0,0,100,0), -- 17:55:20 +(@PATH,2,-5014.953,396.891,-13.21174,0,0,0,0,100,0), -- 17:55:20 +(@PATH,3,-5013.08,405.213,-12.17083,0,0,0,0,100,0), -- 17:55:20 +(@PATH,4,-5012.828,406.3322,-11.95596,0,0,0,0,100,0), -- 17:55:20 +(@PATH,5,-5010.532,416.5321,-10.48194,0,0,0,0,100,0), -- 17:55:20 +(@PATH,6,-5008.649,424.8955,-9.222077,0,0,0,0,100,0), -- 17:55:20 +(@PATH,7,-5002.781,442.213,-7.196595,0,0,0,0,100,0), -- 17:55:28 +(@PATH,8,-5001.61,460.2058,-6.495255,0,0,0,0,100,0), -- 17:55:37 +(@PATH,9,-5001.797,445.3661,-6.927022,0,0,0,0,100,0), -- 17:55:47 +(@PATH,10,-5008.122,426.1274,-8.655727,0,0,0,0,100,0), -- 17:55:55 +(@PATH,11,-5014.418,397.9655,-12.76799,0,0,0,0,100,0); -- 17:56:03 +-- 0x1C09FC424016BD4000001A00002419A9 .go -5015.721 393.4803 -13.56352 + +-- Pathing for Nethermine Burster Entry: 23285 'TDB FORMAT' +SET @NPC := 52046; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-5153.807,`position_y`=343.9828,`position_z`=-19.23604 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-5153.807,343.9828,-19.23604,0,0,0,0,100,0), -- 18:17:49 +(@PATH,2,-5144.604,357.4449,-18.70733,0,0,0,0,100,0), -- 18:17:59 +(@PATH,3,-5116.975,380.3215,-12.69622,0,0,0,0,100,0), -- 18:18:06 +(@PATH,4,-5102.355,382.6835,-13.05555,0,0,0,0,100,0), -- 18:18:21 +(@PATH,5,-5105.978,382.3359,-12.87995,0,0,0,0,100,0), -- 18:18:30 +(@PATH,6,-5140.741,361.2797,-18.35986,0,0,0,0,100,0); -- 18:18:37 +-- 0x1C09FC424016BD4000001A0000241F37 .go -5153.807 343.9828 -19.23604 + +-- Pathing for Nethermine Ravager Entry: 23326 'TDB FORMAT' +SET @NPC := 143827; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4963.239,`position_y`=605.275,`position_z`=15.15399 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-4963.239,605.275,15.15399,0,0,1,0,100,0), -- 17:52:17 +(@PATH,2,-4975.903,623.7806,17.61637,0,0,1,0,100,0), -- 17:52:20 +(@PATH,3,-4992.053,634.3859,22.33038,0,0,1,0,100,0), -- 17:52:23 +(@PATH,4,-5011.415,637.7054,23.62663,0,0,1,0,100,0), -- 17:52:26 +(@PATH,5,-4998.898,635.9115,22.77191,0,0,1,0,100,0), -- 17:52:31 +(@PATH,6,-4979.864,627.016,19.21811,0,0,1,0,100,0), -- 17:52:34 +(@PATH,7,-4965.36,609.7169,16.62768,0,0,1,0,100,0), -- 17:52:37 +(@PATH,8,-4958.603,589.0837,12.97569,0,0,1,0,100,0), -- 17:52:40 +(@PATH,9,-4936.146,573.9352,7.7713,0,0,1,0,100,0), -- 17:52:44 +(@PATH,10,-4913.703,588.2379,5.505109,0,0,1,0,100,0), -- 17:52:48 +(@PATH,11,-4930.457,576.1113,6.944055,0,0,1,0,100,0), -- 17:52:53 +(@PATH,12,-4955.026,583.3227,12.02873,0,0,1,0,100,0); -- 17:52:55 +-- 0x1C09FC424016C78000001A0000241948 .go -4963.239 605.275 15.15399 + +-- Pathing for Nethermine Ravager Entry: 23326 'TDB FORMAT' +SET @NPC := 143837; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4926.302,`position_y`=510.8232,`position_z`=5.912571 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-4926.302,510.8232,5.912571,0,0,1,0,100,0), -- 17:52:59 +(@PATH,2,-4928.601,533.3176,6.820917,0,0,1,0,100,0), -- 17:53:03 +(@PATH,3,-4939.765,552.8948,6.603627,0,0,1,0,100,0), -- 17:53:05 +(@PATH,4,-4955.232,575.6724,11.41519,0,0,1,0,100,0), -- 17:53:09 +(@PATH,5,-4946.245,562.309,8.260891,0,0,1,0,100,0), -- 17:53:14 +(@PATH,6,-4933.914,544.2485,6.190574,0,0,1,0,100,0), -- 17:53:16 +(@PATH,7,-4927.376,523.0281,7.014862,0,0,1,0,100,0), -- 17:53:20 +(@PATH,8,-4926.589,498.706,3.313521,0,0,1,0,100,0), -- 17:53:23 +(@PATH,9,-4907.33,473.4201,1.108172,0,0,1,0,100,0), -- 17:53:27 +(@PATH,10,-4885.657,466.1158,-2.15189,0,0,1,0,100,0), -- 17:53:31 +(@PATH,11,-4898.996,472.0482,0.2873805,0,0,1,0,100,0), -- 17:53:36 +(@PATH,12,-4925.863,491.4807,1.155461,0,0,1,0,100,0); -- 17:53:39 +-- 0x1C09FC424016C78000001A0000241973 .go -4926.302 510.8232 5.912571 + +-- Pathing for Nethermine Ravager Entry: 23326 'TDB FORMAT' +SET @NPC := 143848; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-5009.851,`position_y`=293.1676,`position_z`=1.581649 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-5009.851,293.1676,1.581649,0,0,1,0,100,0), -- 17:55:04 +(@PATH,2,-4985.909,303.3185,-1.474064,0,0,1,0,100,0), -- 17:55:10 +(@PATH,3,-4977.48,319.7932,-1.799831,0,0,1,0,100,0), -- 17:55:14 +(@PATH,4,-4965.886,351.0247,-1.16063,0,0,1,0,100,0), -- 17:55:16 +(@PATH,5,-4961.489,388.3174,-1.142369,0,0,1,0,100,0), -- 17:55:21 +(@PATH,6,-4955.736,422.718,3.013297,0,0,1,0,100,0), -- 17:55:25 +(@PATH,7,-4943.146,446.6736,1.949694,0,0,1,0,100,0), -- 17:55:32 +(@PATH,8,-4918.688,445.8087,1.470013,0,0,1,0,100,0), -- 17:55:36 +(@PATH,9,-4907.826,422.7741,-4.288939,0,0,1,0,100,0), -- 17:55:39 +(@PATH,10,-4914.044,443.4701,0.7917011,0,0,1,0,100,0), -- 17:55:45 +(@PATH,11,-4940.444,449.0392,1.663293,0,0,1,0,100,0), -- 17:55:48 +(@PATH,12,-4953.445,428.6053,3.195693,0,0,1,0,100,0), -- 17:55:51 +(@PATH,13,-4959.889,397.1684,-0.2070236,0,0,1,0,100,0), -- 17:55:55 +(@PATH,14,-4965.057,353.1042,-1.062231,0,0,1,0,100,0), -- 17:56:01 +(@PATH,15,-4974.901,325.7972,-1.889486,0,0,1,0,100,0), -- 17:56:06 +(@PATH,16,-4983.667,306.4418,-1.94701,0,0,1,0,100,0); -- 17:56:10 +-- 0x1C09FC424016C78000001A00002419DB .go -5009.851 293.1676 1.581649 + +-- Pathing for Nethermine Ravager Entry: 23326 'TDB FORMAT' +SET @NPC := 143840; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4869.946,`position_y`=530.6263,`position_z`=-1.553467 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-4869.946,530.6263,-1.553467,0,0,1,0,100,0), -- 18:06:45 +(@PATH,2,-4893.954,534.9226,2.516688,0,0,1,0,100,0), -- 18:06:50 +(@PATH,3,-4909.314,518.1718,4.493078,0,0,1,0,100,0), -- 18:06:54 +(@PATH,4,-4901.04,531.7859,4.01936,0,0,1,0,100,0), -- 18:06:55 +(@PATH,5,-4909.218,518.321,4.623864,0,0,1,0,100,0), -- 18:07:02 +(@PATH,6,-4915.15,493.46,1.49952,0,0,1,0,100,0), -- 18:07:03 +(@PATH,7,-4928.039,454.6728,1.627107,0,0,1,0,100,0), -- 18:07:07 +(@PATH,8,-4947.842,455.957,0.743868,0,0,1,0,100,0), -- 18:07:13 +(@PATH,9,-4970.903,473.2809,3.325165,0,0,1,0,100,0), -- 18:07:16 +(@PATH,10,-4956.071,459.8573,0.461098,0,0,1,0,100,0), -- 18:07:22 +(@PATH,11,-4930.157,454.3083,1.40765,0,0,1,0,100,0), -- 18:07:25 +(@PATH,12,-4917.665,485.7419,0.5451692,0,0,1,0,100,0), -- 18:07:29 +(@PATH,13,-4910.57,514.0978,4.176438,0,0,1,0,100,0), -- 18:07:34 +(@PATH,14,-4898.185,533.2109,3.269632,0,0,1,0,100,0); -- 18:07:39 +-- 0x1C09FC424016C78000001A0000241B47 .go -4869.946 530.6263 -1.553467 + +-- Pathing for Nethermine Ravager Entry: 23326 'TDB FORMAT' +SET @NPC := 143843; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4922.489,`position_y`=300.9247,`position_z`=-12.97113 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-4922.489,300.9247,-12.97113,0,0,1,0,100,0), -- 18:05:49 +(@PATH,2,-4940.971,300.3912,-8.783532,0,0,1,0,100,0), -- 18:05:52 +(@PATH,3,-4955.332,289.6572,-5.669093,0,0,1,0,100,0), -- 18:05:55 +(@PATH,4,-4966.683,308.9685,-3.354346,0,0,1,0,100,0), -- 18:05:57 +(@PATH,5,-4964.716,331.7885,-2.618268,0,0,1,0,100,0), -- 18:06:01 +(@PATH,6,-4955.161,358.4415,-2.649262,0,0,1,0,100,0), -- 18:06:04 +(@PATH,7,-4951.747,387.423,-2.672494,0,0,1,0,100,0), -- 18:06:08 +(@PATH,8,-4960.425,414.4815,2.96782,0,0,1,0,100,0), -- 18:06:13 +(@PATH,9,-4964.489,436.2759,3.192766,0,0,1,0,100,0), -- 18:06:16 +(@PATH,10,-4961.489,417.7344,3.296109,0,0,1,0,100,0), -- 18:06:22 +(@PATH,11,-4952.684,397.0981,-0.8431122,0,0,1,0,100,0), -- 18:06:25 +(@PATH,12,-4953.893,364.0373,-2.409762,0,0,1,0,100,0), -- 18:06:28 +(@PATH,13,-4962.485,340.8231,-2.176575,0,0,1,0,100,0), -- 18:06:33 +(@PATH,14,-4966.377,318.3596,-2.773224,0,0,1,0,100,0), -- 18:06:37 +(@PATH,15,-4960.039,292.8176,-4.731999,0,0,1,0,100,0), -- 18:13:52 +(@PATH,16,-4942.955,299.4413,-8.193456,0,0,1,0,100,0); -- 18:13:54 +-- 0x1C09FC424016C78000001A0000241B51 .go -4922.489 300.9247 -12.97113 + +-- Pathing for Nethermine Ravager Entry: 23326 'TDB FORMAT' +SET @NPC := 143850; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-5061.087,`position_y`=118.9844,`position_z`=-16.32363 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-5061.087,118.9844,-16.32363,0,0,1,0,100,0), -- 18:05:17 +(@PATH,2,-5067.978,134.1589,-14.4941,0,0,1,0,100,0), -- 18:05:24 +(@PATH,3,-5078.728,174.4905,-8.200466,0,0,1,0,100,0), -- 18:05:27 +(@PATH,4,-5070.809,196.4065,-8.396107,0,0,1,0,100,0), -- 18:05:32 +(@PATH,5,-5051.048,203.3381,-10.27266,0,0,1,0,100,0), -- 18:05:36 +(@PATH,6,-5030.57,208.88,-11.94103,0,0,1,0,100,0), -- 18:05:39 +(@PATH,7,-4996.729,232.7692,-7.642292,0,0,1,0,100,0), -- 18:05:43 +(@PATH,8,-4983.488,232.4408,-8.859201,0,0,1,0,100,0), -- 18:05:48 +(@PATH,9,-4990.174,233.7981,-7.773879,0,0,1,0,100,0), -- 18:05:52 +(@PATH,10,-5009.648,220.7942,-10.2113,0,0,1,0,100,0), -- 18:05:55 +(@PATH,11,-5009.046,223.3424,-9.788197,0,0,1,0,100,0), -- 18:05:58 +(@PATH,12,-5018.983,212.046,-11.68377,0,0,1,0,100,0), -- 18:06:06 +(@PATH,13,-5031.654,208.8046,-11.78926,0,0,1,0,100,0), -- 18:06:07 +(@PATH,14,-5076.621,183.3736,-8.145866,0,0,1,0,100,0), -- 18:13:57 +(@PATH,15,-5072.223,144.1562,-12.73046,0,0,1,0,100,0), -- 18:13:58 +(@PATH,16,-5061.066,119.1013,-16.51242,0,0,1,0,100,0); -- 18:14:04 +-- 0x1C09FC424016C78000001A0000241C27 .go -5061.087 118.9844 -16.32363 + +-- Pathing for Nethermine Ravager Entry: 23326 'TDB FORMAT' +SET @NPC := 143859; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-5052.252,`position_y`=176.8827,`position_z`=-11.95231 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-5052.252,176.8827,-11.95231,0,0,1,0,100,0), -- 18:05:07 +(@PATH,2,-5021.2,157.3062,-14.11822,0,0,1,0,100,0), -- 18:05:11 +(@PATH,3,-5001.049,161.8789,-14.45323,0,0,1,0,100,0), -- 18:05:15 +(@PATH,4,-5016.269,157.2713,-14.45587,0,0,1,0,100,0), -- 18:05:21 +(@PATH,5,-5046.272,166.7962,-12.9523,0,0,1,0,100,0), -- 18:05:23 +(@PATH,6,-5051.284,187.3221,-11.84302,0,0,1,0,100,0), -- 18:05:29 +(@PATH,7,-5035.34,209.7333,-11.41766,0,0,1,0,100,0), -- 18:05:32 +(@PATH,8,-5024.802,236.1987,-6.399595,0,0,1,0,100,0), -- 18:05:35 +(@PATH,9,-5015.809,258.2852,-1.012123,0,0,1,0,100,0), -- 18:05:40 +(@PATH,10,-5023.006,240.032,-4.77902,0,0,1,0,100,0), -- 18:05:45 +(@PATH,11,-5030.113,221.3788,-9.224751,0,0,1,0,100,0), -- 18:05:47 +(@PATH,12,-5049.056,197.9744,-11.1133,0,0,1,0,100,0); -- 18:05:52 +-- 0x1C09FC424016C78000001A0000241C47 .go -5052.252 176.8827 -11.95231 diff --git a/sql/updates/world/2015_04_11_02_world.sql b/sql/updates/world/2015_04_11_02_world.sql new file mode 100644 index 00000000000..8e8d850bb17 --- /dev/null +++ b/sql/updates/world/2015_04_11_02_world.sql @@ -0,0 +1,2 @@ +UPDATE `smart_scripts` SET `event_flags`=0 WHERE `entryorguid`=25310 AND `source_type`=0 AND `id`=0; +UPDATE `smart_scripts` SET `target_type`=1 WHERE `entryorguid` IN (24009, 24010) AND `source_type`=0 AND `id`=1; diff --git a/sql/updates/world/2015_04_11_03_world.sql b/sql/updates/world/2015_04_11_03_world.sql new file mode 100644 index 00000000000..e2f0d055e3b --- /dev/null +++ b/sql/updates/world/2015_04_11_03_world.sql @@ -0,0 +1,6 @@ +-- Fix for quest ID 5561, Kodo Roundup +-- Add the missing link between npc_text and gossip_menu_id : +DELETE FROM `gossip_menu` WHERE `entry`=3650 AND `text_id`=4449; +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (3650, 4449); +-- Link the npc_text from gossip_menu: +UPDATE `creature_template` SET `gossip_menu_id`=3650 WHERE `entry`=11627; diff --git a/sql/updates/world/2015_04_12_01_world.sql b/sql/updates/world/2015_04_12_01_world.sql new file mode 100644 index 00000000000..527d453fe2e --- /dev/null +++ b/sql/updates/world/2015_04_12_01_world.sql @@ -0,0 +1,2 @@ +-- Correction to creature template for 11466 Highbourne Summoner (Shen'dralar) +UPDATE `creature_template` SET `faction`=1355 WHERE `entry`=11466; diff --git a/sql/updates/world/2015_04_12_02_world.sql b/sql/updates/world/2015_04_12_02_world.sql new file mode 100644 index 00000000000..6c885b61505 --- /dev/null +++ b/sql/updates/world/2015_04_12_02_world.sql @@ -0,0 +1,211 @@ +-- Adds pathing for Lieutenant Valorcall and his guards +-- Path is between Stromgarde Keep, Arathi and Refuge Point, Arathi (and back) +-- NPCs are always spawned (unless killed) since there was no confirmation otherwise +-- +-- NOTES: +-- * Valorcall is for Horde quest "Sigil of Arathor" (http://www.wowhead.com/quest=26032) +-- * It is proper that Valorcall will occasionally fight with the Forsaken Courier when their patrols cross. +-- Adjusted respawn allows for players to complete related quests. +-- * Could not confirm if NPC is only spawned when a player accepts the quest or is always spawned. Will require +-- c++ script if "quest accept" causes spawn / pathing. +-- * Could not confirm if NPC despawns once destination is reached or returns to spawn. + +-- Lieutenant Valorcall +SET @npcLeaderId=14572; + +-- Stromgarde Cavalryman +SET @npcFollowerId_1=14574; +SET @npcFollowerId_2=14575; +SET @wpPathId=(@npcLeaderId * 10); + +-- Fix spawn info in Arathi Highlands +-- NOTE: Changed respawn to 1 minute because Valorcall is a quest NPC that can enter combat with (killed by) +-- Forsaken Courier (another quest NPC) when their paths cross (which happens occasionally). Also, quest +-- research turned up comments that indicated these NPCs have a fast respawn. + +DELETE FROM `creature` WHERE `guid` IN (@npcLeaderId,@npcFollowerId_1,@npcFollowerId_2); + +INSERT INTO `creature` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `VerifiedBuild`) VALUES +(@npcLeaderId,2612,0,0,0,1,1,4141,1,-1528.313843,-1843.296265,67.789253,1.530442,400,0,1,1135,1779,2,0,0,0,0), +(@npcFollowerId_1,2738,0,0,0,1,1,4145,1,-1525.899780,-1845.876465,67.764687,1.530442,400,0,0,958,0,0,0,0,0,0), +(@npcFollowerId_2,2738,0,0,0,1,1,4145,1,-1531.197144,-1845.848755,67.875923,1.530442,400,0,0,958,0,0,0,0,0,0); + +-- Delete existing waypoints (if any) +DELETE FROM `waypoint_data` WHERE `id`=@wpPathId; + +-- Add new waypoints +-- NOTE: It is unclear if the NPC should despawn when reaching the end of the path. For now, just have it pause +-- at end before starting the path back. + +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(@wpPathId,1,-1528.31,-1843.30,67.79,1.530442,60000,0,0,100,0), -- 1 minute delay before starting +(@wpPathId,2,-1528.23,-1824.05,68.34,0,0,0,0,100,0), +(@wpPathId,3,-1528.32,-1820.46,68.9602,0,0,0,0,100,0), +(@wpPathId,4,-1528.37,-1818.28,69.5115,0,0,0,0,100,0), +(@wpPathId,5,-1528.64,-1808.76,71.3902,0,0,0,0,100,0), +(@wpPathId,6,-1528.77,-1800.37,71.2294,0,0,0,0,100,0), +(@wpPathId,7,-1528.82,-1795.04,70.1311,0,0,0,0,100,0), +(@wpPathId,8,-1528.84,-1793.37,69.5099,0,0,0,0,100,0), +(@wpPathId,9,-1528.87,-1790.61,68.9584,0,0,0,0,100,0), +(@wpPathId,10,-1528.82,-1785.05,68.3404,0,0,0,0,100,0), +(@wpPathId,11,-1527.51,-1762.21,67.0403,0,0,0,0,100,0), +(@wpPathId,12,-1529.35,-1746.33,66.8509,0,0,0,0,100,0), +(@wpPathId,13,-1529.5,-1732.3,66.2708,0,0,0,0,100,0), +(@wpPathId,14,-1539.93,-1714.01,66.363,0,0,0,0,100,0), +(@wpPathId,15,-1555.47,-1702.87,66.1763,0,0,0,0,100,0), +(@wpPathId,16,-1570.19,-1696.83,66.2239,0,0,0,0,100,0), +(@wpPathId,17,-1576.23,-1695.24,65.9776,0,0,0,0,100,0), +(@wpPathId,18,-1581.84,-1696.44,66.1376,0,0,0,0,100,0), +(@wpPathId,19,-1584.78,-1700.91,66.5301,0,0,0,0,100,0), +(@wpPathId,20,-1586.19,-1710.78,66.9607,0,0,0,0,100,0), +(@wpPathId,21,-1586.08,-1728.19,67.4567,0,0,0,0,100,0), +(@wpPathId,22,-1582.99,-1743.81,66.8545,0,0,0,0,100,0), +(@wpPathId,23,-1577.8,-1763.7,67.0782,0,0,0,0,100,0), +(@wpPathId,24,-1576.49,-1777.64,67.2815,0,0,0,0,100,0), +(@wpPathId,25,-1574.01,-1787.45,67.1901,0,0,0,0,100,0), +(@wpPathId,26,-1565.38,-1798.76,67.5678,0,0,0,0,100,0), +(@wpPathId,27,-1557.03,-1803.77,67.5158,0,0,0,0,100,0), +(@wpPathId,28,-1540,-1805.78,66.432,0,0,0,0,100,0), +(@wpPathId,29,-1513.43,-1805.73,66.1469,0,0,0,0,100,0), +(@wpPathId,30,-1490.95,-1805.66,68.0658,0,0,0,0,100,0), +(@wpPathId,31,-1466.56,-1803.87,67.7702,0,0,0,0,100,0), +(@wpPathId,32,-1452.87,-1800.94,65.4412,0,0,0,0,100,0), +(@wpPathId,33,-1438.86,-1799.91,61.945,0,0,0,0,100,0), +(@wpPathId,34,-1425.38,-1803.61,60.9587,0,0,0,0,100,0), +(@wpPathId,35,-1395.89,-1814.67,59.1394,0,0,0,0,100,0), +(@wpPathId,36,-1363.65,-1828.28,60.0694,0,0,0,0,100,0), +(@wpPathId,37,-1337.27,-1839.82,62.1984,0,0,0,0,100,0), +(@wpPathId,38,-1330.7,-1845.84,62.5435,0,0,0,0,100,0), +(@wpPathId,39,-1328.27,-1851.3,62.5249,0,0,0,0,100,0), +(@wpPathId,40,-1329.52,-1861.33,62.0214,0,0,0,0,100,0), +(@wpPathId,41,-1342.83,-1896.34,59.2707,0,0,0,0,100,0), +(@wpPathId,42,-1358.08,-1935.47,58.4276,0,0,0,0,100,0), +(@wpPathId,43,-1375.19,-1977.63,58.5289,0,0,0,0,100,0), +(@wpPathId,44,-1381.06,-2026.16,60.5442,0,0,0,0,100,0), +(@wpPathId,45,-1383.41,-2071.59,62.5124,0,0,0,0,100,0), +(@wpPathId,46,-1386.02,-2110,64.2494,0,0,0,0,100,0), +(@wpPathId,47,-1393.31,-2158.42,64.1111,0,0,0,0,100,0), +(@wpPathId,48,-1404.24,-2206.13,63.8535,0,0,0,0,100,0), +(@wpPathId,49,-1417.1,-2243.68,63.7514,0,0,0,0,100,0), +(@wpPathId,50,-1420.49,-2249.98,63.6904,0,0,0,0,100,0), +(@wpPathId,51,-1430.49,-2263.3,63.329,0,0,0,0,100,0), +(@wpPathId,52,-1441.13,-2277.2,62.7836,0,0,0,0,100,0), +(@wpPathId,53,-1446.84,-2287.53,61.9325,0,0,0,0,100,0), +(@wpPathId,54,-1449.19,-2299.55,61.8796,0,0,0,0,100,0), +(@wpPathId,55,-1449.73,-2327.53,61.7191,0,0,0,0,100,0), +(@wpPathId,56,-1450.03,-2355.53,61.5528,0,0,0,0,100,0), +(@wpPathId,57,-1450.15,-2380.03,61.4055,0,0,0,0,100,0), +(@wpPathId,58,-1450.49,-2397.53,61.0555,0,0,0,0,100,0), +(@wpPathId,59,-1453.92,-2410.52,60.03,0,0,0,0,100,0), +(@wpPathId,60,-1464.35,-2426.89,57.8205,0,0,0,0,100,0), +(@wpPathId,61,-1462.44,-2436.38,58.0342,0,0,0,0,100,0), +(@wpPathId,62,-1453.73,-2438.5,58.342,0,0,0,0,100,0), +(@wpPathId,63,-1440.72,-2440.2,58.9664,0,0,0,0,100,0), +(@wpPathId,64,-1424.83,-2453.5,59.0382,0,0,0,0,100,0), +(@wpPathId,65,-1412.62,-2462.65,57.2066,0,0,0,0,100,0), +(@wpPathId,66,-1396.91,-2462.16,57.0177,0,0,0,0,100,0), +(@wpPathId,67,-1380.78,-2455.37,55.0267,0,0,0,0,100,0), +(@wpPathId,68,-1364.89,-2450.51,52.0455,0,0,0,0,100,0), +(@wpPathId,69,-1351.11,-2448.04,49.9138,0,0,0,0,100,0), +(@wpPathId,70,-1336.2,-2448.68,46.4684,0,0,0,0,100,0), +(@wpPathId,71,-1319.9,-2455.01,43.1772,0,0,0,0,100,0), +(@wpPathId,72,-1304.21,-2462.75,39.1337,0,0,0,0,100,0), +(@wpPathId,73,-1289.01,-2471.38,33.4891,0,0,0,0,100,0), +(@wpPathId,74,-1275.46,-2482.79,26.7595,0,0,0,0,100,0), +(@wpPathId,75,-1267.01,-2493.63,22.4559,0,0,0,0,100,0), +(@wpPathId,76,-1254.69,-2512.44,20.5413,0,0,0,0,100,0), +(@wpPathId,77,-1250.21,-2521.37,20.4269,0,0,0,0,100,0), +(@wpPathId,78,-1246.19,-2529.78,20.6058,0,0,0,0,100,0), +(@wpPathId,79,-1242.05,-2535.15,21.0179,0,0,0,0,100,0), +(@wpPathId,80,-1242.99,-2526.84,20.9146,0,0,0,0,100,0), +(@wpPathId,81,-1250.83,-2520.96,20.426,0,60000,0,0,100,0), -- destination reached, 1 minute delay before pathing back +(@wpPathId,82,-1254.85,-2513.19,20.5112,0,0,0,0,100,0), +(@wpPathId,83,-1267.24,-2493.93,22.3988,0,0,0,0,100,0), +(@wpPathId,84,-1273.85,-2485.78,25.5707,0,0,0,0,100,0), +(@wpPathId,85,-1289.24,-2471.59,33.4718,0,0,0,0,100,0), +(@wpPathId,86,-1303.98,-2462.99,39.0339,0,0,0,0,100,0), +(@wpPathId,87,-1316.64,-2457,42.604,0,0,0,0,100,0), +(@wpPathId,88,-1335.67,-2449.4,46.2431,0,0,0,0,100,0), +(@wpPathId,89,-1349.51,-2448.47,49.503,0,0,0,0,100,0), +(@wpPathId,90,-1363.26,-2451.05,51.8257,0,0,0,0,100,0), +(@wpPathId,91,-1379.15,-2455.53,54.7104,0,0,0,0,100,0), +(@wpPathId,92,-1395.58,-2461.5,57.1067,0,0,0,0,100,0), +(@wpPathId,93,-1411.2,-2463.61,56.9774,0,0,0,0,100,0), +(@wpPathId,94,-1424.18,-2454.31,59.0152,0,0,0,0,100,0), +(@wpPathId,95,-1440.89,-2442.08,58.7537,0,0,0,0,100,0), +(@wpPathId,96,-1452.92,-2439.49,58.3243,0,0,0,0,100,0), +(@wpPathId,97,-1461.72,-2436.45,58.0823,0,0,0,0,100,0), +(@wpPathId,98,-1463.37,-2427.9,57.8549,0,0,0,0,100,0), +(@wpPathId,99,-1454.66,-2411.75,59.8753,0,0,0,0,100,0), +(@wpPathId,100,-1451.1,-2399.07,60.9648,0,0,0,0,100,0), +(@wpPathId,101,-1450.14,-2381.61,61.3911,0,0,0,0,100,0), +(@wpPathId,102,-1450.12,-2357.11,61.5426,0,0,0,0,100,0), +(@wpPathId,103,-1449.95,-2329.11,61.7066,0,0,0,0,100,0), +(@wpPathId,104,-1449.43,-2301.13,61.84,0,0,0,0,100,0), +(@wpPathId,105,-1446.58,-2287.66,61.9711,0,0,0,0,100,0), +(@wpPathId,106,-1442.44,-2279.13,62.5159,0,0,0,0,100,0), +(@wpPathId,107,-1431.93,-2265.15,63.3205,0,0,0,0,100,0), +(@wpPathId,108,-1421.36,-2251.22,63.6684,0,0,0,0,100,0), +(@wpPathId,109,-1418.07,-2245.04,63.7351,0,0,0,0,100,0), +(@wpPathId,110,-1405.35,-2208.74,63.8461,0,0,0,0,100,0), +(@wpPathId,111,-1394.01,-2161.12,64.1057,0,0,0,0,100,0), +(@wpPathId,112,-1386.65,-2112.7,64.4159,0,0,0,0,100,0), +(@wpPathId,113,-1383.82,-2074.31,62.6099,0,0,0,0,100,0), +(@wpPathId,114,-1381.54,-2028.88,60.6584,0,0,0,0,100,0), +(@wpPathId,115,-1375.91,-1979.41,58.5366,0,0,0,0,100,0), +(@wpPathId,116,-1358.95,-1937.19,58.4249,0,0,0,0,100,0), +(@wpPathId,117,-1343.72,-1898.05,59.126,0,0,0,0,100,0), +(@wpPathId,118,-1329.89,-1863.08,61.9069,0,0,0,0,100,0), +(@wpPathId,119,-1328.35,-1850.86,62.5391,0,0,0,0,100,0), +(@wpPathId,120,-1330.65,-1846.29,62.5257,0,0,0,0,100,0), +(@wpPathId,121,-1335.96,-1841.73,62.249,0,0,0,0,100,0), +(@wpPathId,122,-1361.59,-1829.16,60.2512,0,0,0,0,100,0), +(@wpPathId,123,-1393.84,-1815.58,59.0036,0,0,0,0,100,0), +(@wpPathId,124,-1423.47,-1804.92,60.7771,0,0,0,0,100,0), +(@wpPathId,125,-1438.32,-1800.12,61.8788,0,0,0,0,100,0), +(@wpPathId,126,-1450.61,-1800.69,64.7219,0,0,0,0,100,0), +(@wpPathId,127,-1464.33,-1803.5,67.6348,0,0,0,0,100,0), +(@wpPathId,128,-1488.18,-1805.87,68.074,0,0,0,0,100,0), +(@wpPathId,129,-1512.68,-1805.73,66.2104,0,0,0,0,100,0), +(@wpPathId,130,-1537.17,-1805.95,66.1776,0,0,0,0,100,0), +(@wpPathId,131,-1557.65,-1804.11,67.4839,0,0,0,0,100,0), +(@wpPathId,132,-1565.61,-1798.65,67.5617,0,0,0,0,100,0), +(@wpPathId,133,-1574.15,-1787.07,67.1787,0,0,0,0,100,0), +(@wpPathId,134,-1576.5,-1778.67,67.2749,0,0,0,0,100,0), +(@wpPathId,135,-1578.05,-1765.2,67.1097,0,0,0,0,100,0), +(@wpPathId,136,-1582.3,-1746.61,66.6746,0,0,0,0,100,0), +(@wpPathId,137,-1585.78,-1729.49,67.4793,0,0,0,0,100,0), +(@wpPathId,138,-1586.16,-1712.03,67.0329,0,0,0,0,100,0), +(@wpPathId,139,-1584.72,-1701.41,66.5389,0,0,0,0,100,0), +(@wpPathId,140,-1581.69,-1696.92,66.1604,0,0,0,0,100,0), +(@wpPathId,141,-1576.71,-1695.36,65.9892,0,0,0,0,100,0), +(@wpPathId,142,-1570.6,-1696.58,66.1985,0,0,0,0,100,0), +(@wpPathId,143,-1555.01,-1703.09,66.1586,0,0,0,0,100,0), +(@wpPathId,144,-1540.2,-1714.01,66.3447,0,0,0,0,100,0), +(@wpPathId,145,-1529.35,-1731.15,66.2182,0,0,0,0,100,0), +(@wpPathId,146,-1529.12,-1745.12,66.8033,0,0,0,0,100,0), +(@wpPathId,147,-1527.21,-1763.24,67.0823,0,0,0,0,100,0), +(@wpPathId,148,-1528.8,-1786.19,68.3406,0,0,0,0,100,0), +(@wpPathId,149,-1528.78,-1791.07,68.9602,0,0,0,0,100,0), +(@wpPathId,150,-1528.77,-1793.2,69.5115,0,0,0,0,100,0), +(@wpPathId,151,-1528.76,-1795.29,70.1611,0,0,0,0,100,0), +(@wpPathId,152,-1528.74,-1800.29,71.2228,0,0,0,0,100,0), +(@wpPathId,153,-1528.67,-1807.79,71.4654,0,0,0,0,100,0), +(@wpPathId,154,-1528.38,-1819.6,68.9567,0,0,0,0,100,0), +(@wpPathId,155,-1528.32,-1822.06,68.3404,0,0,0,0,100,0), +(@wpPathId,156,-1528.25,-1824.82,68.3404,0,0,0,0,100,0), +(@wpPathId,157,-1528.2,-1828.96,68.0658,0,0,0,0,100,0), +(@wpPathId,158,-1533.15,-1841.45,68.09,0,0,0,0,100,0), +(@wpPathId,159,-1528.19,-1853.83,67.62,0,0,0,0,100,0), +(@wpPathId,160,-1528.31,-1843.30,67.79,1.530442,0,0,0,100,0); -- ends at same coords as WP 1 + +-- Assign path and formation info +DELETE FROM `creature_formations` WHERE `leaderGUID`=@npcLeaderId; +INSERT INTO creature_formations (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@npcLeaderId,@npcLeaderId,0,0,2,0,0), +(@npcLeaderId,@npcFollowerId_1,3,45,2,0,0), -- slightly behind and to the right +(@npcLeaderId,@npcFollowerId_2,3,315,2,0,0); -- slightly behind and to the left + +DELETE FROM `creature_addon` WHERE `guid`=@npcLeaderId; +INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES +(@npcLeaderId,@wpPathId,229,0,4097,0,NULL); diff --git a/sql/updates/world/2015_04_12_03_world.sql b/sql/updates/world/2015_04_12_03_world.sql new file mode 100644 index 00000000000..619e48341ac --- /dev/null +++ b/sql/updates/world/2015_04_12_03_world.sql @@ -0,0 +1,392 @@ +-- Adds pathing for Forsaken Courier and her guards +-- Path is between GoShek Farm, Arathi and Tarren Mill, Hillsbrad (and back) +-- NPCs are always spawned (unless killed) since there was no confirmation otherwise +-- +-- NOTES: +-- * Forsaken Courier is for Alliance quest "Hints of a New Plague" (http://www.wowhead.com/quest=658) +-- * It is proper that the Courier will occasionally fight with the Lieutenant Valorcall when their patrols cross. +-- Adjusted respawn allows for players to complete related quests. +-- * Could not confirm if NPC is only spawned when a player accepts the quest or is always spawned. Will require +-- c++ script if "quest accept" causes spawn / pathing. +-- * Could not confirm if NPC despawns once destination is reached or returns to spawn. + +-- Forsaken Courier +SET @npcLeaderId=14772; + +-- Forsaken Bodyguard +SET @npcFollowerId_1=14773; +SET @npcFollowerId_2=14774; +SET @npcFollowerId_3=14775; +SET @npcFollowerId_4=14776; +SET @wpPathId=(@npcLeaderId * 10); + +-- Delete duplicate spawns in Hillsbrad +-- NOTE: The only records that should be present are `creature` but including the others just in case +DELETE FROM `creature` WHERE `guid` IN (16397,16402,16400,16399,16398); +DELETE FROM `creature_addon` WHERE `guid` IN (16397,16402,16400,16399,16398); +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (16397,16402,16400,16399,16398); +DELETE FROM `waypoint_data` WHERE `id` IN (163970,164020,164000,163990,163980); + +-- Fix spawn info in Arathi Highlands +-- NOTE: The patrol is supposed to spawn here when a particular quest is accepted, needs core script +-- NOTE: Changed respawn to 1 minute because the Courier is a quest NPC that can enter combat with (killed by) +-- Lieutenant Valorcall (another quest NPC) when their paths cross (which happens occasionally). Also, quest +-- research turned up comments that indicated these NPCs have a fast respawn. + +DELETE FROM `creature` WHERE `guid` IN (@npcLeaderId,@npcFollowerId_1,@npcFollowerId_2,@npcFollowerId_3,@npcFollowerId_4); + +INSERT INTO `creature` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `VerifiedBuild`) VALUES +(@npcLeaderId,2714,0,0,0,1,1,4041,1,-1552.426758,-3029.310791,13.644809,5.009628,60,0,1,1342,0,2,0,0,0,0), +(@npcFollowerId_1,2721,0,0,0,1,1,4037,1,-1551.740601,-3031.641846,13.644809,5.009628,60,0,0,610,0,0,0,0,0,0), +(@npcFollowerId_2,2721,0,0,0,1,1,4037,1,-1554.400024,-3029.450928,13.644809,5.009628,60,0,0,610,0,0,0,0,0,0), +(@npcFollowerId_3,2721,0,0,0,1,1,4038,1,-1553.325195,-3026.489502,13.644809,5.009628,60,0,0,610,0,0,0,0,0,0), +(@npcFollowerId_4,2721,0,0,0,1,1,4037,1,-1550.339844,-3028.255859,13.644809,5.009628,60,0,0,610,0,0,0,0,0,0); + +-- Delete existing waypoints (if any) +DELETE FROM `waypoint_data` WHERE `id`=@wpPathId; + +-- Add new waypoints +-- NOTE: It is unclear if the NPC should despawn when reaching the end of the path. For now, just have it pause +-- at end before starting the path back. + +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(@wpPathId,1,-1552.43,-3029.31,13.6448,5.009628,60000,0,0,100,0), -- 1 minute delay before starting +(@wpPathId,2,-1551.28,-3042.15,12.9831,0,0,0,0,100,0), +(@wpPathId,3,-1551.47,-3055.87,13.0074,0,0,0,0,100,0), +(@wpPathId,4,-1557.96,-3065.89,13.2017,0,0,0,0,100,0), +(@wpPathId,5,-1568.38,-3066.59,13.1757,0,0,0,0,100,0), +(@wpPathId,6,-1584.38,-3059.72,12.8479,0,0,0,0,100,0), +(@wpPathId,7,-1604.79,-3043.72,14.9377,0,0,0,0,100,0), +(@wpPathId,8,-1633.49,-3013.09,19.2308,0,0,0,0,100,0), +(@wpPathId,9,-1640.02,-3004.89,20.9252,0,0,0,0,100,0), +(@wpPathId,10,-1645.71,-2989.32,23.6772,0,0,0,0,100,0), +(@wpPathId,11,-1645.99,-2971.86,26.3366,0,0,0,0,100,0), +(@wpPathId,12,-1643.19,-2959.2,27.7,0,0,0,0,100,0), +(@wpPathId,13,-1639.09,-2945.82,28.5385,0,0,0,0,100,0), +(@wpPathId,14,-1637.73,-2933.3,28.1553,0,0,0,0,100,0), +(@wpPathId,15,-1641.84,-2916.34,26.7999,0,0,0,0,100,0), +(@wpPathId,16,-1644.03,-2901.64,26.299,0,0,0,0,100,0), +(@wpPathId,17,-1639.03,-2885.94,27.6014,0,0,0,0,100,0), +(@wpPathId,18,-1631.71,-2866.27,30.2701,0,0,0,0,100,0), +(@wpPathId,19,-1625.44,-2842.61,32.2295,0,0,0,0,100,0), +(@wpPathId,20,-1621.03,-2822.09,33.6745,0,0,0,0,100,0), +(@wpPathId,21,-1617.7,-2804.91,34.6386,0,0,0,0,100,0), +(@wpPathId,22,-1612.97,-2777.32,36.1324,0,0,0,0,100,0), +(@wpPathId,23,-1610.07,-2756.52,37.2584,0,0,0,0,100,0), +(@wpPathId,24,-1606.39,-2739.47,37.6036,0,0,0,0,100,0), +(@wpPathId,25,-1598.18,-2724.09,37.1732,0,0,0,0,100,0), +(@wpPathId,26,-1586.96,-2710.69,36.1226,0,0,0,0,100,0), +(@wpPathId,27,-1572.97,-2695.7,34.6664,0,0,0,0,100,0), +(@wpPathId,28,-1564.09,-2685.41,35.4253,0,0,0,0,100,0), +(@wpPathId,29,-1557.93,-2669.06,36.761,0,0,0,0,100,0), +(@wpPathId,30,-1555.19,-2641.25,41.3576,0,0,0,0,100,0), +(@wpPathId,31,-1555.73,-2620.27,45.0843,0,0,0,0,100,0), +(@wpPathId,32,-1557.22,-2604.89,47.8118,0,0,0,0,100,0), +(@wpPathId,33,-1562.1,-2591.78,48.5331,0,0,0,0,100,0), +(@wpPathId,34,-1567.06,-2571.43,49.3074,0,0,0,0,100,0), +(@wpPathId,35,-1567.62,-2550.48,50.7276,0,0,0,0,100,0), +(@wpPathId,36,-1561.84,-2530.37,52.0972,0,0,0,0,100,0), +(@wpPathId,37,-1555.6,-2517.85,53.143,0,0,0,0,100,0), +(@wpPathId,38,-1550.4,-2506.83,53.9067,0,0,0,0,100,0), +(@wpPathId,39,-1544.74,-2495.89,54.115,0,0,0,0,100,0), +(@wpPathId,40,-1537.25,-2488.54,53.6039,0,0,0,0,100,0), +(@wpPathId,41,-1521.28,-2474.91,53.2915,0,0,0,0,100,0), +(@wpPathId,42,-1505.08,-2461.55,52.9902,0,0,0,0,100,0), +(@wpPathId,43,-1491.57,-2450.42,53.6645,0,0,0,0,100,0), +(@wpPathId,44,-1473.67,-2435,56.438,0,0,0,0,100,0), +(@wpPathId,45,-1458.8,-2420.24,58.7543,0,0,0,0,100,0), +(@wpPathId,46,-1451.61,-2406.21,60.4971,0,0,0,0,100,0), +(@wpPathId,47,-1450.24,-2390.07,61.2988,0,0,0,0,100,0), +(@wpPathId,48,-1449.98,-2369.08,61.4719,0,0,0,0,100,0), +(@wpPathId,49,-1450.01,-2348.08,61.5948,0,0,0,0,100,0), +(@wpPathId,50,-1450.28,-2327.09,61.7184,0,0,0,0,100,0), +(@wpPathId,51,-1449.22,-2302.62,61.8278,0,0,0,0,100,0), +(@wpPathId,52,-1445.48,-2285.57,62.1128,0,0,0,0,100,0), +(@wpPathId,53,-1438.68,-2273.44,63.0625,0,0,0,0,100,0), +(@wpPathId,54,-1427.75,-2259.8,63.363,0,0,0,0,100,0), +(@wpPathId,55,-1417.94,-2245.39,63.7294,0,0,0,0,100,0), +(@wpPathId,56,-1411.22,-2229.24,63.7811,0,0,0,0,100,0), +(@wpPathId,57,-1406.21,-2212.48,63.8356,0,0,0,0,100,0), +(@wpPathId,58,-1399.67,-2185.27,63.9419,0,0,0,0,100,0), +(@wpPathId,59,-1395.07,-2161.21,64.1007,0,0,0,0,100,0), +(@wpPathId,60,-1388.98,-2130.31,64.2996,0,0,0,0,100,0), +(@wpPathId,61,-1385.75,-2095.48,63.6847,0,0,0,0,100,0), +(@wpPathId,62,-1383.99,-2067.53,62.3167,0,0,0,0,100,0), +(@wpPathId,63,-1381.89,-2032.6,60.8356,0,0,0,0,100,0), +(@wpPathId,64,-1379.07,-2001.23,59.3176,0,0,0,0,100,0), +(@wpPathId,65,-1376.39,-1980.42,58.542,0,0,0,0,100,0), +(@wpPathId,66,-1373.23,-1970.43,58.49,0,0,0,0,100,0), +(@wpPathId,67,-1362.48,-1944.58,58.4418,0,0,0,0,100,0), +(@wpPathId,68,-1350.37,-1915.5,58.3884,0,0,0,0,100,0), +(@wpPathId,69,-1338.43,-1882.6,60.3171,0,0,0,0,100,0), +(@wpPathId,70,-1329.51,-1856.07,62.228,0,0,0,0,100,0), +(@wpPathId,71,-1325.86,-1842.56,63.0927,0,0,0,0,100,0), +(@wpPathId,72,-1316,-1825.72,64.4425,0,0,0,0,100,0), +(@wpPathId,73,-1306.65,-1815.35,65.3555,0,0,0,0,100,0), +(@wpPathId,74,-1289.41,-1803.39,66.6877,0,0,0,0,100,0), +(@wpPathId,75,-1261.87,-1788.14,66.6785,0,0,0,0,100,0), +(@wpPathId,76,-1249.45,-1783.07,65.8931,0,0,0,0,100,0), +(@wpPathId,77,-1238.49,-1775.65,64.62,0,0,0,0,100,0), +(@wpPathId,78,-1215.06,-1754.6,60.4524,0,0,0,0,100,0), +(@wpPathId,79,-1194.54,-1735.55,57.2315,0,0,0,0,100,0), +(@wpPathId,80,-1172.04,-1719.07,54.128,0,0,0,0,100,0), +(@wpPathId,81,-1159.31,-1713.28,52.2178,0,0,0,0,100,0), +(@wpPathId,82,-1139.35,-1706.8,48.8841,0,0,0,0,100,0), +(@wpPathId,83,-1115.81,-1700,45.5234,0,0,0,0,100,0), +(@wpPathId,84,-1092.46,-1692.58,41.2765,0,0,0,0,100,0), +(@wpPathId,85,-1068.59,-1687.37,38.652,0,0,0,0,100,0), +(@wpPathId,86,-1037.27,-1684.41,36.8739,0,0,0,0,100,0), +(@wpPathId,87,-1008.56,-1684.45,37.151,0,0,0,0,100,0), +(@wpPathId,88,-980.565,-1684.34,37.7322,0,0,0,0,100,0), +(@wpPathId,89,-953.792,-1680.65,39.8905,0,0,0,0,100,0), +(@wpPathId,90,-937.298,-1674.86,41.9623,0,0,0,0,100,0), +(@wpPathId,91,-922.117,-1666.19,44.3338,0,0,0,0,100,0), +(@wpPathId,92,-902.794,-1651.14,47.3033,0,0,0,0,100,0), +(@wpPathId,93,-886.795,-1637.57,49.7302,0,0,0,0,100,0), +(@wpPathId,94,-874.432,-1625.18,51.403,0,0,0,0,100,0), +(@wpPathId,95,-861.587,-1613.31,52.861,0,0,0,0,100,0), +(@wpPathId,96,-851.445,-1603.67,53.5052,0,0,0,0,100,0), +(@wpPathId,97,-835.526,-1585.06,54.2578,0,0,0,0,100,0), +(@wpPathId,98,-822.556,-1568.54,54.1683,0,0,0,0,100,0), +(@wpPathId,99,-804.126,-1543,54.2734,0,0,0,0,100,0), +(@wpPathId,100,-788.23,-1519.96,55.9301,0,0,0,0,100,0), +(@wpPathId,101,-779.762,-1504.66,57.6297,0,0,0,0,100,0), +(@wpPathId,102,-771.293,-1481.79,60.9203,0,0,0,0,100,0), +(@wpPathId,103,-764.958,-1461.8,63.8378,0,0,0,0,100,0), +(@wpPathId,104,-751.162,-1433.5,66.2523,0,0,0,0,100,0), +(@wpPathId,105,-737.279,-1406.06,68.0082,0,0,0,0,100,0), +(@wpPathId,106,-719.827,-1384.18,68.2183,0,0,0,0,100,0), +(@wpPathId,107,-701.185,-1358.79,67.6137,0,0,0,0,100,0), +(@wpPathId,108,-676.3,-1329.47,67.0156,0,0,0,0,100,0), +(@wpPathId,109,-661.743,-1308.94,66.136,0,0,0,0,100,0), +(@wpPathId,110,-646.567,-1281.38,66.0949,0,0,0,0,100,0), +(@wpPathId,111,-626.252,-1248.74,66.0719,0,0,0,0,100,0), +(@wpPathId,112,-612.39,-1216.62,65.9958,0,0,0,0,100,0), +(@wpPathId,113,-600.363,-1191.33,66.0663,0,0,0,0,100,0), +(@wpPathId,114,-587.601,-1158.84,66.2411,0,0,0,0,100,0), +(@wpPathId,115,-580.715,-1135.33,65.9731,0,0,0,0,100,0), +(@wpPathId,116,-569.879,-1109.61,63.4267,0,0,0,0,100,0), +(@wpPathId,117,-559.217,-1094.17,60.3274,0,0,0,0,100,0), +(@wpPathId,118,-539.599,-1074.21,56.4081,0,0,0,0,100,0), +(@wpPathId,119,-523.011,-1056.35,52.3473,0,0,0,0,100,0), +(@wpPathId,120,-510.191,-1040.07,48.6025,0,0,0,0,100,0), +(@wpPathId,121,-501.715,-1022.04,44.2363,0,0,0,0,100,0), +(@wpPathId,122,-496.385,-998.154,40.2856,0,0,0,0,100,0), +(@wpPathId,123,-494.702,-980.738,37.5433,0,0,0,0,100,0), +(@wpPathId,124,-491.376,-960.06,33.8258,0,0,0,0,100,0), +(@wpPathId,125,-487.913,-946.496,34.5604,0,0,0,0,100,0), +(@wpPathId,126,-483.667,-929.517,33.981,0,0,0,0,100,0), +(@wpPathId,127,-479.713,-916.112,34.5368,0,0,0,0,100,0), +(@wpPathId,128,-468.995,-898.097,37.5774,0,0,0,0,100,0), +(@wpPathId,129,-452.089,-875.795,43.0344,0,0,0,0,100,0), +(@wpPathId,130,-436.879,-856.588,47.9147,0,0,0,0,100,0), +(@wpPathId,131,-421.433,-837.576,52.3119,0,0,0,0,100,0), +(@wpPathId,132,-408.891,-820.775,53.7396,0,0,0,0,100,0), +(@wpPathId,133,-396.945,-802.835,54.5859,0,0,0,0,100,0), +(@wpPathId,134,-383.2,-783.4,54.5997,0,0,0,0,100,0), +(@wpPathId,135,-375.514,-777.305,54.4699,0,0,0,0,100,0), +(@wpPathId,136,-357.159,-768.896,54.1852,0,0,0,0,100,0), +(@wpPathId,137,-331.407,-757.909,53.8287,0,0,0,0,100,0), +(@wpPathId,138,-301.818,-747.177,55.4595,0,0,0,0,100,0), +(@wpPathId,139,-275.645,-739.098,56.6931,0,0,0,0,100,0), +(@wpPathId,140,-248.942,-730.377,58.3106,0,0,0,0,100,0), +(@wpPathId,141,-217.832,-723.297,61.0932,0,0,0,0,100,0), +(@wpPathId,142,-196.602,-718.715,62.8802,0,0,0,0,100,0), +(@wpPathId,143,-172.911,-715.793,63.6936,0,0,0,0,100,0), +(@wpPathId,144,-137.922,-715.202,64.7113,0,0,0,0,100,0), +(@wpPathId,145,-105.48,-713.642,65.4473,0,0,0,0,100,0), +(@wpPathId,146,-83.076,-715.929,67.8031,0,0,0,0,100,0), +(@wpPathId,147,-62.1287,-717.276,68.264,0,0,0,0,100,0), +(@wpPathId,148,-34.829,-715.287,69.076,0,0,0,0,100,0), +(@wpPathId,149,-20.5953,-718.476,69.3706,0,0,0,0,100,0), +(@wpPathId,150,-17.5473,-725.856,68.4891,0,0,0,0,100,0), +(@wpPathId,151,-18.4696,-738.195,66.1096,0,0,0,0,100,0), +(@wpPathId,152,-22.5461,-758.719,62.5768,0,0,0,0,100,0), +(@wpPathId,153,-16.6739,-786.375,59.6202,0,0,0,0,100,0), +(@wpPathId,154,-17.4867,-799.341,58.967,0,0,0,0,100,0), +(@wpPathId,155,-28.1695,-814.096,57.6642,0,0,0,0,100,0), +(@wpPathId,156,-44.6354,-826.165,57.0593,0,0,0,0,100,0), +(@wpPathId,157,-52.8964,-844.203,56.3922,0,0,0,0,100,0), +(@wpPathId,158,-50.6344,-863.401,55.686,0,0,0,0,100,0), +(@wpPathId,159,-41.1772,-876.152,55.8108,0,0,0,0,100,0), +(@wpPathId,160,-28.9852,-888.752,56.1343,0,0,0,0,100,0), +(@wpPathId,161,-26.666,-897.974,56.026,0,0,0,0,100,0), +(@wpPathId,162,-29.7521,-903.466,55.8896,0,0,0,0,100,0), +(@wpPathId,163,-33.5225,-909.703,55.5687,0,0,0,0,100,0), +(@wpPathId,164,-40.2458,-919.112,54.8082,0,0,0,0,100,0), -- destination reached, 1 minute delay before pathing back +(@wpPathId,165,-37.9023,-916.188,55.1725,0,0,0,0,100,0), +(@wpPathId,166,-30.3595,-904.044,55.8805,0,0,0,0,100,0), +(@wpPathId,167,-27.4496,-898.895,56.0401,0,0,0,0,100,0), +(@wpPathId,168,-28.8969,-890.134,56.0851,0,0,0,0,100,0), +(@wpPathId,169,-39.6026,-878.277,55.9009,0,0,0,0,100,0), +(@wpPathId,170,-49.9883,-864.653,55.6548,0,0,0,0,100,0), +(@wpPathId,171,-53.5191,-847.529,56.3265,0,0,0,0,100,0), +(@wpPathId,172,-45.6486,-827.843,57.0118,0,0,0,0,100,0), +(@wpPathId,173,-30.2519,-815.667,57.6413,0,0,0,0,100,0), +(@wpPathId,174,-18.748,-801.928,58.75,0,0,0,0,100,0), +(@wpPathId,175,-16.2843,-788.799,59.5083,0,0,0,0,100,0), +(@wpPathId,176,-22.8308,-761.081,62.172,0,0,0,0,100,0), +(@wpPathId,177,-18.7154,-740.543,65.6946,0,0,0,0,100,0), +(@wpPathId,178,-17.5494,-726.441,68.377,0,0,0,0,100,0), +(@wpPathId,179,-21.3868,-718.702,69.3223,0,0,0,0,100,0), +(@wpPathId,180,-34.1316,-715.917,69.0751,0,0,0,0,100,0), +(@wpPathId,181,-60.9359,-717.195,68.3029,0,0,0,0,100,0), +(@wpPathId,182,-80.9546,-715.894,67.9737,0,0,0,0,100,0), +(@wpPathId,183,-106.424,-713.731,65.3761,0,0,0,0,100,0), +(@wpPathId,184,-137.902,-714.769,64.7226,0,0,0,0,100,0), +(@wpPathId,185,-172.878,-715.923,63.6948,0,0,0,0,100,0), +(@wpPathId,186,-193.71,-718.413,63.0221,0,0,0,0,100,0), +(@wpPathId,187,-216.695,-722.939,61.1133,0,0,0,0,100,0), +(@wpPathId,188,-247.633,-730.432,58.4478,0,0,0,0,100,0), +(@wpPathId,189,-273.719,-738.461,56.7533,0,0,0,0,100,0), +(@wpPathId,190,-299.708,-746.781,55.6276,0,0,0,0,100,0), +(@wpPathId,191,-329.496,-757.193,53.9239,0,0,0,0,100,0), +(@wpPathId,192,-354.54,-768.04,54.2285,0,0,0,0,100,0), +(@wpPathId,193,-375.293,-777.319,54.4701,0,0,0,0,100,0), +(@wpPathId,194,-383.495,-784.036,54.6087,0,0,0,0,100,0), +(@wpPathId,195,-396.589,-802.639,54.5903,0,0,0,0,100,0), +(@wpPathId,196,-409.141,-821.598,53.6989,0,0,0,0,100,0), +(@wpPathId,197,-420.379,-835.882,52.5394,0,0,0,0,100,0), +(@wpPathId,198,-434.7,-853.557,48.7153,0,0,0,0,100,0), +(@wpPathId,199,-451.476,-875.092,43.2386,0,0,0,0,100,0), +(@wpPathId,200,-468.216,-896.654,37.8402,0,0,0,0,100,0), +(@wpPathId,201,-479.431,-916.404,34.5483,0,0,0,0,100,0), +(@wpPathId,202,-483.477,-929.436,34.0016,0,0,0,0,100,0), +(@wpPathId,203,-486.836,-942.665,34.6166,0,0,0,0,100,0), +(@wpPathId,204,-490.311,-955.864,33.8972,0,0,0,0,100,0), +(@wpPathId,205,-494.413,-978.225,37.0571,0,0,0,0,100,0), +(@wpPathId,206,-495.922,-996.353,39.9845,0,0,0,0,100,0), +(@wpPathId,207,-501.894,-1021.3,44.1397,0,0,0,0,100,0), +(@wpPathId,208,-508.274,-1036.2,47.7283,0,0,0,0,100,0), +(@wpPathId,209,-521.649,-1054.57,52.0204,0,0,0,0,100,0), +(@wpPathId,210,-536.872,-1071.44,56.0008,0,0,0,0,100,0), +(@wpPathId,211,-556.428,-1090.44,59.4959,0,0,0,0,100,0), +(@wpPathId,212,-569.52,-1109.03,63.3078,0,0,0,0,100,0), +(@wpPathId,213,-580.307,-1134,65.9386,0,0,0,0,100,0), +(@wpPathId,214,-587.943,-1159.8,66.2384,0,0,0,0,100,0), +(@wpPathId,215,-599.68,-1189.38,66.071,0,0,0,0,100,0), +(@wpPathId,216,-611.207,-1214.11,66.0131,0,0,0,0,100,0), +(@wpPathId,217,-625.737,-1247.48,66.0764,0,0,0,0,100,0), +(@wpPathId,218,-644.589,-1278.51,66.0956,0,0,0,0,100,0), +(@wpPathId,219,-660.145,-1306.27,66.1604,0,0,0,0,100,0), +(@wpPathId,220,-675.672,-1328.66,66.9782,0,0,0,0,100,0), +(@wpPathId,221,-699.123,-1356.5,67.6145,0,0,0,0,100,0), +(@wpPathId,222,-718.071,-1382.09,68.1733,0,0,0,0,100,0), +(@wpPathId,223,-737.753,-1407.11,67.967,0,0,0,0,100,0), +(@wpPathId,224,-750.189,-1431.38,66.3932,0,0,0,0,100,0), +(@wpPathId,225,-764.174,-1459.99,64.0482,0,0,0,0,100,0), +(@wpPathId,226,-771.283,-1481.56,60.9477,0,0,0,0,100,0), +(@wpPathId,227,-778.669,-1502.06,58.0151,0,0,0,0,100,0), +(@wpPathId,228,-786.991,-1518,56.1296,0,0,0,0,100,0), +(@wpPathId,229,-802.538,-1540.44,54.3658,0,0,0,0,100,0), +(@wpPathId,230,-821.021,-1566.36,54.1669,0,0,0,0,100,0), +(@wpPathId,231,-834.994,-1584.29,54.2546,0,0,0,0,100,0), +(@wpPathId,232,-851.463,-1603.03,53.5575,0,0,0,0,100,0), +(@wpPathId,233,-861.063,-1612.73,52.8747,0,0,0,0,100,0), +(@wpPathId,234,-871.01,-1622.07,52.0091,0,0,0,0,100,0), +(@wpPathId,235,-884.087,-1634.72,49.907,0,0,0,0,100,0), +(@wpPathId,236,-901.22,-1649.65,47.6492,0,0,0,0,100,0), +(@wpPathId,237,-919.01,-1663.83,44.7569,0,0,0,0,100,0), +(@wpPathId,238,-936.362,-1674.18,42.1281,0,0,0,0,100,0), +(@wpPathId,239,-951.672,-1680.22,40.0861,0,0,0,0,100,0), +(@wpPathId,240,-978.641,-1684.29,37.8759,0,0,0,0,100,0), +(@wpPathId,241,-1004.88,-1684.59,37.0962,0,0,0,0,100,0), +(@wpPathId,242,-1036.73,-1684.53,36.8569,0,0,0,0,100,0), +(@wpPathId,243,-1063.92,-1686.7,38.2989,0,0,0,0,100,0), +(@wpPathId,244,-1090.65,-1692.18,40.9512,0,0,0,0,100,0), +(@wpPathId,245,-1112.34,-1698.96,45.1239,0,0,0,0,100,0), +(@wpPathId,246,-1138.5,-1706.74,48.6789,0,0,0,0,100,0), +(@wpPathId,247,-1155.85,-1712.21,51.8194,0,0,0,0,100,0), +(@wpPathId,248,-1171.71,-1719.06,54.0856,0,0,0,0,100,0), +(@wpPathId,249,-1193.8,-1735,57.0706,0,0,0,0,100,0), +(@wpPathId,250,-1213.93,-1753.41,60.187,0,0,0,0,100,0), +(@wpPathId,251,-1237.63,-1774.69,64.4626,0,0,0,0,100,0), +(@wpPathId,252,-1248.78,-1782.43,65.819,0,0,0,0,100,0), +(@wpPathId,253,-1258.66,-1786.65,66.482,0,0,0,0,100,0), +(@wpPathId,254,-1286.65,-1801.77,66.8709,0,0,0,0,100,0), +(@wpPathId,255,-1305.07,-1814.08,65.4825,0,0,0,0,100,0), +(@wpPathId,256,-1315.82,-1825.3,64.4726,0,0,0,0,100,0), +(@wpPathId,257,-1325.03,-1840.48,63.2467,0,0,0,0,100,0), +(@wpPathId,258,-1328.78,-1852.54,62.4244,0,0,0,0,100,0), +(@wpPathId,259,-1338.59,-1882.78,60.2984,0,0,0,0,100,0), +(@wpPathId,260,-1349.41,-1912.74,58.414,0,0,0,0,100,0), +(@wpPathId,261,-1361.58,-1942.17,58.429,0,0,0,0,100,0), +(@wpPathId,262,-1372.17,-1967.33,58.476,0,0,0,0,100,0), +(@wpPathId,263,-1376.43,-1980.29,58.5393,0,0,0,0,100,0), +(@wpPathId,264,-1378.99,-1998.28,59.1872,0,0,0,0,100,0), +(@wpPathId,265,-1381.75,-2030.01,60.7155,0,0,0,0,100,0), +(@wpPathId,266,-1383.96,-2066.34,62.2794,0,0,0,0,100,0), +(@wpPathId,267,-1385.64,-2093.57,63.5406,0,0,0,0,100,0), +(@wpPathId,268,-1389.12,-2129.8,64.3013,0,0,0,0,100,0), +(@wpPathId,269,-1395.05,-2161.59,64.1007,0,0,0,0,100,0), +(@wpPathId,270,-1399.36,-2183.92,63.9526,0,0,0,0,100,0), +(@wpPathId,271,-1405.66,-2210.48,63.8462,0,0,0,0,100,0), +(@wpPathId,272,-1410.75,-2227.95,63.7957,0,0,0,0,100,0), +(@wpPathId,273,-1417.65,-2244.76,63.7518,0,0,0,0,100,0), +(@wpPathId,274,-1427.39,-2259.19,63.3891,0,0,0,0,100,0), +(@wpPathId,275,-1438.66,-2273.46,63.0608,0,0,0,0,100,0), +(@wpPathId,276,-1444.57,-2283.39,62.2072,0,0,0,0,100,0), +(@wpPathId,277,-1449.32,-2302.21,61.8304,0,0,0,0,100,0), +(@wpPathId,278,-1450.22,-2324.94,61.7334,0,0,0,0,100,0), +(@wpPathId,279,-1450.08,-2347.68,61.5991,0,0,0,0,100,0), +(@wpPathId,280,-1449.96,-2365.88,61.4915,0,0,0,0,100,0), +(@wpPathId,281,-1450.25,-2388.62,61.3176,0,0,0,0,100,0), +(@wpPathId,282,-1450.85,-2402.24,60.7831,0,0,0,0,100,0), +(@wpPathId,283,-1457.88,-2418.95,58.9511,0,0,0,0,100,0), +(@wpPathId,284,-1473.83,-2435.1,56.4162,0,0,0,0,100,0), +(@wpPathId,285,-1491.02,-2449.99,53.7364,0,0,0,0,100,0), +(@wpPathId,286,-1505.01,-2461.63,52.9892,0,0,0,0,100,0), +(@wpPathId,287,-1519.04,-2473.22,53.2747,0,0,0,0,100,0), +(@wpPathId,288,-1536.46,-2487.83,53.5903,0,0,0,0,100,0), +(@wpPathId,289,-1545.19,-2496.39,54.1743,0,0,0,0,100,0), +(@wpPathId,290,-1550.28,-2506.8,53.9085,0,0,0,0,100,0), +(@wpPathId,291,-1554.16,-2515.03,53.3954,0,0,0,0,100,0), +(@wpPathId,292,-1560.37,-2527.18,52.3382,0,0,0,0,100,0), +(@wpPathId,293,-1567.58,-2549.4,50.7789,0,0,0,0,100,0), +(@wpPathId,294,-1567.29,-2570.35,49.3619,0,0,0,0,100,0), +(@wpPathId,295,-1562.37,-2591.16,48.5309,0,0,0,0,100,0), +(@wpPathId,296,-1557.69,-2603.97,47.8564,0,0,0,0,100,0), +(@wpPathId,297,-1555.93,-2619.39,45.2651,0,0,0,0,100,0), +(@wpPathId,298,-1555.27,-2642.13,41.156,0,0,0,0,100,0), +(@wpPathId,299,-1557.99,-2669.24,36.7433,0,0,0,0,100,0), +(@wpPathId,300,-1564.24,-2685.93,35.3788,0,0,0,0,100,0), +(@wpPathId,301,-1570.22,-2693.06,34.7322,0,0,0,0,100,0), +(@wpPathId,302,-1585.9,-2709.52,35.9957,0,0,0,0,100,0), +(@wpPathId,303,-1597.38,-2723.02,37.1346,0,0,0,0,100,0), +(@wpPathId,304,-1606.15,-2738.58,37.5876,0,0,0,0,100,0), +(@wpPathId,305,-1610.13,-2756.28,37.2692,0,0,0,0,100,0), +(@wpPathId,306,-1612.47,-2774.32,36.3171,0,0,0,0,100,0), +(@wpPathId,307,-1617.11,-2801.22,34.8703,0,0,0,0,100,0), +(@wpPathId,308,-1620.57,-2819.08,33.8744,0,0,0,0,100,0), +(@wpPathId,309,-1625.11,-2841.37,32.3162,0,0,0,0,100,0), +(@wpPathId,310,-1632.1,-2867.75,30.009,0,0,0,0,100,0), +(@wpPathId,311,-1638.53,-2884.76,27.7024,0,0,0,0,100,0), +(@wpPathId,312,-1644,-2901.43,26.3001,0,0,0,0,100,0), +(@wpPathId,313,-1641.88,-2915.77,26.7946,0,0,0,0,100,0), +(@wpPathId,314,-1637.81,-2933.46,28.1655,0,0,0,0,100,0), +(@wpPathId,315,-1638.86,-2944.22,28.5141,0,0,0,0,100,0), +(@wpPathId,316,-1643.12,-2959.2,27.6933,0,0,0,0,100,0), +(@wpPathId,317,-1645.97,-2971.19,26.3978,0,0,0,0,100,0), +(@wpPathId,318,-1645.94,-2988.94,23.7789,0,0,0,0,100,0), +(@wpPathId,319,-1640.24,-3005.1,20.8809,0,0,0,0,100,0), +(@wpPathId,320,-1634.33,-3012.31,19.4302,0,0,0,0,100,0), +(@wpPathId,321,-1604.85,-3044.09,14.9102,0,0,0,0,100,0), +(@wpPathId,322,-1584.7,-3059.58,12.848,0,0,0,0,100,0), +(@wpPathId,323,-1569.47,-3066.36,13.156,0,0,0,0,100,0), +(@wpPathId,324,-1559.23,-3066.54,13.1732,0,0,0,0,100,0), +(@wpPathId,325,-1551.49,-3056.18,13.011,0,0,0,0,100,0), +(@wpPathId,326,-1551.22,-3043.06,13.002,0,0,0,0,100,0), +(@wpPathId,327,-1552.52,-3029.32,13.6458,5.009628,0,0,0,100,0); -- ends at same coords as WP 1 + +-- Assign path and formation info +DELETE FROM `creature_formations` WHERE `leaderGUID`=@npcLeaderId; +INSERT INTO creature_formations (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@npcLeaderId,@npcLeaderId,0,0,2,0,0), +(@npcLeaderId,@npcFollowerId_1,3,180,2,0,0), +(@npcLeaderId,@npcFollowerId_2,3,90,2,0,0), +(@npcLeaderId,@npcFollowerId_3,3,360,2,0,0), +(@npcLeaderId,@npcFollowerId_4,3,270,2,0,0); + +DELETE FROM `creature_addon` WHERE `guid`=@npcLeaderId; +INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES +(@npcLeaderId,@wpPathId,0,0,0,0,NULL); diff --git a/sql/updates/world/2015_04_13_00_world.sql b/sql/updates/world/2015_04_13_00_world.sql new file mode 100644 index 00000000000..99484e55f87 --- /dev/null +++ b/sql/updates/world/2015_04_13_00_world.sql @@ -0,0 +1,4 @@ +DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN (34767, 34769); +INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `comment`) VALUES +(34767, 31726, 'Summon Charger - Blood Elf'), +(34769, 31726, 'Summon Warhorse - Blood Elf'); diff --git a/sql/updates/world/2015_04_18_00_world.sql b/sql/updates/world/2015_04_18_00_world.sql new file mode 100644 index 00000000000..36901a352ea --- /dev/null +++ b/sql/updates/world/2015_04_18_00_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature_template` SET `InhabitType`=3 WHERE `entry` IN (5931, 3989, 3988, 3991, 3999, 4004, 4003); diff --git a/sql/updates/world/2015_04_18_01_world.sql b/sql/updates/world/2015_04_18_01_world.sql new file mode 100644 index 00000000000..707335c490e --- /dev/null +++ b/sql/updates/world/2015_04_18_01_world.sql @@ -0,0 +1,6 @@ +-- +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=40060 AND `ConditionTypeOrReference`=29; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(15,40060,0,0,0,29,0,9461,100,0,1,0,0,'','Gor Grimgut cannot be a target for Exhaustion.'), +(15,40060,0,0,1,29,0,9461,100,0,1,0,0,'','Gor Grimgut cannot be a target for Exhaustion.'), +(15,40060,0,0,2,29,0,9461,100,0,1,0,0,'','Gor Grimgut cannot be a target for Exhaustion.'); diff --git a/sql/updates/world/2015_04_18_02_world.sql b/sql/updates/world/2015_04_18_02_world.sql new file mode 100644 index 00000000000..6a299828e26 --- /dev/null +++ b/sql/updates/world/2015_04_18_02_world.sql @@ -0,0 +1,13 @@ +-- +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=17918; +DELETE FROM `smart_scripts` WHERE `entryorguid`=17918 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES + +(17918, 0, 0, 0, 0, 0, 100, 0, 3000, 7000, 8000, 12000, 11, 31478, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,0,'Time Keeper - IC - Cast Sand Breath'), +(17918, 0, 1, 0, 0, 0, 100, 0, 5000, 10000, 20000, 30000, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Time Keeper - IC - Cast Sand Breath'); + +DELETE FROM `creature_text` WHERE `entry` IN (17918); +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(17918, 0, 0, 'Victory will be ours!', 14, 0, 100, 0, 0, 0, 15194, 0, 'Time Keeper'), +(17918, 0, 1, 'Carry on! Victory at all costs!', 14, 0, 100, 0, 0, 0, 15195, 0, 'Time Keeper'), +(17918, 0, 2, 'Continue the fight! Do not falter!', 14, 0, 100, 0, 0, 0, 15196, 0, 'Time Keeper'); diff --git a/sql/updates/world/2015_04_18_03_world.sql b/sql/updates/world/2015_04_18_03_world.sql new file mode 100644 index 00000000000..cc6d3d65dea --- /dev/null +++ b/sql/updates/world/2015_04_18_03_world.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = 54355 AND `spell_effect` = 54402; +INSERT INTO `spell_linked_spell` (`spell_trigger`,`spell_effect`,`type`,`comment`) VALUES +(54355, 54402, 0, 'Land Mine'); diff --git a/sql/updates/world/2015_04_18_04_world.sql b/sql/updates/world/2015_04_18_04_world.sql new file mode 100644 index 00000000000..cad194dafae --- /dev/null +++ b/sql/updates/world/2015_04_18_04_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `spell_proc_event` SET `SchoolMask`=126 WHERE `entry`=71564; diff --git a/sql/updates/world/2015_04_18_05_world.sql b/sql/updates/world/2015_04_18_05_world.sql new file mode 100644 index 00000000000..b61ff01bdfc --- /dev/null +++ b/sql/updates/world/2015_04_18_05_world.sql @@ -0,0 +1,9 @@ +-- +DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN (-24869, -61874, -71074, -71068, -71073, -71071) AND `spell_effect` = 24870; +INSERT INTO `spell_linked_spell` (`spell_trigger`,`spell_effect`,`type`,`comment`) VALUES +(-24869, 24870, 0, 'Bobbing Apple, Bread of the Dead, Winter Veil Cookie'), +(-61874, 24870, 0, 'Noblegarden Chocolate'), +(-71074, 24870, 0, 'Buttermilk Delight'), +(-71068, 24870, 0, 'Sweet Surprise'), +(-71073, 24870, 0, 'Dark Desire'), +(-71071, 24870, 0, 'Very Berry Cream'); diff --git a/sql/updates/world/2015_04_18_05_world_335.sql b/sql/updates/world/2015_04_18_05_world_335.sql new file mode 100644 index 00000000000..b81ab654016 --- /dev/null +++ b/sql/updates/world/2015_04_18_05_world_335.sql @@ -0,0 +1,32 @@ +-- +DELETE FROM `gossip_menu` WHERE `entry`=10144 AND `text_id`=14088; +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (10144, 14088); + +DELETE FROM `gossip_menu_option` WHERE `menu_id` = 10144; +INSERT INTO `gossip_menu_option` (`menu_id`, id, option_icon, `option_text`, `OptionBroadcastTextID`, `option_id`, `npc_option_npcflag`, `action_menu_id`) VALUES +(10144, 0, 0, 'I''m interested.', 32566, 1, 1, 0), +(10144, 1, 0, 'I''m interested.', 32566, 1, 1, 0); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=14 AND `SourceGroup`=10144; +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=10144; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`,`NegativeCondition`) VALUES +(15,10144,0,0,27,77,3,0,0,'','The player must be level 77 or higher', 0), +(15,10144,0,0,25,54197,0,0,0,'','Show the gossip if the player doesn''t learn Cold Weather Flying', 1), +(15,10144,0,0,2,44221,1,1,0,'','Show the gossip if the player doesn''t have the item', 1), +(15,10144,0,0,16,1101,0,0,0,'','Show the gossip if the player is from the alliance', 0), +(15,10144,1,0,27,77,3,0,0,'','The player must be level 77 or higher', 0), +(15,10144,1,0,25,54197,0,0,0,'','Show the gossip if the player doesn''t learn Cold Weather Flying', 1), +(15,10144,1,0,2,44229,1,1,0,'','Show the gossip if the player doesn''t have the item', 1), +(15,10144,1,0,16,690,0,0,0,'','Show the gossip if the player is from the horde', 0), +(14,10144,14088,0,27,77,3,0,0,'','Show the text if the player is level 77 or higher', 0), +(14,10144,14088,0,25,54197,0,0,0,'','Show the text if the player doesn''t learn Cold Weather Flying', 1), +(14,10144,14088,0,2,44221,1,1,0,'','Show the text if the player doesn''t have the item', 1), +(14,10144,14088,0,2,44229,1,1,0,'','Show the text if the player doesn''t have the item', 1); + +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=30464; +DELETE FROM `smart_scripts` WHERE `entryorguid` = 30464 AND `source_type` = 0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(30464, 0, 0, 1, 62, 0, 100, 0, 10144, 0, 0, 0, 85, 60126, 1, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, '"Honest" Max - On Gossip select - additem'), +(30464, 0, 1, 0, 61, 0, 100, 0, 10144, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, '"Honest" Max - On Gossip select - close gossip'), +(30464, 0, 2, 3, 62, 0, 100, 0, 10144, 1, 0, 0, 85, 60128, 1, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, '"Honest" Max - On Gossip select - additem'), +(30464, 0, 3, 0, 61, 0, 100, 0, 10144, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, '"Honest" Max - On Gossip select - close gossip'); diff --git a/sql/updates/world/2015_04_18_06_world.sql b/sql/updates/world/2015_04_18_06_world.sql new file mode 100644 index 00000000000..aa532de444b --- /dev/null +++ b/sql/updates/world/2015_04_18_06_world.sql @@ -0,0 +1,5 @@ +DELETE FROM `smart_scripts` WHERE `entryorguid`=26472 AND `source_type`=0 AND `id` IN(4,5,6); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(26472, 0, 4, 5, 8, 0, 100, 1, 49319, 0, 0, 0, 89, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Highland Mustang - On Spellhit \'Scare Highland Mustang\' - Flee For Assist (No Repeat)'), +(26472, 0, 5, 6, 61, 0, 100, 0, 0, 0, 0, 0, 11, 49323, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Highland Mustang - On Spellhit \'Scare Highland Mustang\' - Cast \'Highland Mustang Spooking Credit\' (No Repeat)'), +(26472, 0, 6, 0, 61, 0, 100, 0, 0, 0, 0, 0, 41, 5000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Highland Mustang - On Spellhit \'Scare Highland Mustang\' - Despawn In 5000 ms (No Repeat)'); diff --git a/sql/updates/world/2015_04_18_07_world.sql b/sql/updates/world/2015_04_18_07_world.sql new file mode 100644 index 00000000000..4edef92c8ad --- /dev/null +++ b/sql/updates/world/2015_04_18_07_world.sql @@ -0,0 +1 @@ +DELETE FROM `gameobject` WHERE `guid`=49312 AND `id`=187493; diff --git a/sql/updates/world/2015_04_18_08_world.sql b/sql/updates/world/2015_04_18_08_world.sql new file mode 100644 index 00000000000..43fd6f2edb5 --- /dev/null +++ b/sql/updates/world/2015_04_18_08_world.sql @@ -0,0 +1,738 @@ +SET @GUID := 143894; + +DELETE FROM `disables` WHERE `entry` = 7180 AND `sourceType` = 4; + +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN(27737); + +DELETE FROM `smart_scripts` WHERE `entryorguid` IN(27737) AND `source_type`=0; + +DELETE FROM `smart_scripts` WHERE `entryorguid` BETWEEN -@GUID-89 AND -@GUID-0 AND `source_type`=0; + +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(-@GUID-0, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-0, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-0, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-0, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-1, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-1, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-1, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-1, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-2, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-2, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-2, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-2, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-3, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-3, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-3, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-3, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-4, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-4, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-4, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-4, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-5, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-5, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-5, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-5, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-6, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-6, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-6, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-6, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-7, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-7, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-7, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-7, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-8, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-8, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-8, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-8, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-9, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-9, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-9, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-9, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-10, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-10, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-10, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-10, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-11, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-11, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-11, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-11, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-12, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-12, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-12, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-12, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-13, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-13, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-13, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-13, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-14, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-14, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-14, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-14, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-15, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-15, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-15, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-15, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-16, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-16, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-16, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-16, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-17, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-17, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-17, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-17, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-18, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-18, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-18, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-18, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-19, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-19, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-19, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-19, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-20, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-20, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-20, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-20, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-21, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-21, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-21, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-21, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-22, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-22, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-22, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-22, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-23, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-23, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-23, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-23, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-24, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-24, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-24, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-24, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-25, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-25, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-25, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-25, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-26, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-26, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-26, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-26, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-27, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-27, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-27, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-27, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-28, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-28, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-28, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-28, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-29, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-29, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-29, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-29, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-30, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-30, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-30, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-30, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-31, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-31, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-31, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-31, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-32, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-32, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-32, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-32, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-33, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-33, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-33, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-33, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-34, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-34, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-34, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-34, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-35, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-35, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-35, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-35, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-36, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-36, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-36, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-36, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-37, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-37, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-37, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-37, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-38, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-38, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-38, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-38, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-39, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-39, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-39, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-39, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-40, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-40, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-40, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-40, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-41, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-41, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-41, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-41, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-42, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-42, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-42, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-42, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-43, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-43, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-43, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-43, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-44, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-44, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-44, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-44, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-45, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-45, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-45, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-45, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-46, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-46, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-46, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-46, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-47, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-47, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-47, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-47, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-48, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-48, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-48, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-48, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-49, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-49, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-49, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-49, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-50, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-50, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-50, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-50, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-51, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-51, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-51, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-51, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-52, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-52, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-52, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-52, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-53, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-53, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-53, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-53, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-54, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-54, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-54, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-54, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-59, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-59, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-59, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-59, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-60, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-60, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-60, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-60, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-61, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-61, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-61, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-61, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-62, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-62, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-62, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-62, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-63, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-63, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-63, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-63, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-64, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-64, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-64, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-64, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-65, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-65, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-65, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-65, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-66, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-66, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-66, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-66, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-67, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-67, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-67, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-67, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-68, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-68, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-68, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-68, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-69, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-69, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-69, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-69, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-70, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-70, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-70, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-70, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-71, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-71, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-71, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-71, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-72, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-72, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-72, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-72, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-73, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-73, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-73, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-73, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-74, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-74, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-74, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-74, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-75, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-75, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-75, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-75, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-76, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-76, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-76, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-76, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-77, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-77, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-77, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-77, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-78, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-78, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-78, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-78, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-79, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-79, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-79, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-79, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-80, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-80, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-80, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-80, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-81, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-81, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-81, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-81, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-82, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-82, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-82, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-82, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-83, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-83, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-83, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-83, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-84, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-84, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-84, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-84, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-85, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-85, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-85, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-85, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-86, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-86, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-86, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-86, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-87, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-87, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-87, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-87, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-88, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-88, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-88, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-88, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-89, 0, 0, 1, 1, 0, 100, 1, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Remove Unit Flags (No repeat)'), +(-@GUID-89, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'), +(-@GUID-89, 0, 2, 3, 11, 0, 100, 1, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - On Spawn - Set Unit Flags (No repeat)'), +(-@GUID-89, 0, 3, 0, 61, 0, 100, 1, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Risen Zombie - OOC - Set Visible (No repeat)'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry` BETWEEN -@GUID-89 AND -@GUID-0; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22, 1, -@GUID-0, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-0, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-1, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-1, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-2, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-2, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-3, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-3, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-4, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-4, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-5, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-5, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-6, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-6, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-7, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-7, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-8, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-8, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-9, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-9, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-10, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-10, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-11, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-11, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-12, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-12, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-13, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-13, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-14, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-14, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-15, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-15, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-16, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-16, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-17, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-17, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-18, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-18, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-19, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-19, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-20, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-20, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-21, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-21, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-22, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-22, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-23, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-23, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-24, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-24, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-25, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-25, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-26, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-26, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-27, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-27, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-28, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-28, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-29, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-29, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-30, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-30, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-31, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-31, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-32, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-32, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-33, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-33, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-34, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-34, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-35, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-35, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-36, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-36, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-37, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-37, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-38, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-38, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-39, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-39, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-40, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-40, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-41, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-41, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-42, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-42, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-43, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-43, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-44, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-44, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-45, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-45, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-46, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-46, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-47, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-47, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-48, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-48, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-49, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-49, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-50, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-50, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-51, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-51, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-52, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-52, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-53, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-53, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-54, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-54, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-59, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-59, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-60, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-60, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-61, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-61, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-62, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-62, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-63, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-63, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-64, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-64, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-65, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-65, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-66, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-66, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-67, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-67, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-68, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-68, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-69, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-69, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-70, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-70, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-71, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-71, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-72, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-72, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-73, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-73, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-74, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-74, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-75, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-75, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-76, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-76, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-77, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-77, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-78, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-78, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-79, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-79, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-80, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-80, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-81, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-81, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-82, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-82, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-83, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-83, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-84, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-84, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-85, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-85, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-86, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-86, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-87, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-87, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-88, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-88, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'), +(22, 1, -@GUID-89, 0, 0, 13, 1, 0, 1, 2, 0, 0, 0, '', 'Execute SAI only if Arthas Started'), +(22, 1, -@GUID-89, 0, 0, 13, 1, 2, 3, 2, 1, 0, 0, '', 'Execute SAI only if Salramm not done'); + + +DELETE FROM `creature` WHERE `id` IN(27737,27731);-- 55 - 58 +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +-- 1st Half +(@GUID+0, 27737, 595, 3, 1, 2161.82, 1354.491, 131.1483, 2.331408, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+1, 27737, 595, 3, 1, 2236.563, 1186.729, 136.1916, 4.947702, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+2, 27737, 595, 3, 1, 2182.118, 1267.972, 133.9415, 2.251475, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+3, 27737, 595, 3, 1, 2180.779, 1249.29, 136.1283, 2.05123, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+4, 27737, 595, 3, 1, 2256.721, 1159.953, 138.1671, 0.2378878, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+5, 27737, 595, 3, 1, 2178.129, 1342.832, 130.0959, 2.633242, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+6, 27737, 595, 3, 1, 2184.672, 1283.357, 134.2776, 5.951573, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+7, 27737, 595, 3, 1, 2182.101, 1349.334, 130.5124, 0.9876914, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+8, 27737, 595, 3, 1, 2346.691, 1176.774, 130.5827, 2.633849, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+9, 27737, 595, 3, 1, 2317.5, 1182.395, 134.5855, 0.2704094, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+10, 27737, 595, 3, 1, 2342.65, 1201.867, 130.8089, 5.009095, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+11, 27737, 595, 3, 1, 2204.984, 1335.487, 129.7152, 5.232573, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+12, 27737, 595, 3, 1, 2235.223, 1169.072, 137.4158, 1.448623, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+13, 27737, 595, 3, 1, 2159.948, 1260.771, 134.5026, 0.2792527, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+14, 27737, 595, 3, 1, 2290.749, 1180.91, 137.9212, 3.518519, 240, 5, 1), -- 27737 (Area: 4100) 1 +(@GUID+15, 27737, 595, 3, 1, 2140.347, 1343.273, 132.1016, 1.710423, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+16, 27737, 595, 3, 1, 2308.356, 1170.963, 136.3496, 6.255137, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+17, 27737, 595, 3, 1, 2186.262, 1322.747, 129.9056, 3.620198, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+18, 27737, 595, 3, 1, 2147.991, 1358.539, 132.3033, 3.856933, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+19, 27737, 595, 3, 1, 2182.792, 1293.969, 133.0651, 0.05565223, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+20, 27737, 595, 3, 1, 2216.737, 1197.397, 136.0267, 1.573244, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+21, 27737, 595, 3, 1, 2267.147, 1175.45, 137.9304, 5.129838, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+22, 27737, 595, 3, 1, 2170.33, 1308.926, 132.1849, 3.249883, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+23, 27737, 595, 3, 1, 2166.907, 1260.357, 133.9678, 1.839856, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+24, 27737, 595, 3, 1, 2162.47, 1298.826, 133.6364, 4.921828, 240, 5, 1), -- 27737 (Area: 4100) 1 +(@GUID+25, 27737, 595, 3, 1, 2250.398, 1178.572, 137.4704, 6.230714, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+26, 27737, 595, 3, 1, 2168.266, 1285.917, 133.0716, 0.3473166, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+27, 27737, 595, 3, 1, 2162.47, 1298.826, 133.6364, 4.921828, 240, 5, 1), -- 27737 (Area: 4100) 1 +(@GUID+28, 27737, 595, 3, 1, 2156.109, 1350.486, 131.7296, 3.737586, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+29, 27737, 595, 3, 1, 2177.279, 1286.727, 133.2539, 1.043647, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+30, 27737, 595, 3, 1, 2163.427, 1275.624, 133.6055, 2.009026, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+31, 27737, 595, 3, 1, 2207.282, 1326.216, 129.5644, 1.15092, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+32, 27737, 595, 3, 1, 2197.55, 1343.202, 130.5129, 3.780437, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+33, 27737, 595, 3, 1, 2187.311, 1333.527, 130.1098, 5.819355, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+34, 27737, 595, 3, 1, 2198.283, 1323.173, 130.42, 3.730995, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+35, 27737, 595, 3, 1, 2166.612, 1293.848, 133.2112, 3.054326, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+36, 27737, 595, 3, 1, 2180.712, 1305.788, 131.7394, 3.38325, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+37, 27737, 595, 3, 1, 2134.044, 1359.902, 132.1847, 1.668735, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+38, 27737, 595, 3, 1, 2177.545, 1257.854, 135.0027, 0.02948252, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+39, 27737, 595, 3, 1, 2172.916, 1345.946, 130.3247, 0.3643927, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+40, 27737, 595, 3, 1, 2170.042, 1244.831, 136.1126, 4.301986, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+41, 27737, 595, 3, 1, 2144.03, 1282.192, 134.9001, 6.184534, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+42, 27737, 595, 3, 1, 2127.322, 1343.184, 131.1696, 0.8850852, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+43, 27737, 595, 3, 1, 2173.298, 1327.852, 130.4678, 4.017004, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+44, 27737, 595, 3, 1, 2345.861, 1199.473, 130.6499, 1.27409, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+45, 27737, 595, 3, 1, 2221.904, 1186.763, 135.7659, 2.080931, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+46, 27737, 595, 3, 1, 2324.541, 1174.526, 133.7252, 5.438884, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+47, 27737, 595, 3, 1, 2352.759, 1187.038, 130.4972, 2.111265, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+48, 27737, 595, 3, 1, 2241.31, 1168.949, 137.4646, 2.288553, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+49, 27737, 595, 3, 1, 2277.496, 1175.328, 137.7658, 4.471868, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+50, 27737, 595, 3, 1, 2240.862, 1183.754, 136.7626, 1.269583, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+51, 27737, 595, 3, 1, 2215.602, 1198.933, 136.0747, 3.191143, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+52, 27737, 595, 3, 1, 2253.736, 1173.219, 138.1033, 3.833174, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+53, 27737, 595, 3, 1, 2301.188, 1177.337, 136.9212, 0.4530731, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+54, 27737, 595, 3, 1, 2256.917, 1158.745, 138.2293, 3.033373, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+55, 27731, 595, 3, 1, 2256.084, 1157.831, 138.2716, 1.364949, 240, 5, 1), -- 27731 (Area: 4100) 1 +(@GUID+56, 27731, 595, 3, 1, 2253.797, 1169.233, 138.2792, 1.436542, 240, 5, 1), -- 27731 (Area: 4100) 1 +(@GUID+57, 27731, 595, 3, 1, 2257.816, 1162.377, 138.0986, 0.9713849, 240, 5, 1), -- 27731 (Area: 4100) 1 +(@GUID+58, 27731, 595, 3, 1, 2262.165, 1166.002, 138.1224, 1.240342, 240, 5, 1), -- 27731 (Area: 4100) 1 +(@GUID+59, 27737, 595, 3, 1, 2281.302, 1141.813, 137.9214, 5.003052, 240, 5, 1), -- 27737 (Area: 4100) 1 +(@GUID+60, 27737, 595, 3, 1, 2250.17, 1166.411, 138.147, 0.3446127, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+61, 27737, 595, 3, 1, 2228.241, 1176.167, 136.5662, 5.933817, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+62, 27737, 595, 3, 1, 2300.582, 1183.189, 137.4008, 0.9829545, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+63, 27737, 595, 3, 1, 2260.475, 1178.165, 138.4617, 1.953951, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+64, 27737, 595, 3, 1, 2314.233, 1173.99, 135.4144, 3.033998, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+65, 27737, 595, 3, 1, 2330.992, 1179.689, 131.6598, 0.2531269, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+66, 27737, 595, 3, 1, 2285.286, 1176.464, 137.7416, 4.279643, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+67, 27737, 595, 3, 1, 2226.437, 1192.199, 135.8167, 1.753368, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+68, 27737, 595, 3, 1, 2354.042, 1179.965, 130.7275, 1.108088, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+69, 27737, 595, 3, 1, 2242.06, 1175.723, 137.1995, 6.210336, 240, 5, 1), -- 27737 (Area: 4100) 1 +(@GUID+70, 27737, 595, 3, 1, 2346.105, 1194.632, 130.6152, 1.745329, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+71, 27737, 595, 3, 1, 2186.328, 1311.786, 130.9303, 4.978087, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+72, 27737, 595, 3, 1, 2115.17, 1363.209, 131.0886, 3.417473, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+73, 27737, 595, 3, 1, 2171.35, 1317.278, 131.321, 2.759058, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+74, 27737, 595, 3, 1, 2159.191, 1349.993, 131.5126, 3.911789, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+75, 27737, 595, 3, 1, 2141.456, 1363.355, 132.3215, 1.991677, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+76, 27737, 595, 3, 1, 2183.169, 1328.252, 129.9512, 5.934655, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+77, 27737, 595, 3, 1, 2183.9, 1300.783, 132.3583, 2.234651, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+78, 27737, 595, 3, 1, 2194.571, 1332.426, 129.9806, 2.67068, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+79, 27737, 595, 3, 1, 2169.268, 1278.101, 133.2, 4.272601, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+80, 27737, 595, 3, 1, 2163.175, 1357.961, 131.71, 3.281193, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+81, 27737, 595, 3, 1, 2115.964, 1345.561, 131.5159, 5.410521, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+82, 27737, 595, 3, 1, 2171.605, 1335.377, 130.2321, 3.992525, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+83, 27737, 595, 3, 1, 2126.402, 1362.936, 131.2733, 3.310562, 240, 5, 1), -- 27737 (Area: 4100) 1 +(@GUID+84, 27737, 595, 3, 1, 2173.577, 1264.115, 133.8741, 1.023024, 240, 5, 1), -- 27737 (Area: 4100) 1 +(@GUID+85, 27737, 595, 3, 1, 2208.027, 1335.281, 129.5424, 1.518706, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+86, 27737, 595, 3, 1, 2171.453, 1301.018, 132.7366, 0.2901765, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+87, 27737, 595, 3, 1, 2169.414, 1250.857, 135.2106, 2.8393, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+88, 27737, 595, 3, 1, 2132.141, 1346.274, 131.2455, 2.690396, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +(@GUID+89, 27737, 595, 3, 1, 2158.416, 1280.064, 133.8115, 5.935702, 240, 5, 1), -- 27737 (Area: 4100) (Auras: ) 1 +-- Second Half +(@GUID+90, 27731, 595, 3, 1, 2500.738, 1360.329, 131.1847, 1.937315, 120, 5, 1), -- 27731 (Area: 4100) +(@GUID+91, 27737, 595, 3, 1, 2564.911, 1178.225, 126.5099, 0.715585, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+92, 27731, 595, 3, 1, 2572.829, 1156.034, 126.4628, 2.289771, 120, 5, 1), -- 27731 (Area: 4100) (Auras: ) +(@GUID+93, 27737, 595, 3, 1, 2546.042, 1227.147, 127.048, 2.86234, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+94, 27737, 595, 3, 1, 2549.196, 1213.742, 127.6477, 5.201081, 120, 5, 1), -- 27737 (Area: 4100) +(@GUID+95, 27737, 595, 3, 1, 2574.684, 1153.874, 126.5534, 5.009095, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+96, 27737, 595, 3, 1, 2565.958, 1167.619, 127.0209, 2.356194, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+97, 27737, 595, 3, 1, 2558.278, 1169.111, 128.0473, 4.29351, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+98, 27737, 595, 3, 1, 2534.67, 1255.3, 127.0307, 3.926991, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+99, 27737, 595, 3, 1, 2551.866, 1232.249, 125.6097, 2.635447, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+100, 27737, 595, 3, 1, 2559.216, 1178.839, 127.2618, 3.089233, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+101, 27737, 595, 3, 1, 2533.401, 1263.405, 127.5351, 3.926991, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+102, 27731, 595, 3, 1, 2574.436, 1155.751, 126.4111, 3.559219, 120, 5, 1), -- 27731 (Area: 4100) (Auras: ) +(@GUID+103, 27737, 595, 3, 1, 2564.436, 1152.985, 127.6109, 4.642576, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+104, 27737, 595, 3, 1, 2510.611, 1279.379, 129.8318, 1.570796, 120, 5, 1), -- 27737 (Area: 4100) +(@GUID+105, 27737, 595, 3, 1, 2558.396, 1221.108, 125.4641, 3.438299, 120, 5, 1), -- 27737 (Area: 4100) +(@GUID+106, 27737, 595, 3, 1, 2547.228, 1241.545, 125.8737, 4.415683, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+107, 27737, 595, 3, 1, 2556.666, 1234.75, 125.8504, 0.4363323, 120, 5, 1), -- 27737 (Area: 4100) +(@GUID+108, 27737, 595, 3, 1, 2558.199, 1195.568, 126.8055, 4.380776, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+109, 27737, 595, 3, 1, 2561.93, 1157.015, 127.7777, 1.832596, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+110, 27731, 595, 3, 1, 2573.595, 1157.235, 126.3465, 1.509647, 120, 5, 1), -- 27731 (Area: 4100) (Auras: ) +(@GUID+111, 27737, 595, 3, 1, 2556.297, 1145.754, 129.0501, 3.106686, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+112, 27737, 595, 3, 1, 2569.254, 1205.719, 125.4004, 5.002082, 120, 5, 1), -- 27737 (Area: 4100) (Auras: 42726 - 42726) +(@GUID+113, 27737, 595, 3, 1, 2572.153, 1146.823, 126.8599, 2.70526, 120, 5, 1), -- 27737 (Area: 4100) +(@GUID+114, 27737, 595, 3, 1, 2538.41, 1241.072, 126.9086, 4.886922, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+115, 27731, 595, 3, 1, 2500.738, 1360.329, 131.1847, 2.409203, 120, 5, 1), -- 27731 (Area: 4100) (Auras: ) (possible waypoints or random movement) +(@GUID+116, 27737, 595, 3, 1, 2469.409, 1391.765, 129.9645, 0.01745329, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+117, 27737, 595, 3, 1, 2480.067, 1378.496, 129.6512, 5.951573, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+118, 27737, 595, 3, 1, 2496.575, 1365.8, 130.7648, 3.263766, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+119, 27737, 595, 3, 1, 2507.699, 1291.871, 131.0477, 4.13643, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+120, 27737, 595, 3, 1, 2520.572, 1286.806, 129.7177, 2.146755, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+121, 27737, 595, 3, 1, 2478.782, 1393.61, 130.0417, 5.253441, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+122, 27737, 595, 3, 1, 2502.809, 1348.058, 133.0128, 2.844887, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+123, 27737, 595, 3, 1, 2492.209, 1383.335, 130.4428, 5.969026, 120, 5, 1), -- 27737 (Area: 4100) +(@GUID+124, 27731, 595, 3, 1, 2498.377, 1361.939, 131.0246, 2.017789, 120, 5, 1), -- 27731 (Area: 4100) (Auras: ) (possible waypoints or random movement) +(@GUID+125, 27737, 595, 3, 1, 2465.855, 1409.319, 130.7084, 1.658063, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+126, 27731, 595, 3, 1, 2497.87, 1359.616, 131.4152, 2.273972, 120, 5, 1), -- 27731 (Area: 4100) (Auras: ) (possible waypoints or random movement) +(@GUID+127, 27737, 595, 3, 1, 2567.898, 1195.905, 125.7625, 4.764749, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+128, 27737, 595, 3, 1, 2539.281, 1259.073, 126.4106, 0.8726646, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+129, 27737, 595, 3, 1, 2550.405, 1221.265, 126.6349, 5.502605, 120, 5, 1), -- 27737 (Area: 4100) (Auras: 42726 - 42726) +(@GUID+130, 27737, 595, 3, 1, 2561.143, 1165.518, 127.7086, 4.921828, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+131, 27737, 595, 3, 1, 2570.456, 1166.24, 126.5573, 3.787364, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+132, 27737, 595, 3, 1, 2523.198, 1270.922, 128.7036, 2.007129, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+133, 27737, 595, 3, 1, 2565.553, 1148.601, 127.6903, 2.670354, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+134, 27737, 595, 3, 1, 2569.308, 1188.428, 125.8085, 4.485496, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+135, 27737, 595, 3, 1, 2571.416, 1161.062, 126.5842, 2.949606, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+136, 27737, 595, 3, 1, 2561.565, 1211.34, 125.4866, 0.1047198, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+137, 27737, 595, 3, 1, 2540.505, 1247.505, 126.4913, 0.9250245, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+138, 27737, 595, 3, 1, 2545.149, 1252.06, 126.2658, 0.2443461, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+139, 27737, 595, 3, 1, 2551.554, 1239.584, 125.4468, 4.590216, 120, 5, 1), -- 27737 (Area: 4100) +(@GUID+140, 27737, 595, 3, 1, 2550.498, 1247.44, 125.5242, 4.24115, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+141, 27737, 595, 3, 1, 2555.76, 1206.637, 126.8258, 1.762783, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+142, 27737, 595, 3, 1, 2570.634, 1178.631, 125.9873, 2.670354, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+143, 27737, 595, 3, 1, 2544.546, 1233.477, 126.8366, 0.2617994, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+144, 27737, 595, 3, 1, 2561.324, 1186.026, 126.4857, 3.996804, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+145, 27737, 595, 3, 1, 2571.687, 1164.973, 126.3542, 2.063297, 120, 5, 1), -- 27737 (Area: 4100) (Auras: 42726 - 42726) +(@GUID+146, 27737, 595, 3, 1, 2563.486, 1192.775, 126.1027, 2.111848, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+147, 27737, 595, 3, 1, 2563.203, 1203.705, 125.7591, 6.265732, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+148, 27737, 595, 3, 1, 2574.435, 1170.58, 126.0365, 4.13643, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+149, 27737, 595, 3, 1, 2519.148, 1282.076, 129.3335, 1.675516, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+150, 27737, 595, 3, 1, 2487.284, 1355.895, 132.0378, 5.166174, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+151, 27737, 595, 3, 1, 2486.355, 1381.331, 130.2177, 0.8377581, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+152, 27737, 595, 3, 1, 2537.23, 1274.154, 127.247, 5.201081, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+153, 27737, 595, 3, 1, 2482.333, 1378.755, 129.8668, 4.445682, 120, 5, 1), -- 27737 (Area: 4100) (Auras: 42726 - 42726) +(@GUID+154, 27737, 595, 3, 1, 2514.438, 1294.972, 130.8045, 4.537856, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+155, 27737, 595, 3, 1, 2495.49, 1351.598, 132.5921, 5.899213, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+156, 27737, 595, 3, 1, 2527.383, 1289.23, 129.802, 0.6457718, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+157, 27737, 595, 3, 1, 2488.743, 1364.121, 130.6187, 0.9599311, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+158, 27737, 595, 3, 1, 2492.943, 1370.252, 130.7567, 4.747295, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+159, 27737, 595, 3, 1, 2527.926, 1279.266, 128.2349, 2.111848, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+160, 27737, 595, 3, 1, 2512.307, 1285.777, 130.3244, 1.361357, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+161, 27737, 595, 3, 1, 2501.182, 1354.545, 132.4567, 2.635447, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+162, 27737, 595, 3, 1, 2528.756, 1270.082, 128.0023, 2.722714, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+163, 27737, 595, 3, 1, 2534.166, 1281.988, 128.3769, 1.22173, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+164, 27737, 595, 3, 1, 2478.309, 1366.715, 130.1298, 3.036873, 120, 5, 1), -- 27737 (Area: 4100) +(@GUID+165, 27737, 595, 3, 1, 2518.97, 1276.149, 128.4369, 0.6981317, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+166, 27737, 595, 3, 1, 2539.054, 1267.989, 126.5578, 5.026548, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+167, 27737, 595, 3, 1, 2546.093, 1260.12, 126.4856, 5.113815, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+168, 27737, 595, 3, 1, 2494.707, 1357.887, 131.7789, 5.410521, 120, 5, 1), -- 27737 (Area: 4100) +(@GUID+169, 27737, 595, 3, 1, 2520.985, 1296.503, 130.6993, 1.134464, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+170, 27737, 595, 3, 1, 2483.547, 1369.328, 129.7479, 0.3141593, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+171, 27737, 595, 3, 1, 2461.695, 1405.834, 130.6046, 2.321288, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+172, 27737, 595, 3, 1, 2485.281, 1401.199, 130.993, 0.926355, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+173, 27737, 595, 3, 1, 2480.869, 1387.697, 129.9826, 1.989675, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+174, 27737, 595, 3, 1, 2484.152, 1391.818, 130.3346, 1.832596, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+175, 27737, 595, 3, 1, 2474.796, 1386.799, 129.2887, 4.18879, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+176, 27737, 595, 3, 1, 2474.894, 1398.443, 130.355, 1.780236, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+177, 27737, 595, 3, 1, 2470.626, 1403.028, 130.578, 4.223697, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+178, 27737, 595, 3, 1, 2469.058, 1411.237, 131.0699, 4.782202, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+179, 27737, 595, 3, 1, 2496.014, 1388.685, 131.2523, 3.263766, 120, 5, 1), -- 27737 (Area: 4100) +(@GUID+180, 27737, 595, 3, 1, 2463.726, 1416.033, 130.9224, 4.502949, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+181, 27737, 595, 3, 1, 2457.688, 1415.661, 130.2885, 1.343904, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+182, 27737, 595, 3, 1, 2445.796, 1420.992, 130.3097, 1.780236, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+183, 27737, 595, 3, 1, 2461.943, 1422.238, 130.9959, 5.480334, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+184, 27737, 595, 3, 1, 2437.17, 1420.377, 130.4104, 3.874631, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+185, 27737, 595, 3, 1, 2467.397, 1419.898, 131.3669, 6.178465, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+186, 27737, 595, 3, 1, 2427.73, 1416.372, 130.616, 1.343904, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+187, 27737, 595, 3, 1, 2453.945, 1422.732, 130.7179, 2.548181, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+188, 27737, 595, 3, 1, 2433.062, 1428.894, 131.3722, 4.118977, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+189, 27737, 595, 3, 1, 2446.571, 1428.854, 131.1397, 4.625123, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+190, 27737, 595, 3, 1, 2454.021, 1429.103, 131.2739, 0.2792527, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+191, 27737, 595, 3, 1, 2455.682, 1435.659, 131.8695, 4.066617, 120, 5, 1), -- 27737 (Area: 4100) +(@GUID+192, 27737, 595, 3, 1, 2427.347, 1424.508, 131.1206, 3.700098, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+193, 27737, 595, 3, 1, 2461.234, 1428.908, 131.2317, 0.418879, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+194, 27737, 595, 3, 1, 2464.28, 1425.138, 131.1465, 4.939282, 120, 5, 1), -- 27737 (Area: 4100) +(@GUID+195, 27737, 595, 3, 1, 2439.296, 1427.013, 130.9965, 0.2268928, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+196, 27737, 595, 3, 1, 2442.111, 1435.992, 131.7104, 4.13643, 120, 5, 1), -- 27737 (Area: 4100) (Auras: ) +(@GUID+197, 27731, 595, 3, 1, 2577.112, 1156.938, 126.5042, 1.466077, 120, 5, 1), -- 27731 (Area: 4100) +(@GUID+198, 27731, 595, 3, 1, 2573.414, 1154.276, 126.5274, 0.4363323, 120, 5, 1), -- 27731 (Area: 4100) +(@GUID+199, 27731, 595, 3, 1, 2575.825, 1152.61, 126.6092, 0.3490658, 120, 5, 1), -- 27731 (Area: 4100) +(@GUID+200, 27731, 595, 3, 1, 2497.87, 1359.616, 131.4152, 1.396263, 120, 5, 1), -- 27731 (Area: 4100) +(@GUID+201, 27731, 595, 3, 1, 2498.424, 1361.842, 131.0335, 1.082104, 120, 5, 1); -- 27731 (Area: 4100) diff --git a/sql/updates/world/2015_04_19_00_world.sql b/sql/updates/world/2015_04_19_00_world.sql new file mode 100644 index 00000000000..9a11cc65e77 --- /dev/null +++ b/sql/updates/world/2015_04_19_00_world.sql @@ -0,0 +1,5 @@ +-- +SET @GUID := 143596; +DELETE FROM `smart_scripts` WHERE `entryorguid` BETWEEN -@GUID-89 AND -@GUID-0 AND `source_type`=0; +UPDATE `smart_scripts` SET `action_type`=11, `action_param1`=36421 WHERE `entryorguid`= 1999500 AND `Source_type`= 9 AND `id`= 17; +UPDATE `creature` SET `MovementType`=0 WHERE `guid`=120692; diff --git a/sql/updates/world/2015_04_19_01_world.sql b/sql/updates/world/2015_04_19_01_world.sql new file mode 100644 index 00000000000..41f1629fef9 --- /dev/null +++ b/sql/updates/world/2015_04_19_01_world.sql @@ -0,0 +1 @@ +UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=36569, `action_param2`=2, `comment`='Triggger - LOS -Cast Vision Guide: Quest Complete' WHERE `entryorguid`=21321 AND `source_type`=0 AND `id`=0 AND `link`=1; diff --git a/sql/updates/world/2015_04_19_02_world.sql b/sql/updates/world/2015_04_19_02_world.sql new file mode 100644 index 00000000000..c29783ca265 --- /dev/null +++ b/sql/updates/world/2015_04_19_02_world.sql @@ -0,0 +1,83 @@ +-- Highland Mustang SAI +SET @ENTRY := 26472; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,8,0,100,0,49266,0,0,0,69,1,0,0,0,0,0,7,0,0,0,0,0,0,0,"Highland Mustang - On Spell Hit(Dangle Wild Carrot) - Move To Player"), +(@ENTRY,0,1,2,34,0,100,0,0,1,0,0,103,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Highland Mustang - On Reached Point 1 - Set Rooted Off"), +(@ENTRY,0,2,0,61,0,100,0,0,1,0,0,85,49282,0,0,0,0,0,1,0,0,0,0,0,0,0,"Highland Mustang - On Reached Point 1 - Invoker Cast 'Ride Highland Mustang'"), +(@ENTRY,0,3,0,27,0,100,0,0,0,0,0,103,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Highland Mustang - On Passenger Boarded - Remove Root"), +(@ENTRY,0,4,5,8,0,100,1,49319,0,0,0,89,10,0,0,0,0,0,1,0,0,0,0,0,0,0,"Highland Mustang - On Spellhit 'Scare Highland Mustang' - Flee For Assist (No Repeat)"), +(@ENTRY,0,5,6,61,0,100,0,0,0,0,0,11,49323,0,0,0,0,0,7,0,0,0,0,0,0,0,"Highland Mustang - On Spellhit 'Scare Highland Mustang' - Cast 'Highland Mustang Spooking Credit' (No Repeat)"), +(@ENTRY,0,6,0,61,0,100,0,0,0,0,0,41,5000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Highland Mustang - On Spellhit 'Scare Highland Mustang' - Despawn In 5000 ms (No Repeat)"); + +SET @LEADER := 105333; +DELETE FROM `creature_formations` WHERE `leaderGUID`=@LEADER; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(@LEADER, @LEADER, 0, 0, 2), +(@LEADER, 105334, 6, 20, 2), +(@LEADER, 105307, 6, 60, 2), +(@LEADER, 105327, 6, 100, 2), +(@LEADER, 105332, 6, 140, 2), +(@LEADER, 105330, 6, 180, 2), +(@LEADER, 105331, 6, 220, 2), +(@LEADER, 105310, 6, 260, 2), +(@LEADER, 105325, 6, 290, 2), +(@LEADER, 105308, 6, 340, 2); + +-- Pathing for Highland Mustang Entry: 26472 'TDB FORMAT' +SET @NPC := 105333; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4427.042,`position_y`=-4339.906,`position_z`=156.9126 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,4427.042,-4339.906,156.9126,0,0,1,0,100,0), -- 12:00:19 +(@PATH,2,4408.496,-4311.258,159.5146,0,0,1,0,100,0), -- 12:00:25 +(@PATH,3,4395.234,-4306.927,159.0624,0,0,1,0,100,0), -- 12:00:28 +(@PATH,4,4357.375,-4353.118,158.7053,0,0,1,0,100,0), -- 12:00:32 +(@PATH,5,4358.002,-4387.411,154.6664,0,0,1,0,100,0), -- 12:00:37 +(@PATH,6,4350.741,-4420.083,151.4936,0,0,1,0,100,0), -- 12:00:41 +(@PATH,7,4355.459,-4451.332,147.9055,0,0,1,0,100,0), -- 12:00:45 +(@PATH,8,4382.324,-4459.469,141.1845,0,0,1,0,100,0), -- 12:00:49 +(@PATH,9,4389.952,-4415.67,148.3579,0,0,1,0,100,0), -- 12:00:53 +(@PATH,10,4397.468,-4374.768,153.7379,0,0,1,0,100,0); -- 12:00:58 +-- 0x203930476019DA0000000D0000337E18 .go 4427.042 -4339.906 156.9126 + +SET @LEADER := 105349; +DELETE FROM `creature_formations` WHERE `leaderGUID`=@LEADER; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(@LEADER, @LEADER, 0, 0, 2), +(@LEADER, 105304, 6, 20, 2), +(@LEADER, 105303, 6, 60, 2), +(@LEADER, 105305, 6, 100, 2), +(@LEADER, 105301, 6, 140, 2), +(@LEADER, 105283, 6, 180, 2), +(@LEADER, 105302, 6, 220, 2), +(@LEADER, 105350, 6, 260, 2), +(@LEADER, 105322, 6, 290, 2), +(@LEADER, 105321, 6, 340, 2); + +-- Pathing for Highland Mustang Entry: 26472 'TDB FORMAT' +SET @NPC := 105349; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4402.506,`position_y`=-4058.453,`position_z`=178.0393 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,4402.506,-4058.453,178.0393,0,0,1,0,100,0), -- 11:54:03 +(@PATH,2,4409.204,-4045.754,177.6823,0,0,1,0,100,0), -- 11:54:07 +(@PATH,3,4437.108,-4006.367,180.2671,0,0,1,0,100,0), -- 11:54:09 +(@PATH,4,4444.708,-3989.958,182.246,0,0,1,0,100,0), -- 11:54:13 +(@PATH,5,4449.759,-3956.142,185.0904,0,0,1,0,100,0), -- 11:54:15 +(@PATH,6,4428.842,-3946.839,183.3041,0,0,1,0,100,0), -- 11:54:18 +(@PATH,7,4415.667,-3952.115,181.8032,0,0,1,0,100,0), -- 11:54:21 +(@PATH,8,4397.648,-3971.361,180.6909,0,0,1,0,100,0), -- 11:54:24 +(@PATH,9,4390.27,-4002.242,179.2844,0,0,1,0,100,0), -- 11:54:28 +(@PATH,10,4391.74,-4008.471,178.8489,0,0,1,0,100,0), -- 11:54:30 +(@PATH,11,4385.273,-4030.866,179.386,0,0,1,0,100,0), -- 11:54:31 +(@PATH,12,4376.343,-4062.502,181.3641,0,0,1,0,100,0), -- 11:54:34 +(@PATH,13,4392.244,-4068.051,179.3222,0,0,1,0,100,0); -- 11:54:37 +-- 0x203930476019DA0000000D00003393C1 .go 4402.506 -4058.453 178.0393 diff --git a/sql/updates/world/2015_04_23_00_world.sql b/sql/updates/world/2015_04_23_00_world.sql new file mode 100644 index 00000000000..d89aef32ca2 --- /dev/null +++ b/sql/updates/world/2015_04_23_00_world.sql @@ -0,0 +1,12 @@ +-- +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=18 AND SourceEntry IN (46598,49078); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(18,34776,46598,0,0,31,0,3,0,0,0,0,'','Require unit for spellclick'), +(18,35069,46598,0,0,31,0,3,0,0,0,0,'','Require unit for spellclick'), +(18,35431,46598,0,0,31,0,3,0,0,0,0,'','Require unit for spellclick'), +(18,35433,46598,0,0,31,0,3,0,0,0,0,'','Require unit for spellclick'), +(18,28312,46598,0,0,31,0,3,0,0,0,0,'','Require unit for spellclick'), +(18,32627,46598,0,0,31,0,3,0,0,0,0,'','Require unit for spellclick'), +(18,25334,46598,0,0,9,0,11652,0,0,0,0,'','Player must have The Plains of Nasam taken but not completed to use Horde Siege tank'), +(18,27587,46598,0,0,31,0,3,0,0,0,0,'','Only npc for spellclick'), +(18,27587,49078,0,0,9,0,12326,0,0,0,0,'','Required quest active for spellclick'); diff --git a/sql/updates/world/2015_04_23_01_world.sql b/sql/updates/world/2015_04_23_01_world.sql new file mode 100644 index 00000000000..f9da048bdb6 --- /dev/null +++ b/sql/updates/world/2015_04_23_01_world.sql @@ -0,0 +1,22 @@ +DELETE FROM `event_scripts` WHERE `id`=18223; +INSERT INTO `event_scripts` (`id`, `delay`, `command`, `datalong`, `datalong2`, `dataint`, `x`, `y`, `z`, `o`) VALUES +(18223, 0, 10, 23837, 180000, 0, 2629.2, 8.1333, 26.347, 0.401426); + +DELETE FROM `smart_scripts` WHERE `entryorguid`=23837 AND `source_type`=0 AND `id` =6; +DELETE FROM `smart_scripts` WHERE `entryorguid`=27249 AND `source_type`=0 AND `id`>2; + +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(23837, 0, 6, 0, 11, 0, 100, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 27249, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny - On Just Summoned - Set Data to Alystros the Verdant Keeper'), +(27249, 0, 3, 4, 38, 0, 100, 0, 1, 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Alystros the Verdant Keeper - On Data Set - Set Emote State None'), +(27249, 0, 4, 5, 61, 0, 100, 0, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Alystros the Verdant Keeper - On Data Set - Set Unit Flags'), +(27249, 0, 5, 6, 61, 0, 100, 0, 0, 0, 0, 0, 4, 3605, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Alystros the Verdant Keeper - On Data Set - Play Sound 3605'), +(27249, 0, 6, 0, 61, 0, 100, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 21, 100, 0, 0, 0, 0, 0, 0, 'Alystros the Verdant Keeper - On Data Set - Attack'); + +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=27249; + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=7 AND `SourceEntry`=23837; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22, 7, 23837, 0, 0, 23, 1, 4179, 0, 0, 0, 0, 0, '', 'Only run SAI at Emerald Dragonshrine'), +(22, 7, 23837, 0, 1, 23, 1, 3979, 0, 0, 0, 0, 0, '', 'Only run SAI at Emerald Dragonshrine'); + +UPDATE `gameobject` SET `position_x`=2642.311523, `position_y`=-19.100948, `position_z`=1.434421 WHERE `guid`=99753; diff --git a/sql/updates/world/2015_04_24_00_world.sql b/sql/updates/world/2015_04_24_00_world.sql new file mode 100644 index 00000000000..17f3c09e31e --- /dev/null +++ b/sql/updates/world/2015_04_24_00_world.sql @@ -0,0 +1,42 @@ +-- Manual Spawn Randy Whizzlesprocket +SET @GUID := 49056; +DELETE FROM `creature` WHERE `guid` = @GUID; +INSERT INTO `creature` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`) VALUES +(@GUID, 17288, 540, 0, 0, 2, 1, 0, 0, 131.106, 254.520, -45.236, 3.951, 7200, 0, 0, 6104, 0, 0, 0, 0, 0); + +-- Missing 2xEmblem of Justice from quest 'Imprisoned in the citadel' +UPDATE `quest_template` SET `RewardItemId1` = 29434, `RewardItemCount1` = 2 WHERE `Id` IN (9524,9525); + +-- Update Shattered Hand Executioner loot Table +UPDATE `creature_loot_template` SET `LootMode` = 8, `GroupId` = 1, `Chance` = 0 WHERE `Entry` = 20585; +DELETE FROM `creature_loot_template` WHERE `Entry` = 20585 AND `Item` IN (31716,29434,22829,22832,24726); +INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES +(20585, 31716, 0, 100, 1, 2|4|8, 0, 1, 1, NULL), -- Unused Axe +(20585, 29434, 0, 100, 0, 8, 0, 1, 1, NULL), -- 1x Emblem of Justice (3 Prisoners Rescued) +(20585, 22829, 0, 0, 0, 2|4|8, 2, 2, 8, NULL), -- Greater Potions +(20585, 22832, 0, 0, 0, 2|4|8, 2, 2, 8, NULL), +(20585, 24726, 24726, 100, 0, 4|8, 0, 1, 1, NULL); -- Scroll of XXXX VI + +DELETE FROM `smart_scripts` WHERE `entryorguid` = 17301 AND `source_type` = 0; +UPDATE `creature_template` SET `AIName` = '', ScriptName = 'boss_shattered_executioner', `flags_extra` = 0 WHERE `entry` = 17301; +UPDATE `creature_template` SET `unit_flags` = 33088 WHERE `entry` IN (17301,20585); +UPDATE `creature_template` SET `unit_flags` = 33555200 WHERE `entry` IN (19523,19524,20572,20573); +UPDATE `creature_template` SET `flags_extra` = 0 WHERE `entry` = 20585; + +DELETE FROM `areatrigger_scripts` WHERE `entry` = 4524; +INSERT INTO `areatrigger_scripts` (`entry`, `ScriptName`) VALUES +(4524, 'at_nethekurse_exit'); +DELETE FROM `spell_script_names` WHERE `spell_id` IN (39288,39289,39290); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(39288, 'spell_kargath_executioner'), +(39289, 'spell_kargath_executioner'), +(39290, 'spell_kargath_executioner'); + +UPDATE `gameobject_template` SET `flags` = 34 WHERE `entry` IN (182539,182540); -- Sniffed value +-- Missing texts +SET @KARGATH := 16808; +SET @BROADCAST := 13721; +DELETE FROM `creature_text` WHERE `entry` = @KARGATH AND `groupid` IN (3,4); +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(@KARGATH, 3, 0, 'The Alliance dares to intrude this far into my fortress? Bring out the Honor Hold prisoners and call for the executioner! They''ll pay with their lives for this trespass!', 14, 0, 100, 0, 0, 0, @BROADCAST+0, 3, 'kargath SAY_CALL_EXECUTIONER_A'), +(@KARGATH, 4, 0, 'Thrall''s false Horde dares to intrude this far into my fortress? Bring out the Thrallmar prisoners and call for the executioner! They''ll pay with their lives for this trespass!', 14, 0, 100, 0, 0, 0, @BROADCAST+1, 3, 'kargath SAY_CALL_EXECUTIONER_H'); diff --git a/sql/updates/world/2015_04_26_00_world.sql b/sql/updates/world/2015_04_26_00_world.sql new file mode 100644 index 00000000000..5c13aab122a --- /dev/null +++ b/sql/updates/world/2015_04_26_00_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE smart_scripts SET event_param1=44 WHERE entryorguid=33519 AND source_type=0 AND id=2; diff --git a/sql/updates/world/2015_04_26_01_world.sql b/sql/updates/world/2015_04_26_01_world.sql new file mode 100644 index 00000000000..b7c45c1f987 --- /dev/null +++ b/sql/updates/world/2015_04_26_01_world.sql @@ -0,0 +1,6 @@ +-- +UPDATE `spell_linked_spell` SET `type`=0 WHERE `spell_trigger`=44869 AND `spell_effect`=44866 AND `type`=1; + +DELETE FROM `spell_linked_spell` WHERE `spell_trigger`=46021 AND `spell_effect`=44852; +INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comment`) VALUES +(46021,44852,0,'Transported to the spectral realm turn Sathrovarr Hostile'); diff --git a/sql/updates/world/2015_04_26_02_world.sql b/sql/updates/world/2015_04_26_02_world.sql new file mode 100644 index 00000000000..ea20aae2f7a --- /dev/null +++ b/sql/updates/world/2015_04_26_02_world.sql @@ -0,0 +1,7 @@ +-- +SET @ENTRY := 18225; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,1,54,0,100,0,0,0,0,0,85,31961,0,0,0,0,0,1,0,0,0,0,0,0,0,"Fire Bomb Target - On Just Summoned - InvokerCast 'Fire Bomb'"), +(@ENTRY,0,1,0,61,0,100,0,0,0,0,0,11,31963,0,0,0,0,0,1,0,0,0,0,0,0,0,"Fire Bomb Target - On Just Summoned - Cast to Summon Fire Bomb"); diff --git a/sql/updates/world/2015_04_26_03_world_335.sql b/sql/updates/world/2015_04_26_03_world_335.sql new file mode 100644 index 00000000000..47e7cc7336f --- /dev/null +++ b/sql/updates/world/2015_04_26_03_world_335.sql @@ -0,0 +1,8 @@ +-- +DELETE FROM `gossip_menu` WHERE `Entry`=2944 AND `text_id` IN (3656, 3658); +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (2944, 3656), (2944, 3658); +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=14 AND `SourceGroup`=2944; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`, `ErrorTextId`,`ScriptName`,`Comment`, `NegativeCondition`) VALUES +(14,2944,3656,0,8,878,0,0,0,'','Show gossip menu text if Tribes at War is not rewarded', 1), +(14,2944,3658,0,8,878,0,0,0,'','Show gossip menu text if Tribes at War rewarded', 0), +(14,2944,3670,0,8,906,0,0,0,'','Show gossip menu text if Betrayal from Within is rewarded', 0); diff --git a/sql/updates/world/2015_04_26_04_world.sql b/sql/updates/world/2015_04_26_04_world.sql new file mode 100644 index 00000000000..2f8698932b5 --- /dev/null +++ b/sql/updates/world/2015_04_26_04_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `event_scripts` SET `x`=453.896027, `y`=-3039.76147, `z`=91.785370 WHERE `id`=2980; diff --git a/sql/updates/world/2015_04_26_05_world.sql b/sql/updates/world/2015_04_26_05_world.sql new file mode 100644 index 00000000000..d870128a55d --- /dev/null +++ b/sql/updates/world/2015_04_26_05_world.sql @@ -0,0 +1,3 @@ +-- +DELETE FROM `spell_custom_attr` WHERE `entry`=34709; +INSERT INTO `spell_custom_attr` (`entry`, `attributes`) VALUES (34709, 20480); diff --git a/sql/updates/world/2015_04_26_06_world.sql b/sql/updates/world/2015_04_26_06_world.sql new file mode 100644 index 00000000000..014c19cd96e --- /dev/null +++ b/sql/updates/world/2015_04_26_06_world.sql @@ -0,0 +1,5 @@ +-- +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=8776; +DELETE FROM `smart_scripts` WHERE `entryorguid`=8776 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(8776, 0, 0, 0, 0, 0, 100, 0, 3000, 5000, 3000, 5000, 11, 9591, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,0,'Emerald Dragon Whelp - IC - Cast Acid Spit'); diff --git a/sql/updates/world/2015_04_26_07_world.sql b/sql/updates/world/2015_04_26_07_world.sql new file mode 100644 index 00000000000..e23229e7f49 --- /dev/null +++ b/sql/updates/world/2015_04_26_07_world.sql @@ -0,0 +1,37 @@ +-- +UPDATE `creature_template_addon` SET `path_id`=840110 where entry=18672; +UPDATE `creature` SET `position_x`= 2632.754883, `position_y`= 666.366272, `position_z`= 54.313442 where guid=84011; + +DELETE FROM `waypoint_data` WHERE (`id`=840110); +INSERT INTO `waypoint_data` VALUES +(840110, 1, 2632.754883, 666.366272, 54.313442, 0, 0, 0, 0, 100, 0), +(840110, 2, 2641.033936, 699.843994, 55.907993, 0, 0, 0, 0, 100, 0), +(840110, 3, 2630.856689, 717.567749, 56.091911, 0, 0, 0, 0, 100, 0), +(840110, 4, 2616.059082, 733.542419, 55.553276, 0, 0, 0, 0, 100, 0), +(840110, 5, 2612.300537, 753.559082, 56.344002, 0, 0, 0, 0, 100, 0), +(840110, 6, 2618.891357, 769.588013, 56.859760, 0, 0, 0, 0, 100, 0), +(840110, 7, 2645.688965, 794.580811, 58.398026, 0, 0, 0, 0, 100, 0), +(840110, 8, 2643.975586, 834.932800, 61.554504, 0, 0, 0, 0, 100, 0), +(840110, 9, 2647.164795, 876.138306, 68.730583, 0, 0, 0, 0, 100, 0), +(840110, 10, 2641.644775, 880.880432, 69.211929, 0, 0, 0, 0, 100, 0), +(840110, 11, 2618.110596, 882.025818, 68.473541, 0, 0, 0, 0, 100, 0), +(840110, 12, 2545.682129, 886.177429, 65.102127, 0, 0, 0, 0, 100, 0), +(840110, 13, 2468.068848, 880.862915, 62.804623, 0, 0, 0, 0, 100, 0), +(840110, 14, 2409.444336, 867.694763, 57.740276, 0, 0, 0, 0, 100, 0), +(840110, 15, 2325.662109, 839.279724, 53.848293, 0, 0, 0, 0, 100, 0), +(840110, 16, 2291.826416, 823.477051, 54.449596, 0, 0, 0, 0, 100, 0), +(840110, 17, 2325.662109, 839.279724, 53.848293, 0, 0, 0, 0, 100, 0), +(840110, 18, 2409.444336, 867.694763, 57.740276, 0, 0, 0, 0, 100, 0), +(840110, 19, 2468.068848, 880.862915, 62.804623, 0, 0, 0, 0, 100, 0), +(840110, 20, 2545.682129, 886.177429, 65.102127, 0, 0, 0, 0, 100, 0), +(840110, 21, 2618.110596, 882.025818, 68.473541, 0, 0, 0, 0, 100, 0), +(840110, 22, 2641.644775, 880.880432, 69.211929, 0, 0, 0, 0, 100, 0), +(840110, 23, 2647.164795, 876.138306, 68.730583, 0, 0, 0, 0, 100, 0), +(840110, 24, 2643.975586, 834.932800, 61.554504, 0, 0, 0, 0, 100, 0), +(840110, 25, 2645.688965, 794.580811, 58.398026, 0, 0, 0, 0, 100, 0), +(840110, 26, 2618.891357, 769.588013, 56.859760, 0, 0, 0, 0, 100, 0), +(840110, 27, 2612.300537, 753.559082, 56.344002, 0, 0, 0, 0, 100, 0), +(840110, 28, 2616.059082, 733.542419, 55.553276, 0, 0, 0, 0, 100, 0), +(840110, 29, 2630.856689, 717.567749, 56.091911, 0, 0, 0, 0, 100, 0), +(840110, 30, 2641.033936, 699.843994, 55.907993, 0, 0, 0, 0, 100, 0), +(840110, 31, 2632.754883, 666.366272, 54.313442, 0, 0, 0, 0, 100, 0); diff --git a/sql/updates/world/2015_04_26_08_world.sql b/sql/updates/world/2015_04_26_08_world.sql new file mode 100644 index 00000000000..be53b1ebc60 --- /dev/null +++ b/sql/updates/world/2015_04_26_08_world.sql @@ -0,0 +1,16 @@ +-- +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=8506; +DELETE FROM `smart_scripts` WHERE `entryorguid`=8506 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(8506, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0,0,'Eranikus the Chained - Just summoned - Talk'); + +DELETE FROM `creature_text` WHERE `entry` IN (8506); +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(8506, 0, 0, 'My eyes! It burns... it burns...', 15, 0, 100, 0, 0, 0, 4438, 0, 'Eranikus the Chained'), +(8506, 0, 1, 'Torture me no more! Release me, mortal! The Swamp of Sorrows... mortal... please...', 15, 0, 100, 0, 0, 0, 4439, 0, 'Eranikus the Chained'), +(8506, 0, 2, 'Foolish mortal, I will rend your soul in two once I am released!', 15, 0, 100, 0, 0, 0, 4440, 0, 'Eranikus the Chained'), +(8506, 0, 3, 'You are an agent of their wicked god, fool. I will see you destroyed!', 15, 0, 100, 0, 0, 0, 4441, 0, 'Eranikus the Chained'), +(8506, 0, 4, 'My soul is not a trinket! Mortal, you must release me from these chains!', 15, 0, 100, 0, 0, 0, 4442, 0, 'Eranikus the Chained'), +(8506, 0, 5, 'It hurts so much... Itharius, my old friend... Please help me...', 15, 0, 100, 0, 0, 0, 4443, 0, 'Eranikus the Chained'), +(8506, 0, 6, 'Will the nightmare ever end?! I cannot force myself awake!', 15, 0, 100, 0, 0, 0, 4444, 0, 'Eranikus the Chained'), +(8506, 0, 7, 'My charge to watch the temple has failed... my corrupted soul knows no peace...', 15, 0, 100, 0, 0, 0, 4445, 0, 'Eranikus the Chained'); diff --git a/sql/updates/world/2015_04_26_09_world.sql b/sql/updates/world/2015_04_26_09_world.sql new file mode 100644 index 00000000000..e450fd5c64e --- /dev/null +++ b/sql/updates/world/2015_04_26_09_world.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=17 AND `SourceEntry`=66741; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(17,0,66741,0,0,40,0,0,0,0,0,0,0,'','Chum the Water can only be used in water'); diff --git a/sql/updates/world/2015_04_27_00_world.sql b/sql/updates/world/2015_04_27_00_world.sql new file mode 100644 index 00000000000..01db583444e --- /dev/null +++ b/sql/updates/world/2015_04_27_00_world.sql @@ -0,0 +1,19 @@ +SET @OGUID := 29765; + +DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+9 AND `id` IN(184203,184204,184205,185114,185115,185117,185118,184566,184567,184568); +INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES +(@OGUID+0, 184203, 548, 3, 1, 26.32847, -654.4946, 15.47422, 3.141593, 0, 0, 1, -4.371139E-08, 7200, 255, 1), -- 184203 (Area: 0) +(@OGUID+1, 184204, 548, 3, 1, 26.32847, -654.4946, 15.47422, 3.141593, 0, 0, 1, -4.371139E-08, 7200, 255, 1), -- 184204 (Area: 0) +(@OGUID+2, 184205, 548, 3, 1, 26.32847, -654.4946, 15.47422, 3.141593, 0, 0, 1, -4.371139E-08, 7200, 255, 1), -- 184205 (Area: 0) +(@OGUID+3, 185114, 548, 3, 1, 457.4108, -555.2696, -6.996453, 1.832595, 0, 0, 1, -4.371139E-08, 7200, 255, 0), -- 185114 (Area: 0) +(@OGUID+4, 185115, 548, 3, 1, 373.1394, -465.1063, 30.71642, 3.228859, 0, 0, 1, -4.371139E-08, 7200, 255, 0), -- 185115 (Area: 0) +(@OGUID+5, 185117, 548, 3, 1, -245.7294, -381.393, -0.187039, 2.879789, 0, 0, 1, -4.371139E-08, 7200, 255, 0), -- 185117 (Area: 0) +(@OGUID+6, 185118, 548, 3, 1, 123.2582, -432.3567, -1.196554, 4.799657, 0, 0, 1, -4.371139E-08, 7200, 255, 0), -- 185118 (Area: 0) +(@OGUID+7, 184566, 530, 1, 1, 811.1944, 6872.574, -66.931, 0, 0, 0, 1, -4.371139E-08, 120, 255, 1), -- 184566 (Area: 3905) +(@OGUID+8, 184567, 530, 1, 1, 811.1944, 6859.181, -66.931, 3.141593, 0, 0, 1, -4.371139E-08, 120, 255, 1), -- 184567 (Area: 3905) +(@OGUID+9, 184568, 548, 3, 1, 47.75674, -581.8289, 4.655592, 3.141593, 0, 0, 1, -4.371139E-08, 7200, 255, 1); -- 184568 (Area: 0) + +UPDATE `gameobject_template` SET `faction`=1375, `flags`=32 WHERE `entry`IN(184203,184204,184205); +UPDATE `gameobject_template` SET `flags`=16 WHERE `entry`IN(185114,185115,185117,185118); +UPDATE `gameobject_template` SET `flags`=2 WHERE `entry`=184566; +UPDATE `gameobject_template` SET `flags`=32 WHERE `entry`=184568; diff --git a/sql/updates/world/2015_04_27_01_world.sql b/sql/updates/world/2015_04_27_01_world.sql new file mode 100644 index 00000000000..af4f0fc4faf --- /dev/null +++ b/sql/updates/world/2015_04_27_01_world.sql @@ -0,0 +1,25 @@ +UPDATE `creature_template` SET `gossip_menu_id`=1882 WHERE `entry`=3389; +DELETE FROM `smart_scripts` WHERE `entryorguid`=3389 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(3389, 0, 1, 0, 11, 0, 100, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Regthar Deathgate - On Spawn - Set Phase 1 '), +(3389, 0, 2, 3, 19, 1, 100, 0, 4021, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Regthar Deathgate - On quest accept - say text 0 '), +(3389, 0, 3, 4, 61, 1, 100, 0, 0, 0, 0, 0, 80, 338900, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Regthar Deathgate - Linked with Previous Event - Run script'), +(3389, 0, 4, 0, 61, 1, 100, 0, 0, 0, 0, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Regthar Deathgate - Linked with Previous Event - Set Phase 2'), +(3389, 0, 5, 0, 1, 0, 100, 0, 300000, 300000, 300000, 300000, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Regthar Deathgate - OOC (P2) - Set Phase 1 '), +(3389, 0, 6, 0, 20, 0, 100, 0, 4021, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Regthar Deathgate - On quest Reward - Set Phase 1 '), +(3389, 0, 7, 8, 62, 1, 100, 0, 1882, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Regthar Deathgate - On Gossip Option Select - say text 0 '), +(3389, 0, 8, 9, 61, 1, 100, 0, 0, 0, 0, 0, 80, 338900, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Regthar Deathgate - Linked with Previous Event - Run script'), +(3389, 0, 9, 0, 61, 1, 100, 0, 0, 0, 0, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Regthar Deathgate - Linked with Previous Event - Set Phase 2'), +(3389, 0, 10, 0, 62, 0, 100, 0, 1882, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Regthar Deathgate - On Gossip Option Select - Close Gossip '); + +DELETE FROM `gossip_menu` WHERE `entry`=1882; +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES +(1882, 2533); + +DELETE FROM `gossip_menu_option` WHERE `menu_id`=1882; +INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `OptionBroadcastTextID`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`, `BoxBroadcastTextID`) VALUES +(1882, 0, 0, 'Where is Warlord Krom''zar?', 4793, 1, 1, 0, 0, 0, 0, '', 0); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=1882; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15, 1882, 0, 0, 0, 9, 0, 4021, 0, 0, 0, 0, 0, '', 'Regthar Deathgate show gossip only if player on counterattack'); diff --git a/sql/updates/world/2015_04_28_00_world.sql b/sql/updates/world/2015_04_28_00_world.sql new file mode 100644 index 00000000000..ee651b8473c --- /dev/null +++ b/sql/updates/world/2015_04_28_00_world.sql @@ -0,0 +1,2 @@ +UPDATE `creature_template` SET `gossip_menu_id`=10503 WHERE `entry`=33533; +UPDATE `creature_template` SET `gossip_menu_id`=10504 WHERE `entry`=33532; diff --git a/sql/updates/world/2015_04_28_01_world.sql b/sql/updates/world/2015_04_28_01_world.sql new file mode 100644 index 00000000000..3de29012072 --- /dev/null +++ b/sql/updates/world/2015_04_28_01_world.sql @@ -0,0 +1,8 @@ +DELETE FROM `mail_loot_template` WHERE `Entry` in(269,270); + +INSERT INTO `mail_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES +(269, 46545, 0, 100, 0, 1, 0, 1, 1, NULL), -- Oracle +(270, 46544, 0, 100, 0, 1, 0, 1, 1, NULL); -- Wolvar + +UPDATE `quest_template` SET `RewardMailTemplateId`=269,`RewardMailDelay`=900 WHERE `Id`=13959; +UPDATE `quest_template` SET `RewardMailTemplateId`=270,`RewardMailDelay`=900 WHERE `Id`=13960; diff --git a/sql/updates/world/2015_04_28_02_world.sql b/sql/updates/world/2015_04_28_02_world.sql new file mode 100644 index 00000000000..c3eebf4ad7a --- /dev/null +++ b/sql/updates/world/2015_04_28_02_world.sql @@ -0,0 +1,5 @@ +DELETE FROM `gossip_menu` WHERE `entry`=8563; +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES +(8563, 10732); -- Blood Elf + +UPDATE `creature_template` SET `gossip_menu_id`=8563 WHERE `entry`=22817; diff --git a/sql/updates/world/2015_04_28_03_world.sql b/sql/updates/world/2015_04_28_03_world.sql new file mode 100644 index 00000000000..fac605b9f06 --- /dev/null +++ b/sql/updates/world/2015_04_28_03_world.sql @@ -0,0 +1,5 @@ +UPDATE `creature_template` SET `gossip_menu_id`=5820 WHERE `entry`=14444; + +DELETE FROM `gossip_menu` WHERE `entry`=5820; +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES +(5820, 6993); diff --git a/sql/updates/world/2015_04_29_00_world.sql b/sql/updates/world/2015_04_29_00_world.sql new file mode 100644 index 00000000000..14ff30d9e14 --- /dev/null +++ b/sql/updates/world/2015_04_29_00_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `gameobject` SET `spawnMask`=1 WHERE `guid` IN (29765,29766,29767,29768,29769,29770,29771,29774); diff --git a/sql/updates/world/2015_04_29_01_world.sql b/sql/updates/world/2015_04_29_01_world.sql new file mode 100644 index 00000000000..e8ec2fb4ae8 --- /dev/null +++ b/sql/updates/world/2015_04_29_01_world.sql @@ -0,0 +1 @@ +UPDATE `quest_template` SET `RequiredRaces`=690 WHERE `Id`=915; diff --git a/sql/updates/world/2015_05_01_00_world.sql b/sql/updates/world/2015_05_01_00_world.sql new file mode 100644 index 00000000000..779d7368d85 --- /dev/null +++ b/sql/updates/world/2015_05_01_00_world.sql @@ -0,0 +1,4 @@ +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=24108; +DELETE FROM `smart_scripts` WHERE `entryorguid`=24108 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(24108,0,0,0,8,0,100,0,42436,0,0,0,11,47173,0,0,0,0,0,7,0,0,0,0,0,0,0,'S.T.O.U.T. - On Spellhit Drink! - Cast Credit'); diff --git a/sql/updates/world/2015_05_01_01_world.sql b/sql/updates/world/2015_05_01_01_world.sql new file mode 100644 index 00000000000..8c33ba7714d --- /dev/null +++ b/sql/updates/world/2015_05_01_01_world.sql @@ -0,0 +1,7 @@ +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=16348; +DELETE FROM `smart_scripts` WHERE `entryorguid`=16348 AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=16345 AND `source_type`=0 AND `id`=1; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(16345, 0, 1, 0, 25, 0, 100, 0, 0, 0, 0, 0, 11, 28904, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Shadowpine Catlord - On Reset - Cast to summon Ghostclaw Lynx'), +(16348, 0, 0, 0, 0, 0, 100, 0, 3000, 7000, 8000, 12000, 11, 16828, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,0,'Ghostclaw Lynx - IC - Cast Claw'), +(16348, 0, 1, 0, 0, 0, 100, 0, 5000, 10000, 10000, 150000, 11, 59881, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,0,'Ghostclaw Lynx - IC - Cast Rake'); diff --git a/sql/updates/world/2015_05_01_02_world.sql b/sql/updates/world/2015_05_01_02_world.sql new file mode 100644 index 00000000000..480b3d70009 --- /dev/null +++ b/sql/updates/world/2015_05_01_02_world.sql @@ -0,0 +1,8 @@ +DELETE FROM `creature` WHERE `id`=3939; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=3939; +DELETE FROM `smart_scripts` WHERE `entryorguid`=3939 AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=3265 AND `source_type`=0 AND `id`=2; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(3265, 0, 2, 0, 25, 0, 100, 0, 0, 0, 0, 0, 11, 6479, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Razormane Hunter- On Reset - Cast to summon Razormane Wolf'), +(3939, 0, 0, 0, 0, 0, 100, 0, 3000, 7000, 6000, 9000, 11, 17255, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,0,'Razormane Wolf - IC - Cast Bite'), +(3939, 0, 1, 0, 0, 0, 100, 0, 5000, 10000, 22000, 25000, 11, 24604, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Razormane Wolf - IC - Furious Howl'); diff --git a/sql/updates/world/2015_05_01_03_world.sql b/sql/updates/world/2015_05_01_03_world.sql new file mode 100644 index 00000000000..dd528f8d704 --- /dev/null +++ b/sql/updates/world/2015_05_01_03_world.sql @@ -0,0 +1,4 @@ +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup` IN (2, 3) AND `SourceEntry`=27743; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`, `ErrorTextId`,`ScriptName`,`Comment`, `NegativeCondition`) VALUES +(22,2,27743,0,31,3,27743,0,0,'','event will not trigger if the spell is casted by 27743', 1), +(22,3,27743,0,31,3,27743,0,0,'','event will not trigger if the spell is casted by 27743', 1); diff --git a/sql/updates/world/2015_05_01_04_world.sql b/sql/updates/world/2015_05_01_04_world.sql new file mode 100644 index 00000000000..a84fde8bb5c --- /dev/null +++ b/sql/updates/world/2015_05_01_04_world.sql @@ -0,0 +1,200 @@ +DELETE FROM `spell_area` WHERE `spell` IN (40624, 40627, 40628); +INSERT INTO `spell_area` (`spell`, `area`, `racemask`, `gender`, `autocast`, `quest_start_status`, `quest_end_status`) VALUES +(40624,3767,0,2,1,0,0), -- Apexis Vibrations +(40624,3768,0,2,1,0,0), +(40624,3769,0,2,1,0,0), +(40624,3770,0,2,1,0,0), +(40624,3771,0,2,1,0,0), +(40624,3772,0,2,1,0,0), +(40624,3773,0,2,1,0,0), +(40624,3774,0,2,1,0,0), +(40624,3775,0,2,1,0,0), +(40624,3776,0,2,1,0,0), +(40624,3777,0,2,1,0,0), +(40624,3778,0,2,1,0,0), +(40624,3779,0,2,1,0,0), +(40624,3780,0,2,1,0,0), +(40624,3781,0,2,1,0,0), +(40624,3782,0,2,1,0,0), +(40624,3783,0,2,1,0,0), +(40624,3784,0,2,1,0,0), +(40624,3785,0,2,1,0,0), +(40624,3786,0,2,1,0,0), +(40624,3787,0,2,1,0,0), +(40624,3824,0,2,1,0,0), +(40624,3825,0,2,1,0,0), +(40624,3826,0,2,1,0,0), +(40624,3827,0,2,1,0,0), +(40624,3828,0,2,1,0,0), +(40624,3829,0,2,1,0,0), +(40624,3830,0,2,1,0,0), +(40624,3831,0,2,1,0,0), +(40624,3832,0,2,1,0,0), +(40624,3833,0,2,1,0,0), +(40624,3834,0,2,1,0,0), +(40624,3844,0,2,1,0,0), +(40624,3855,0,2,1,0,0), +(40624,3862,0,2,1,0,0), +(40624,3863,0,2,1,0,0), +(40624,3864,0,2,1,0,0), +(40624,3865,0,2,1,0,0), +(40624,3866,0,2,1,0,0), +(40624,3867,0,2,1,0,0), +(40624,3903,0,2,1,0,0), +(40624,3904,0,2,1,0,0), +(40624,3918,0,2,1,0,0), +(40624,3919,0,2,1,0,0), +(40624,3922,0,2,1,0,0), +(40624,3924,0,2,1,0,0), +(40624,3925,0,2,1,0,0), +(40624,3931,0,2,1,0,0), +(40624,3942,0,2,1,0,0), +(40624,3951,0,2,1,0,0), +(40624,3952,0,2,1,0,0), +(40624,3953,0,2,1,0,0), +(40624,3954,0,2,1,0,0), +(40624,3960,0,2,1,0,0), +(40624,3962,0,2,1,0,0), +(40624,3963,0,2,1,0,0), +(40624,3964,0,2,1,0,0), +(40624,3969,0,2,1,0,0), +(40624,3970,0,2,1,0,0), +(40624,3971,0,2,1,0,0), +(40624,3972,0,2,1,0,0), +(40624,4008,0,2,1,0,0), +(40627,3767,0,2,1,0,0), -- Apexis Emanations +(40627,3768,0,2,1,0,0), +(40627,3769,0,2,1,0,0), +(40627,3770,0,2,1,0,0), +(40627,3771,0,2,1,0,0), +(40627,3772,0,2,1,0,0), +(40627,3773,0,2,1,0,0), +(40627,3774,0,2,1,0,0), +(40627,3775,0,2,1,0,0), +(40627,3776,0,2,1,0,0), +(40627,3777,0,2,1,0,0), +(40627,3778,0,2,1,0,0), +(40627,3779,0,2,1,0,0), +(40627,3780,0,2,1,0,0), +(40627,3781,0,2,1,0,0), +(40627,3782,0,2,1,0,0), +(40627,3783,0,2,1,0,0), +(40627,3784,0,2,1,0,0), +(40627,3785,0,2,1,0,0), +(40627,3786,0,2,1,0,0), +(40627,3787,0,2,1,0,0), +(40627,3824,0,2,1,0,0), +(40627,3825,0,2,1,0,0), +(40627,3826,0,2,1,0,0), +(40627,3827,0,2,1,0,0), +(40627,3828,0,2,1,0,0), +(40627,3829,0,2,1,0,0), +(40627,3830,0,2,1,0,0), +(40627,3831,0,2,1,0,0), +(40627,3832,0,2,1,0,0), +(40627,3833,0,2,1,0,0), +(40627,3834,0,2,1,0,0), +(40627,3844,0,2,1,0,0), +(40627,3855,0,2,1,0,0), +(40627,3862,0,2,1,0,0), +(40627,3863,0,2,1,0,0), +(40627,3864,0,2,1,0,0), +(40627,3865,0,2,1,0,0), +(40627,3866,0,2,1,0,0), +(40627,3867,0,2,1,0,0), +(40627,3903,0,2,1,0,0), +(40627,3904,0,2,1,0,0), +(40627,3918,0,2,1,0,0), +(40627,3919,0,2,1,0,0), +(40627,3922,0,2,1,0,0), +(40627,3924,0,2,1,0,0), +(40627,3925,0,2,1,0,0), +(40627,3931,0,2,1,0,0), +(40627,3942,0,2,1,0,0), +(40627,3951,0,2,1,0,0), +(40627,3952,0,2,1,0,0), +(40627,3953,0,2,1,0,0), +(40627,3954,0,2,1,0,0), +(40627,3960,0,2,1,0,0), +(40627,3962,0,2,1,0,0), +(40627,3963,0,2,1,0,0), +(40627,3964,0,2,1,0,0), +(40627,3969,0,2,1,0,0), +(40627,3970,0,2,1,0,0), +(40627,3971,0,2,1,0,0), +(40627,3972,0,2,1,0,0), +(40627,4008,0,2,1,0,0), +(40628,3767,0,2,1,0,0), -- Apexis Enlightment +(40628,3768,0,2,1,0,0), +(40628,3769,0,2,1,0,0), +(40628,3770,0,2,1,0,0), +(40628,3771,0,2,1,0,0), +(40628,3772,0,2,1,0,0), +(40628,3773,0,2,1,0,0), +(40628,3774,0,2,1,0,0), +(40628,3775,0,2,1,0,0), +(40628,3776,0,2,1,0,0), +(40628,3777,0,2,1,0,0), +(40628,3778,0,2,1,0,0), +(40628,3779,0,2,1,0,0), +(40628,3780,0,2,1,0,0), +(40628,3781,0,2,1,0,0), +(40628,3782,0,2,1,0,0), +(40628,3783,0,2,1,0,0), +(40628,3784,0,2,1,0,0), +(40628,3785,0,2,1,0,0), +(40628,3786,0,2,1,0,0), +(40628,3787,0,2,1,0,0), +(40628,3824,0,2,1,0,0), +(40628,3825,0,2,1,0,0), +(40628,3826,0,2,1,0,0), +(40628,3827,0,2,1,0,0), +(40628,3828,0,2,1,0,0), +(40628,3829,0,2,1,0,0), +(40628,3830,0,2,1,0,0), +(40628,3831,0,2,1,0,0), +(40628,3832,0,2,1,0,0), +(40628,3833,0,2,1,0,0), +(40628,3834,0,2,1,0,0), +(40628,3844,0,2,1,0,0), +(40628,3855,0,2,1,0,0), +(40628,3862,0,2,1,0,0), +(40628,3863,0,2,1,0,0), +(40628,3864,0,2,1,0,0), +(40628,3865,0,2,1,0,0), +(40628,3866,0,2,1,0,0), +(40628,3867,0,2,1,0,0), +(40628,3903,0,2,1,0,0), +(40628,3904,0,2,1,0,0), +(40628,3918,0,2,1,0,0), +(40628,3919,0,2,1,0,0), +(40628,3922,0,2,1,0,0), +(40628,3924,0,2,1,0,0), +(40628,3925,0,2,1,0,0), +(40628,3931,0,2,1,0,0), +(40628,3942,0,2,1,0,0), +(40628,3951,0,2,1,0,0), +(40628,3952,0,2,1,0,0), +(40628,3953,0,2,1,0,0), +(40628,3954,0,2,1,0,0), +(40628,3960,0,2,1,0,0), +(40628,3962,0,2,1,0,0), +(40628,3963,0,2,1,0,0), +(40628,3964,0,2,1,0,0), +(40628,3969,0,2,1,0,0), +(40628,3970,0,2,1,0,0), +(40628,3971,0,2,1,0,0), +(40628,3972,0,2,1,0,0), +(40628,4008,0,2,1,0,0); + +DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN (-40623,-40625,-40626) AND `spell_effect` IN (-40624,-40627,-40628); +INSERT INTO `spell_linked_spell` (`spell_trigger`,`spell_effect`,`type`,`comment`) VALUES +(-40623, -40624, 0, 'Remove Swiftness if Apexis Vibrations is removed'), +(-40625, -40627, 0, 'Remove Swiftness if Apexis Emanations is removed'), +(-40626, -40628, 0, 'Remove Swiftness if Apexis Enlightment is removed'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=17 AND `SourceEntry` IN (40624, 40627, 40628); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ScriptName`, `Comment`) VALUES +(17,0,40624,0,0,1,0,40623, '', 'Swiftness - Only cast if Apexis Vibrations is active'), +(17,0,40627,0,0,1,0,40625, '', 'Swiftness - Only cast if Apexis Emanations is active'), +(17,0,40628,0,0,1,0,40626, '', 'Swiftness - Only cast if Apexis Enlightment is active'); diff --git a/sql/updates/world/2015_05_01_05_world.sql b/sql/updates/world/2015_05_01_05_world.sql new file mode 100644 index 00000000000..a7a4edc673b --- /dev/null +++ b/sql/updates/world/2015_05_01_05_world.sql @@ -0,0 +1,2 @@ +UPDATE `creature` SET `Map`=622, `position_x`=-3.57706, `position_y`=0.507499, `position_z`=34.0151, `spawndist`=0, `MovementType`=0 WHERE `guid`=134846; +UPDATE `creature` SET `Map`=623, `position_x`=6.08656, `position_y`=-0.107499, `position_z`=20.5756, `spawndist`=0, `MovementType`=0 WHERE `guid`=134847; diff --git a/sql/updates/world/2015_05_01_06_world.sql b/sql/updates/world/2015_05_01_06_world.sql new file mode 100644 index 00000000000..602e4be700c --- /dev/null +++ b/sql/updates/world/2015_05_01_06_world.sql @@ -0,0 +1,64 @@ +DELETE FROM `creature_loot_template` WHERE `entry` IN (36597, 39167) AND `Item`= 51315; -- Delete Sealed Chest from 10 difficulties loot list +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=1 AND `SourceEntry`=51315; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`Scriptname`,`Comment`) VALUES +-- Lich King 25N +(1,39166,51315,0,0,2,0,51315,1,1,1,0 ,'' , 'Sealed Chest will drop only if the player doesn''t have it already'), +(1,39166,51315,0,0,3,0,49623,0,0,0,0 ,'' , 'Sealed Chest will drop only if the player is wielding Shadowmourne'), +(1,39166,51315,0,0,28,0,24914,0,0,1,0 ,'' , 'Sealed Chest will drop only if the player hasn''t "Personal Property" in their quest log completed'), +(1,39166,51315,0,0,9,0,24748,0,0,0,0 ,'' , 'Sealed Chest will drop only if the player has "The Lich King''s Last Stand" in their quest log'), +-- +(1,39166,51315,0,1,2,0,51315,1,1,1,0 ,'' , 'Sealed Chest will drop only if the player doesn''t have it already'), +(1,39166,51315,0,1,3,0,49623,0,0,0,0 ,'' , 'Sealed Chest will drop only if the player is wielding Shadowmourne'), +(1,39166,51315,0,1,8,0,24914,0,0,1,0 ,'' , 'Sealed Chest will drop only if the player hasn''t "Personal Property" in their quest log Rewarded'), +(1,39166,51315,0,1,9,0,24748,0,0,0,0 ,'' , 'Sealed Chest will drop only if the player has "The Lich King''s Last Stand" in their quest log'), +-- +(1,39166,51315,0,2,2,0,51315,1,1,1,0 ,'' , 'Sealed Chest will drop only if the player doesn''t have it already'), +(1,39166,51315,0,2,3,0,49623,0,0,0,0 ,'' , 'Sealed Chest will drop only if the player is wielding Shadowmourne'), +(1,39166,51315,0,2,28,0,24914,0,0,1,0 ,'' , 'Sealed Chest will drop only if the player hasn''t "Personal Property" in their quest log completed'), +(1,39166,51315,0,2,8,0,24748,0,0,0,0 ,'' , 'Sealed Chest will drop only if the player has "The Lich King''s Last Stand" rewarded'), +-- +(1,39166,51315,0,3,2,0,51315,1,1,1,0 ,'' , 'Sealed Chest will drop only if the player doesn''t have it already'), +(1,39166,51315,0,3,3,0,49623,0,0,0,0 ,'' , 'Sealed Chest will drop only if the player is wielding Shadowmourne'), +(1,39166,51315,0,3,8,0,24914,0,0,1,0 ,'' , 'Sealed Chest will drop only if the player hasn''t "Personal Property" in their quest log Rewarded'), +(1,39166,51315,0,3,8,0,24748,0,0,0,0 ,'' , 'Sealed Chest will drop only if the player has "The Lich King''s Last Stand" rewarded'), + +-- +(1,39166,51315,0,4,2,0,51315,1,1,1,0 ,'' , 'Sealed Chest will drop only if the player doesn''t have it already'), +(1,39166,51315,0,4,3,0,49623,0,0,0,0 ,'' , 'Sealed Chest will drop only if the player is wielding Shadowmourne'), +(1,39166,51315,0,4,28,0,24914,0,0,1,0 ,'' , 'Sealed Chest will drop only if the player hasn''t "Personal Property" in their quest log completed'), +(1,39166,51315,0,4,28,0,24748,0,0,0,0 ,'' , 'Sealed Chest will drop only if the player has "The Lich King''s Last Stand" Completed'), + +(1,39166,51315,0,5,2,0,51315,1,1,1,0 ,'' , 'Sealed Chest will drop only if the player doesn''t have it already'), +(1,39166,51315,0,5,3,0,49623,0,0,0,0 ,'' , 'Sealed Chest will drop only if the player is wielding Shadowmourne'), +(1,39166,51315,0,5,8,0,24914,0,0,1,0 ,'' , 'Sealed Chest will drop only if the player hasn''t "Personal Property" in their quest log Rewarded'), +(1,39166,51315,0,5,28,0,24748,0,0,0,0 ,'' , 'Sealed Chest will drop only if the player has "The Lich King''s Last Stand" Completed'), +-- Lich King 25H +(1,39168,51315,0,0,2,0,51315,1,1,1,0 ,'' , 'Sealed Chest will drop only if the player doesn''t have it already'), +(1,39168,51315,0,0,3,0,49623,0,0,0,0 ,'' , 'Sealed Chest will drop only if the player is wielding Shadowmourne'), +(1,39168,51315,0,0,28,0,24914,0,0,1,0 ,'' , 'Sealed Chest will drop only if the player hasn''t "Personal Property" in their quest log completed'), +(1,39168,51315,0,0,9,0,24748,0,0,0,0 ,'' , 'Sealed Chest will drop only if the player has "The Lich King''s Last Stand" in their quest log'), +-- +(1,39168,51315,0,1,2,0,51315,1,1,1,0 ,'' , 'Sealed Chest will drop only if the player doesn''t have it already'), +(1,39168,51315,0,1,3,0,49623,0,0,0,0 ,'' , 'Sealed Chest will drop only if the player is wielding Shadowmourne'), +(1,39168,51315,0,1,8,0,24914,0,0,1,0 ,'' , 'Sealed Chest will drop only if the player hasn''t "Personal Property" in their quest log Rewarded'), +(1,39168,51315,0,1,9,0,24748,0,0,0,0 ,'' , 'Sealed Chest will drop only if the player has "The Lich King''s Last Stand" in their quest log'), +-- +(1,39168,51315,0,2,2,0,51315,1,1,1,0 ,'' , 'Sealed Chest will drop only if the player doesn''t have it already'), +(1,39168,51315,0,2,3,0,49623,0,0,0,0 ,'' , 'Sealed Chest will drop only if the player is wielding Shadowmourne'), +(1,39168,51315,0,2,28,0,24914,0,0,1,0 ,'' , 'Sealed Chest will drop only if the player hasn''t "Personal Property" in their quest log completed'), +(1,39168,51315,0,2,8,0,24748,0,0,0,0 ,'' , 'Sealed Chest will drop only if the player has "The Lich King''s Last Stand" rewarded'), +-- +(1,39168,51315,0,3,2,0,51315,1,1,1,0 ,'' , 'Sealed Chest will drop only if the player doesn''t have it already'), +(1,39168,51315,0,3,3,0,49623,0,0,0,0 ,'' , 'Sealed Chest will drop only if the player is wielding Shadowmourne'), +(1,39168,51315,0,3,8,0,24914,0,0,1,0 ,'' , 'Sealed Chest will drop only if the player hasn''t "Personal Property" in their quest log Rewarded'), +(1,39168,51315,0,3,8,0,24748,0,0,0,0 ,'' , 'Sealed Chest will drop only if the player has "The Lich King''s Last Stand" rewarded'), +-- +(1,39168,51315,0,4,2,0,51315,1,1,1,0 ,'' , 'Sealed Chest will drop only if the player doesn''t have it already'), +(1,39168,51315,0,4,3,0,49623,0,0,0,0 ,'' , 'Sealed Chest will drop only if the player is wielding Shadowmourne'), +(1,39168,51315,0,4,28,0,24914,0,0,1,0 ,'' , 'Sealed Chest will drop only if the player hasn''t "Personal Property" in their quest log completed'), +(1,39168,51315,0,4,28,0,24748,0,0,0,0 ,'' , 'Sealed Chest will drop only if the player has "The Lich King''s Last Stand" Completed'), +-- +(1,39168,51315,0,5,2,0,51315,1,1,1,0 ,'' , 'Sealed Chest will drop only if the player doesn''t have it already'), +(1,39168,51315,0,5,3,0,49623,0,0,0,0 ,'' , 'Sealed Chest will drop only if the player is wielding Shadowmourne'), +(1,39168,51315,0,5,8,0,24914,0,0,1,0 ,'' , 'Sealed Chest will drop only if the player hasn''t "Personal Property" in their quest log Rewarded'), +(1,39168,51315,0,5,28,0,24748,0,0,0,0 ,'' , 'Sealed Chest will drop only if the player has "The Lich King''s Last Stand" Completed'); diff --git a/sql/updates/world/2015_05_01_07_world.sql b/sql/updates/world/2015_05_01_07_world.sql new file mode 100644 index 00000000000..ac088727f79 --- /dev/null +++ b/sql/updates/world/2015_05_01_07_world.sql @@ -0,0 +1 @@ +UPDATE `creature_text` SET `text`= "This is the last time I get caught! I promise! Bye!", `BroadcastTextId`=15308, `Language`=0 WHERE `entry`=20812; diff --git a/sql/updates/world/2015_05_01_08_world.sql b/sql/updates/world/2015_05_01_08_world.sql new file mode 100644 index 00000000000..b41400f7d7c --- /dev/null +++ b/sql/updates/world/2015_05_01_08_world.sql @@ -0,0 +1,87 @@ +SET @GUID :=5625; -- 1 GOB guid set by TC +SET @cover := 164819; +SET @Portrait :=164825; +SET @Assemblage :=8905; +SET @ReliCoffer :=174564; +SET @ReliCoffer2 :=174563; +SET @ReliCoffer3 :=174562; +SET @ReliCoffer4 :=174561; +SET @ReliCoffer5 :=174560; +SET @ReliCoffer6 :=174559; +SET @ReliCoffer7 :=174554; +SET @ReliCoffer8 :=174555; +SET @ReliCoffer9 :=174556; +SET @ReliCoffer10 :=174557; +SET @ReliCoffer11 :=174566; +SET @ReliCoffer12 :=174558; +SET @DOOM :=9476; +SET @Secret :=174553; +SET @Dark :=174565; + +DELETE FROM `gameobject` WHERE `guid` IN (@GUID); +INSERT INTO `gameobject` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`animprogress`,`state`) VALUES +(@GUID,165554,230,1,1, 802.907, -356.401, -48.9423,0,0,0,-0.382683, 0.92388, 7200, 100, 1); + +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (@Assemblage, @DOOM); +UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry` IN (@cover, @Dark, @Portrait, @ReliCoffer, @ReliCoffer2, @ReliCoffer3, @ReliCoffer4, @ReliCoffer5, @ReliCoffer6, @ReliCoffer7, @ReliCoffer8, @ReliCoffer9, @ReliCoffer10, @ReliCoffer11, @ReliCoffer12, @Secret); + +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Assemblage AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=-46610 AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Assemblage*100 AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Assemblage*100+1 AND `source_type`=9; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@DOOM AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@cover, @Dark, @Secret, @ReliCoffer, @ReliCoffer2, @ReliCoffer3, @ReliCoffer4, @ReliCoffer5, @ReliCoffer6, @ReliCoffer7, @ReliCoffer8, @ReliCoffer9, @ReliCoffer10, @ReliCoffer11, @ReliCoffer12) AND `source_type`=1; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(@cover, 1, 0, 0, 64, 0, 100, 0, 0, 0, 0, 0, 106, 16, 0, 0, 0, 0, 0, 20, @Portrait, 5, 0, 0, 0, 0, 0, 'Cover - On gossip hello - Remove flags'), +(@ReliCoffer, 1, 0, 1, 70, 0, 100, 0, 2, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 11, @Assemblage, 30, 0, 0, 0, 0, 0, 'ReliCoffer - On State 2 - Set data'), +(@ReliCoffer, 1, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 106, 16, 0, 0, 0, 0, 0, 20, 160836, 10, 0, 0, 0, 0, 0, 'ReliCoffer - On State 2 - Remove flags'), +(@ReliCoffer2, 1, 0, 1, 70, 0, 100, 0, 2, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 11, @Assemblage, 30, 0, 0, 0, 0, 0, 'ReliCoffer - On State 2 - Set data'), +(@ReliCoffer2, 1, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 106, 16, 0, 0, 0, 0, 0, 20, 160836, 10, 0, 0, 0, 0, 0, 'ReliCoffer - On State 2 - Remove flags'), +(@ReliCoffer3, 1, 0, 1, 70, 0, 100, 0, 2, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 11, @Assemblage, 30, 0, 0, 0, 0, 0, 'ReliCoffer - On State 2 - Set data'), +(@ReliCoffer3, 1, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 106, 16, 0, 0, 0, 0, 0, 20, 160836, 10, 0, 0, 0, 0, 0, 'ReliCoffer - On State 2 - Remove flags'), +(@ReliCoffer4, 1, 0, 1, 70, 0, 100, 0, 2, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 11, @Assemblage, 30, 0, 0, 0, 0, 0, 'ReliCoffer - On State 2 - Set data'), +(@ReliCoffer4, 1, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 106, 16, 0, 0, 0, 0, 0, 20, 160836, 10, 0, 0, 0, 0, 0, 'ReliCoffer - On State 2 - Remove flags'), +(@ReliCoffer5, 1, 0, 1, 70, 0, 100, 0, 2, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 11, @Assemblage, 30, 0, 0, 0, 0, 0, 'ReliCoffer - On State 2 - Set data'), +(@ReliCoffer5, 1, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 106, 16, 0, 0, 0, 0, 0, 20, 160836, 10, 0, 0, 0, 0, 0, 'ReliCoffer - On State 2 - Remove flags'), +(@ReliCoffer6, 1, 0, 1, 70, 0, 100, 0, 2, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 11, @Assemblage, 30, 0, 0, 0, 0, 0, 'ReliCoffer - On State 2 - Set data'), +(@ReliCoffer6, 1, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 106, 16, 0, 0, 0, 0, 0, 20, 160836, 10, 0, 0, 0, 0, 0, 'ReliCoffer - On State 2 - Remove flags'), +(@ReliCoffer7, 1, 0, 1, 70, 0, 100, 0, 2, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 11, @Assemblage, 30, 0, 0, 0, 0, 0, 'ReliCoffer - On State 2 - Set data'), +(@ReliCoffer7, 1, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 106, 16, 0, 0, 0, 0, 0, 20, 160836, 10, 0, 0, 0, 0, 0, 'ReliCoffer - On State 2 - Remove flags'), +(@ReliCoffer8, 1, 0, 1, 70, 0, 100, 0, 2, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 11, @Assemblage, 30, 0, 0, 0, 0, 0, 'ReliCoffer - On State 2 - Set data'), +(@ReliCoffer8, 1, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 106, 16, 0, 0, 0, 0, 0, 20, 160836, 10, 0, 0, 0, 0, 0, 'ReliCoffer - On State 2 - Remove flags'), +(@ReliCoffer9, 1, 0, 1, 70, 0, 100, 0, 2, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 11, @Assemblage, 30, 0, 0, 0, 0, 0, 'ReliCoffer - On State 2 - Set data'), +(@ReliCoffer9, 1, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 106, 16, 0, 0, 0, 0, 0, 20, 160836, 10, 0, 0, 0, 0, 0, 'ReliCoffer - On State 2 - Remove flags'), +(@ReliCoffer10, 1, 0, 1, 70, 0, 100, 0, 2, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 11, @Assemblage, 30, 0, 0, 0, 0, 0, 'ReliCoffer - On State 2 - Set data'), +(@ReliCoffer10, 1, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 106, 16, 0, 0, 0, 0, 0, 20, 160836, 10, 0, 0, 0, 0, 0, 'ReliCoffer - On State 2 - Remove flags'), +(@ReliCoffer11, 1, 0, 1, 70, 0, 100, 0, 2, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 11, @Assemblage, 30, 0, 0, 0, 0, 0, 'ReliCoffer - On State 2 - Set data'), +(@ReliCoffer11, 1, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 106, 16, 0, 0, 0, 0, 0, 20, 160836, 10, 0, 0, 0, 0, 0, 'ReliCoffer - On State 2 - Remove flags'), +(@ReliCoffer12, 1, 0, 1, 70, 0, 100, 0, 2, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 11, @Assemblage, 30, 0, 0, 0, 0, 0, 'ReliCoffer - On State 2 - Set data'), +(@ReliCoffer12, 1, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 106, 16, 0, 0, 0, 0, 0, 20, 160836, 10, 0, 0, 0, 0, 0, 'ReliCoffer - On State 2 - Remove flags'), +(@Assemblage, 0, 0, 0, 38, 0, 100, 0, 0, 1, 0, 0, 63, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Assemblage - On data set - Increment Counter 1'), -- the counter nbr 1 is incremented here +(@Assemblage, 0, 1, 2, 11, 0, 100, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Assemblage - On Respawn - Set passif'), +(@Assemblage, 0, 2, 3, 61, 0, 100, 0, 0, 0, 0, 0, 18, 33554432, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Assemblage - On Respawn - Add unit_flag'), +(@Assemblage, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Assemblage - On Respawn - SET PHASE EVENT 0'), +(@Assemblage, 0, 4, 0, 77, 0, 100, 1, 1, 12, 0, 0, 80, @Assemblage*100, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Assemblage - On counter1=12 - Actionlist'), -- event triggred when the counter 1= 12 +(@Assemblage*100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 19, 33554432, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Assemblage - Actionlist - Remmove unit flag'), +(@Assemblage*100, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Assemblage - Actionlist - react agressif'), +(@Assemblage*100, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Assemblage - Actionlist - SET PHASE EVENT 0'), +(@Assemblage, 0, 5, 0, 0, 0, 100, 0, 4000, 4000, 8000, 8000, 11, 15621, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Assemblage - IC - Cast'), +(@Secret, 1, 0, 0, 70, 0, 100, 0, 2, 0, 0, 0, 106, 16, 0, 0, 0, 0, 0, 20, 161495, 10, 0, 0, 0, 0, 0, 'Secret - On State 2 - Remove flags'), +(@Dark, 1, 0, 0, 70, 0, 100, 0, 2, 0, 0, 0, 106, 16, 0, 0, 0, 0, 0, 20, 160845, 10, 0, 0, 0, 0, 0, '@Dark - On State 2 - Remove flags'), +(-46610, 0, 0, 0, 38, 0, 100, 0, 0, 1, 0, 0, 63, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Assemblage - On data set - Increment Counter1'), -- the counter nbr 1 is incremented here +(-46610, 0, 1, 2, 11, 0, 100, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Assemblage - On Respawn - Set passif'), +(-46610, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 18, 33554432, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Assemblage - On Respawn - Add unit_flag'), +(-46610, 0, 4, 0, 77, 0, 100, 1, 1, 12, 0, 0, 80, @Assemblage*100+1, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Assemblage - On counter1=12 - Actionlist'), -- event triggred when the counter 1= 12 +(@Assemblage*100+1, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 19, 33554432, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Assemblage - Actionlist - Remmove unit flag'), +(@Assemblage*100+1, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Assemblage - Actionlist - react agressif'), +(@Assemblage*100+1, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 12, @DOOM, 7, 0, 0, 0, 0, 8, 0, 0, 0, 813.737915, -347.550354, -50.578030, 0.670515, 'Assemblage - Actionlist - Summon'), +(@Assemblage*100+1, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Assemblage - Actionlist - SET PHASE EVENT 0'), +(-46610, 0, 5, 0, 0, 0, 100, 0, 4000, 4000, 8000, 8000, 11, 15621, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Assemblage - IC - Cast'), +(@DOOM, 0, 0, 0, 0, 0, 100, 0, 4000, 4000, 8000, 8000, 11, 11971, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'DOOM - IC - Cast'), +(@DOOM, 0, 1, 0, 0, 0, 100, 0, 10000, 10000, 14000, 14000, 11, 15504, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'DOOM - IC - Cast'), +(@DOOM, 0, 2, 0, 6, 0, 100, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 20, 174553, 70, 0, 0, 0, 0, 0, 'DOOM - On death - Activate gob'), +(@DOOM, 0, 3, 0, 4, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'DOOM - On aggro - Talk'); + +DELETE FROM `creature_text` WHERE `entry`IN (@DOOM); +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextID`) VALUES +(@DOOM,0,0,"What are you doing? Intruders!!",14,0,100,0,0,0,'Watchman Doomgrip', 4962); diff --git a/sql/updates/world/2015_05_02_00_world.sql b/sql/updates/world/2015_05_02_00_world.sql new file mode 100644 index 00000000000..cbcf6bf17e5 --- /dev/null +++ b/sql/updates/world/2015_05_02_00_world.sql @@ -0,0 +1,10 @@ +SET @GUID := 16397; -- 1 creature guid Set by TC +DELETE FROM `creature` WHERE `id`=16123; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`,`curhealth`) VALUES +(@GUID, 16123, 0, 1, 1, -14457.221680, 448.084534, 20.406971, 6.115618, 600, 0); + +DELETE FROM `creature_template_addon` WHERE `entry` IN (16123, 16033, 16016); +INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`, `emote`, `auras`) VALUES +(16123,0,0,0,"27614 17327 44816"), +(16033,0,0,0,"27614 17327"), +(16016,0,0,0,"27614 17327"); diff --git a/sql/updates/world/2015_05_02_01_world.sql b/sql/updates/world/2015_05_02_01_world.sql new file mode 100644 index 00000000000..62c525b249d --- /dev/null +++ b/sql/updates/world/2015_05_02_01_world.sql @@ -0,0 +1,19 @@ +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=17 AND `SourceEntry`=38606; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(17,0,38606,0,0,31,1,3,21326,0,0,0,0,'','Exorcism Feather can be used only on Raven''s Wood Leafbeard'); + +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (21326, 22226); +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (21326, 22226) AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(21326, 0, 0, 0, 0, 0, 100, 0, 10000, 12000, 35000, 40000, 11, 37696, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Raven''s Wood Leafbeard - IC - cast Force of Nature'), +(21326, 0, 1, 2, 38, 0, 100, 0, 0, 1, 0, 0, 2, 35, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Raven''s Wood Leafbeard - On Data set - Set faction'), +(21326, 0, 2, 3, 61, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Raven''s Wood Leafbeard - On Data set - Show emote'), +(21326, 0, 3, 4, 61, 0, 100, 0, 0, 0, 0, 0, 2, 35, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Raven''s Wood Leafbeard - On Data set - Set faction'), +(21326, 0, 4, 5, 61, 0, 100, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Raven''s Wood Leafbeard - On Data set - Evade'), +(21326, 0, 5, 0, 61, 0, 100, 0, 0, 0, 0, 0, 41, 30000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Raven''s Wood Leafbeard - On Data set - Despawn'), +(22226, 0, 0, 0, 0, 0, 100, 0, 5000, 7000, 8000, 10000, 11, 36093, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,0,'Koi-Koi Spirit - IC - Ghost Strike'), +(22226, 0, 1, 0, 6, 0, 100, 0, 0, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 19, 21326, 40, 0, 0, 0, 0,0,'Koi-Koi Spirit - On death - Set data'); + +DELETE FROM `creature_text` WHERE `entry`= 21326; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`,`BroadcastTextId`) VALUES +(21326,0,0,'The %s appears very grateful to be free of the koi-koi spirit''s influence.',16,0,100,0,0,0,'Raven''s Wood Leafbeard ', 19943); diff --git a/sql/updates/world/2015_05_04_00_world.sql b/sql/updates/world/2015_05_04_00_world.sql new file mode 100644 index 00000000000..ca6f5657346 --- /dev/null +++ b/sql/updates/world/2015_05_04_00_world.sql @@ -0,0 +1,4 @@ +DELETE FROM `conditions` where `SourceTypeOrReferenceId`=17 AND `SourceEntry`=72590; + +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(17, 0, 72590, 0, 0,27, 1, 70, 3, 0, 0, 0, 0, '', 'Minimum Level for Runescroll of Fortitude on players (70)'); diff --git a/sql/updates/world/2015_05_09_00_world_335.sql b/sql/updates/world/2015_05_09_00_world_335.sql new file mode 100644 index 00000000000..003fa276542 --- /dev/null +++ b/sql/updates/world/2015_05_09_00_world_335.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature_equip_template` SET `itemEntry1`=2147, `itemEntry2`=2053, `VerifiedBuild`=0 WHERE `entry`=5809; diff --git a/sql/updates/world/2015_05_09_01_world_335.sql b/sql/updates/world/2015_05_09_01_world_335.sql new file mode 100644 index 00000000000..68f578812f8 --- /dev/null +++ b/sql/updates/world/2015_05_09_01_world_335.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `gameobject_template` WHERE `entry` IN (180055); +INSERT INTO `gameobject_template` (`entry`, `type`, `displayid`, `name`, `size`, `data0`, `data1`, `data2`, `data3`, `VerifiedBuild`) VALUES +(180055, 2, 51, 'Mysterious Wailing Caverns Chest', 0.4, 43, 6811, 2, 0, -18019); diff --git a/sql/updates/world/2015_05_09_02_world.sql b/sql/updates/world/2015_05_09_02_world.sql new file mode 100644 index 00000000000..e2e45095730 --- /dev/null +++ b/sql/updates/world/2015_05_09_02_world.sql @@ -0,0 +1,3 @@ +-- +UPDATE `creature_template` SET `InhabitType`=7 WHERE `entry` IN (28086, 28085); +UPDATE `smart_scripts` SET `target_type`=21, `target_param1`=8 WHERE `entryorguid` IN (32639, 32638, 32641, 32642) AND `id`=2; -- fix text target for Traveler's Tundra Mammoth's npcs diff --git a/sql/updates/world/2015_05_09_03_world.sql b/sql/updates/world/2015_05_09_03_world.sql new file mode 100644 index 00000000000..137ae636800 --- /dev/null +++ b/sql/updates/world/2015_05_09_03_world.sql @@ -0,0 +1,2 @@ +-- +DELETE FROM `creature_formations` WHERE `memberGUID` BETWEEN 45823 AND 45831; diff --git a/sql/updates/world/2015_05_09_04_world_335.sql b/sql/updates/world/2015_05_09_04_world_335.sql new file mode 100644 index 00000000000..814459be957 --- /dev/null +++ b/sql/updates/world/2015_05_09_04_world_335.sql @@ -0,0 +1,34 @@ +-- Remove Midsummer Double Spawns +DELETE FROM `creature` WHERE (`guid` IN (94696,94723,94698,94724) AND `id`=16781) OR (`guid`=94513 AND `id`=25994);-- Tanaris Horde +DELETE FROM `creature` WHERE (`guid` IN (94735,94734,94716,94733) AND `id`=16781) OR (`guid`=86895 AND `id`=25962);-- Tanaris Alliance +DELETE FROM `creature` WHERE (`guid` IN (94710,94656,94711,94694) AND `id`=16781) OR (`guid`=94518 AND `id`=25994);-- Stranglethorn Horde +DELETE FROM `creature` WHERE (`guid` IN (94553,94551,94554,94555) AND `id`=16781) OR (`guid`=86711 AND `id`=25962);-- Stranglethorn Alliance +DELETE FROM `creature` WHERE (`guid` IN (94557,94605,94556,94704) AND `id`=16781) OR (`guid`=90490 AND `id`=25962);-- Arathi Alliance +DELETE FROM `creature` WHERE (`guid` IN (94649,94738,94700,94579) AND `id`=16781) OR (`guid`=86704 AND `id`=25962);-- Silithus Alliance +DELETE FROM `creature` WHERE `guid` IN (202858,202859,202860,202861) AND `id`=16781;-- Ironforge +DELETE FROM `creature` WHERE `guid`=202862 AND `id`=16817; +DELETE FROM `creature` WHERE `guid`=202863 AND `id`=25975; +DELETE FROM `creature` WHERE `guid`=86165 AND `id`=26123; + +DELETE FROM `game_event_creature` WHERE `eventEntry`=1 AND `guid` IN (94696,94723,94698,94724,94513); +DELETE FROM `game_event_creature` WHERE `eventEntry`=1 AND `guid` IN (94735,94734,94716,94733,86895); +DELETE FROM `game_event_creature` WHERE `eventEntry`=1 AND `guid` IN (94710,94656,94711,94694,94518); +DELETE FROM `game_event_creature` WHERE `eventEntry`=1 AND `guid` IN (94553,94551,94554,94555,86711); +DELETE FROM `game_event_creature` WHERE `eventEntry`=1 AND `guid` IN (94557,94605,94556,94704,90490); +DELETE FROM `game_event_creature` WHERE `eventEntry`=1 AND `guid` IN (94649,94738,94700,94579,86704); +DELETE FROM `game_event_creature` WHERE `eventEntry`=1 AND `guid` IN (202858,202859,202860,202861,202862,202863,86165); + +DELETE FROM `gameobject` WHERE `guid` IN (51596,52357,50996,50855,50750,50747,52277,52467,51350,50692,52548,52284,51349);-- Tanaris horde +DELETE FROM `gameobject` WHERE `guid` IN (52273,52527,52275,50683,51343,52272,52279,50994,50854,50710,52466,50709,51342);-- Tanaris Alliance +DELETE FROM `gameobject` WHERE `guid` IN (51791,50690,52560,52333,52329,52511,50740,50741,50869,52399,52334);-- Stranglethorn horde +DELETE FROM `gameobject` WHERE `guid` IN (52393,52541,50682,51782,52325,51028,51797,51798,50784,50871,50785,51545,52331,52509); -- Stranglethorn Alliance +DELETE FROM `gameobject` WHERE `guid` IN (52335,51814,52409,51573,51014,51554,51579,51981,52412,52407,51578,50931,52481,52542,50836,51580,50553,51820,50802,50897,50803); -- Arathi Alliance +DELETE FROM `gameobject` WHERE `guid` IN (52344,50991,50743,50852,52463,50679,52267,52526);-- Silithus Alliance +DELETE FROM `gameobject` WHERE `guid`=49313;-- Silithus Horde + +DELETE FROM `game_event_gameobject` WHERE `eventEntry`=1 AND `guid` IN (51596,52357,50996,50855,50750,50747,52277,52467,51350,50692,52548,52284,51349); +DELETE FROM `game_event_gameobject` WHERE `eventEntry`=1 AND `guid` IN (52273,52527,52275,50683,51343,52272,52279,50994,50854,50710,52466,50709,51342); +DELETE FROM `game_event_gameobject` WHERE `eventEntry`=1 AND `guid` IN (51791,50690,52560,52333,52329,52511,50740,50741,50869,52399,52334); +DELETE FROM `game_event_gameobject` WHERE `eventEntry`=1 AND `guid` IN (52393,52541,50682,51782,52325,51028,51797,51798,50784,50871,50785,51545,52331,52509); +DELETE FROM `game_event_gameobject` WHERE `eventEntry`=1 AND `guid` IN (52335,51814,52409,51573,51014,51554,51579,51981,52412,52407,51578,50931,52481,52542,50836,51580,50553,51820,50802,50897,50803); +DELETE FROM `game_event_gameobject` WHERE `eventEntry`=1 AND `guid` IN (52344,50991,50743,50852,52463,50679,52267,52526); diff --git a/sql/updates/world/2015_05_09_05_world.sql b/sql/updates/world/2015_05_09_05_world.sql new file mode 100644 index 00000000000..41576ac375c --- /dev/null +++ b/sql/updates/world/2015_05_09_05_world.sql @@ -0,0 +1,835 @@ +-- Add SAI support for Lance a Lot achievement ID: 2836 +-- Champions SAI mechanic +SET @Sen_Valiant := 33285; +SET @Script := 3328500; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@Sen_Valiant; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Sen_Valiant; +DELETE FROM `smart_scripts` WHERE `source_type`=9 AND `entryorguid`=@Script; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@Sen_Valiant,0,0,0,25,0,100,0,0,0,0,0,28,64223,0,0,0,0,0,1,0,0,0,0,0,0,0,'Sen Valiant - On Reset - Remove auras from Defend'), +(@Sen_Valiant,0,1,2,62,0,100,0,10469,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Sen Valiant - On gossip select - Close gossip'), +(@Sen_Valiant,0,2,3,61,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'Sen Valiant - Linked with previous event - store target'), +(@Sen_Valiant,0,3,0,61,0,100,0,0,0,0,0,80,@Script,2,0,0,0,0,1,0,0,0,0,0,0,0,'Sen Valiant - Linked with previous event - Call timed actionlist'), +(@Sen_Valiant,0,4,0,52,0,100,0,0,@Sen_Valiant,0,0,11,63010,0,0,0,0,0,7,0,0,0,0,0,0,0,'Sen Valiant - On text over - Cast Charge'), +(@Sen_Valiant,0,5,0,0,0,100,0,0,0,1500,4000,11,62544,0,0,0,0,0,2,0,0,0,0,0,0,0,'Sen Valiant - IC - Cast Thrust'), +(@Sen_Valiant,0,6,0,9,0,100,0,5,5,4000,7000,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'Sen Valiant - On more than 5 yard range - Cast Shield-Breaker'), +(@Sen_Valiant,0,7,0,0,0,100,0,9000,11000,9000,10000,46,12,0,0,0,0,0,1,0,0,0,0,0,0,0,'Sen Valiant - IC - Move forward 12 yards'), +(@Sen_Valiant,0,8,9,9,0,100,0,9,15,3000,3000,11,63010,0,0,0,0,0,2,0,0,0,0,0,0,0,'Sen Valiant - On 10-12 yard range - Cast Charge'), +(@Sen_Valiant,0,9,0,61,0,100,0,0,0,0,0,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'Sen Valiant - Linked with previous event - Cast Shield-Breaker'), +(@Sen_Valiant,0,10,11,2,0,100,1,1,3,60000,60000,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,'Sen Valiant - On HP% between 1% and 3% - Change faction to 35'), +(@Sen_Valiant,0,11,12,61,0,100,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Sen Valiant - Linked with previous event - Say text'), +(@Sen_Valiant,0,12,13,61,0,100,0,0,0,0,0,85,62724,0,0,0,0,0,12,1,0,0,0,0,0,0,'Sen Valiant - Linked with previous event - Cast Mounted Melee Victory /item/'), +(@Sen_Valiant,0,13,14,61,0,100,0,0,0,0,0,85,64812,0,0,0,0,0,12,1,0,0,0,0,0,0,'Sen Valiant - Linked with previous event - Cast credit'), +(@Sen_Valiant,0,14,0,61,0,100,0,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Sen Valiant - Linked with previous event - Evade'), +(@Sen_Valiant,0,15,16,5,0,100,0,60000,60000,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Sen Valiant - On player killed - Say text'), +(@Sen_Valiant,0,16,17,61,0,100,0,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Sen Valiant - Linked with previous event - Set unseen'), +(@Sen_Valiant,0,17,0,61,0,100,0,0,0,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Sen Valiant - Linked with previous event - Despawn in 1 ms'), +-- Timed actionlist 1 +(@Script,9,1,0,0,0,100,0,0,0,0,0,42,0,1,0,0,0,0,1,0,0,0,0,0,0,0,'All champions - Script 1 - Set INVINCIBILITY'), +(@Script,9,2,0,0,0,100,0,0,0,0,0,59,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'All champions - Script 1 - Set run ON'), +(@Script,9,3,0,0,0,100,0,0,0,0,0,11,62719,0,0,0,0,0,1,0,0,0,0,0,0,0,'All champions - Script 1 - Cast Defend on self/Layer 1/'), +(@Script,9,4,0,0,0,100,0,0,0,0,0,11,62719,0,0,0,0,0,1,0,0,0,0,0,0,0,'All champions - Script 1 - Cast Defend on self/Layer 2/'), +(@Script,9,5,0,0,0,100,0,0,0,0,0,11,62719,0,0,0,0,0,1,0,0,0,0,0,0,0,'All champions - Script 1 - Cast Defend on self/Layer 3/'), +(@Script,9,6,0,0,0,100,0,0,0,0,0,46,20,0,0,0,0,0,1,0,0,0,0,0,0,0,'All champions - Script 1 - Move forward 15 yards'), +(@Script,9,7,0,0,0,100,0,0,0,0,0,59,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'All champions - Script 1 - Set run Off'), +(@Script,9,8,0,0,0,100,0,0,0,0,0,11,64223,0,0,0,0,0,1,0,0,0,0,0,0,0,'All champions - Script 1 - Cast aura TriggerS for Defend /10 sec one/'), +(@Script,9,9,0,0,0,100,0,3500,3500,0,0,2,14,0,0,0,0,0,1,0,0,0,0,0,0,0,'All champions - Script 1 - Change faction to 14'), +(@Script,9,10,0,0,0,100,0,0,0,0,0,1,0,1500,0,0,0,0,2,0,0,0,0,0,0,0,'All champions - Script 1 - Say text'); +-- Argent Valiants texts +DELETE FROM `creature_text` WHERE `entry`= @Sen_Valiant; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextId`) VALUES +(@Sen_Valiant,0,0,'Ready yourself!',12,1,100,0,0,0,'Argent Valiant', 33757), +(@Sen_Valiant,0,1,'Prepare yourself!',12,1,100,0,0,0,'Argent Valiant', 33755), +(@Sen_Valiant,0,2,'On your guard!',12,1,100,0,0,0,'Argent Valiant', 33756), +(@Sen_Valiant,0,3,'Let it begin!',12,1,100,0,0,0,'Argent Valiant', 33758), +(@Sen_Valiant,1,0,'Victory is mine!',12,1,100,0,0,0,'Argent Valiant', 33777), +(@Sen_Valiant,1,1,'It seems you still need more practice. Perhaps another time.',12,1,100,0,0,0,'Argent Valiant', 33764), +(@Sen_Valiant,1,2,'I have won. Better luck another time, friend.',12,1,100,0,0,0,'Argent Valiant', 33779), +(@Sen_Valiant,1,3,'I am afraid you will need more practice to defeat me.',12,1,100,0,0,0,'Argent Valiant', 33778), +(@Sen_Valiant,2,0,'I yield to you.',12,1,100,0,0,0,'Argent Valiant', 33774), +(@Sen_Valiant,2,1,'That was a well fought battle. I yield to you.',12,1,100,0,0,0,'Argent Valiant', 33776), +(@Sen_Valiant,2,2,'It would seem I underestimated your skills. Well done.',12,1,100,0,0,0,'Argent Valiant', 33775), +(@Sen_Valiant,2,3,'I have been defeated. Good fight!',12,1,100,0,0,0,'Argent Valiant', 33760); +-- Add condition for gossip option to show only, if player has quest: The Grand Melee is on tournament mount and have the spear equiped +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup` IN (10469, 10468, 10470, 10472, 10473, 10466, 10464, 10471, 10465, 10467); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ConditionTarget`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`,`NegativeCondition`) VALUES +(15,10469,0,0,1,9,13772,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10469,0,0,1,1,64812,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10469,0,0,1,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10469,0,0,1,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10469,0,0,2,9,13777,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10469,0,0,2,1,64812,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10469,0,0,2,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10469,0,0,2,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10469,0,0,3,9,13782,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10469,0,0,3,1,64812,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10469,0,0,3,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10469,0,0,3,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10469,0,0,4,9,13787,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10469,0,0,4,1,64812,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10469,0,0,4,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10469,0,0,4,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10469,0,0,5,9,13767,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10469,0,0,5,1,64812,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10469,0,0,5,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10469,0,0,5,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10469,0,0,6,9,13761,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10469,0,0,6,1,64812,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10469,0,0,6,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10469,0,0,6,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10469,0,0,7,9,13745,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10469,0,0,7,1,64812,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10469,0,0,7,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10469,0,0,7,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10469,0,0,8,9,13750,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10469,0,0,8,1,64812,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10469,0,0,8,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10469,0,0,8,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10469,0,0,9,9,13756,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10469,0,0,9,1,64812,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10469,0,0,9,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10469,0,0,9,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10469,0,0,10,9,13665,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10469,0,0,10,1,64812,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10469,0,0,10,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10469,0,0,10,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10468,0,0,1,9,13772,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10468,0,0,1,1,64811,0,0,0,'','Show gossip menu only if don''t have the auran',1), +(15,10468,0,0,1,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10468,0,0,1,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10468,0,0,2,9,13777,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10468,0,0,2,1,64811,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10468,0,0,2,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10468,0,0,2,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10468,0,0,3,9,13782,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10468,0,0,3,1,64811,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10468,0,0,3,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10468,0,0,3,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10468,0,0,4,9,13787,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10468,0,0,4,1,64811,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10468,0,0,4,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10468,0,0,4,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10468,0,0,5,9,13767,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10468,0,0,5,1,64811,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10468,0,0,5,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10468,0,0,5,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10468,0,0,6,9,13761,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10468,0,0,6,1,64811,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10468,0,0,6,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10468,0,0,6,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10468,0,0,7,9,13745,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10468,0,0,7,1,64811,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10468,0,0,7,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10468,0,0,7,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10468,0,0,8,9,13750,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10468,0,0,8,1,64811,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10468,0,0,8,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10468,0,0,8,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10468,0,0,9,9,13756,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10468,0,0,9,1,64811,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10468,0,0,9,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10468,0,0,9,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10468,0,0,10,9,13665,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10468,0,0,10,1,64811,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10468,0,0,10,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10468,0,0,10,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10470,0,0,1,9,13772,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10470,0,0,1,1,64813,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10470,0,0,1,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10470,0,0,1,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10470,0,0,2,9,13777,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10470,0,0,2,1,64813,0,0,0,'','Show gossip menu only if don''t have the auran',1), +(15,10470,0,0,2,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10470,0,0,2,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10470,0,0,3,1,64813,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10470,0,0,3,9,13782,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10470,0,0,3,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10470,0,0,3,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10470,0,0,4,1,64813,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10470,0,0,4,9,13787,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10470,0,0,4,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10470,0,0,4,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10470,0,0,5,1,64813,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10470,0,0,5,9,13767,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10470,0,0,5,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10470,0,0,5,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10470,0,0,6,1,64813,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10470,0,0,6,9,13761,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10470,0,0,6,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10470,0,0,6,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10470,0,0,7,1,64813,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10470,0,0,7,9,13745,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10470,0,0,7,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10470,0,0,7,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10470,0,0,8,1,64813,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10470,0,0,8,9,13750,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10470,0,0,8,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10470,0,0,8,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10470,0,0,9,1,64813,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10470,0,0,9,9,13756,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10470,0,0,9,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10470,0,0,9,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10470,0,0,10,1,64813,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10470,0,0,10,9,13665,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10470,0,0,10,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10470,0,0,10,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10472,0,0,1,9,13772,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10472,0,0,1,1,64815,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10472,0,0,1,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10472,0,0,1,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10472,0,0,2,9,13777,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10472,0,0,2,1,64815,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10472,0,0,2,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10472,0,0,2,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10472,0,0,3,9,13782,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10472,0,0,3,1,64815,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10472,0,0,3,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10472,0,0,3,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10472,0,0,4,9,13787,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10472,0,0,4,1,64815,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10472,0,0,4,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10472,0,0,4,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10472,0,0,5,9,13767,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10472,0,0,5,1,64815,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10472,0,0,5,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10472,0,0,5,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10472,0,0,6,9,13761,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10472,0,0,6,1,64815,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10472,0,0,6,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10472,0,0,6,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10472,0,0,7,9,13745,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10472,0,0,7,1,64815,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10472,0,0,7,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10472,0,0,7,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10472,0,0,8,9,13750,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10472,0,0,8,1,64815,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10472,0,0,8,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10472,0,0,8,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10472,0,0,9,9,13756,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10472,0,0,9,1,64815,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10472,0,0,9,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10472,0,0,9,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10472,0,0,10,9,13665,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10472,0,0,10,1,64815,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10472,0,0,10,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10472,0,0,10,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10473,0,0,1,9,13772,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10473,0,0,1,1,64816,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10473,0,0,1,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10473,0,0,1,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10473,0,0,2,9,13777,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10473,0,0,2,1,64816,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10473,0,0,2,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10473,0,0,2,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10473,0,0,3,9,13782,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10473,0,0,3,1,64816,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10473,0,0,3,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10473,0,0,3,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10473,0,0,4,9,13787,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10473,0,0,4,1,64816,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10473,0,0,4,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10473,0,0,4,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10473,0,0,5,9,13767,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10473,0,0,5,1,64816,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10473,0,0,5,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10473,0,0,5,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10473,0,0,6,9,13761,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10473,0,0,6,1,64816,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10473,0,0,6,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10473,0,0,6,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10473,0,0,7,9,13745,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10473,0,0,7,1,64816,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10473,0,0,7,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10473,0,0,7,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10473,0,0,8,9,13750,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10473,0,0,8,1,64816,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10473,0,0,8,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10473,0,0,8,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10473,0,0,9,9,13756,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10473,0,0,9,1,64816,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10473,0,0,9,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10473,0,0,9,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10473,0,0,10,9,13665,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10473,0,0,10,1,64816,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10473,0,0,10,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10473,0,0,10,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10466,0,0,1,9,13772,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10466,0,0,1,1,64809,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10466,0,0,1,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10466,0,0,1,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10466,0,0,2,9,13777,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10466,0,0,2,1,64809,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10466,0,0,2,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10466,0,0,2,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10466,0,0,3,9,13782,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10466,0,0,3,1,64809,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10466,0,0,3,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10466,0,0,3,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10466,0,0,4,9,13787,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10466,0,0,4,1,64809,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10466,0,0,4,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10466,0,0,4,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10466,0,0,5,9,13767,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10466,0,0,5,1,64809,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10466,0,0,5,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10466,0,0,5,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10466,0,0,6,9,13761,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10466,0,0,6,1,64809,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10466,0,0,6,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10466,0,0,6,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10466,0,0,7,9,13745,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10466,0,0,7,1,64809,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10466,0,0,7,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10466,0,0,7,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10466,0,0,8,9,13750,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10466,0,0,8,1,64809,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10466,0,0,8,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10466,0,0,8,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10466,0,0,9,9,13756,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10466,0,0,9,1,64809,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10466,0,0,9,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10466,0,0,9,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10466,0,0,10,9,13665,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10466,0,0,10,1,64809,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10466,0,0,10,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10466,0,0,10,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10464,0,0,1,9,13772,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10464,0,0,1,1,64805,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10464,0,0,1,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10464,0,0,1,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10464,0,0,2,9,13777,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10464,0,0,2,1,64805,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10464,0,0,2,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10464,0,0,2,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10464,0,0,3,9,13782,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10464,0,0,3,1,64805,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10464,0,0,3,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10464,0,0,3,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10464,0,0,4,9,13787,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10464,0,0,4,1,64805,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10464,0,0,4,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10464,0,0,4,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10464,0,0,5,9,13767,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10464,0,0,5,1,64805,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10464,0,0,5,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10464,0,0,5,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10464,0,0,6,9,13761,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10464,0,0,6,1,64805,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10464,0,0,6,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10464,0,0,6,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10464,0,0,7,9,13745,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10464,0,0,7,1,64805,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10464,0,0,7,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10464,0,0,7,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10464,0,0,8,9,13750,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10464,0,0,8,1,64805,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10464,0,0,8,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10464,0,0,8,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10464,0,0,9,9,13756,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10464,0,0,9,1,64805,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10464,0,0,9,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10464,0,0,9,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10464,0,0,10,9,13665,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10464,0,0,10,1,64805,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10464,0,0,10,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10464,0,0,10,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10471,0,0,1,9,13772,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10471,0,0,1,1,64814,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10471,0,0,1,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10471,0,0,1,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10471,0,0,2,9,13777,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10471,0,0,2,1,64814,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10471,0,0,2,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10471,0,0,2,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10471,0,0,3,9,13782,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10471,0,0,3,1,64814,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10471,0,0,3,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10471,0,0,3,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10471,0,0,4,9,13787,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10471,0,0,4,1,64814,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10471,0,0,4,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10471,0,0,4,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10471,0,0,5,9,13767,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10471,0,0,5,1,64814,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10471,0,0,5,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10471,0,0,5,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10471,0,0,6,9,13761,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10471,0,0,6,1,64814,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10471,0,0,6,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10471,0,0,6,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10471,0,0,7,9,13745,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10471,0,0,7,1,64814,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10471,0,0,7,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10471,0,0,7,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10471,0,0,8,9,13750,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10471,0,0,8,1,64814,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10471,0,0,8,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10471,0,0,8,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10471,0,0,9,9,13756,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10471,0,0,9,1,64814,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10471,0,0,9,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10471,0,0,9,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10471,0,0,10,9,13665,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10471,0,0,10,1,64814,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10471,0,0,10,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10471,0,0,10,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10465,0,0,1,9,13772,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10465,0,0,1,1,64808,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10465,0,0,1,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10465,0,0,1,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10465,0,0,2,9,13777,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10465,0,0,2,1,64808,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10465,0,0,2,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10465,0,0,2,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10465,0,0,3,9,13782,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10465,0,0,3,1,64808,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10465,0,0,3,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10465,0,0,3,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10465,0,0,4,9,13787,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10465,0,0,4,1,64808,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10465,0,0,4,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10465,0,0,4,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10465,0,0,5,9,13767,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10465,0,0,5,1,64808,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10465,0,0,5,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10465,0,0,5,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10465,0,0,6,9,13761,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10465,0,0,6,1,64808,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10465,0,0,6,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10465,0,0,6,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10465,0,0,7,9,13745,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10465,0,0,7,1,64808,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10465,0,0,7,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10465,0,0,7,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10465,0,0,8,9,13750,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10465,0,0,8,1,64808,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10465,0,0,8,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10465,0,0,8,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10465,0,0,9,9,13756,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10465,0,0,9,1,64808,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10465,0,0,9,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10465,0,0,9,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10465,0,0,10,9,13665,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10465,0,0,10,1,64808,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10465,0,0,10,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10465,0,0,10,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10467,0,0,1,9,13772,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10467,0,0,1,1,64810,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10467,0,0,1,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10467,0,0,1,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10467,0,0,2,9,13777,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10467,0,0,2,1,64810,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10467,0,0,2,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10467,0,0,2,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10467,0,0,3,9,13782,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10467,0,0,3,1,64810,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10467,0,0,3,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10467,0,0,3,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10467,0,0,4,9,13787,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10467,0,0,4,1,64810,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10467,0,0,4,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10467,0,0,4,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10467,0,0,5,9,13767,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10467,0,0,5,1,64810,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10467,0,0,5,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10467,0,0,5,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10467,0,0,6,9,13761,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10467,0,0,6,1,64810,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10467,0,0,6,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10467,0,0,6,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10467,0,0,7,9,13745,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10467,0,0,7,1,64810,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10467,0,0,7,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10467,0,0,7,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10467,0,0,8,9,13750,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10467,0,0,8,1,64810,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10467,0,0,8,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10467,0,0,8,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10467,0,0,9,9,13756,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10467,0,0,9,1,64810,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10467,0,0,9,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10467,0,0,9,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10467,0,0,10,9,13665,0,0,0,'','Show gossip menu only if quest The Grand Mele is taken',0), +(15,10467,0,0,10,1,64810,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10467,0,0,10,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10467,0,0,10,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0); + +SET @Orgri_Valiant := 33306; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@Orgri_Valiant; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Orgri_Valiant; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@Orgri_Valiant,0,0,0,25,0,100,0,0,0,0,0,28,64223,0,0,0,0,0,1,0,0,0,0,0,0,0,'Orgri Valiant - On Reset - Remove auras from Defend'), +(@Orgri_Valiant,0,1,2,62,0,100,0,10468,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Orgri Valiant - On gossip select - Close gossip'), +(@Orgri_Valiant,0,2,3,61,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'Orgri Valiant - Linked with previous event - store target'), +(@Orgri_Valiant,0,3,0,61,0,100,0,0,0,0,0,80,@Script,2,0,0,0,0,1,0,0,0,0,0,0,0,'Orgri Valiant - Linked with previous event - Call timed actionlist'), +(@Orgri_Valiant,0,4,0,52,0,100,0,0,@Orgri_Valiant,0,0,11,63010,0,0,0,0,0,7,0,0,0,0,0,0,0,'Orgri Valiant - On text over - Cast Charge'), +(@Orgri_Valiant,0,5,0,0,0,100,0,0,0,1500,4000,11,62544,0,0,0,0,0,2,0,0,0,0,0,0,0,'Orgri Valiant - IC - Cast Thrust'), +(@Orgri_Valiant,0,6,0,9,0,100,0,5,5,9000,10000,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'Orgri Valiant - On more than 5 yard range - Cast Shield-Breaker'), +(@Orgri_Valiant,0,7,0,0,0,100,0,9000,11000,9000,10000,46,12,0,0,0,0,0,1,0,0,0,0,0,0,0,'Orgri Valiant - IC - Move forward 12 yards'), +(@Orgri_Valiant,0,8,9,9,0,100,0,9,15,3000,3000,11,63010,0,0,0,0,0,2,0,0,0,0,0,0,0,'Orgri Valiant - On 10-12 yard range - Cast Charge'), +(@Orgri_Valiant,0,9,0,61,0,100,0,0,0,0,0,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'Orgri Valiant - Linked with previous event - Cast Shield-Breaker'), +(@Orgri_Valiant,0,10,11,2,0,100,1,1,3,60000,60000,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,'Orgri Valiant - On HP% between 1% and 3% - Change faction to 35'), +(@Orgri_Valiant,0,11,12,61,0,100,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Orgri Valiant - Linked with previous event - Say text'), +(@Orgri_Valiant,0,12,13,61,0,100,0,0,0,0,0,85,62724,0,0,0,0,0,12,1,0,0,0,0,0,0,'Orgri Valiant - Linked with previous event - Cast Mounted Melee Victory /item/'), +(@Orgri_Valiant,0,13,14,61,0,100,0,0,0,0,0,85,64811,0,0,0,0,0,12,1,0,0,0,0,0,0,'Orgri Valiant - Linked with previous event - Cast credit'), +(@Orgri_Valiant,0,14,0,61,0,100,0,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Orgri_Valiant - Linked with previous event - Evade'), +(@Orgri_Valiant,0,15,16,5,0,100,0,60000,60000,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Orgri Valiant - On player killed - Say text'), +(@Orgri_Valiant,0,16,17,61,0,100,0,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Orgri Valiant - Linked with previous event - Set unseen'), +(@Orgri_Valiant,0,17,0,61,0,100,0,0,0,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Orgri Valiant - Linked with previous event - Despawn in 1 ms'); +-- Argent Valiants texts +DELETE FROM `creature_text` WHERE `entry`= @Orgri_Valiant; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextId`) VALUES +(@Orgri_Valiant,0,0,'Ready yourself!',12,1,100,0,0,0,'Argent Valiant', 33757), +(@Orgri_Valiant,0,1,'Prepare yourself!',12,1,100,0,0,0,'Argent Valiant', 33755), +(@Orgri_Valiant,0,2,'On your guard!',12,1,100,0,0,0,'Argent Valiant', 33756), +(@Orgri_Valiant,0,3,'Let it begin!',12,1,100,0,0,0,'Argent Valiant', 33758), +(@Orgri_Valiant,1,0,'Victory is mine!',12,1,100,0,0,0,'Argent Valiant', 33777), +(@Orgri_Valiant,1,1,'It seems you still need more practice. Perhaps another time.',12,1,100,0,0,0,'Argent Valiant', 33764), +(@Orgri_Valiant,1,2,'I have won. Better luck another time, friend.',12,1,100,0,0,0,'Argent Valiant', 33779), +(@Orgri_Valiant,1,3,'I am afraid you will need more practice to defeat me.',12,1,100,0,0,0,'Argent Valiant', 33778), +(@Orgri_Valiant,2,0,'I yield to you.',12,1,100,0,0,0,'Argent Valiant', 33774), +(@Orgri_Valiant,2,1,'That was a well fought battle. I yield to you.',12,1,100,0,0,0,'Argent Valiant', 33776), +(@Orgri_Valiant,2,2,'It would seem I underestimated your skills. Well done.',12,1,100,0,0,0,'Argent Valiant', 33775), +(@Orgri_Valiant,2,3,'I have been defeated. Good fight!',12,1,100,0,0,0,'Argent Valiant', 33760); +SET @TB_Valiant := 33383; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@TB_Valiant; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@TB_Valiant; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@TB_Valiant,0,0,0,25,0,100,0,0,0,0,0,28,64223,0,0,0,0,0,1,0,0,0,0,0,0,0,'TB Valiant - On Reset - Remove auras from Defend'), +(@TB_Valiant,0,1,2,62,0,100,0,10472,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'TB Valiant - On gossip select - Close gossip'), +(@TB_Valiant,0,2,3,61,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'TB_Valiant - Linked with previous event - store target'), +(@TB_Valiant,0,3,0,61,0,100,0,0,0,0,0,80,@Script,2,0,0,0,0,1,0,0,0,0,0,0,0,'TB Valiant - Linked with previous event - Call timed actionlist'), +(@TB_Valiant,0,4,0,52,0,100,0,0,@TB_Valiant,0,0,11,63010,0,0,0,0,0,7,0,0,0,0,0,0,0,'TB Valiant - On text over - Cast Charge'), +(@TB_Valiant,0,5,0,0,0,100,0,0,0,1500,4000,11,62544,0,0,0,0,0,2,0,0,0,0,0,0,0,'TB Valiant - IC - Cast Thrust'), +(@TB_Valiant,0,6,0,9,0,100,0,5,5,9000,10000,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'TB Valiant - On more than 5 yard range - Cast Shield-Breaker'), +(@TB_Valiant,0,7,0,0,0,100,0,9000,11000,9000,10000,46,12,0,0,0,0,0,1,0,0,0,0,0,0,0,'TB Valiant - IC - Move forward 12 yards'), +(@TB_Valiant,0,8,9,9,0,100,0,9,15,3000,3000,11,63010,0,0,0,0,0,2,0,0,0,0,0,0,0,'TB Valiant - On 10-12 yard range - Cast Charge'), +(@TB_Valiant,0,9,0,61,0,100,0,0,0,0,0,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'TB Valiant - Linked with previous event - Cast Shield-Breaker'), +(@TB_Valiant,0,10,11,2,0,100,1,1,3,60000,60000,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,'TB Valiant - On HP% between 1% and 3% - Change faction to 35'), +(@TB_Valiant,0,11,12,61,0,100,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'TB Valiant - Linked with previous event - Say text'), +(@TB_Valiant,0,12,13,61,0,100,0,0,0,0,0,85,62724,0,0,0,0,0,12,1,0,0,0,0,0,0,'TB Valiant - Linked with previous event - Cast Mounted Melee Victory /item/'), +(@TB_Valiant,0,13,14,61,0,100,0,0,0,0,0,85,64815,0,0,0,0,0,12,1,0,0,0,0,0,0,'TB Valiant - Linked with previous event - Cast credit'), +(@TB_Valiant,0,14,0,61,0,100,0,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'TB_Valiant - Linked with previous event - Evade'), +(@TB_Valiant,0,15,16,5,0,100,0,60000,60000,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'TB Valiant - On player killed - Say text'), +(@TB_Valiant,0,16,17,61,0,100,0,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'TB Valiant - Linked with previous event - Set unseen'), +(@TB_Valiant,0,17,0,61,0,100,0,0,0,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'TB Valiant - Linked with previous event - Despawn in 1 ms'); +-- Argent Valiants texts +DELETE FROM `creature_text` WHERE `entry`= @TB_Valiant; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextId`) VALUES +(@TB_Valiant,0,0,'Ready yourself!',12,1,100,0,0,0,'Argent Valiant', 33757), +(@TB_Valiant,0,1,'Prepare yourself!',12,1,100,0,0,0,'Argent Valiant', 33755), +(@TB_Valiant,0,2,'On your guard!',12,1,100,0,0,0,'Argent Valiant', 33756), +(@TB_Valiant,0,3,'Let it begin!',12,1,100,0,0,0,'Argent Valiant', 33758), +(@TB_Valiant,1,0,'Victory is mine!',12,1,100,0,0,0,'Argent Valiant', 33777), +(@TB_Valiant,1,1,'It seems you still need more practice. Perhaps another time.',12,1,100,0,0,0,'Argent Valiant', 33764), +(@TB_Valiant,1,2,'I have won. Better luck another time, friend.',12,1,100,0,0,0,'Argent Valiant', 33779), +(@TB_Valiant,1,3,'I am afraid you will need more practice to defeat me.',12,1,100,0,0,0,'Argent Valiant', 33778), +(@TB_Valiant,2,0,'I yield to you.',12,1,100,0,0,0,'Argent Valiant', 33774), +(@TB_Valiant,2,1,'That was a well fought battle. I yield to you.',12,1,100,0,0,0,'Argent Valiant', 33776), +(@TB_Valiant,2,2,'It would seem I underestimated your skills. Well done.',12,1,100,0,0,0,'Argent Valiant', 33775), +(@TB_Valiant,2,3,'I have been defeated. Good fight!',12,1,100,0,0,0,'Argent Valiant', 33760); +SET @SM_Valiant := 33382; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@SM_Valiant; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@SM_Valiant; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@SM_Valiant,0,0,0,25,0,100,0,0,0,0,0,28,64223,0,0,0,0,0,1,0,0,0,0,0,0,0,'SM Valiant - On Reset - Remove auras from Defend'), +(@SM_Valiant,0,1,2,62,0,100,0,10470,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'SM Valiant - On gossip select - Close gossip'), +(@SM_Valiant,0,2,3,61,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'SM_Valiant - Linked with previous event - store target'), +(@SM_Valiant,0,3,0,61,0,100,0,0,0,0,0,80,@Script,2,0,0,0,0,1,0,0,0,0,0,0,0,'SM Valiant - Linked with previous event - Call timed actionlist'), +(@SM_Valiant,0,4,0,52,0,100,0,0,@SM_Valiant,0,0,11,63010,0,0,0,0,0,7,0,0,0,0,0,0,0,'SM Valiant - On text over - Cast Charge'), +(@SM_Valiant,0,5,0,0,0,100,0,0,0,1500,4000,11,62544,0,0,0,0,0,2,0,0,0,0,0,0,0,'SM Valiant - IC - Cast Thrust'), +(@SM_Valiant,0,6,0,9,0,100,0,5,5,9000,10000,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'SM Valiant - On more than 5 yard range - Cast Shield-Breaker'), +(@SM_Valiant,0,7,0,0,0,100,0,9000,11000,9000,10000,46,12,0,0,0,0,0,1,0,0,0,0,0,0,0,'SM Valiant - IC - Move forward 12 yards'), +(@SM_Valiant,0,8,9,9,0,100,0,9,15,3000,3000,11,63010,0,0,0,0,0,2,0,0,0,0,0,0,0,'SM Valiant - On 10-12 yard range - Cast Charge'), +(@SM_Valiant,0,9,0,61,0,100,0,0,0,0,0,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'SM Valiant - Linked with previous event - Cast Shield-Breaker'), +(@SM_Valiant,0,10,11,2,0,100,1,1,3,60000,60000,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,'SM Valiant - On HP% between 1% and 3% - Change faction to 35'), +(@SM_Valiant,0,11,12,61,0,100,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'SM Valiant - Linked with previous event - Say text'), +(@SM_Valiant,0,12,13,61,0,100,0,0,0,0,0,85,62724,0,0,0,0,0,12,1,0,0,0,0,0,0,'SM Valiant - Linked with previous event - Cast Mounted Melee Victory /item/'), +(@SM_Valiant,0,13,14,61,0,100,0,0,0,0,0,85,64813,0,0,0,0,0,12,1,0,0,0,0,0,0,'SM Valiant - Linked with previous event - Cast credit'), +(@SM_Valiant,0,14,0,61,0,100,0,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'SM_Valiant - Linked with previous event - Evade'), +(@SM_Valiant,0,15,16,5,0,100,0,60000,60000,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'SM Valiant - On player killed - Say text'), +(@SM_Valiant,0,16,17,61,0,100,0,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'SM Valiant - Linked with previous event - Set unseen'), +(@SM_Valiant,0,17,0,61,0,100,0,0,0,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'SM Valiant - Linked with previous event - Despawn in 1 ms'); +-- Argent Valiants texts +DELETE FROM `creature_text` WHERE `entry`= @SM_Valiant; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextId`) VALUES +(@SM_Valiant,0,0,'Ready yourself!',12,1,100,0,0,0,'Argent Valiant', 33757), +(@SM_Valiant,0,1,'Prepare yourself!',12,1,100,0,0,0,'Argent Valiant', 33755), +(@SM_Valiant,0,2,'On your guard!',12,1,100,0,0,0,'Argent Valiant', 33756), +(@SM_Valiant,0,3,'Let it begin!',12,1,100,0,0,0,'Argent Valiant', 33758), +(@SM_Valiant,1,0,'Victory is mine!',12,1,100,0,0,0,'Argent Valiant', 33777), +(@SM_Valiant,1,1,'It seems you still need more practice. Perhaps another time.',12,1,100,0,0,0,'Argent Valiant', 33764), +(@SM_Valiant,1,2,'I have won. Better luck another time, friend.',12,1,100,0,0,0,'Argent Valiant', 33779), +(@SM_Valiant,1,3,'I am afraid you will need more practice to defeat me.',12,1,100,0,0,0,'Argent Valiant', 33778), +(@SM_Valiant,2,0,'I yield to you.',12,1,100,0,0,0,'Argent Valiant', 33774), +(@SM_Valiant,2,1,'That was a well fought battle. I yield to you.',12,1,100,0,0,0,'Argent Valiant', 33776), +(@SM_Valiant,2,2,'It would seem I underestimated your skills. Well done.',12,1,100,0,0,0,'Argent Valiant', 33775), +(@SM_Valiant,2,3,'I have been defeated. Good fight!',12,1,100,0,0,0,'Argent Valiant', 33760); +SET @GR_Valiant := 33558; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@GR_Valiant; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@GR_Valiant; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@GR_Valiant,0,0,0,25,0,100,0,0,0,0,0,28,64223,0,0,0,0,0,1,0,0,0,0,0,0,0,'GR Valiant - On Reset - Remove auras from Defend'), +(@GR_Valiant,0,1,2,62,0,100,0,10466,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'GR Valiant - On gossip select - Close gossip'), +(@GR_Valiant,0,2,3,61,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'GR_Valiant - Linked with previous event - store target'), +(@GR_Valiant,0,3,0,61,0,100,0,0,0,0,0,80,@Script,2,0,0,0,0,1,0,0,0,0,0,0,0,'GR Valiant - Linked with previous event - Call timed actionlist'), +(@GR_Valiant,0,4,0,52,0,100,0,0,@GR_Valiant,0,0,11,63010,0,0,0,0,0,7,0,0,0,0,0,0,0,'GR Valiant - On text over - Cast Charge'), +(@GR_Valiant,0,5,0,0,0,100,0,0,0,1500,4000,11,62544,0,0,0,0,0,2,0,0,0,0,0,0,0,'GR Valiant - IC - Cast Thrust'), +(@GR_Valiant,0,6,0,9,0,100,0,5,5,9000,10000,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'GR Valiant - On more than 5 yard range - Cast Shield-Breaker'), +(@GR_Valiant,0,7,0,0,0,100,0,9000,11000,9000,10000,46,12,0,0,0,0,0,1,0,0,0,0,0,0,0,'GR Valiant - IC - Move forward 12 yards'), +(@GR_Valiant,0,8,9,9,0,100,0,9,15,3000,3000,11,63010,0,0,0,0,0,2,0,0,0,0,0,0,0,'GR Valiant - On 10-12 yard range - Cast Charge'), +(@GR_Valiant,0,9,0,61,0,100,0,0,0,0,0,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'GR Valiant - Linked with previous event - Cast Shield-Breaker'), +(@GR_Valiant,0,10,11,2,0,100,1,1,3,60000,60000,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,'GR Valiant - On HP% between 1% and 3% - Change faction to 35'), +(@GR_Valiant,0,11,12,61,0,100,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'GR Valiant - Linked with previous event - Say text'), +(@GR_Valiant,0,12,13,61,0,100,0,0,0,0,0,85,62724,0,0,0,0,0,12,1,0,0,0,0,0,0,'GR Valiant - Linked with previous event - Cast Mounted Melee Victory /item/'), +(@GR_Valiant,0,13,14,61,0,100,0,0,0,0,0,85,64809,0,0,0,0,0,12,1,0,0,0,0,0,0,'GR Valiant - Linked with previous event - Cast credit'), +(@GR_Valiant,0,14,0,61,0,100,0,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'GR_Valiant - Linked with previous event - Evade'), +(@GR_Valiant,0,15,16,5,0,100,0,60000,60000,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'GR Valiant - On player killed - Say text'), +(@GR_Valiant,0,16,17,61,0,100,0,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'GR Valiant - Linked with previous event - Set unseen'), +(@GR_Valiant,0,17,0,61,0,100,0,0,0,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'GR Valiant - Linked with previous event - Despawn in 1 ms'); +-- Argent Valiants texts +DELETE FROM `creature_text` WHERE `entry`= @GR_Valiant; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextId`) VALUES +(@GR_Valiant,0,0,'Ready yourself!',12,7,100,0,0,0,'Argent Valiant', 33757), +(@GR_Valiant,0,1,'Prepare yourself!',12,7,100,0,0,0,'Argent Valiant', 33755), +(@GR_Valiant,0,2,'On your guard!',12,7,100,0,0,0,'Argent Valiant', 33756), +(@GR_Valiant,0,3,'Let it begin!',12,7,100,0,0,0,'Argent Valiant', 33758), +(@GR_Valiant,1,0,'Victory is mine!',12,7,100,0,0,0,'Argent Valiant', 33777), +(@GR_Valiant,1,1,'It seems you still need more practice. Perhaps another time.',12,7,100,0,0,0,'Argent Valiant', 33764), +(@GR_Valiant,1,2,'I have won. Better luck another time, friend.',12,7,100,0,0,0,'Argent Valiant', 33779), +(@GR_Valiant,1,3,'I am afraid you will need more practice to defeat me.',12,7,100,0,0,0,'Argent Valiant', 33778), +(@GR_Valiant,2,0,'I yield to you.',12,7,100,0,0,0,'Argent Valiant', 33774), +(@GR_Valiant,2,1,'That was a well fought battle. I yield to you.',12,7,100,0,0,0,'Argent Valiant', 33776), +(@GR_Valiant,2,2,'It would seem I underestimated your skills. Well done.',12,7,100,0,0,0,'Argent Valiant', 33775), +(@GR_Valiant,2,3,'I have been defeated. Good fight!',12,7,100,0,0,0,'Argent Valiant', 33760); +SET @IF_Valiant := 33564; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@IF_Valiant; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@IF_Valiant; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@IF_Valiant,0,0,0,25,0,100,0,0,0,0,0,28,64223,0,0,0,0,0,1,0,0,0,0,0,0,0,'IF Valiant - On Reset - Remove auras from Defend'), +(@IF_Valiant,0,1,2,62,0,100,0,10467,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'IF Valiant - On gossip select - Close gossip'), +(@IF_Valiant,0,2,3,61,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'IF_Valiant - Linked with previous event - store target'), +(@IF_Valiant,0,3,0,61,0,100,0,0,0,0,0,80,@Script,2,0,0,0,0,1,0,0,0,0,0,0,0,'IF Valiant - Linked with previous event - Call timed actionlist'), +(@IF_Valiant,0,4,0,52,0,100,0,0,@IF_Valiant,0,0,11,63010,0,0,0,0,0,7,0,0,0,0,0,0,0,'IF Valiant - On text over - Cast Charge'), +(@IF_Valiant,0,5,0,0,0,100,0,0,0,1500,4000,11,62544,0,0,0,0,0,2,0,0,0,0,0,0,0,'IF Valiant - IC - Cast Thrust'), +(@IF_Valiant,0,6,0,9,0,100,0,5,5,9000,10000,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'IF Valiant - On more than 5 yard range - Cast Shield-Breaker'), +(@IF_Valiant,0,7,0,0,0,100,0,9000,11000,9000,10000,46,12,0,0,0,0,0,1,0,0,0,0,0,0,0,'IF Valiant - IC - Move forward 12 yards'), +(@IF_Valiant,0,8,9,9,0,100,0,9,15,3000,3000,11,63010,0,0,0,0,0,2,0,0,0,0,0,0,0,'IF Valiant - On 10-12 yard range - Cast Charge'), +(@IF_Valiant,0,9,0,61,0,100,0,0,0,0,0,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'IF Valiant - Linked with previous event - Cast Shield-Breaker'), +(@IF_Valiant,0,10,11,2,0,100,1,1,3,60000,60000,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,'IF Valiant - On HP% between 1% and 3% - Change faction to 35'), +(@IF_Valiant,0,11,12,61,0,100,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'IF Valiant - Linked with previous event - Say text'), +(@IF_Valiant,0,12,13,61,0,100,0,0,0,0,0,85,62724,0,0,0,0,0,12,1,0,0,0,0,0,0,'IF Valiant - Linked with previous event - Cast Mounted Melee Victory /item/'), +(@IF_Valiant,0,13,14,61,0,100,0,0,0,0,0,85,64810,0,0,0,0,0,12,1,0,0,0,0,0,0,'IF Valiant - Linked with previous event - Cast credit'), +(@IF_Valiant,0,14,0,61,0,100,0,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'IF_Valiant - Linked with previous event - Evade'), +(@IF_Valiant,0,15,16,5,0,100,0,60000,60000,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'IF Valiant - On player killed - Say text'), +(@IF_Valiant,0,16,17,61,0,100,0,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'IF Valiant - Linked with previous event - Set unseen'), +(@IF_Valiant,0,17,0,61,0,100,0,0,0,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'IF Valiant - Linked with previous event - Despawn in 1 ms'); +-- Argent Valiants texts +DELETE FROM `creature_text` WHERE `entry`= @IF_Valiant; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextId`) VALUES +(@IF_Valiant,0,0,'Ready yourself!',12,7,100,0,0,0,'Argent Valiant', 33757), +(@IF_Valiant,0,1,'Prepare yourself!',12,7,100,0,0,0,'Argent Valiant', 33755), +(@IF_Valiant,0,2,'On your guard!',12,7,100,0,0,0,'Argent Valiant', 33756), +(@IF_Valiant,0,3,'Let it begin!',12,7,100,0,0,0,'Argent Valiant', 33758), +(@IF_Valiant,1,0,'Victory is mine!',12,7,100,0,0,0,'Argent Valiant', 33777), +(@IF_Valiant,1,1,'It seems you still need more practice. Perhaps another time.',12,7,100,0,0,0,'Argent Valiant', 33764), +(@IF_Valiant,1,2,'I have won. Better luck another time, friend.',12,7,100,0,0,0,'Argent Valiant', 33779), +(@IF_Valiant,1,3,'I am afraid you will need more practice to defeat me.',12,7,100,0,0,0,'Argent Valiant', 33778), +(@IF_Valiant,2,0,'I yield to you.',12,7,100,0,0,0,'Argent Valiant', 33774), +(@IF_Valiant,2,1,'That was a well fought battle. I yield to you.',12,7,100,0,0,0,'Argent Valiant', 33776), +(@IF_Valiant,2,2,'It would seem I underestimated your skills. Well done.',12,7,100,0,0,0,'Argent Valiant', 33775), +(@IF_Valiant,2,3,'I have been defeated. Good fight!',12,7,100,0,0,0,'Argent Valiant', 33760); +SET @SW_Valiant := 33561; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@SW_Valiant; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@SW_Valiant; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@SW_Valiant,0,0,0,25,0,100,0,0,0,0,0,28,64223,0,0,0,0,0,1,0,0,0,0,0,0,0,'SW Valiant - On Reset - Remove auras from Defend'), +(@SW_Valiant,0,1,2,62,0,100,0,10471,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'SW Valiant - On gossip select - Close gossip'), +(@SW_Valiant,0,2,3,61,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'SW_Valiant - Linked with previous event - store target'), +(@SW_Valiant,0,3,0,61,0,100,0,0,0,0,0,80,@Script,2,0,0,0,0,1,0,0,0,0,0,0,0,'SW Valiant - Linked with previous event - Call timed actionlist'), +(@SW_Valiant,0,4,0,52,0,100,0,0,@SW_Valiant,0,0,11,63010,0,0,0,0,0,7,0,0,0,0,0,0,0,'SW Valiant - On text over - Cast Charge'), +(@SW_Valiant,0,5,0,0,0,100,0,0,0,1500,4000,11,62544,0,0,0,0,0,2,0,0,0,0,0,0,0,'SW Valiant - IC - Cast Thrust'), +(@SW_Valiant,0,6,0,9,0,100,0,5,5,9000,10000,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'SW Valiant - On more than 5 yard range - Cast Shield-Breaker'), +(@SW_Valiant,0,7,0,0,0,100,0,9000,11000,9000,10000,46,12,0,0,0,0,0,1,0,0,0,0,0,0,0,'SW Valiant - IC - Move forward 12 yards'), +(@SW_Valiant,0,8,9,9,0,100,0,9,15,3000,3000,11,63010,0,0,0,0,0,2,0,0,0,0,0,0,0,'SW Valiant - On 10-12 yard range - Cast Charge'), +(@SW_Valiant,0,9,0,61,0,100,0,0,0,0,0,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'SW Valiant - Linked with previous event - Cast Shield-Breaker'), +(@SW_Valiant,0,10,11,2,0,100,1,1,3,60000,60000,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,'SW Valiant - On HP% between 1% and 3% - Change faction to 35'), +(@SW_Valiant,0,11,12,61,0,100,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'SW Valiant - Linked with previous event - Say text'), +(@SW_Valiant,0,12,13,61,0,100,0,0,0,0,0,85,62724,0,0,0,0,0,12,1,0,0,0,0,0,0,'SW Valiant - Linked with previous event - Cast Mounted Melee Victory /item/'), +(@SW_Valiant,0,13,14,61,0,100,0,0,0,0,0,85,64814,0,0,0,0,0,12,1,0,0,0,0,0,0,'SW Valiant - Linked with previous event - Cast credit'), +(@SW_Valiant,0,14,0,61,0,100,0,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'SW_Valiant - Linked with previous event - Evade'), +(@SW_Valiant,0,15,16,5,0,100,0,60000,60000,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'SW Valiant - On player killed - Say text'), +(@SW_Valiant,0,16,17,61,0,100,0,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'SW Valiant - Linked with previous event - Set unseen'), +(@SW_Valiant,0,17,0,61,0,100,0,0,0,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'SW Valiant - Linked with previous event - Despawn in 1 ms'); +-- Argent Valiants texts +DELETE FROM `creature_text` WHERE `entry`= @SW_Valiant; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextId`) VALUES +(@SW_Valiant,0,0,'Ready yourself!',12,7,100,0,0,0,'Argent Valiant', 33757), +(@SW_Valiant,0,1,'Prepare yourself!',12,7,100,0,0,0,'Argent Valiant', 33755), +(@SW_Valiant,0,2,'On your guard!',12,7,100,0,0,0,'Argent Valiant', 33756), +(@SW_Valiant,0,3,'Let it begin!',12,7,100,0,0,0,'Argent Valiant', 33758), +(@SW_Valiant,1,0,'Victory is mine!',12,7,100,0,0,0,'Argent Valiant', 33777), +(@SW_Valiant,1,1,'It seems you still need more practice. Perhaps another time.',12,7,100,0,0,0,'Argent Valiant', 33764), +(@SW_Valiant,1,2,'I have won. Better luck another time, friend.',12,7,100,0,0,0,'Argent Valiant', 33779), +(@SW_Valiant,1,3,'I am afraid you will need more practice to defeat me.',12,7,100,0,0,0,'Argent Valiant', 33778), +(@SW_Valiant,2,0,'I yield to you.',12,7,100,0,0,0,'Argent Valiant', 33774), +(@SW_Valiant,2,1,'That was a well fought battle. I yield to you.',12,7,100,0,0,0,'Argent Valiant', 33776), +(@SW_Valiant,2,2,'It would seem I underestimated your skills. Well done.',12,7,100,0,0,0,'Argent Valiant', 33775), +(@SW_Valiant,2,3,'I have been defeated. Good fight!',12,7,100,0,0,0,'Argent Valiant', 33760); +SET @Darn_Valiant := 33559; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@Darn_Valiant; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Darn_Valiant; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@Darn_Valiant,0,0,0,25,0,100,0,0,0,0,0,28,64223,0,0,0,0,0,1,0,0,0,0,0,0,0,'Darn Valiant - On Reset - Remove auras from Defend'), +(@Darn_Valiant,0,1,2,62,0,100,0,10464,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Darn Valiant - On gossip select - Close gossip'), +(@Darn_Valiant,0,2,3,61,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'Darn_Valiant - Linked with previous event - store target'), +(@Darn_Valiant,0,3,0,61,0,100,0,0,0,0,0,80,@Script,2,0,0,0,0,1,0,0,0,0,0,0,0,'Darn Valiant - Linked with previous event - Call timed actionlist'), +(@Darn_Valiant,0,4,0,52,0,100,0,0,@Darn_Valiant,0,0,11,63010,0,0,0,0,0,7,0,0,0,0,0,0,0,'Darn Valiant - On text over - Cast Charge'), +(@Darn_Valiant,0,5,0,0,0,100,0,0,0,1500,4000,11,62544,0,0,0,0,0,2,0,0,0,0,0,0,0,'Darn Valiant - IC - Cast Thrust'), +(@Darn_Valiant,0,6,0,9,0,100,0,5,5,9000,10000,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'Darn Valiant - On more than 5 yard range - Cast Shield-Breaker'), +(@Darn_Valiant,0,7,0,0,0,100,0,9000,11000,9000,10000,46,12,0,0,0,0,0,1,0,0,0,0,0,0,0,'Darn Valiant - IC - Move forward 12 yards'), +(@Darn_Valiant,0,8,9,9,0,100,0,9,15,3000,3000,11,63010,0,0,0,0,0,2,0,0,0,0,0,0,0,'Darn Valiant - On 10-12 yard range - Cast Charge'), +(@Darn_Valiant,0,9,0,61,0,100,0,0,0,0,0,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'Darn Valiant - Linked with previous event - Cast Shield-Breaker'), +(@Darn_Valiant,0,10,11,2,0,100,1,1,3,60000,60000,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,'Darn Valiant - On HP% between 1% and 3% - Change faction to 35'), +(@Darn_Valiant,0,11,12,61,0,100,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Darn Valiant - Linked with previous event - Say text'), +(@Darn_Valiant,0,12,13,61,0,100,0,0,0,0,0,85,62724,0,0,0,0,0,12,1,0,0,0,0,0,0,'Darn Valiant - Linked with previous event - Cast Mounted Melee Victory /item/'), +(@Darn_Valiant,0,13,14,61,0,100,0,0,0,0,0,85,64805,0,0,0,0,0,12,1,0,0,0,0,0,0,'Darn Valiant - Linked with previous event - Cast credit'), +(@Darn_Valiant,0,14,0,61,0,100,0,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Darn_Valiant - Linked with previous event - Evade'), +(@Darn_Valiant,0,15,16,5,0,100,0,60000,60000,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Darn Valiant - On player killed - Say text'), +(@Darn_Valiant,0,16,17,61,0,100,0,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Darn Valiant - Linked with previous event - Set unseen'), +(@Darn_Valiant,0,17,0,61,0,100,0,0,0,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Darn Valiant - Linked with previous event - Despawn in 1 ms'); +-- Argent Valiants texts +DELETE FROM `creature_text` WHERE `entry`= @Darn_Valiant; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextId`) VALUES +(@Darn_Valiant,0,0,'Ready yourself!',12,7,100,0,0,0,'Argent Valiant', 33757), +(@Darn_Valiant,0,1,'Prepare yourself!',12,7,100,0,0,0,'Argent Valiant', 33755), +(@Darn_Valiant,0,2,'On your guard!',12,7,100,0,0,0,'Argent Valiant', 33756), +(@Darn_Valiant,0,3,'Let it begin!',12,7,100,0,0,0,'Argent Valiant', 33758), +(@Darn_Valiant,1,0,'Victory is mine!',12,7,100,0,0,0,'Argent Valiant', 33777), +(@Darn_Valiant,1,1,'It seems you still need more practice. Perhaps another time.',12,7,100,0,0,0,'Argent Valiant', 33764), +(@Darn_Valiant,1,2,'I have won. Better luck another time, friend.',12,7,100,0,0,0,'Argent Valiant', 33779), +(@Darn_Valiant,1,3,'I am afraid you will need more practice to defeat me.',12,7,100,0,0,0,'Argent Valiant', 33778), +(@Darn_Valiant,2,0,'I yield to you.',12,7,100,0,0,0,'Argent Valiant', 33774), +(@Darn_Valiant,2,1,'That was a well fought battle. I yield to you.',12,7,100,0,0,0,'Argent Valiant', 33776), +(@Darn_Valiant,2,2,'It would seem I underestimated your skills. Well done.',12,7,100,0,0,0,'Argent Valiant', 33775), +(@Darn_Valiant,2,3,'I have been defeated. Good fight!',12,7,100,0,0,0,'Argent Valiant', 33760); +SET @Exo_Valiant := 33562; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@Exo_Valiant; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Exo_Valiant; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@Exo_Valiant,0,0,0,25,0,100,0,0,0,0,0,28,64223,0,0,0,0,0,1,0,0,0,0,0,0,0,'Exo Valiant - On Reset - Remove auras from Defend'), +(@Exo_Valiant,0,1,2,62,0,100,0,10465,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Exo Valiant - On gossip select - Close gossip'), +(@Exo_Valiant,0,2,3,61,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'Exo_Valiant - Linked with previous event - store target'), +(@Exo_Valiant,0,3,0,61,0,100,0,0,0,0,0,80,@Script,2,0,0,0,0,1,0,0,0,0,0,0,0,'Exo Valiant - Linked with previous event - Call timed actionlist'), +(@Exo_Valiant,0,4,0,52,0,100,0,0,@Exo_Valiant,0,0,11,63010,0,0,0,0,0,7,0,0,0,0,0,0,0,'Exo Valiant - On text over - Cast Charge'), +(@Exo_Valiant,0,5,0,0,0,100,0,0,0,1500,4000,11,62544,0,0,0,0,0,2,0,0,0,0,0,0,0,'Exo Valiant - IC - Cast Thrust'), +(@Exo_Valiant,0,6,0,9,0,100,0,5,5,9000,10000,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'Exo Valiant - On more than 5 yard range - Cast Shield-Breaker'), +(@Exo_Valiant,0,7,0,0,0,100,0,9000,11000,9000,10000,46,12,0,0,0,0,0,1,0,0,0,0,0,0,0,'Exo Valiant - IC - Move forward 12 yards'), +(@Exo_Valiant,0,8,9,9,0,100,0,9,15,3000,3000,11,63010,0,0,0,0,0,2,0,0,0,0,0,0,0,'Exo Valiant - On 10-12 yard range - Cast Charge'), +(@Exo_Valiant,0,9,0,61,0,100,0,0,0,0,0,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'Exo Valiant - Linked with previous event - Cast Shield-Breaker'), +(@Exo_Valiant,0,10,11,2,0,100,1,1,3,60000,60000,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,'Exo Valiant - On HP% between 1% and 3% - Change faction to 35'), +(@Exo_Valiant,0,11,12,61,0,100,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Exo Valiant - Linked with previous event - Say text'), +(@Exo_Valiant,0,12,13,61,0,100,0,0,0,0,0,85,62724,0,0,0,0,0,12,1,0,0,0,0,0,0,'Exo Valiant - Linked with previous event - Cast Mounted Melee Victory /item/'), +(@Exo_Valiant,0,13,14,61,0,100,0,0,0,0,0,85,64808,0,0,0,0,0,12,1,0,0,0,0,0,0,'Exo Valiant - Linked with previous event - Cast credit'), +(@Exo_Valiant,0,14,0,61,0,100,0,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Exo_Valiant - Linked with previous event - Evade'), +(@Exo_Valiant,0,15,16,5,0,100,0,60000,60000,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Exo Valiant - On player killed - Say text'), +(@Exo_Valiant,0,16,17,61,0,100,0,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Exo Valiant - Linked with previous event - Set unseen'), +(@Exo_Valiant,0,17,0,61,0,100,0,0,0,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Exo Valiant - Linked with previous event - Despawn in 1 ms'); +-- Argent Valiants texts +DELETE FROM `creature_text` WHERE `entry`= @Exo_Valiant; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextId`) VALUES +(@Exo_Valiant,0,0,'Ready yourself!',12,7,100,0,0,0,'Argent Valiant', 33757), +(@Exo_Valiant,0,1,'Prepare yourself!',12,7,100,0,0,0,'Argent Valiant', 33755), +(@Exo_Valiant,0,2,'On your guard!',12,7,100,0,0,0,'Argent Valiant', 33756), +(@Exo_Valiant,0,3,'Let it begin!',12,7,100,0,0,0,'Argent Valiant', 33758), +(@Exo_Valiant,1,0,'Victory is mine!',12,7,100,0,0,0,'Argent Valiant', 33777), +(@Exo_Valiant,1,1,'It seems you still need more practice. Perhaps another time.',12,7,100,0,0,0,'Argent Valiant', 33764), +(@Exo_Valiant,1,2,'I have won. Better luck another time, friend.',12,7,100,0,0,0,'Argent Valiant', 33779), +(@Exo_Valiant,1,3,'I am afraid you will need more practice to defeat me.',12,7,100,0,0,0,'Argent Valiant', 33778), +(@Exo_Valiant,2,0,'I yield to you.',12,7,100,0,0,0,'Argent Valiant', 33774), +(@Exo_Valiant,2,1,'That was a well fought battle. I yield to you.',12,7,100,0,0,0,'Argent Valiant', 33776), +(@Exo_Valiant,2,2,'It would seem I underestimated your skills. Well done.',12,7,100,0,0,0,'Argent Valiant', 33775), +(@Exo_Valiant,2,3,'I have been defeated. Good fight!',12,7,100,0,0,0,'Argent Valiant', 33760); +SET @UC_Valiant := 33384; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@UC_Valiant; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@UC_Valiant; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@UC_Valiant,0,0,0,25,0,100,0,0,0,0,0,28,64223,0,0,0,0,0,1,0,0,0,0,0,0,0,'UC Valiant - On Reset - Remove auras from Defend'), +(@UC_Valiant,0,1,2,62,0,100,0,10473,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'UC Valiant - On gossip select - Close gossip'), +(@UC_Valiant,0,2,3,61,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'UC_Valiant - Linked with previous event - store target'), +(@UC_Valiant,0,3,0,61,0,100,0,0,0,0,0,80,@Script,2,0,0,0,0,1,0,0,0,0,0,0,0,'UC Valiant - Linked with previous event - Call timed actionlist'), +(@UC_Valiant,0,4,0,52,0,100,0,0,@UC_Valiant,0,0,11,63010,0,0,0,0,0,7,0,0,0,0,0,0,0,'UC Valiant - On text over - Cast Charge'), +(@UC_Valiant,0,5,0,0,0,100,0,0,0,1500,4000,11,62544,0,0,0,0,0,2,0,0,0,0,0,0,0,'UC Valiant - IC - Cast Thrust'), +(@UC_Valiant,0,6,0,9,0,100,0,5,5,9000,10000,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'UC Valiant - On more than 5 yard range - Cast Shield-Breaker'), +(@UC_Valiant,0,7,0,0,0,100,0,9000,11000,9000,10000,46,12,0,0,0,0,0,1,0,0,0,0,0,0,0,'UC Valiant - IC - Move forward 12 yards'), +(@UC_Valiant,0,8,9,9,0,100,0,9,15,3000,3000,11,63010,0,0,0,0,0,2,0,0,0,0,0,0,0,'UC Valiant - On 10-12 yard range - Cast Charge'), +(@UC_Valiant,0,9,0,61,0,100,0,0,0,0,0,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'UC Valiant - Linked with previous event - Cast Shield-Breaker'), +(@UC_Valiant,0,10,11,2,0,100,1,1,3,60000,60000,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,'UC Valiant - On HP% between 1% and 3% - Change faction to 35'), +(@UC_Valiant,0,11,12,61,0,100,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'UC Valiant - Linked with previous event - Say text'), +(@UC_Valiant,0,12,13,61,0,100,0,0,0,0,0,85,62724,0,0,0,0,0,12,1,0,0,0,0,0,0,'UC Valiant - Linked with previous event - Cast Mounted Melee Victory /item/'), +(@UC_Valiant,0,13,14,61,0,100,0,0,0,0,0,85,64816,0,0,0,0,0,12,1,0,0,0,0,0,0,'UC Valiant - Linked with previous event - Cast credit'), +(@UC_Valiant,0,14,0,61,0,100,0,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'UC_Valiant - Linked with previous event - Evade'), +(@UC_Valiant,0,15,16,5,0,100,0,60000,60000,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'UC Valiant - On player killed - Say text'), +(@UC_Valiant,0,16,17,61,0,100,0,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'UC Valiant - Linked with previous event - Set unseen'), +(@UC_Valiant,0,17,0,61,0,100,0,0,0,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'UC Valiant - Linked with previous event - Despawn in 1 ms'); +-- Argent Valiants texts +DELETE FROM `creature_text` WHERE `entry`= @UC_Valiant; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextId`) VALUES +(@UC_Valiant,0,0,'Ready yourself!',12,1,100,0,0,0,'Argent Valiant', 33757), +(@UC_Valiant,0,1,'Prepare yourself!',12,1,100,0,0,0,'Argent Valiant', 33755), +(@UC_Valiant,0,2,'On your guard!',12,1,100,0,0,0,'Argent Valiant', 33756), +(@UC_Valiant,0,3,'Let it begin!',12,1,100,0,0,0,'Argent Valiant', 33758), +(@UC_Valiant,1,0,'Victory is mine!',12,1,100,0,0,0,'Argent Valiant', 33777), +(@UC_Valiant,1,1,'It seems you still need more practice. Perhaps another time.',12,1,100,0,0,0,'Argent Valiant', 33764), +(@UC_Valiant,1,2,'I have won. Better luck another time, friend.',12,1,100,0,0,0,'Argent Valiant', 33779), +(@UC_Valiant,1,3,'I am afraid you will need more practice to defeat me.',12,1,100,0,0,0,'Argent Valiant', 33778), +(@UC_Valiant,2,0,'I yield to you.',12,1,100,0,0,0,'Argent Valiant', 33774), +(@UC_Valiant,2,1,'That was a well fought battle. I yield to you.',12,1,100,0,0,0,'Argent Valiant', 33776), +(@UC_Valiant,2,2,'It would seem I underestimated your skills. Well done.',12,1,100,0,0,0,'Argent Valiant', 33775), +(@UC_Valiant,2,3,'I have been defeated. Good fight!',12,1,100,0,0,0,'Argent Valiant', 33760); + +DELETE FROM `gossip_menu` WHERE `entry` IN (10469, 10468, 10470, 10472, 10473, 10466, 10464, 10471, 10465, 10467); +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES +(10469, 14384), +(10469, 14492), +(10468, 14384), +(10468, 14492), +(10470, 14384), +(10470, 14492), +(10472, 14384), +(10472, 14492), +(10473, 14384), +(10473, 14492), +(10466, 14384), +(10466, 14492), +(10464, 14384), +(10464, 14492), +(10471, 14384), +(10471, 14492), +(10465, 14384), +(10465, 14492), +(10467, 14384), +(10467, 14492); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=14 AND `SourceGroup` IN (10469, 10468, 10470, 10472, 10473, 10466, 10464, 10471, 10465, 10467); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`, `ErrorTextId`,`ScriptName`,`Comment`, `NegativeCondition`) VALUES +(14,10469,14384,0,1,64812,0,0,0,'','Show gossip menu text if the player haven''t the aura', 1), +(14,10469,14492,0,1,64812,0,0,0,'','Show gossip menu text if the player have the aura', 0), +(14,10468,14384,0,1,64811,0,0,0,'','Show gossip menu text if the player haven''t the aura', 1), +(14,10468,14492,0,1,64811,0,0,0,'','Show gossip menu text if the player have the aura', 0), +(14,10470,14384,0,1,64813,0,0,0,'','Show gossip menu text if the player haven''t the aura', 1), +(14,10470,14492,0,1,64813,0,0,0,'','Show gossip menu text if the player have the aura', 0), +(14,10472,14384,0,1,64815,0,0,0,'','Show gossip menu text if the player haven''t the aura', 1), +(14,10472,14492,0,1,64815,0,0,0,'','Show gossip menu text if the player have the aura', 0), +(14,10473,14384,0,1,64816,0,0,0,'','Show gossip menu text if the player haven''t the aura', 1), +(14,10473,14492,0,1,64816,0,0,0,'','Show gossip menu text if the player have the aura', 0), +(14,10466,14384,0,1,64809,0,0,0,'','Show gossip menu text if the player haven''t the aura', 1), +(14,10466,14492,0,1,64809,0,0,0,'','Show gossip menu text if the player have the aura', 0), +(14,10464,14384,0,1,64805,0,0,0,'','Show gossip menu text if the player haven''t the aura', 1), +(14,10464,14492,0,1,64805,0,0,0,'','Show gossip menu text if the player have the aura', 0), +(14,10471,14384,0,1,64814,0,0,0,'','Show gossip menu text if the player haven''t the aura', 1), +(14,10471,14492,0,1,64814,0,0,0,'','Show gossip menu text if the player have the aura', 0), +(14,10465,14384,0,1,64808,0,0,0,'','Show gossip menu text if the player haven''t the aura', 1), +(14,10465,14492,0,1,64808,0,0,0,'','Show gossip menu text if the player have the aura', 0), +(14,10467,14384,0,1,64810,0,0,0,'','Show gossip menu text if the player haven''t the aura', 1), +(14,10467,14492,0,1,64810,0,0,0,'','Show gossip menu text if the player have the aura', 0); diff --git a/sql/updates/world/2015_05_09_06_world.sql b/sql/updates/world/2015_05_09_06_world.sql new file mode 100644 index 00000000000..5038deab480 --- /dev/null +++ b/sql/updates/world/2015_05_09_06_world.sql @@ -0,0 +1,7 @@ +-- +UPDATE `creature_text` SET `groupid`=0, `id`=1, `comment`='engineer helice SAY_WP_1' WHERE `entry`=28787 AND `BroadcastTextId`=28856; +UPDATE `creature_text` SET `groupid`=6, `id`=1, `COMMENT`='engineer helice SAY_WP_7' WHERE `entry`=28787 AND `BroadcastTextId`=28865; +UPDATE `creature_text` SET `groupid`=1, `id`=1, `COMMENT`='engineer helice SAY_WP_2' WHERE `entry`=28787 AND `BroadcastTextId`=28857; +UPDATE `creature_text` SET `groupid`=2, `id`=1, `COMMENT`='engineer helice SAY_WP_3' WHERE `entry`=28787 AND `BroadcastTextId`=28859; +UPDATE `creature_text` SET `groupid`=5, `id`=1, `COMMENT`='engineer helice SAY_WP_6' WHERE `entry`=28787 AND `BroadcastTextId`=28864; +UPDATE `creature_text` SET `groupid`=4, `id`=1, `COMMENT`='engineer helice SAY_WP_5' WHERE `entry`=28787 AND `BroadcastTextId`=28862; diff --git a/sql/updates/world/2015_05_09_07_world.sql b/sql/updates/world/2015_05_09_07_world.sql new file mode 100644 index 00000000000..459c0c3e1f8 --- /dev/null +++ b/sql/updates/world/2015_05_09_07_world.sql @@ -0,0 +1,103 @@ +-- +UPDATE `smart_scripts` SET `event_type`=25, `event_flags`=0 WHERE `entryorguid` IN (21784,21815, 21801) AND `source_type`=0 AND `id`=0; + +DELETE FROM `creature_formations` WHERE `leaderGUID`=76082; +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`) VALUES +(76082,76082,0,0,2), +(76082,76083,7,360,2), +(76082,76084,14,360,2), +(76082,76085,21,360,2); + +UPDATE `creature` SET `MovementType`=0, `spawndist`=0 WHERE `guid` IN (76083, 76084, 76085); +UPDATE `creature` SET `MovementType`=2 WHERE `guid` IN (76082); +DELETE FROM `creature_addon` WHERE `guid` IN (76082); +INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes1`,`bytes2`, `emote`, `auras`) VALUES +(76082,760820,16777216,4097,0,""); +DELETE FROM `creature` WHERE `id`=21998; -- wrong spawn, must be summoned by quest item only + +DELETE FROM `waypoint_data` WHERE (`id`=760820); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(760820, 1, -3116.419922, 821.828979, -21.856766, 0, 0, 1, 0, 100, 0), +(760820, 2, -3127.299561, 795.134766, -22.401117, 0, 0, 1, 0, 100, 0), +(760820, 3, -3150.103027, 782.489380, -21.864737, 0, 0, 1, 0, 100, 0), +(760820, 4, -3219.880615, 780.314880, -19.754417, 0, 0, 1, 0, 100, 0), +(760820, 5, -3251.568604, 783.067688, -19.069899, 0, 0, 1, 0, 100, 0), +(760820, 6, -3295.924072, 767.111877, -21.192102, 0, 0, 1, 0, 100, 0), +(760820, 7, -3403.222656, 752.732056, -35.531361, 0, 0, 1, 0, 100, 0), +(760820, 8, -3617.548828, 732.945862, -8.339263, 0, 0, 1, 0, 100, 0), +(760820, 9, -3631.188965, 727.337463, -5.722647, 0, 0, 1, 0, 100, 0), +(760820, 10, -3733.907471, 751.174744, 7.209823, 0, 0, 1, 0, 100, 0), +(760820, 11, -3782.882813, 746.945984, 9.761057, 0, 0, 1, 0, 100, 0), +(760820, 12, -3859.570068, 752.093506, 10.382468, 0, 0, 1, 0, 100, 0), +(760820, 13, -3879.040283, 773.671936, 9.449715, 0, 0, 1, 0, 100, 0), +(760820, 14, -3888.581787, 854.766663, 15.828053, 0, 0, 1, 0, 100, 0), +(760820, 15, -3880.752930, 897.569763, 19.081347, 0, 0, 1, 0, 100, 0), +(760820, 16, -3886.515137, 944.770691, 21.956785, 0, 0, 1, 0, 100, 0), +(760820, 17, -3880.704834, 985.264221, 23.311592, 0, 0, 1, 0, 100, 0), +(760820, 18, -3883.812012, 1007.772705, 23.589699, 0, 0, 1, 0, 100, 0), +(760820, 19, -3975.737061, 1099.026733, 30.213566, 0, 0, 1, 0, 100, 0), +(760820, 20, -4000.627197, 1143.911499, 41.125046, 0, 0, 1, 0, 100, 0), +(760820, 21, -4036.700928, 1163.023804, 51.072033, 0, 0, 1, 0, 100, 0), +(760820, 22, -4052.043457, 1183.807129, 57.569439, 0, 0, 1, 0, 100, 0), +(760820, 23, -4053.111816, 1202.003784, 62.920666, 0, 0, 1, 0, 100, 0), +(760820, 24, -4037.213623, 1261.900757, 78.336632, 0, 0, 1, 0, 100, 0), +(760820, 25, -4038.152588, 1296.390991, 83.919540, 0, 0, 1, 0, 100, 0), +(760820, 26, -4053.791504, 1370.539185, 84.908981, 0, 0, 1, 0, 100, 0), +(760820, 27, -4054.700439, 1618.686279, 93.997330, 0, 0, 1, 0, 100, 0), +(760820, 28, -4045.018799, 1643.987061, 94.251122, 0, 0, 1, 0, 100, 0), +(760820, 29, -3983.812988, 1705.642944, 97.803833, 0, 0, 1, 0, 100, 0), +(760820, 30, -3938.369141, 1738.914917, 98.837524, 0, 0, 1, 0, 100, 0), +(760820, 31, -3900.309814, 1758.672363, 97.922089, 0, 0, 1, 0, 100, 0), +(760820, 32, -3867.449707, 1786.059937, 94.361740, 0, 0, 1, 0, 100, 0), +(760820, 33, -3850.530273, 1826.876221, 90.358040, 0, 0, 1, 0, 100, 0), +(760820, 34, -3847.338867, 1880.751831, 86.640762, 0, 0, 1, 0, 100, 0), +(760820, 35, -3814.812988, 1960.993286, 85.844566, 0, 0, 1, 0, 100, 0), +(760820, 36, -3756.163574, 2030.727905, 84.516495, 0, 0, 1, 0, 100, 0), +(760820, 37, -3752.126221, 2094.629395, 78.208092, 0, 0, 1, 0, 100, 0), +(760820, 38, -3755.360352, 2146.251221, 75.892380, 0, 0, 1, 0, 100, 0), +(760820, 39, -3743.547119, 2204.366699, 76.086136, 0, 0, 1, 0, 100, 0), +(760820, 40, -3744.448975, 2262.760742, 76.763046, 0, 0, 1, 0, 100, 0), +(760820, 41, -3714.628662, 2328.074219, 76.275826, 0, 0, 1, 0, 100, 0), +(760820, 42, -3688.062256, 2347.847168, 76.348412, 0, 0, 1, 0, 100, 0), +(760820, 43, -3674.596680, 2318.612061, 75.835876, 0, 0, 1, 0, 100, 0), +(760820, 44, -3624.145264, 2310.810791, 74.901398, 0, 0, 1, 0, 100, 0), +(760820, 45, -3596.897217, 2321.221191, 73.494583, 0, 0, 1, 0, 100, 0), +(760820, 46, -3570.569824, 2315.111572, 71.091606, 0, 0, 1, 0, 100, 0), +(760820, 47, -3505.514648, 2275.580811, 66.201355, 0, 0, 1, 0, 100, 0), +(760820, 48, -3444.574219, 2289.437500, 63.707752, 0, 0, 1, 0, 100, 0), +(760820, 49, -3402.431396, 2291.413818, 62.819668, 0, 0, 1, 0, 100, 0), +(760820, 50, -3344.245605, 2280.061523, 61.217396, 0, 0, 1, 0, 100, 0), +(760820, 51, -3266.743164, 2283.391113, 60.007225, 0, 0, 1, 0, 100, 0), +(760820, 52, -3233.561279, 2292.924561, 59.882648, 0, 0, 1, 0, 100, 0), +(760820, 53, -3221.570313, 2250.202393, 61.123081, 0, 0, 1, 0, 100, 0), +(760820, 54, -3189.590088, 2199.339844, 64.705276, 0, 0, 1, 0, 100, 0), +(760820, 55, -3175.489502, 2098.237549, 75.678909, 0, 0, 1, 0, 100, 0), +(760820, 56, -3160.424316, 2081.004150, 80.764908, 0, 0, 1, 0, 100, 0), +(760820, 57, -3141.073242, 2027.865112, 92.255219, 0, 0, 1, 0, 100, 0), +(760820, 58, -3100.545654, 1987.315796, 100.928787, 0, 0, 1, 0, 100, 0), +(760820, 59, -3079.955811, 1952.478638, 109.271744, 0, 0, 1, 0, 100, 0), +(760820, 60, -3043.312744, 1921.660156, 112.361816, 0, 0, 1, 0, 100, 0), +(760820, 61, -2973.852539, 1910.639648, 104.475471, 0, 0, 1, 0, 100, 0), +(760820, 62, -2956.038086, 1893.901855, 99.170197, 0, 0, 1, 0, 100, 0), +(760820, 63, -2950.733643, 1858.555664, 88.703011, 0, 0, 1, 0, 100, 0), +(760820, 64, -2923.169678, 1824.131348, 70.827278, 0, 0, 1, 0, 100, 0), +(760820, 65, -2889.111816, 1758.524658, 47.417206, 0, 0, 1, 0, 100, 0), +(760820, 66, -2879.456299, 1722.608887, 39.589905, 0, 0, 1, 0, 100, 0), +(760820, 67, -2865.740723, 1710.794922, 36.381069, 0, 0, 1, 0, 100, 0), +(760820, 68, -2848.158691, 1707.713623, 32.244236, 0, 0, 1, 0, 100, 0), +(760820, 69, -2824.067383, 1685.606934, 23.045313, 0, 0, 1, 0, 100, 0), +(760820, 70, -2819.241943, 1641.792847, 13.334887, 0, 0, 1, 0, 100, 0), +(760820, 71, -2871.091064, 1569.277466, 15.303233, 0, 0, 1, 0, 100, 0), +(760820, 72, -2893.539063, 1492.087402, 14.836093, 0, 0, 1, 0, 100, 0), +(760820, 73, -2981.375000, 1436.377686, 11.891064, 0, 0, 1, 0, 100, 0), +(760820, 74, -2987.835693, 1401.822510, 11.926711, 0, 0, 1, 0, 100, 0), +(760820, 75, -2988.486572, 1347.793457, 9.330483, 0, 0, 1, 0, 100, 0), +(760820, 76, -3078.444580, 1254.076050, 10.399191, 0, 0, 1, 0, 100, 0), +(760820, 77, -3090.341797, 1206.203125, 18.388882, 0, 0, 1, 0, 100, 0), +(760820, 78, -3114.885986, 1174.320313, 25.699680, 0, 0, 1, 0, 100, 0), +(760820, 79, -3112.093506, 1126.753174, 24.259985, 0, 0, 1, 0, 100, 0), +(760820, 80, -3120.531982, 1096.862549, 19.402412, 0, 0, 1, 0, 100, 0), +(760820, 81, -3113.394287, 1034.310425, 4.188662, 0, 0, 1, 0, 100, 0), +(760820, 82, -3117.856445, 982.948914, -7.988031, 0, 0, 1, 0, 100, 0), +(760820, 83, -3091.906494, 930.465881, -17.414244, 0, 0, 1, 0, 100, 0), +(760820, 84, -3116.419922, 821.828979, -21.856766, 0, 0, 1, 0, 100, 0); diff --git a/sql/updates/world/2015_05_09_08_world.sql b/sql/updates/world/2015_05_09_08_world.sql new file mode 100644 index 00000000000..4c6ed7ef6ab --- /dev/null +++ b/sql/updates/world/2015_05_09_08_world.sql @@ -0,0 +1,23 @@ +-- +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (29489, 29490); +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (29489, 29490) AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (2949000, 2949001) AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(29489, 0, 0, 0, 6, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Captain Welsington- On Death - Say text 1'), +(29489, 0, 1, 0, 9, 0, 100, 0, 8, 25000, 8000, 12000, 11, 20615, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,0,'Captain Welsington - On 8-25 yard range - cast Intercept'), +(29489, 0, 2, 0, 0, 0, 100, 0, 3000, 7000, 5000, 10000, 11, 16856, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,0,'Captain Welsington- IC - cast Mortal Strike'), +(29490, 0, 0, 0, 6, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Captain Hartford - On Death - Say text 1'), +(29490, 0, 1, 0, 9, 0, 100, 0, 0, 25000, 3000, 4000, 87, 2949000, 2949001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Captain Hartford - On 1-25 yard range - Random action list'), +(2949000, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 20823, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,0,'Captain Hartford - action list - cast Fireball'), +(2949001, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 20822, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,0,'Captain Hartford - action list - cast Frostbolt'), +(29490, 0, 2, 0, 0, 0, 100, 0, 5000, 10000, 10000, 15000, 11, 11831, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,0,'Captain Hartford - IC - cast Frost Nova'); + +DELETE FROM `creature_text` WHERE `entry` IN (29489, 29490); +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextId`) VALUES +(29489,0,0,'Archbishop Landgren must know! Aaaaaagggghhhh.....!',12,0,100,0,0,0,'Captain Welsington', 30161), +(29490,0,0,'I don''t know where the grand admiral is. Go to hell!',12,0,100,0,0,0,'Captain Hartford', 30146); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry` IN (29489, 29490); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(22,1,29489,0,0,9,0,12840,0,0,0,0,0,'','Captain Welsington- On Death - Say text 1 require quest 12840 taken'), +(22,1,29490,0,0,9,0,12840,0,0,0,0,0,'','Captain Hartford - On Death - Say text 1 require quest 12840 taken'); diff --git a/sql/updates/world/2015_05_09_09_world.sql b/sql/updates/world/2015_05_09_09_world.sql new file mode 100644 index 00000000000..77c55e87dfd --- /dev/null +++ b/sql/updates/world/2015_05_09_09_world.sql @@ -0,0 +1,6 @@ +-- +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=8996; +DELETE FROM `smart_scripts` WHERE `entryorguid`=8996 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(8996, 0, 0, 0, 0, 0, 100, 0, 10000, 15000, 25000, 30000, 11, 33916, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,0,'Voidwalker Minion - IC - Void Drain'), +(8996, 0, 1, 0, 0, 0, 100, 0, 2000, 5000, 4000, 6000, 11, 33914, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,0,'Voidwalker Minion - IC - Shadowstrike'); diff --git a/sql/updates/world/2015_05_09_10_world.sql b/sql/updates/world/2015_05_09_10_world.sql new file mode 100644 index 00000000000..06b5eb9cd88 --- /dev/null +++ b/sql/updates/world/2015_05_09_10_world.sql @@ -0,0 +1,7 @@ +-- +DELETE FROM `creature_text` WHERE `entry` = 7779; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextID`) VALUES +(7779,1,0,"Good day to you both. I would speak to Lord Lescovar.",12,0,100,0,0,0,'Priestess Tyriona', 3781), +(7779,2,0,"Thank you. The Light be with you both.",12,0,100,0,0,0,'Priestess Tyriona', 3782), +(7779,3,0,"Milord, your guest has arrived. He awaits your presence.",12,0,100,0,0,0,'Priestess Tyriona', 3762), +(7779,4,0,"I shall use the time wisely, milord. Thank you.",12,0,100,0,0,0,'Priestess Tyriona', 3791); diff --git a/sql/updates/world/2015_05_09_11_world.sql b/sql/updates/world/2015_05_09_11_world.sql new file mode 100644 index 00000000000..c09cb1c9850 --- /dev/null +++ b/sql/updates/world/2015_05_09_11_world.sql @@ -0,0 +1,595 @@ +-- Add SAI support for Lance a Lot achievement ID: 2836 and Amongts the Champions quest +-- Champions SAI mechanic +SET @Sen_Champion := 33745; +SET @Script := 3374500; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@Sen_Champion; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Sen_Champion; +DELETE FROM `smart_scripts` WHERE `source_type`=9 AND `entryorguid`=@Script; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@Sen_Champion,0,0,0,25,0,100,0,0,0,0,0,28,64223,0,0,0,0,0,1,0,0,0,0,0,0,0,'Sen Champion - On Reset - Remove auras from Defend'), +(@Sen_Champion,0,1,2,62,0,100,0,10458,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Sen Champion - On gossip select - Close gossip'), +(@Sen_Champion,0,2,3,61,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'Sen Champion - Linked with previous event - store target'), +(@Sen_Champion,0,3,0,61,0,100,0,0,0,0,0,80,@Script,2,0,0,0,0,1,0,0,0,0,0,0,0,'Sen Champion - Linked with previous event - Call timed actionlist'), +(@Sen_Champion,0,4,0,52,0,100,0,0,@Sen_Champion,0,0,11,63010,0,0,0,0,0,7,0,0,0,0,0,0,0,'Sen Champion - On text over - Cast Charge'), +(@Sen_Champion,0,5,0,0,0,100,0,0,0,1500,4000,11,62544,0,0,0,0,0,2,0,0,0,0,0,0,0,'Sen Champion - IC - Cast Thrust'), +(@Sen_Champion,0,6,0,9,0,100,0,5,5,4000,7000,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'Sen Champion - On more than 5 yard range - Cast Shield-Breaker'), +(@Sen_Champion,0,7,0,0,0,100,0,9000,11000,9000,10000,46,12,0,0,0,0,0,1,0,0,0,0,0,0,0,'Sen Champion - IC - Move forward 12 yards'), +(@Sen_Champion,0,8,9,9,0,100,0,9,15,3000,3000,11,63010,0,0,0,0,0,2,0,0,0,0,0,0,0,'Sen Champion - On 10-12 yard range - Cast Charge'), +(@Sen_Champion,0,9,0,61,0,100,0,0,0,0,0,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'Sen Champion - Linked with previous event - Cast Shield-Breaker'), +(@Sen_Champion,0,10,11,2,0,100,1,1,6,60000,60000,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,'Sen Champion - On HP% between 1% and 6% - Change faction to 35'), +(@Sen_Champion,0,11,12,61,0,100,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Sen Champion - Linked with previous event - Say text'), +(@Sen_Champion,0,12,13,61,0,100,0,0,0,0,0,85,63596,0,0,0,0,0,12,1,0,0,0,0,0,0,'Sen Champion - Linked with previous event - Cast Mounted Melee Victory /item/'), +(@Sen_Champion,0,13,14,61,0,100,0,0,0,0,0,85,64812,0,0,0,0,0,12,1,0,0,0,0,0,0,'Sen Champion - Linked with previous event - Cast credit'), +(@Sen_Champion,0,14,0,61,0,100,0,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Sen Champion - Linked with previous event - Evade'), +(@Sen_Champion,0,15,16,5,0,100,0,60000,60000,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Sen Champion - On player killed - Say text'), +(@Sen_Champion,0,16,17,61,0,100,0,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Sen Champion - Linked with previous event - Set unseen'), +(@Sen_Champion,0,17,0,61,0,100,0,0,0,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Sen Champion - Linked with previous event - Despawn in 1 ms'), +-- Timed actionlist 1 +(@Script,9,1,0,0,0,100,0,0,0,0,0,42,0,1,0,0,0,0,1,0,0,0,0,0,0,0,'All champions - Script 1 - Set INVINCIBILITY'), +(@Script,9,2,0,0,0,100,0,0,0,0,0,59,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'All champions - Script 1 - Set run ON'), +(@Script,9,3,0,0,0,100,0,0,0,0,0,11,62719,0,0,0,0,0,1,0,0,0,0,0,0,0,'All champions - Script 1 - Cast Defend on self/Layer 1/'), +(@Script,9,4,0,0,0,100,0,0,0,0,0,11,62719,0,0,0,0,0,1,0,0,0,0,0,0,0,'All champions - Script 1 - Cast Defend on self/Layer 2/'), +(@Script,9,5,0,0,0,100,0,0,0,0,0,11,62719,0,0,0,0,0,1,0,0,0,0,0,0,0,'All champions - Script 1 - Cast Defend on self/Layer 3/'), +(@Script,9,6,0,0,0,100,0,0,0,0,0,46,20,0,0,0,0,0,1,0,0,0,0,0,0,0,'All champions - Script 1 - Move forward 15 yards'), +(@Script,9,7,0,0,0,100,0,0,0,0,0,59,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'All champions - Script 1 - Set run Off'), +(@Script,9,8,0,0,0,100,0,0,0,0,0,11,64223,0,0,0,0,0,1,0,0,0,0,0,0,0,'All champions - Script 1 - Cast aura TriggerS for Defend /10 sec one/'), +(@Script,9,9,0,0,0,100,0,3500,3500,0,0,2,14,0,0,0,0,0,1,0,0,0,0,0,0,0,'All champions - Script 1 - Change faction to 14'), +(@Script,9,10,0,0,0,100,0,0,0,0,0,1,0,1500,0,0,0,0,2,0,0,0,0,0,0,0,'All champions - Script 1 - Say text'); +-- Argent Champions texts +DELETE FROM `creature_text` WHERE `entry`= @Sen_Champion; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`,`BroadcastTextId`) VALUES +(@Sen_Champion,0,0,'Ready yourself!',12,1,100,0,0,0,'Argent Champion', 33757), +(@Sen_Champion,0,1,'Prepare yourself!',12,1,100,0,0,0,'Argent Champion', 33755), +(@Sen_Champion,0,2,'On your guard!',12,1,100,0,0,0,'Argent Champion', 33756), +(@Sen_Champion,0,3,'Let it begin!',12,1,100,0,0,0,'Argent Champion', 33758), +(@Sen_Champion,1,0,'Victory is mine!',12,1,100,0,0,0,'Argent Champion', 33777), +(@Sen_Champion,1,1,'It seems you still need more practice. Perhaps another time.',12,1,100,0,0,0,'Argent Champion', 33764), +(@Sen_Champion,1,2,'I have won. Better luck another time, friend.',12,1,100,0,0,0,'Argent Champion', 33779), +(@Sen_Champion,1,3,'I am afraid you will need more practice to defeat me.',12,1,100,0,0,0,'Argent Champion', 33778), +(@Sen_Champion,2,0,'I yield to you.',12,1,100,0,0,0,'Argent Champion', 33774), +(@Sen_Champion,2,1,'That was a well fought battle. I yield to you.',12,1,100,0,0,0,'Argent Champion', 33776), +(@Sen_Champion,2,2,'It would seem I underestimated your skills. Well done.',12,1,100,0,0,0,'Argent Champion', 33775), +(@Sen_Champion,2,3,'I have been defeated. Good fight!',12,1,100,0,0,0,'Argent Champion', 33760); + +SET @Orgri_Champion := 33744; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@Orgri_Champion; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Orgri_Champion; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@Orgri_Champion,0,0,0,25,0,100,0,0,0,0,0,28,64223,0,0,0,0,0,1,0,0,0,0,0,0,0,'Orgri Champion - On Reset - Remove auras from Defend'), +(@Orgri_Champion,0,1,2,62,0,100,0,10457,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Orgri Champion - On gossip select - Close gossip'), +(@Orgri_Champion,0,2,3,61,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'Orgri Champion - Linked with previous event - store target'), +(@Orgri_Champion,0,3,0,61,0,100,0,0,0,0,0,80,@Script,2,0,0,0,0,1,0,0,0,0,0,0,0,'Orgri Champion - Linked with previous event - Call timed actionlist'), +(@Orgri_Champion,0,4,0,52,0,100,0,0,@Orgri_Champion,0,0,11,63010,0,0,0,0,0,7,0,0,0,0,0,0,0,'Orgri Champion - On text over - Cast Charge'), +(@Orgri_Champion,0,5,0,0,0,100,0,0,0,1500,4000,11,62544,0,0,0,0,0,2,0,0,0,0,0,0,0,'Orgri Champion - IC - Cast Thrust'), +(@Orgri_Champion,0,6,0,9,0,100,0,5,5,9000,10000,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'Orgri Champion - On more than 5 yard range - Cast Shield-Breaker'), +(@Orgri_Champion,0,7,0,0,0,100,0,9000,11000,9000,10000,46,12,0,0,0,0,0,1,0,0,0,0,0,0,0,'Orgri Champion - IC - Move forward 12 yards'), +(@Orgri_Champion,0,8,9,9,0,100,0,9,15,3000,3000,11,63010,0,0,0,0,0,2,0,0,0,0,0,0,0,'Orgri Champion - On 10-12 yard range - Cast Charge'), +(@Orgri_Champion,0,9,0,61,0,100,0,0,0,0,0,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'Orgri Champion - Linked with previous event - Cast Shield-Breaker'), +(@Orgri_Champion,0,10,11,2,0,100,1,1,6,60000,60000,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,'Orgri Champion - On HP% between 1% and 6% - Change faction to 35'), +(@Orgri_Champion,0,11,12,61,0,100,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Orgri Champion - Linked with previous event - Say text'), +(@Orgri_Champion,0,12,13,61,0,100,0,0,0,0,0,85,63596,0,0,0,0,0,12,1,0,0,0,0,0,0,'Orgri Champion - Linked with previous event - Cast Mounted Melee Victory /item/'), +(@Orgri_Champion,0,13,14,61,0,100,0,0,0,0,0,85,64811,0,0,0,0,0,12,1,0,0,0,0,0,0,'Orgri Champion - Linked with previous event - Cast credit'), +(@Orgri_Champion,0,14,0,61,0,100,0,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Orgri Champion - Linked with previous event - Evade'), +(@Orgri_Champion,0,15,16,5,0,100,0,60000,60000,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Orgri Champion - On player killed - Say text'), +(@Orgri_Champion,0,16,17,61,0,100,0,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Orgri Champion - Linked with previous event - Set unseen'), +(@Orgri_Champion,0,17,0,61,0,100,0,0,0,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Orgri Champion - Linked with previous event - Despawn in 1 ms'); +-- Argent Champions texts +DELETE FROM `creature_text` WHERE `entry`= @Orgri_Champion; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`,`BroadcastTextId`) VALUES +(@Orgri_Champion,0,0,'Ready yourself!',12,1,100,0,0,0,'Argent Champion', 33757), +(@Orgri_Champion,0,1,'Prepare yourself!',12,1,100,0,0,0,'Argent Champion', 33755), +(@Orgri_Champion,0,2,'On your guard!',12,1,100,0,0,0,'Argent Champion', 33756), +(@Orgri_Champion,0,3,'Let it begin!',12,1,100,0,0,0,'Argent Champion', 33758), +(@Orgri_Champion,1,0,'Victory is mine!',12,1,100,0,0,0,'Argent Champion', 33777), +(@Orgri_Champion,1,1,'It seems you still need more practice. Perhaps another time.',12,1,100,0,0,0,'Argent Champion', 33764), +(@Orgri_Champion,1,2,'I have won. Better luck another time, friend.',12,1,100,0,0,0,'Argent Champion', 33779), +(@Orgri_Champion,1,3,'I am afraid you will need more practice to defeat me.',12,1,100,0,0,0,'Argent Champion', 33778), +(@Orgri_Champion,2,0,'I yield to you.',12,1,100,0,0,0,'Argent Champion', 33774), +(@Orgri_Champion,2,1,'That was a well fought battle. I yield to you.',12,1,100,0,0,0,'Argent Champion', 33776), +(@Orgri_Champion,2,2,'It would seem I underestimated your skills. Well done.',12,1,100,0,0,0,'Argent Champion', 33775), +(@Orgri_Champion,2,3,'I have been defeated. Good fight!',12,1,100,0,0,0,'Argent Champion', 33760); +SET @TB_Champion := 33748; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@TB_Champion; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@TB_Champion; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@TB_Champion,0,0,0,25,0,100,0,0,0,0,0,28,64223,0,0,0,0,0,1,0,0,0,0,0,0,0,'TB Champion - On Reset - Remove auras from Defend'), +(@TB_Champion,0,1,2,62,0,100,0,10461,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'TB Champion - On gossip select - Close gossip'), +(@TB_Champion,0,2,3,61,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'TB Champion - Linked with previous event - store target'), +(@TB_Champion,0,3,0,61,0,100,0,0,0,0,0,80,@Script,2,0,0,0,0,1,0,0,0,0,0,0,0,'TB Champion - Linked with previous event - Call timed actionlist'), +(@TB_Champion,0,4,0,52,0,100,0,0,@TB_Champion,0,0,11,63010,0,0,0,0,0,7,0,0,0,0,0,0,0,'TB Champion - On text over - Cast Charge'), +(@TB_Champion,0,5,0,0,0,100,0,0,0,1500,4000,11,62544,0,0,0,0,0,2,0,0,0,0,0,0,0,'TB Champion - IC - Cast Thrust'), +(@TB_Champion,0,6,0,9,0,100,0,5,5,9000,10000,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'TB Champion - On more than 5 yard range - Cast Shield-Breaker'), +(@TB_Champion,0,7,0,0,0,100,0,9000,11000,9000,10000,46,12,0,0,0,0,0,1,0,0,0,0,0,0,0,'TB Champion - IC - Move forward 12 yards'), +(@TB_Champion,0,8,9,9,0,100,0,9,15,3000,3000,11,63010,0,0,0,0,0,2,0,0,0,0,0,0,0,'TB Champion - On 10-12 yard range - Cast Charge'), +(@TB_Champion,0,9,0,61,0,100,0,0,0,0,0,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'TB Champion - Linked with previous event - Cast Shield-Breaker'), +(@TB_Champion,0,10,11,2,0,100,1,1,6,60000,60000,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,'TB Champion - On HP% between 1% and 6% - Change faction to 35'), +(@TB_Champion,0,11,12,61,0,100,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'TB Champion - Linked with previous event - Say text'), +(@TB_Champion,0,12,13,61,0,100,0,0,0,0,0,85,63596,0,0,0,0,0,12,1,0,0,0,0,0,0,'TB Champion - Linked with previous event - Cast Mounted Melee Victory /item/'), +(@TB_Champion,0,13,14,61,0,100,0,0,0,0,0,85,64815,0,0,0,0,0,12,1,0,0,0,0,0,0,'TB Champion - Linked with previous event - Cast credit'), +(@TB_Champion,0,14,0,61,0,100,0,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'TB_Valiant - Linked with previous event - Evade'), +(@TB_Champion,0,15,16,5,0,100,0,60000,60000,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'TB Champion - On player killed - Say text'), +(@TB_Champion,0,16,17,61,0,100,0,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'TB Champion - Linked with previous event - Set unseen'), +(@TB_Champion,0,17,0,61,0,100,0,0,0,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'TB Champion - Linked with previous event - Despawn in 1 ms'); +-- Argent Champions texts +DELETE FROM `creature_text` WHERE `entry`= @TB_Champion; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`,`BroadcastTextId`) VALUES +(@TB_Champion,0,0,'Ready yourself!',12,1,100,0,0,0,'Argent Champion', 33757), +(@TB_Champion,0,1,'Prepare yourself!',12,1,100,0,0,0,'Argent Champion', 33755), +(@TB_Champion,0,2,'On your guard!',12,1,100,0,0,0,'Argent Champion', 33756), +(@TB_Champion,0,3,'Let it begin!',12,1,100,0,0,0,'Argent Champion', 33758), +(@TB_Champion,1,0,'Victory is mine!',12,1,100,0,0,0,'Argent Champion', 33777), +(@TB_Champion,1,1,'It seems you still need more practice. Perhaps another time.',12,1,100,0,0,0,'Argent Champion', 33764), +(@TB_Champion,1,2,'I have won. Better luck another time, friend.',12,1,100,0,0,0,'Argent Champion', 33779), +(@TB_Champion,1,3,'I am afraid you will need more practice to defeat me.',12,1,100,0,0,0,'Argent Champion', 33778), +(@TB_Champion,2,0,'I yield to you.',12,1,100,0,0,0,'Argent Champion', 33774), +(@TB_Champion,2,1,'That was a well fought battle. I yield to you.',12,1,100,0,0,0,'Argent Champion', 33776), +(@TB_Champion,2,2,'It would seem I underestimated your skills. Well done.',12,1,100,0,0,0,'Argent Champion', 33775), +(@TB_Champion,2,3,'I have been defeated. Good fight!',12,1,100,0,0,0,'Argent Champion', 33760); +SET @SM_Champion := 33746; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@SM_Champion; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@SM_Champion; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@SM_Champion,0,0,0,25,0,100,0,0,0,0,0,28,64223,0,0,0,0,0,1,0,0,0,0,0,0,0,'SM Champion - On Reset - Remove auras from Defend'), +(@SM_Champion,0,1,2,62,0,100,0,10459,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'SM Champion - On gossip select - Close gossip'), +(@SM_Champion,0,2,3,61,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'SM Champion - Linked with previous event - store target'), +(@SM_Champion,0,3,0,61,0,100,0,0,0,0,0,80,@Script,2,0,0,0,0,1,0,0,0,0,0,0,0,'SM Champion - Linked with previous event - Call timed actionlist'), +(@SM_Champion,0,4,0,52,0,100,0,0,@SM_Champion,0,0,11,63010,0,0,0,0,0,7,0,0,0,0,0,0,0,'SM Champion - On text over - Cast Charge'), +(@SM_Champion,0,5,0,0,0,100,0,0,0,1500,4000,11,62544,0,0,0,0,0,2,0,0,0,0,0,0,0,'SM Champion - IC - Cast Thrust'), +(@SM_Champion,0,6,0,9,0,100,0,5,5,9000,10000,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'SM Champion - On more than 5 yard range - Cast Shield-Breaker'), +(@SM_Champion,0,7,0,0,0,100,0,9000,11000,9000,10000,46,12,0,0,0,0,0,1,0,0,0,0,0,0,0,'SM Champion - IC - Move forward 12 yards'), +(@SM_Champion,0,8,9,9,0,100,0,9,15,3000,3000,11,63010,0,0,0,0,0,2,0,0,0,0,0,0,0,'SM Champion - On 10-12 yard range - Cast Charge'), +(@SM_Champion,0,9,0,61,0,100,0,0,0,0,0,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'SM Champion - Linked with previous event - Cast Shield-Breaker'), +(@SM_Champion,0,10,11,2,0,100,1,1,6,60000,60000,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,'SM Champion - On HP% between 1% and 6% - Change faction to 35'), +(@SM_Champion,0,11,12,61,0,100,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'SM Champion - Linked with previous event - Say text'), +(@SM_Champion,0,12,13,61,0,100,0,0,0,0,0,85,63596,0,0,0,0,0,12,1,0,0,0,0,0,0,'SM Champion - Linked with previous event - Cast Mounted Melee Victory /item/'), +(@SM_Champion,0,13,14,61,0,100,0,0,0,0,0,85,64813,0,0,0,0,0,12,1,0,0,0,0,0,0,'SM Champion - Linked with previous event - Cast credit'), +(@SM_Champion,0,14,0,61,0,100,0,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'SM Champion - Linked with previous event - Evade'), +(@SM_Champion,0,15,16,5,0,100,0,60000,60000,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'SM Champion - On player killed - Say text'), +(@SM_Champion,0,16,17,61,0,100,0,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'SM Champion - Linked with previous event - Set unseen'), +(@SM_Champion,0,17,0,61,0,100,0,0,0,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'SM Champion - Linked with previous event - Despawn in 1 ms'); +-- Argent Champions texts +DELETE FROM `creature_text` WHERE `entry`= @SM_Champion; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`,`BroadcastTextId`) VALUES +(@SM_Champion,0,0,'Ready yourself!',12,1,100,0,0,0,'Argent Champion', 33757), +(@SM_Champion,0,1,'Prepare yourself!',12,1,100,0,0,0,'Argent Champion', 33755), +(@SM_Champion,0,2,'On your guard!',12,1,100,0,0,0,'Argent Champion', 33756), +(@SM_Champion,0,3,'Let it begin!',12,1,100,0,0,0,'Argent Champion', 33758), +(@SM_Champion,1,0,'Victory is mine!',12,1,100,0,0,0,'Argent Champion', 33777), +(@SM_Champion,1,1,'It seems you still need more practice. Perhaps another time.',12,1,100,0,0,0,'Argent Champion', 33764), +(@SM_Champion,1,2,'I have won. Better luck another time, friend.',12,1,100,0,0,0,'Argent Champion', 33779), +(@SM_Champion,1,3,'I am afraid you will need more practice to defeat me.',12,1,100,0,0,0,'Argent Champion', 33778), +(@SM_Champion,2,0,'I yield to you.',12,1,100,0,0,0,'Argent Champion', 33774), +(@SM_Champion,2,1,'That was a well fought battle. I yield to you.',12,1,100,0,0,0,'Argent Champion', 33776), +(@SM_Champion,2,2,'It would seem I underestimated your skills. Well done.',12,1,100,0,0,0,'Argent Champion', 33775), +(@SM_Champion,2,3,'I have been defeated. Good fight!',12,1,100,0,0,0,'Argent Champion', 33760); +SET @GR_Champion := 33740; +UPDATE `creature_template` SET `AIName`='SmartAI',`ScriptName`='' WHERE `entry`=@GR_Champion; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@GR_Champion; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@GR_Champion,0,0,0,25,0,100,0,0,0,0,0,28,64223,0,0,0,0,0,1,0,0,0,0,0,0,0,'GR Champion - On Reset - Remove auras from Defend'), +(@GR_Champion,0,1,2,62,0,100,0,10455,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'GR Champion - On gossip select - Close gossip'), +(@GR_Champion,0,2,3,61,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'GR Champion - Linked with previous event - store target'), +(@GR_Champion,0,3,0,61,0,100,0,0,0,0,0,80,@Script,2,0,0,0,0,1,0,0,0,0,0,0,0,'GR Champion - Linked with previous event - Call timed actionlist'), +(@GR_Champion,0,4,0,52,0,100,0,0,@GR_Champion,0,0,11,63010,0,0,0,0,0,7,0,0,0,0,0,0,0,'GR Champion - On text over - Cast Charge'), +(@GR_Champion,0,5,0,0,0,100,0,0,0,1500,4000,11,62544,0,0,0,0,0,2,0,0,0,0,0,0,0,'GR Champion - IC - Cast Thrust'), +(@GR_Champion,0,6,0,9,0,100,0,5,5,9000,10000,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'GR Champion - On more than 5 yard range - Cast Shield-Breaker'), +(@GR_Champion,0,7,0,0,0,100,0,9000,11000,9000,10000,46,12,0,0,0,0,0,1,0,0,0,0,0,0,0,'GR Champion - IC - Move forward 12 yards'), +(@GR_Champion,0,8,9,9,0,100,0,9,15,3000,3000,11,63010,0,0,0,0,0,2,0,0,0,0,0,0,0,'GR Champion - On 10-12 yard range - Cast Charge'), +(@GR_Champion,0,9,0,61,0,100,0,0,0,0,0,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'GR Champion - Linked with previous event - Cast Shield-Breaker'), +(@GR_Champion,0,10,11,2,0,100,1,1,6,60000,60000,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,'GR Champion - On HP% between 1% and 6% - Change faction to 35'), +(@GR_Champion,0,11,12,61,0,100,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'GR Champion - Linked with previous event - Say text'), +(@GR_Champion,0,12,13,61,0,100,0,0,0,0,0,85,63596,0,0,0,0,0,12,1,0,0,0,0,0,0,'GR Champion - Linked with previous event - Cast Mounted Melee Victory /item/'), +(@GR_Champion,0,13,14,61,0,100,0,0,0,0,0,85,64809,0,0,0,0,0,12,1,0,0,0,0,0,0,'GR Champion - Linked with previous event - Cast credit'), +(@GR_Champion,0,14,0,61,0,100,0,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'GR Champion - Linked with previous event - Evade'), +(@GR_Champion,0,15,16,5,0,100,0,60000,60000,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'GR Champion - On player killed - Say text'), +(@GR_Champion,0,16,17,61,0,100,0,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'GR Champion - Linked with previous event - Set unseen'), +(@GR_Champion,0,17,0,61,0,100,0,0,0,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'GR Champion - Linked with previous event - Despawn in 1 ms'); +-- Argent Champions texts +DELETE FROM `creature_text` WHERE `entry`= @GR_Champion; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`,`BroadcastTextId`) VALUES +(@GR_Champion,0,0,'Ready yourself!',12,7,100,0,0,0,'Argent Champion', 33757), +(@GR_Champion,0,1,'Prepare yourself!',12,7,100,0,0,0,'Argent Champion', 33755), +(@GR_Champion,0,2,'On your guard!',12,7,100,0,0,0,'Argent Champion', 33756), +(@GR_Champion,0,3,'Let it begin!',12,7,100,0,0,0,'Argent Champion', 33758), +(@GR_Champion,1,0,'Victory is mine!',12,7,100,0,0,0,'Argent Champion', 33777), +(@GR_Champion,1,1,'It seems you still need more practice. Perhaps another time.',12,7,100,0,0,0,'Argent Champion', 33764), +(@GR_Champion,1,2,'I have won. Better luck another time, friend.',12,7,100,0,0,0,'Argent Champion', 33779), +(@GR_Champion,1,3,'I am afraid you will need more practice to defeat me.',12,7,100,0,0,0,'Argent Champion', 33778), +(@GR_Champion,2,0,'I yield to you.',12,7,100,0,0,0,'Argent Champion', 33774), +(@GR_Champion,2,1,'That was a well fought battle. I yield to you.',12,7,100,0,0,0,'Argent Champion', 33776), +(@GR_Champion,2,2,'It would seem I underestimated your skills. Well done.',12,7,100,0,0,0,'Argent Champion', 33775), +(@GR_Champion,2,3,'I have been defeated. Good fight!',12,7,100,0,0,0,'Argent Champion', 33760); +SET @IF_Champion := 33743; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@IF_Champion; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@IF_Champion; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@IF_Champion,0,0,0,25,0,100,0,0,0,0,0,28,64223,0,0,0,0,0,1,0,0,0,0,0,0,0,'IF Champion - On Reset - Remove auras from Defend'), +(@IF_Champion,0,1,2,62,0,100,0,10456,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'IF Champion - On gossip select - Close gossip'), +(@IF_Champion,0,2,3,61,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'IF Champion - Linked with previous event - store target'), +(@IF_Champion,0,3,0,61,0,100,0,0,0,0,0,80,@Script,2,0,0,0,0,1,0,0,0,0,0,0,0,'IF Champion - Linked with previous event - Call timed actionlist'), +(@IF_Champion,0,4,0,52,0,100,0,0,@IF_Champion,0,0,11,63010,0,0,0,0,0,7,0,0,0,0,0,0,0,'IF Champion - On text over - Cast Charge'), +(@IF_Champion,0,5,0,0,0,100,0,0,0,1500,4000,11,62544,0,0,0,0,0,2,0,0,0,0,0,0,0,'IF Champion - IC - Cast Thrust'), +(@IF_Champion,0,6,0,9,0,100,0,5,5,9000,10000,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'IF Champion - On more than 5 yard range - Cast Shield-Breaker'), +(@IF_Champion,0,7,0,0,0,100,0,9000,11000,9000,10000,46,12,0,0,0,0,0,1,0,0,0,0,0,0,0,'IF Champion - IC - Move forward 12 yards'), +(@IF_Champion,0,8,9,9,0,100,0,9,15,3000,3000,11,63010,0,0,0,0,0,2,0,0,0,0,0,0,0,'IF Champion - On 10-12 yard range - Cast Charge'), +(@IF_Champion,0,9,0,61,0,100,0,0,0,0,0,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'IF Champion - Linked with previous event - Cast Shield-Breaker'), +(@IF_Champion,0,10,11,2,0,100,1,1,6,60000,60000,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,'IF Champion - On HP% between 1% and 6% - Change faction to 35'), +(@IF_Champion,0,11,12,61,0,100,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'IF Champion - Linked with previous event - Say text'), +(@IF_Champion,0,12,13,61,0,100,0,0,0,0,0,85,63596,0,0,0,0,0,12,1,0,0,0,0,0,0,'IF Champion - Linked with previous event - Cast Mounted Melee Victory /item/'), +(@IF_Champion,0,13,14,61,0,100,0,0,0,0,0,85,64810,0,0,0,0,0,12,1,0,0,0,0,0,0,'IF Champion - Linked with previous event - Cast credit'), +(@IF_Champion,0,14,0,61,0,100,0,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'IF Champion - Linked with previous event - Evade'), +(@IF_Champion,0,15,16,5,0,100,0,60000,60000,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'IF Champion - On player killed - Say text'), +(@IF_Champion,0,16,17,61,0,100,0,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'IF Champion - Linked with previous event - Set unseen'), +(@IF_Champion,0,17,0,61,0,100,0,0,0,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'IF Champion - Linked with previous event - Despawn in 1 ms'); +-- Argent Champions texts +DELETE FROM `creature_text` WHERE `entry`= @IF_Champion; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`,`BroadcastTextId`) VALUES +(@IF_Champion,0,0,'Ready yourself!',12,7,100,0,0,0,'Argent Champion', 33757), +(@IF_Champion,0,1,'Prepare yourself!',12,7,100,0,0,0,'Argent Champion', 33755), +(@IF_Champion,0,2,'On your guard!',12,7,100,0,0,0,'Argent Champion', 33756), +(@IF_Champion,0,3,'Let it begin!',12,7,100,0,0,0,'Argent Champion', 33758), +(@IF_Champion,1,0,'Victory is mine!',12,7,100,0,0,0,'Argent Champion', 33777), +(@IF_Champion,1,1,'It seems you still need more practice. Perhaps another time.',12,7,100,0,0,0,'Argent Champion', 33764), +(@IF_Champion,1,2,'I have won. Better luck another time, friend.',12,7,100,0,0,0,'Argent Champion', 33779), +(@IF_Champion,1,3,'I am afraid you will need more practice to defeat me.',12,7,100,0,0,0,'Argent Champion', 33778), +(@IF_Champion,2,0,'I yield to you.',12,7,100,0,0,0,'Argent Champion', 33774), +(@IF_Champion,2,1,'That was a well fought battle. I yield to you.',12,7,100,0,0,0,'Argent Champion', 33776), +(@IF_Champion,2,2,'It would seem I underestimated your skills. Well done.',12,7,100,0,0,0,'Argent Champion', 33775), +(@IF_Champion,2,3,'I have been defeated. Good fight!',12,7,100,0,0,0,'Argent Champion', 33760); +SET @SW_Champion := 33747; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@SW_Champion; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@SW_Champion; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@SW_Champion,0,0,0,25,0,100,0,0,0,0,0,28,64223,0,0,0,0,0,1,0,0,0,0,0,0,0,'SW Champion - On Reset - Remove auras from Defend'), +(@SW_Champion,0,1,2,62,0,100,0,10460,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'SW Champion - On gossip select - Close gossip'), +(@SW_Champion,0,2,3,61,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'SW Champion - Linked with previous event - store target'), +(@SW_Champion,0,3,0,61,0,100,0,0,0,0,0,80,@Script,2,0,0,0,0,1,0,0,0,0,0,0,0,'SW Champion - Linked with previous event - Call timed actionlist'), +(@SW_Champion,0,4,0,52,0,100,0,0,@SW_Champion,0,0,11,63010,0,0,0,0,0,7,0,0,0,0,0,0,0,'SW Champion - On text over - Cast Charge'), +(@SW_Champion,0,5,0,0,0,100,0,0,0,1500,4000,11,62544,0,0,0,0,0,2,0,0,0,0,0,0,0,'SW Champion - IC - Cast Thrust'), +(@SW_Champion,0,6,0,9,0,100,0,5,5,9000,10000,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'SW Champion - On more than 5 yard range - Cast Shield-Breaker'), +(@SW_Champion,0,7,0,0,0,100,0,9000,11000,9000,10000,46,12,0,0,0,0,0,1,0,0,0,0,0,0,0,'SW Champion - IC - Move forward 12 yards'), +(@SW_Champion,0,8,9,9,0,100,0,9,15,3000,3000,11,63010,0,0,0,0,0,2,0,0,0,0,0,0,0,'SW Champion - On 10-12 yard range - Cast Charge'), +(@SW_Champion,0,9,0,61,0,100,0,0,0,0,0,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'SW Champion - Linked with previous event - Cast Shield-Breaker'), +(@SW_Champion,0,10,11,2,0,100,1,1,6,60000,60000,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,'SW Champion - On HP% between 1% and 6% - Change faction to 35'), +(@SW_Champion,0,11,12,61,0,100,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'SW Champion - Linked with previous event - Say text'), +(@SW_Champion,0,12,13,61,0,100,0,0,0,0,0,85,63596,0,0,0,0,0,12,1,0,0,0,0,0,0,'SW Champion - Linked with previous event - Cast Mounted Melee Victory /item/'), +(@SW_Champion,0,13,14,61,0,100,0,0,0,0,0,85,64814,0,0,0,0,0,12,1,0,0,0,0,0,0,'SW Champion - Linked with previous event - Cast credit'), +(@SW_Champion,0,14,0,61,0,100,0,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'SW Champion - Linked with previous event - Evade'), +(@SW_Champion,0,15,16,5,0,100,0,60000,60000,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'SW Champion - On player killed - Say text'), +(@SW_Champion,0,16,17,61,0,100,0,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'SW Champion - Linked with previous event - Set unseen'), +(@SW_Champion,0,17,0,61,0,100,0,0,0,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'SW Champion - Linked with previous event - Despawn in 1 ms'); +-- Argent Champions texts +DELETE FROM `creature_text` WHERE `entry`= @SW_Champion; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`,`BroadcastTextId`) VALUES +(@SW_Champion,0,0,'Ready yourself!',12,7,100,0,0,0,'Argent Champion', 33757), +(@SW_Champion,0,1,'Prepare yourself!',12,7,100,0,0,0,'Argent Champion', 33755), +(@SW_Champion,0,2,'On your guard!',12,7,100,0,0,0,'Argent Champion', 33756), +(@SW_Champion,0,3,'Let it begin!',12,7,100,0,0,0,'Argent Champion', 33758), +(@SW_Champion,1,0,'Victory is mine!',12,7,100,0,0,0,'Argent Champion', 33777), +(@SW_Champion,1,1,'It seems you still need more practice. Perhaps another time.',12,7,100,0,0,0,'Argent Champion', 33764), +(@SW_Champion,1,2,'I have won. Better luck another time, friend.',12,7,100,0,0,0,'Argent Champion', 33779), +(@SW_Champion,1,3,'I am afraid you will need more practice to defeat me.',12,7,100,0,0,0,'Argent Champion', 33778), +(@SW_Champion,2,0,'I yield to you.',12,7,100,0,0,0,'Argent Champion', 33774), +(@SW_Champion,2,1,'That was a well fought battle. I yield to you.',12,7,100,0,0,0,'Argent Champion', 33776), +(@SW_Champion,2,2,'It would seem I underestimated your skills. Well done.',12,7,100,0,0,0,'Argent Champion', 33775), +(@SW_Champion,2,3,'I have been defeated. Good fight!',12,7,100,0,0,0,'Argent Champion', 33760); +SET @Darn_Champion := 33738; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@Darn_Champion; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Darn_Champion; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@Darn_Champion,0,0,0,25,0,100,0,0,0,0,0,28,64223,0,0,0,0,0,1,0,0,0,0,0,0,0,'Darn Champion - On Reset - Remove auras from Defend'), +(@Darn_Champion,0,1,2,62,0,100,0,10453,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Darn Champion - On gossip select - Close gossip'), +(@Darn_Champion,0,2,3,61,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'Darn Champion - Linked with previous event - store target'), +(@Darn_Champion,0,3,0,61,0,100,0,0,0,0,0,80,@Script,2,0,0,0,0,1,0,0,0,0,0,0,0,'Darn Champion - Linked with previous event - Call timed actionlist'), +(@Darn_Champion,0,4,0,52,0,100,0,0,@Darn_Champion,0,0,11,63010,0,0,0,0,0,7,0,0,0,0,0,0,0,'Darn Champion - On text over - Cast Charge'), +(@Darn_Champion,0,5,0,0,0,100,0,0,0,1500,4000,11,62544,0,0,0,0,0,2,0,0,0,0,0,0,0,'Darn Champion - IC - Cast Thrust'), +(@Darn_Champion,0,6,0,9,0,100,0,5,5,9000,10000,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'Darn Champion - On more than 5 yard range - Cast Shield-Breaker'), +(@Darn_Champion,0,7,0,0,0,100,0,9000,11000,9000,10000,46,12,0,0,0,0,0,1,0,0,0,0,0,0,0,'Darn Champion - IC - Move forward 12 yards'), +(@Darn_Champion,0,8,9,9,0,100,0,9,15,3000,3000,11,63010,0,0,0,0,0,2,0,0,0,0,0,0,0,'Darn Champion - On 10-12 yard range - Cast Charge'), +(@Darn_Champion,0,9,0,61,0,100,0,0,0,0,0,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'Darn Champion - Linked with previous event - Cast Shield-Breaker'), +(@Darn_Champion,0,10,11,2,0,100,1,1,6,60000,60000,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,'Darn Champion - On HP% between 1% and 6% - Change faction to 35'), +(@Darn_Champion,0,11,12,61,0,100,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Darn Champion - Linked with previous event - Say text'), +(@Darn_Champion,0,12,13,61,0,100,0,0,0,0,0,85,63596,0,0,0,0,0,12,1,0,0,0,0,0,0,'Darn Champion - Linked with previous event - Cast Mounted Melee Victory /item/'), +(@Darn_Champion,0,13,14,61,0,100,0,0,0,0,0,85,64805,0,0,0,0,0,12,1,0,0,0,0,0,0,'Darn Champion - Linked with previous event - Cast credit'), +(@Darn_Champion,0,14,0,61,0,100,0,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Darn Champion - Linked with previous event - Evade'), +(@Darn_Champion,0,15,16,5,0,100,0,60000,60000,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Darn Champion - On player killed - Say text'), +(@Darn_Champion,0,16,17,61,0,100,0,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Darn Champion - Linked with previous event - Set unseen'), +(@Darn_Champion,0,17,0,61,0,100,0,0,0,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Darn Champion - Linked with previous event - Despawn in 1 ms'); +-- Argent Champions texts +DELETE FROM `creature_text` WHERE `entry`= @Darn_Champion; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`,`BroadcastTextId`) VALUES +(@Darn_Champion,0,0,'Ready yourself!',12,7,100,0,0,0,'Argent Champion', 33757), +(@Darn_Champion,0,1,'Prepare yourself!',12,7,100,0,0,0,'Argent Champion', 33755), +(@Darn_Champion,0,2,'On your guard!',12,7,100,0,0,0,'Argent Champion', 33756), +(@Darn_Champion,0,3,'Let it begin!',12,7,100,0,0,0,'Argent Champion', 33758), +(@Darn_Champion,1,0,'Victory is mine!',12,7,100,0,0,0,'Argent Champion', 33777), +(@Darn_Champion,1,1,'It seems you still need more practice. Perhaps another time.',12,7,100,0,0,0,'Argent Champion', 33764), +(@Darn_Champion,1,2,'I have won. Better luck another time, friend.',12,7,100,0,0,0,'Argent Champion', 33779), +(@Darn_Champion,1,3,'I am afraid you will need more practice to defeat me.',12,7,100,0,0,0,'Argent Champion', 33778), +(@Darn_Champion,2,0,'I yield to you.',12,7,100,0,0,0,'Argent Champion', 33774), +(@Darn_Champion,2,1,'That was a well fought battle. I yield to you.',12,7,100,0,0,0,'Argent Champion', 33776), +(@Darn_Champion,2,2,'It would seem I underestimated your skills. Well done.',12,7,100,0,0,0,'Argent Champion', 33775), +(@Darn_Champion,2,3,'I have been defeated. Good fight!',12,7,100,0,0,0,'Argent Champion', 33760); +SET @Exo_Champion := 33739; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@Exo_Champion; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Exo_Champion; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@Exo_Champion,0,0,0,25,0,100,0,0,0,0,0,28,64223,0,0,0,0,0,1,0,0,0,0,0,0,0,'Exo Champion - On Reset - Remove auras from Defend'), +(@Exo_Champion,0,1,2,62,0,100,0,10454,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Exo Champion - On gossip select - Close gossip'), +(@Exo_Champion,0,2,3,61,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'Exo Champion - Linked with previous event - store target'), +(@Exo_Champion,0,3,0,61,0,100,0,0,0,0,0,80,@Script,2,0,0,0,0,1,0,0,0,0,0,0,0,'Exo Champion - Linked with previous event - Call timed actionlist'), +(@Exo_Champion,0,4,0,52,0,100,0,0,@Exo_Champion,0,0,11,63010,0,0,0,0,0,7,0,0,0,0,0,0,0,'Exo Champion - On text over - Cast Charge'), +(@Exo_Champion,0,5,0,0,0,100,0,0,0,1500,4000,11,62544,0,0,0,0,0,2,0,0,0,0,0,0,0,'Exo Champion - IC - Cast Thrust'), +(@Exo_Champion,0,6,0,9,0,100,0,5,5,9000,10000,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'Exo Champion - On more than 5 yard range - Cast Shield-Breaker'), +(@Exo_Champion,0,7,0,0,0,100,0,9000,11000,9000,10000,46,12,0,0,0,0,0,1,0,0,0,0,0,0,0,'Exo Champion - IC - Move forward 12 yards'), +(@Exo_Champion,0,8,9,9,0,100,0,9,15,3000,3000,11,63010,0,0,0,0,0,2,0,0,0,0,0,0,0,'Exo Champion - On 10-12 yard range - Cast Charge'), +(@Exo_Champion,0,9,0,61,0,100,0,0,0,0,0,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'Exo Champion - Linked with previous event - Cast Shield-Breaker'), +(@Exo_Champion,0,10,11,2,0,100,1,1,6,60000,60000,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,'Exo Champion - On HP% between 1% and 6% - Change faction to 35'), +(@Exo_Champion,0,11,12,61,0,100,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Exo Champion - Linked with previous event - Say text'), +(@Exo_Champion,0,12,13,61,0,100,0,0,0,0,0,85,63596,0,0,0,0,0,12,1,0,0,0,0,0,0,'Exo Champion - Linked with previous event - Cast Mounted Melee Victory /item/'), +(@Exo_Champion,0,13,14,61,0,100,0,0,0,0,0,85,64808,0,0,0,0,0,12,1,0,0,0,0,0,0,'Exo Champion - Linked with previous event - Cast credit'), +(@Exo_Champion,0,14,0,61,0,100,0,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Exo Champion - Linked with previous event - Evade'), +(@Exo_Champion,0,15,16,5,0,100,0,60000,60000,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Exo Champion - On player killed - Say text'), +(@Exo_Champion,0,16,17,61,0,100,0,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Exo Champion - Linked with previous event - Set unseen'), +(@Exo_Champion,0,17,0,61,0,100,0,0,0,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Exo Champion - Linked with previous event - Despawn in 1 ms'); +-- Argent Champions texts +DELETE FROM `creature_text` WHERE `entry`= @Exo_Champion; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`,`BroadcastTextId`) VALUES +(@Exo_Champion,0,0,'Ready yourself!',12,7,100,0,0,0,'Argent Champion', 33757), +(@Exo_Champion,0,1,'Prepare yourself!',12,7,100,0,0,0,'Argent Champion', 33755), +(@Exo_Champion,0,2,'On your guard!',12,7,100,0,0,0,'Argent Champion', 33756), +(@Exo_Champion,0,3,'Let it begin!',12,7,100,0,0,0,'Argent Champion', 33758), +(@Exo_Champion,1,0,'Victory is mine!',12,7,100,0,0,0,'Argent Champion', 33777), +(@Exo_Champion,1,1,'It seems you still need more practice. Perhaps another time.',12,7,100,0,0,0,'Argent Champion', 33764), +(@Exo_Champion,1,2,'I have won. Better luck another time, friend.',12,7,100,0,0,0,'Argent Champion', 33779), +(@Exo_Champion,1,3,'I am afraid you will need more practice to defeat me.',12,7,100,0,0,0,'Argent Champion', 33778), +(@Exo_Champion,2,0,'I yield to you.',12,7,100,0,0,0,'Argent Champion', 33774), +(@Exo_Champion,2,1,'That was a well fought battle. I yield to you.',12,7,100,0,0,0,'Argent Champion', 33776), +(@Exo_Champion,2,2,'It would seem I underestimated your skills. Well done.',12,7,100,0,0,0,'Argent Champion', 33775), +(@Exo_Champion,2,3,'I have been defeated. Good fight!',12,7,100,0,0,0,'Argent Champion', 33760); +SET @UC_Champion := 33749; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@UC_Champion; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@UC_Champion; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@UC_Champion,0,0,0,25,0,100,0,0,0,0,0,28,64223,0,0,0,0,0,1,0,0,0,0,0,0,0,'UC Champion - On Reset - Remove auras from Defend'), +(@UC_Champion,0,1,2,62,0,100,0,10462,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'UC Champion - On gossip select - Close gossip'), +(@UC_Champion,0,2,3,61,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'UC Champion - Linked with previous event - store target'), +(@UC_Champion,0,3,0,61,0,100,0,0,0,0,0,80,@Script,2,0,0,0,0,1,0,0,0,0,0,0,0,'UC Champion - Linked with previous event - Call timed actionlist'), +(@UC_Champion,0,4,0,52,0,100,0,0,@UC_Champion,0,0,11,63010,0,0,0,0,0,7,0,0,0,0,0,0,0,'UC Champion - On text over - Cast Charge'), +(@UC_Champion,0,5,0,0,0,100,0,0,0,1500,4000,11,62544,0,0,0,0,0,2,0,0,0,0,0,0,0,'UC Champion - IC - Cast Thrust'), +(@UC_Champion,0,6,0,9,0,100,0,5,5,9000,10000,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'UC Champion - On more than 5 yard range - Cast Shield-Breaker'), +(@UC_Champion,0,7,0,0,0,100,0,9000,11000,9000,10000,46,12,0,0,0,0,0,1,0,0,0,0,0,0,0,'UC Champion - IC - Move forward 12 yards'), +(@UC_Champion,0,8,9,9,0,100,0,9,15,3000,3000,11,63010,0,0,0,0,0,2,0,0,0,0,0,0,0,'UC Champion - On 10-12 yard range - Cast Charge'), +(@UC_Champion,0,9,0,61,0,100,0,0,0,0,0,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'UC Champion - Linked with previous event - Cast Shield-Breaker'), +(@UC_Champion,0,10,11,2,0,100,1,1,6,60000,60000,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,'UC Champion - On HP% between 1% and 6% - Change faction to 35'), +(@UC_Champion,0,11,12,61,0,100,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'UC Champion - Linked with previous event - Say text'), +(@UC_Champion,0,12,13,61,0,100,0,0,0,0,0,85,63596,0,0,0,0,0,12,1,0,0,0,0,0,0,'UC Champion - Linked with previous event - Cast Mounted Melee Victory /item/'), +(@UC_Champion,0,13,14,61,0,100,0,0,0,0,0,85,64816,0,0,0,0,0,12,1,0,0,0,0,0,0,'UC Champion - Linked with previous event - Cast credit'), +(@UC_Champion,0,14,0,61,0,100,0,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'UC Champion - Linked with previous event - Evade'), +(@UC_Champion,0,15,16,5,0,100,0,60000,60000,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'UC Champion - On player killed - Say text'), +(@UC_Champion,0,16,17,61,0,100,0,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'UC Champion - Linked with previous event - Set unseen'), +(@UC_Champion,0,17,0,61,0,100,0,0,0,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'UC Champion - Linked with previous event - Despawn in 1 ms'); +-- Argent Champions texts +DELETE FROM `creature_text` WHERE `entry`= @UC_Champion; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`,`BroadcastTextId`) VALUES +(@UC_Champion,0,0,'Ready yourself!',12,1,100,0,0,0,'Argent Champion', 33757), +(@UC_Champion,0,1,'Prepare yourself!',12,1,100,0,0,0,'Argent Champion', 33755), +(@UC_Champion,0,2,'On your guard!',12,1,100,0,0,0,'Argent Champion', 33756), +(@UC_Champion,0,3,'Let it begin!',12,1,100,0,0,0,'Argent Champion', 33758), +(@UC_Champion,1,0,'Victory is mine!',12,1,100,0,0,0,'Argent Champion', 33777), +(@UC_Champion,1,1,'It seems you still need more practice. Perhaps another time.',12,1,100,0,0,0,'Argent Champion', 33764), +(@UC_Champion,1,2,'I have won. Better luck another time, friend.',12,1,100,0,0,0,'Argent Champion', 33779), +(@UC_Champion,1,3,'I am afraid you will need more practice to defeat me.',12,1,100,0,0,0,'Argent Champion', 33778), +(@UC_Champion,2,0,'I yield to you.',12,1,100,0,0,0,'Argent Champion', 33774), +(@UC_Champion,2,1,'That was a well fought battle. I yield to you.',12,1,100,0,0,0,'Argent Champion', 33776), +(@UC_Champion,2,2,'It would seem I underestimated your skills. Well done.',12,1,100,0,0,0,'Argent Champion', 33775), +(@UC_Champion,2,3,'I have been defeated. Good fight!',12,1,100,0,0,0,'Argent Champion', 33760); + + +DELETE FROM `gossip_menu` WHERE `entry` IN (10453, 10454, 10455, 10456, 10457, 10458, 10459, 10460, 10461, 10462); +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES +(10453, 14421), +(10453, 14489), +(10454, 14421), +(10454, 14489), +(10455, 14421), +(10455, 14489), +(10456, 14421), +(10456, 14489), +(10457, 14421), +(10457, 14489), +(10458, 14421), +(10458, 14489), +(10459, 14421), +(10459, 14489), +(10460, 14421), +(10460, 14489), +(10461, 14421), +(10461, 14489), +(10462, 14421), +(10462, 14489); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=14 AND `SourceGroup` IN (10453, 10454, 10455, 10456, 10457, 10458, 10459, 10460, 10461, 10462); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`, `ErrorTextId`,`ScriptName`,`Comment`, `NegativeCondition`) VALUES +(14,10453,14421,0,1,64805,0,0,0,'','Show gossip menu text if the player haven''t the aura', 1), +(14,10453,14489,0,1,64805,0,0,0,'','Show gossip menu text if the player have the aura', 0), +(14,10454,14421,0,1,64808,0,0,0,'','Show gossip menu text if the player haven''t the aura', 1), +(14,10454,14489,0,1,64808,0,0,0,'','Show gossip menu text if the player have the aura', 0), +(14,10455,14421,0,1,64809,0,0,0,'','Show gossip menu text if the player haven''t the aura', 1), +(14,10455,14489,0,1,64809,0,0,0,'','Show gossip menu text if the player have the aura', 0), +(14,10456,14421,0,1,64810,0,0,0,'','Show gossip menu text if the player haven''t the aura', 1), +(14,10456,14489,0,1,64810,0,0,0,'','Show gossip menu text if the player have the aura', 0), +(14,10457,14421,0,1,64811,0,0,0,'','Show gossip menu text if the player haven''t the aura', 1), +(14,10457,14489,0,1,64811,0,0,0,'','Show gossip menu text if the player have the aura', 0), +(14,10458,14421,0,1,64812,0,0,0,'','Show gossip menu text if the player haven''t the aura', 1), +(14,10458,14489,0,1,64812,0,0,0,'','Show gossip menu text if the player have the aura', 0), +(14,10459,14421,0,1,64813,0,0,0,'','Show gossip menu text if the player haven''t the aura', 1), +(14,10459,14489,0,1,64813,0,0,0,'','Show gossip menu text if the player have the aura', 0), +(14,10460,14421,0,1,64814,0,0,0,'','Show gossip menu text if the player haven''t the aura', 1), +(14,10460,14489,0,1,64814,0,0,0,'','Show gossip menu text if the player have the aura', 0), +(14,10461,14421,0,1,64815,0,0,0,'','Show gossip menu text if the player haven''t the aura', 1), +(14,10461,14489,0,1,64815,0,0,0,'','Show gossip menu text if the player have the aura', 0), +(14,10462,14421,0,1,64816,0,0,0,'','Show gossip menu text if the player haven''t the aura', 1), +(14,10462,14489,0,1,64816,0,0,0,'','Show gossip menu text if the player have the aura', 0); +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup` IN (10453, 10454, 10455, 10456, 10457, 10458, 10459, 10460, 10461, 10462); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ConditionTarget`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`,`NegativeCondition`) VALUES +(15,10453,0,0,1,9,13790,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10453,0,0,1,1,64805,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10453,0,0,1,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10453,0,0,1,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10453,0,0,2,9,13793,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10453,0,0,2,1,64805,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10453,0,0,2,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10453,0,0,2,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10453,0,0,3,9,13811,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10453,0,0,3,1,64805,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10453,0,0,3,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10453,0,0,3,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10453,0,0,4,9,13814,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10453,0,0,4,1,64805,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10453,0,0,4,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10453,0,0,4,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10454,0,0,1,9,13790,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10454,0,0,1,1,64808,0,0,0,'','Show gossip menu only if don''t have the auran',1), +(15,10454,0,0,1,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10454,0,0,1,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10454,0,0,2,9,13793,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10454,0,0,2,1,64808,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10454,0,0,2,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10454,0,0,2,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10454,0,0,3,9,13811,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10454,0,0,3,1,64808,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10454,0,0,3,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10454,0,0,3,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10454,0,0,4,9,13814,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10454,0,0,4,1,64808,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10454,0,0,4,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10454,0,0,4,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10455,0,0,1,9,13790,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10455,0,0,1,1,64809,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10455,0,0,1,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10455,0,0,1,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10455,0,0,2,9,13793,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10455,0,0,2,1,64809,0,0,0,'','Show gossip menu only if don''t have the auran',1), +(15,10455,0,0,2,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10455,0,0,2,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10455,0,0,3,1,64809,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10455,0,0,3,9,13811,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10455,0,0,3,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10455,0,0,3,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10455,0,0,4,1,64809,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10455,0,0,4,9,13814,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10455,0,0,4,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10455,0,0,4,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10456,0,0,1,9,13790,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10456,0,0,1,1,64810,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10456,0,0,1,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10456,0,0,1,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10456,0,0,2,9,13793,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10456,0,0,2,1,64810,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10456,0,0,2,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10456,0,0,2,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10456,0,0,3,9,13811,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10456,0,0,3,1,64810,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10456,0,0,3,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10456,0,0,3,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10456,0,0,4,9,13814,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10456,0,0,4,1,64810,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10456,0,0,4,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10456,0,0,4,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10457,0,0,1,9,13790,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10457,0,0,1,1,64811,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10457,0,0,1,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10457,0,0,1,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10457,0,0,2,9,13793,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10457,0,0,2,1,64811,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10457,0,0,2,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10457,0,0,2,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10457,0,0,3,9,13811,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10457,0,0,3,1,64811,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10457,0,0,3,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10457,0,0,3,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10457,0,0,4,9,13814,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10457,0,0,4,1,64811,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10457,0,0,4,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10457,0,0,4,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10458,0,0,1,9,13790,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10458,0,0,1,1,64812,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10458,0,0,1,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10458,0,0,1,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10458,0,0,2,9,13793,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10458,0,0,2,1,64812,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10458,0,0,2,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10458,0,0,2,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10458,0,0,3,9,13811,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10458,0,0,3,1,64812,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10458,0,0,3,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10458,0,0,3,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10458,0,0,4,9,13814,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10458,0,0,4,1,64812,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10458,0,0,4,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10458,0,0,4,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10459,0,0,1,9,13790,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10459,0,0,1,1,64813,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10459,0,0,1,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10459,0,0,1,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10459,0,0,2,9,13793,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10459,0,0,2,1,64813,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10459,0,0,2,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10459,0,0,2,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10459,0,0,3,9,13811,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10459,0,0,3,1,64813,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10459,0,0,3,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10459,0,0,3,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10459,0,0,4,9,13814,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10459,0,0,4,1,64813,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10459,0,0,4,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10459,0,0,4,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10460,0,0,1,9,13790,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10460,0,0,1,1,64814,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10460,0,0,1,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10460,0,0,1,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10460,0,0,2,9,13793,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10460,0,0,2,1,64814,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10460,0,0,2,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10460,0,0,2,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10460,0,0,3,9,13811,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10460,0,0,3,1,64814,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10460,0,0,3,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10460,0,0,3,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10460,0,0,4,9,13814,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10460,0,0,4,1,64814,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10460,0,0,4,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10460,0,0,4,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10461,0,0,1,9,13790,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10461,0,0,1,1,64815,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10461,0,0,1,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10461,0,0,1,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10461,0,0,2,9,13793,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10461,0,0,2,1,64815,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10461,0,0,2,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10461,0,0,2,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10461,0,0,3,9,13811,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10461,0,0,3,1,64815,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10461,0,0,3,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10461,0,0,3,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10461,0,0,4,9,13814,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10461,0,0,4,1,64815,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10461,0,0,4,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10461,0,0,4,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10462,0,0,1,9,13790,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10462,0,0,1,1,64816,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10462,0,0,1,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10462,0,0,1,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10462,0,0,2,9,13793,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10462,0,0,2,1,64816,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10462,0,0,2,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10462,0,0,2,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10462,0,0,3,9,13811,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10462,0,0,3,1,64816,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10462,0,0,3,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10462,0,0,3,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10462,0,0,4,9,13814,0,0,0,'','Show gossip menu only if quest Among the Champions is taken',0), +(15,10462,0,0,4,1,64816,0,0,0,'','Show gossip menu only if don''t have the aura',1), +(15,10462,0,0,4,1,63034,0,0,0,'','Show gossip menu only if the player have the aura',0), +(15,10462,0,0,4,1,62853,0,0,0,'','Show gossip menu only if the player have the aura',0); diff --git a/sql/updates/world/2015_05_09_12_world.sql b/sql/updates/world/2015_05_09_12_world.sql new file mode 100644 index 00000000000..d2e488cc026 --- /dev/null +++ b/sql/updates/world/2015_05_09_12_world.sql @@ -0,0 +1,35 @@ +-- The Exorcism of Colonel Jules +UPDATE `creature_template` SET `ScriptName`= 'npc_barada' WHERE `entry`= 22431; +UPDATE `creature_template` SET `ScriptName`= 'npc_colonel_jules' WHERE `entry`= 22432; + +DELETE FROM `gossip_menu_option` WHERE `menu_id` = 8539; +INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `OptionBroadcastTextID`, `option_id`, `npc_option_npcflag`) VALUES +(8539, 1, 0, 'I am ready, Anchorite. Let us begin the exorcism.', 20396, 1, 3); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=8539; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`, `ErrorTextId`,`ScriptName`,`Comment`) VALUES +(15,8539,0,0,9,10935,0,0,0,'','Show gossip menu if player accept Exorcism of Colonel Jules'); + +DELETE FROM `creature_text` WHERE `entry` IN(22431, 22432); +-- Barada +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(22431, 0, 0, 'It is time. The rite of exorcism will now commence...', 12, 0, 100, 0, 0, 0, 20400, 0, 'Barada'), +(22431, 1, 0, 'Prepare yourself. Do not allow the ritual to be interrupted or we may lose our patient...', 12, 0, 100, 0, 0, 0, 20401, 0, 'Barada'), +(22431, 2, 0, 'Back foul beings of darkness! You have no power here!', 12, 0, 100, 0, 0, 0, 20404, 0, 'Barada'), +(22431, 3, 0, 'I... must not... falter', 12, 0, 100, 0, 0, 0, 20407, 0, 'Barada'), +(22431, 4, 0, 'The Light is my guide... it is my sustenance!', 12, 0, 100, 0, 0, 0, 20408, 0, 'Barada'), +(22431, 5, 0, 'The power of light compells you! Back to your pit!', 12, 0, 100, 0, 0, 0, 20405, 0, 'Barada'), +(22431, 6, 0, 'Be cleansed with Light, human! Let not the demonic corruption overwhelm you.', 12, 0, 100, 0, 0, 0, 20403, 0, 'Barada'), +(22431, 7, 0, 'Back! I cast you back... corruptor of faith! Author of pain! Do not return, or suffer the same fate as you did here today!', 12, 0, 100, 0, 0, 0, 20419, 0, 'Barada'), + +-- Colonel Jules +(22432, 0, 0, 'Keep away. The fool is mine.', 12, 0, 100, 0, 0, 0, 20402, 0, 'Colonel Jules'), +(22432, 1, 0, 'Ah! Cease the incantations, Anchorite! Cease, or I will show you such pain that your pathetic people have never imagined!', 12, 0, 100, 0, 0, 0, 20414, 0, 'Colonel Jules'), +(22432, 2, 0, 'This is fruitless, draenei! You and your little helper cannot wrest control of this pathetic human. He is mine!', 12, 0, 100, 0, 0, 0, 20416, 0, 'Colonel Jules'), +(22432, 3, 0, 'I see your ancestors, Anchorite! They writhe and scream in the darkness... they are with us!', 12, 0, 100, 0, 0, 0, 20415, 0, 'Colonel Jules'), +(22432, 4, 0, 'I will tear your soul into morsels and slow roast them over demon fire.', 12, 0, 100, 0, 0, 0, 20417, 0, 'Colonel Jules'); + +-- Aura for the flying skulls +DELETE FROM `creature_template_addon` WHERE `entry` = 22507; +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES +(22507, 0, 0, 0, 1, 0, '39303'); diff --git a/sql/updates/world/2015_05_11_00_world.sql b/sql/updates/world/2015_05_11_00_world.sql new file mode 100644 index 00000000000..5e8485202fa --- /dev/null +++ b/sql/updates/world/2015_05_11_00_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `conditions` SET `ConditionTypeOrReference`=9, `SourceEntry`=1 WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=8539; diff --git a/sql/updates/world/2015_05_11_01_world.sql b/sql/updates/world/2015_05_11_01_world.sql new file mode 100644 index 00000000000..d90a5fef88d --- /dev/null +++ b/sql/updates/world/2015_05_11_01_world.sql @@ -0,0 +1,130 @@ +-- +-- Okla +DELETE FROM `creature_text` WHERE `entry` IN (14873, 5907); +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`,`BroadcastTextId`) VALUES +(14873, 0, 0, 'Can I go collect more rocks for my necklace, Papa?', 12, 1, 100, 1, 0, 0, 'Okla',10274), +(14873, 1, 0, 'Dabu! I will be careful Papa!', 12, 1, 100, 1, 0, 0, 'Okla', 10276), +(14873, 2, 0, 'Ooohh... This rock is nice and colorful. Let\'s see if I can find more like it...', 12, 1, 100, 1, 0, 0, 'Okla', 10277), +(14873, 3, 0, 'Hmm... That rock is nice, but too small.', 12, 1, 100, 1, 0, 0, 'Okla', 10278), +(14873, 4, 0, 'This is a shiney rock. I\'ll put it in my bucket. Ok, I just need a few more...', 12, 1, 100, 1, 0, 0, 'Okla', 10279), +(14873, 5, 0, 'I bet my friend Gruk would like this rock for the spear he is making! It\'s very sharp... I hope he likes it.', 12, 1, 100, 1, 0, 0, 'Okla', 10280), +(14873, 6, 0, 'There... That should be enough rocks to make a necklace. I should probably get home now anyway.', 12, 1, 100, 1, 0, 0, 'Okla', 10281), +(5907, 0, 0, 'Yes you may, Okla. But do not stray too far from home.', 12, 1, 100, 1, 0, 0, 'Kranal Fiss', 10275); + +-- Okla SAI +SET @ENTRY := 14873; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,25,0,100,0,0,0,0,0,53,0,14873,1,0,0,0,1,0,0,0,0,0,0,0,"Okla - On Reset - Start Waypoint"), +(@ENTRY,0,1,0,40,0,100,0,2,14873,0,0,80,@ENTRY*100+00,0,0,0,0,0,1,0,0,0,0,0,0,0,"Okla - On Waypoint 2 Reached - Run Script"), +(@ENTRY,0,2,0,40,0,100,0,13,14873,0,0,80,@ENTRY*100+01,0,0,0,0,0,1,0,0,0,0,0,0,0,"Okla - On Waypoint 13 Reached - Run Script"), +(@ENTRY,0,3,0,40,0,100,0,18,14873,0,0,80,@ENTRY*100+02,0,0,0,0,0,1,0,0,0,0,0,0,0,"Okla - On Waypoint 18 Reached - Run Script"), +(@ENTRY,0,4,0,40,0,100,0,24,14873,0,0,80,@ENTRY*100+03,0,0,0,0,0,1,0,0,0,0,0,0,0,"Okla - On Waypoint 24 Reached - Run Script"), +(@ENTRY,0,5,0,40,0,100,0,29,14873,0,0,80,@ENTRY*100+04,0,0,0,0,0,1,0,0,0,0,0,0,0,"Okla - On Waypoint 29 Reached - Run Script"), +(@ENTRY,0,6,0,40,0,100,0,35,14873,0,0,80,@ENTRY*100+05,0,0,0,0,0,1,0,0,0,0,0,0,0,"Okla - On Waypoint 35 Reached - Run Script"); + +-- Actionlist SAI +SET @ENTRY := 1487300; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,54,21000,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Pause Waypoint"), +(@ENTRY,9,1,0,0,0,100,0,5000,5000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Say Line 0"), +(@ENTRY,9,2,0,0,0,100,0,8000,8000,0,0,1,0,0,0,0,0,0,19,5907,50,0,0,0,0,0,"On Script - Say Line 0"), +(@ENTRY,9,3,0,0,0,100,0,7000,7000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Say Line 1"); + +-- Actionlist SAI +SET @ENTRY := 1487301; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,54,10000,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Pause Waypoint"), +(@ENTRY,9,1,0,0,0,100,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Say Line 2"); + +-- Actionlist SAI +SET @ENTRY := 1487302; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,54,10000,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Pause Waypoint"), +(@ENTRY,9,1,0,0,0,100,0,0,0,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Say Line 3"); + +-- Actionlist SAI +SET @ENTRY := 1487303; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,54,10000,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Pause Waypoint"), +(@ENTRY,9,1,0,0,0,100,0,0,0,0,0,1,4,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Say Line 4"); + +-- Actionlist SAI +SET @ENTRY := 1487304; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,54,10000,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Pause Waypoint"), +(@ENTRY,9,1,0,0,0,100,0,0,0,0,0,1,5,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Say Line 5"); + +-- Actionlist SAI +SET @ENTRY := 1487305; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,54,10000,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Pause Waypoint"), +(@ENTRY,9,1,0,0,0,100,0,0,0,0,0,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Say Line 6"); + +DELETE FROM `waypoints` WHERE `entry`=14873; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`) VALUES +(14873, 1, 270.076, -3036.6, 97.6192), +(14873, 2, 262.171, -3043.45, 96.5053), +(14873, 3, 251.328, -3055.55, 96.1454), +(14873, 4, 246.888, -3070.92, 95.2793), +(14873, 5, 242.449, -3081.3, 91.82), +(14873, 6, 232.826, -3106.67, 93.3165), +(14873, 7, 226.41, -3120.76, 93.3475), +(14873, 8, 213.921, -3151.01, 91.2851), +(14873, 9, 221.681, -3147.9, 91.374), +(14873, 10, 214.549, -3134.64, 91.9876), +(14873, 11, 210.931, -3139.95, 91.6514), +(14873, 12, 214.059, -3139.64, 91.7), +(14873, 13, 213.426, -3131.78, 92.1297), +(14873, 14, 220.194, -3140.72, 91.7517), +(14873, 15, 225.395, -3139.1, 92.0847), +(14873, 16, 220.857, -3140.83, 91.7662), +(14873, 17, 218.769, -3132.79, 92.4983), +(14873, 18, 226.814, -3137.56, 92.169), +(14873, 19, 225.496, -3132.89, 92.7818), +(14873, 20, 213.603, -3148.39, 91.4489), +(14873, 21, 219.055, -3151.2, 91.2139), +(14873, 22, 220.469, -3141.93, 91.6344), +(14873, 23, 214.852, -3148.32, 91.4558), +(14873, 24, 218.373, -3144.99, 91.5714), +(14873, 25, 224.091, -3149.02, 91.2304), +(14873, 26, 224.591, -3145.02, 91.4801), +(14873, 27, 219.022, -3147.38, 91.4735), +(14873, 28, 220.167, -3139.75, 91.8958), +(14873, 29, 225.033, -3133.14, 92.8028), +(14873, 30, 222.021, -3128.32, 93.0422), +(14873, 31, 228.338, -3126.35, 92.9595), +(14873, 32, 229.495, -3129.22, 92.6818), +(14873, 33, 232.12, -3128.11, 92.5988), +(14873, 34, 227.003, -3137.58, 92.1461), +(14873, 35, 220.002, -3132.38, 92.659), +(14873, 36, 225.874, -3102.36, 93.6962), +(14873, 37, 233.086, -3085.54, 91.6788), +(14873, 38, 235.152, -3069.81, 91.8706), +(14873, 39, 239.821, -3061.03, 95.4022), +(14873, 40, 256.123, -3047.91, 96.2473), +(14873, 41, 267.05, -3039.04, 96.9212), +(14873, 42, 271.093, -3035.98, 97.6501), +(14873, 43, 278.975, -3029.68, 97.3919), +(14873, 44, 280.125, -3029.01, 97.3502); + +UPDATE `creature_addon` SET `path_id`=59070 WHERE `guid`=13174; +UPDATE `creature` SET `MovementType`=2 WHERE `guid`=13174; +DELETE FROM `waypoint_data` WHERE `id` IN (59070); +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`action`,`action_chance`,`wpguid`) VALUES +(59070,0,265.967000,-3050.670000,96.921500,0,0,0,100,0), +(59070,1,263.671661,-3047.959961,96.665161,0,0,0,100,0), +(59070,2,260.557739,-3038.177002,96.740677,0,0,0,100,0), +(59070,3,262.354950,-3036.125732,96.990982,0,0,0,100,0), +(59070,4,261.470215,-3036.779541,96.961708,0,60000,0,100,0), +(59070,5,259.890106,-3038.696045,96.572845,0,0,0,100,0), +(59070,6,265.967468,-3050.672363,96.921516,0,0,0,100,0), +(59070,7,265.967000,-3050.670000,96.921500,0,30000,0,100,0); +UPDATE `creature` SET `position_x`=280.125, `position_y`=-3029.01, `position_z`=97.3502, `orientation`= 3.764 WHERE `guid`=14873; diff --git a/sql/updates/world/2015_05_11_02_world.sql b/sql/updates/world/2015_05_11_02_world.sql new file mode 100644 index 00000000000..7ec5f4870ce --- /dev/null +++ b/sql/updates/world/2015_05_11_02_world.sql @@ -0,0 +1,34 @@ +-- +DELETE FROM `waypoint_data` WHERE `id`=1207950; +DELETE FROM `creature_addon` WHERE `guid`=120795; +UPDATE `creature` SET `MovementType`=0 WHERE `guid`=120795; +DELETE FROM `waypoint_scripts` WHERE `guid`=120795; + +-- Refurbished Steam Tank SAI +SET @ENTRY := 29144; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,25,0,100,0,0,0,0,0,53,0,29144,0,0,0,0,1,0,0,0,0,0,0,0,"Refurbished Steam Tank - On Reset - Start Waypoint"), +(@ENTRY,0,1,0,40,0,100,0,1,29144,0,0,54,1000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Refurbished Steam Tank - On Waypoint 1 Reached - Pause Waypoint"), +(@ENTRY,0,2,0,40,0,100,0,2,29144,0,0,54,120000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Refurbished Steam Tank - On Waypoint 2 Reached - Pause Waypoint"), +(@ENTRY,0,3,0,40,0,100,0,3,29144,0,0,54,5000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Refurbished Steam Tank - On Waypoint 3 Reached - Pause Waypoint"), +(@ENTRY,0,4,0,40,0,100,0,6,29144,0,0,54,6000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Refurbished Steam Tank - On Waypoint 6 Reached - Pause Waypoint"), +(@ENTRY,0,5,0,40,0,100,0,10,29144,0,0,54,10000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Refurbished Steam Tank - On Waypoint 10 Reached - Pause Waypoint"), +(@ENTRY,0,6,7,40,0,100,0,11,29144,0,0,54,5000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Refurbished Steam Tank - On Waypoint 11 Reached - Pause Waypoint"), +(@ENTRY,0,7,0,61,0,100,0,11,29144,0,0,37,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Refurbished Steam Tank - On Waypoint 11 Reached - Kill Self"), +(@ENTRY,0,8,0,6,0,100,0,0,0,0,0,41,3000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Refurbished Steam Tank - On Just Died - Despawn In 3000 ms"); + +DELETE FROM `waypoints` WHERE `entry`=@ENTRY; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(@ENTRY, 1, -8463.9, 1109.41, 19.1352, 'Refurbished Steam Tank'), +(@ENTRY, 2, -8463.52, 1112.6, 19.0517, 'Refurbished Steam Tank'), +(@ENTRY, 3, -8463.23, 1108.18, 19.053, 'Refurbished Steam Tank'), +(@ENTRY, 4, -8473.35, 1096.63, 18.7345, 'Refurbished Steam Tank'), +(@ENTRY, 5, -8496.34, 1095.88, 17.9444, 'Refurbished Steam Tank'), +(@ENTRY, 6, -8499.86, 1132.84, 17.9763, 'Refurbished Steam Tank'), +(@ENTRY, 7, -8486, 1138.24, 17.9608, 'Refurbished Steam Tank'), +(@ENTRY, 8, -8462.43, 1136.04, 18.6577, 'Refurbished Steam Tank'), +(@ENTRY, 9, -8440.65, 1137.48, 18.8719, 'Refurbished Steam Tank'), +(@ENTRY, 10, -8412.35, 1137.49, 18.0685, 'Refurbished Steam Tank'), +(@ENTRY, 11, -8412.35, 1137.49, 18.0685, 'Refurbished Steam Tank'); diff --git a/sql/updates/world/2015_05_11_03_world.sql b/sql/updates/world/2015_05_11_03_world.sql new file mode 100644 index 00000000000..b0df32b2a92 --- /dev/null +++ b/sql/updates/world/2015_05_11_03_world.sql @@ -0,0 +1,234 @@ +-- DB/Quest: Assault by Air (H) +DELETE FROM `creature` WHERE `id`=32225; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`) VALUES +(16398, 32225, 571, 1, 1, 0, 0, 7303.23, 1520.81, 323.2961, 1.53589, 300, 0, 0, 63000, 0, 0, 0, 0, 0); + +UPDATE `creature_template` SET `spell1`=59880 WHERE `entry`=32227; +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=32225; +UPDATE `creature_template` SET `speed_run`=3 WHERE `entry`=32225; +UPDATE `vehicle_template_accessory` SET `minion`=1 WHERE `entry`=32225 AND `seat_id`=0; + +DELETE FROM `waypoints` WHERE `entry`=32225; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(32225, 1, 7224.952, 1493.076, 355.6927, 'Skybreaker Troop Transport'), +(32225, 2, 7158.104, 1468.994, 408.7451, 'Skybreaker Troop Transport'), +(32225, 3, 7091.476, 1447.724, 454.6882, 'Skybreaker Troop Transport'), +(32225, 4, 6959.782, 1423.015, 558.3835, 'Skybreaker Troop Transport'), +(32225, 5, 6779.104, 1463.505, 646.3554, 'Skybreaker Troop Transport'), +(32225, 6, 6655.649, 1608.774, 709.994, 'Skybreaker Troop Transport'), +(32225, 7, 6624.22, 1736.658, 728.0214, 'Skybreaker Troop Transport'), +(32225, 8, 6669.947, 1866.185, 709.688, 'Skybreaker Troop Transport'), +(32225, 9, 6718.041, 1885.129, 690.6326, 'Skybreaker Troop Transport'), +(32225, 10, 6795.828, 1838.745, 659.0216, 'Skybreaker Troop Transport'), +(32225, 11, 6829.202, 1723.054, 616.9384, 'Skybreaker Troop Transport'), +(32225, 12, 6938.554, 1702.879, 585.9383, 'Skybreaker Troop Transport'), +(32225, 13, 7024.898, 1752.804, 565.5496, 'Skybreaker Troop Transport'), +(32225, 14, 7113.707, 1734.315, 556.3559, 'Skybreaker Troop Transport'), +(32225, 15, 7265.8, 1765.196, 556.3559, 'Skybreaker Troop Transport'), +(32225, 16, 7302.899, 1853.759, 575.8558, 'Skybreaker Troop Transport'), +(32225, 17, 7312.44, 1944.328, 581.4116, 'Skybreaker Troop Transport'), +(32225, 18, 7307.329, 2014.243, 581.4116, 'Skybreaker Troop Transport'), +(32225, 19, 7253.363, 2115.422, 583.3, 'Skybreaker Troop Transport'), +(32225, 20, 7193.522, 2155.816, 607.7997, 'Skybreaker Troop Transport'), +(32225, 21, 7128.84, 2168.484, 642.6707, 'Skybreaker Troop Transport'), +(32225, 22, 7069.121, 2157.589, 689.7963, 'Skybreaker Troop Transport'), +(32225, 23, 7024.457, 2135.705, 708.6849, 'Skybreaker Troop Transport'), +(32225, 24, 6934.063, 2183.969, 750.9397, 'Skybreaker Troop Transport'), +(32225, 25, 6941.725, 2249.074, 754.6065, 'Skybreaker Troop Transport'), +(32225, 26, 7072.678, 2295.607, 714.44, 'Skybreaker Troop Transport'), +(32225, 27, 7260.946, 2257.761, 639.7736, 'Skybreaker Troop Transport'), +(32225, 28, 7419.038, 2123.693, 587.7736, 'Skybreaker Troop Transport'), +(32225, 29, 7471.735, 1962.737, 559.6346, 'Skybreaker Troop Transport'), +(32225, 30, 7436.465, 1818.688, 508.0233, 'Skybreaker Troop Transport'), +(32225, 31, 7366.372, 1694.51, 469.3012, 'Skybreaker Troop Transport'), +(32225, 32, 7329.872, 1609.157, 432.2737, 'Skybreaker Troop Transport'), +(32225, 33, 7296.424, 1556.42, 417.7181, 'Skybreaker Troop Transport'), +(32225, 34, 7272.382, 1525.835, 411.4405, 'Skybreaker Troop Transport'); + +-- Skybreaker Suppression Turret SAI +SET @ENTRY := 32227; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,27,0,100,0,0,0,0,0,45,1,0,0,0,0,0,19,32225,10,0,0,0,0,0,"Skybreaker Suppression Turret - On Passenger Boarded - Set Data 1 0"); + +-- Skybreaker Troop Transport SAI +SET @ENTRY := 32225; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,38,0,100,0,1,0,0,0,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Skybreaker Troop Transport - On Data Set 1 0 - Run Script"), +(@ENTRY,0,1,0,40,0,100,0,9,32225,0,0,11,64631,0,0,0,0,0,1,0,0,0,0,0,0,0,"Skybreaker Troop Transport - On Waypoint 11 Reached - Cast 'Eject Passenger 3'"), +(@ENTRY,0,2,0,40,0,100,0,13,32225,0,0,11,64614,0,0,0,0,0,1,0,0,0,0,0,0,0,"Skybreaker Troop Transport - On Waypoint 16 Reached - Cast 'Eject Passenger 4'"), +(@ENTRY,0,3,0,40,0,100,0,17,32225,0,0,11,64633,0,0,0,0,0,1,0,0,0,0,0,0,0,"Skybreaker Troop Transport - On Waypoint 19 Reached - Cast 'Eject Passenger 5'"), +(@ENTRY,0,4,0,40,0,100,0,22,32225,0,0,11,64634,0,0,0,0,0,1,0,0,0,0,0,0,0,"Skybreaker Troop Transport - On Waypoint 22 Reached - Cast 'Eject Passenger 6'"), +(@ENTRY,0,5,0,40,0,100,0,34,32225,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Skybreaker Troop Transport - On Waypoint 32 Reached - Despawn Instant"); + +-- Actionlist SAI +SET @ENTRY := 3222500; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,2000,2000,0,0,53,1,32225,0,0,0,0,1,0,0,0,0,0,0,0,"Skybreaker Troop Transport - On Script - Start Waypoint"), +(@ENTRY,9,1,0,0,0,100,0,0,0,0,0,8,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Skybreaker Troop Transport - On Script - Set Reactstate Passive"), +(@ENTRY,9,2,0,0,0,100,0,0,0,0,0,18,131072,0,0,0,0,0,1,0,0,0,0,0,0,0,"Skybreaker Troop Transport - On Script - Set Flag Pacified"), +(@ENTRY,9,3,0,0,0,100,0,0,0,0,0,102,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Skybreaker Troop Transport - On Script - Set Health Regeneration Off"); + +-- Skybreaker Infiltrator SAI +SET @ENTRY := 32222; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,23,0,100,1,46598,0,0,0,80,@ENTRY*100+00,0,0,0,0,0,1,0,0,0,0,0,0,0,"Skybreaker Infiltrator - On Has Aura 'Ride Vehicle Hardcoded' - Run Script (No Repeat)"); + +-- Actionlist SAI +SET @ENTRY := 3222200; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,11,60208,0,0,0,0,0,21,20,0,0,0,0,0,0,"Skybreaker Infiltrator - On Script - Cast 'Ally Air Dropoff Kill Credit'"), +(@ENTRY,9,1,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Skybreaker Infiltrator - On Script - Say Line 0"), +(@ENTRY,9,2,0,0,0,100,0,100,100,0,0,11,45472,0,0,0,0,0,1,0,0,0,0,0,0,0,"Skybreaker Infiltrator - On Script - Cast 'Parachute'"), +(@ENTRY,9,3,0,0,0,100,0,4000,4000,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Skybreaker Infiltrator - On Script - Despawn Instant"); + +DELETE FROM `creature_text` WHERE `entry`=32222; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextId`) VALUES +(32222, 0, 0, 'I''ll kill one just for you.', 12, 0, 100, 0, 0, 0, 'Skybreaker Infiltrator',32532), +(32222, 0, 1, 'Dropping. Good luck, boys!', 12, 0, 100, 0, 0, 0, 'Skybreaker Infiltrator',32526), +(32222, 0, 2, 'Thanks for the cover!', 12, 0, 100, 0, 0, 0, 'Skybreaker Infiltrator',32527), +(32222, 0, 3, 'Destination reached - engaging in scouting mission.', 12, 0, 100, 0, 0, 0, 'Skybreaker Infiltrator',32528), +(32222, 0, 4, 'Infiltration commencing.', 12, 0, 100, 0, 0, 0, 'Skybreaker Infiltrator',32529); + +-- Ymirheim Spear Gun SAI +SET @ENTRY := 31280; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,1,100,0,5000,5000,3000,4000,11,59894,0,0,0,0,0,19,32225,100,0,0,0,0,0,"Ymirheim Spear Gun - Out of Combat - Cast 'Launch Spear' (Phase 1)"), +(@ENTRY,0,1,0,1,1,100,0,5000,5000,3000,4000,11,59894,0,0,0,0,0,19,32225,100,0,0,0,0,0,"Ymirheim Spear Gun - Out of Combat - Cast 'Launch Spear' (Phase 1)"), +(@ENTRY,0,2,3,8,0,100,0,59880,0,0,0,22,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ymirheim Spear Gun - On Spellhit 'Suppression Charge' - Set Event Phase 2"), +(@ENTRY,0,3,0,61,0,100,0,59880,0,0,0,80,@ENTRY*100+00,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ymirheim Spear Gun - On Spellhit 'Suppression Charge' - Run Script"), +(@ENTRY,0,4,0,25,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ymirheim Spear Gun - On Reset - Set Event Phase 1"); + +-- Actionlist SAI +SET @ENTRY := 3128000; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,15000,15000,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Set Event Phase 1"); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=18 AND `SourceGroup`=32227 AND `SourceEntry`=46598; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(18, 32227, 46598, 0, 0, 9, 0, 13309, 0, 0, 0, 0, 0, '', 'Required quest ''Assault by Ait'' active for spellclick'); + + +-- DB/Quest: Assault by Air (A) +UPDATE `creature_template` SET `spell1`=59880 WHERE `entry`=31884; +UPDATE `creature` SET `spawndist`=0, `MovementType`=0 WHERE `guid`=125330; +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=31881; +UPDATE `creature_template` SET `speed_run`=3 WHERE `entry`=31881; +UPDATE `vehicle_template_accessory` SET `minion`=1 WHERE `entry`=31881 AND `seat_id`=0; + +DELETE FROM `waypoints` WHERE `entry`=31881; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(31881, 1, 7513.354, 1781.131, 381.561, 'Kor\'kron Troop Transport'), +(31881, 2, 7508.576, 1843.856, 445.5052, 'Kor\'kron Troop Transport'), +(31881, 3, 7496.634, 1890.942, 496.6479, 'Kor\'kron Troop Transport'), +(31881, 4, 7451.161, 1990.051, 581.2389, 'Kor\'kron Troop Transport'), +(31881, 5, 7372.757, 2143.088, 590.3499, 'Kor\'kron Troop Transport'), +(31881, 6, 7293.971, 2233.48, 602.4611, 'Kor\'kron Troop Transport'), +(31881, 7, 7117.833, 2278.535, 605.0721, 'Kor\'kron Troop Transport'), +(31881, 8, 7017.111, 2263.003, 647.082, 'Kor\'kron Troop Transport'), +(31881, 9, 6996.222, 2205.772, 679.2115, 'Kor\'kron Troop Transport'), +(31881, 10, 7061.963, 2173.603, 675.7964, 'Kor\'kron Troop Transport'), +(31881, 11, 7121.235, 2156.643, 656.629, 'Kor\'kron Troop Transport'), +(31881, 12, 7217.851, 2134.94, 612.4905, 'Kor\'kron Troop Transport'), +(31881, 13, 7288.108, 2086.021, 596.8795, 'Kor\'kron Troop Transport'), +(31881, 14, 7327.417, 1958.794, 585.9348, 'Kor\'kron Troop Transport'), +(31881, 15, 7298.545, 1875.991, 585.4906, 'Kor\'kron Troop Transport'), +(31881, 16, 7249.319, 1800.969, 588.4902, 'Kor\'kron Troop Transport'), +(31881, 17, 7157.543, 1745.975, 588.4902, 'Kor\'kron Troop Transport'), +(31881, 18, 7067.531, 1718.656, 588.4902, 'Kor\'kron Troop Transport'), +(31881, 19, 6988.929, 1710.539, 589.5177, 'Kor\'kron Troop Transport'), +(31881, 20, 6858.088, 1715.7, 617.0735, 'Kor\'kron Troop Transport'), +(31881, 21, 6789.24, 1811.618, 658.2943, 'Kor\'kron Troop Transport'), +(31881, 22, 6741.477, 1881.004, 687.6509, 'Kor\'kron Troop Transport'), +(31881, 23, 6687.517, 1859.595, 701.3486, 'Kor\'kron Troop Transport'), +(31881, 24, 6683.648, 1766.575, 692.5154, 'Kor\'kron Troop Transport'), +(31881, 25, 6738.948, 1709.63, 686.7657, 'Kor\'kron Troop Transport'), +(31881, 26, 6906.804, 1642.973, 664.1547, 'Kor\'kron Troop Transport'), +(31881, 27, 7009.317, 1640.16, 631.8771, 'Kor\'kron Troop Transport'), +(31881, 28, 7174.014, 1608.189, 554.7385, 'Kor\'kron Troop Transport'), +(31881, 29, 7328.232, 1587.251, 465.3495, 'Kor\'kron Troop Transport'), +(31881, 30, 7449.845, 1582.211, 415.2385, 'Kor\'kron Troop Transport'), +(31881, 31, 7493.209, 1659.839, 383.9886, 'Kor\'kron Troop Transport'), +(31881, 32, 7508.813, 1745.664, 371.2109, 'Kor\'kron Troop Transport'); + +-- Kor'kron Suppression Turret SAI +SET @ENTRY := 31884; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,27,0,100,0,0,0,0,0,45,1,0,0,0,0,0,19,31881,10,0,0,0,0,0,"Kor'kron Suppression Turret - On Passenger Boarded - Set Data 1 0"); + +-- Kor'kron Troop Transport SAI +SET @ENTRY := 31881; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,38,0,100,0,1,0,0,0,80,3188100,2,0,0,0,0,1,0,0,0,0,0,0,0,"Kor'kron Troop Transport - On Data Set 1 0 - Run Script"), +(@ENTRY,0,1,0,40,0,100,0,11,31881,0,0,11,64631,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kor'kron Troop Transport - On Waypoint 2 Reached - Cast 'Dop Passenger3'"), +(@ENTRY,0,2,0,40,0,100,0,16,31881,0,0,11,64614,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kor'kron Troop Transport - On Waypoint 2 Reached - Cast 'Dop Passenger4'"), +(@ENTRY,0,3,0,40,0,100,0,19,31881,0,0,11,64633,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kor'kron Troop Transport - On Waypoint 2 Reached - Cast 'Dop Passenger5'"), +(@ENTRY,0,4,0,40,0,100,0,22,31881,0,0,11,64634,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kor'kron Troop Transport - On Waypoint 2 Reached - Cast 'Dop Passenger6'"), +(@ENTRY,0,5,0,40,0,100,0,32,31881,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kor'kron Troop Transport - On Waypoint 32 Reached - Despawn"); + +-- Actionlist SAI +SET @ENTRY := 3188100; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,2000,2000,0,0,53,1,31881,0,0,0,0,1,0,0,0,0,0,0,0,"Kor'kron Troop Transport - On Script - Start Waypoint"), +(@ENTRY,9,1,0,0,0,100,0,0,0,0,0,8,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kor'kron Troop Transport - On Script - Set Reactstate Passive"), +(@ENTRY,9,2,0,0,0,100,0,0,0,0,0,18,131072,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kor'kron Troop Transport - On Script - Set Flag Pacified"), +(@ENTRY,9,3,0,0,0,100,0,0,0,0,0,102,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kor'kron Troop Transport - On Script - Set Health Regeneration Off"); + +-- Kor'kron Infiltrator SAI +SET @ENTRY := 31882; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,23,0,100,1,46598,0,0,0,80,@ENTRY*100+00,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kor'kron Infiltrator - On Has Aura 'Ride Vehicle Hardcoded' - Run Script (No Repeat)"); + +-- Actionlist SAI +SET @ENTRY := 3188200; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,11,59977,0,0,0,0,0,21,20,0,0,0,0,0,0,"Kor'kron Infiltrator - On Script - Cast 'Horde Air Dropoff Kill Credit'"), +(@ENTRY,9,1,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kor'kron Infiltrator - On Script - Say Line 0"), +(@ENTRY,9,2,0,0,0,100,0,100,100,0,0,11,45472,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kor'kron Infiltrator - On Script - Cast 'Parachute'"), +(@ENTRY,9,3,0,0,0,100,0,4000,4000,0,0,41,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kor'kron Infiltrator - On Script - Despawn Instant"); + +DELETE FROM `creature_text` WHERE `entry`=31882; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextId`) VALUES +(31882, 0, 0, 'I''ll kill one just for you.', 12, 0, 100, 0, 0, 0, 'Kor''kron Infiltrator',32532), +(31882, 0, 1, 'Dropping. Good luck, boys!', 12, 0, 100, 0, 0, 0, 'Kor''kron Infiltrator',32526), +(31882, 0, 2, 'Thanks for the cover!', 12, 0, 100, 0, 0, 0, 'Kor''kron Infiltrator',32527), +(31882, 0, 3, 'Destination reached - engaging in scouting mission.', 12, 0, 100, 0, 0, 0, 'Kor''kron Infiltrator',32528), +(31882, 0, 4, 'Infiltration commencing.', 12, 0, 100, 0, 0, 0, 'Kor''kron Infiltrator',32529); + +-- Ymirheim Spear Gun SAI +SET @ENTRY := 31280; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,1,100,0,5000,5000,3000,4000,11,59894,0,0,0,0,0,19,31881,100,0,0,0,0,0,"Ymirheim Spear Gun - Out of Combat - Cast 'Launch Spear' (Phase 1)"), +(@ENTRY,0,1,2,8,0,100,0,59880,0,0,0,22,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ymirheim Spear Gun - On Spellhit 'Suppression Charge' - Set Event Phase 2"), +(@ENTRY,0,2,0,61,0,100,0,59880,0,0,0,80,@ENTRY*100+00,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ymirheim Spear Gun - On Spellhit 'Suppression Charge' - Run Script"), +(@ENTRY,0,3,0,25,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ymirheim Spear Gun - On Reset - Set Event Phase 1"); + +-- Actionlist SAI +SET @ENTRY := 3128000; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,15000,15000,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Set Event Phase 1"); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=18 AND `SourceGroup`=31884 AND `SourceEntry`=46598; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(18, 31884, 46598, 0, 0, 9, 0, 13310, 0, 0, 0, 0, 0, '', 'Required quest ''Assault by Ait'' active for spellclick'); diff --git a/sql/updates/world/2015_05_11_04_world.sql b/sql/updates/world/2015_05_11_04_world.sql new file mode 100644 index 00000000000..df59976ae41 --- /dev/null +++ b/sql/updates/world/2015_05_11_04_world.sql @@ -0,0 +1,26 @@ +-- +-- ONLY UPDATE FOR WOTLK 3.X - no cherrypick to 4.x, 5.x, 6.x +SET @GUID := 6245; -- Set by TDB team (4) +SET @POOL := 202482; -- Set by TDB team (1) + +DELETE FROM `gameobject` WHERE `id`=202083 AND `guid` BETWEEN @GUID+0 AND @GUID+3; +INSERT INTO `gameobject` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`animprogress`,`state`) VALUES +-- https://github.com/TrinityCore/TrinityCore/commit/205cb06df9c3535e186b2e7fae10c72ab5de9e3c +(@GUID+0,202083,0,1,1,-2944.48,-3277.68,62.27,3.32798,0,0,0.995661,-0.093059,18000,100,1), +-- https://www.youtube.com/watch?v=c1Dz_-ycIuU#t=124s +(@GUID+1,202083,0,1,1,-3000.93,-3329.01,64.9771,4.10851,0,0,0.885393,-0.464843,18000,100,1), +-- https://www.youtube.com/watch?v=yWSvwdNHspY#t=30s , https://www.youtube.com/watch?v=c1Dz_-ycIuU#t=95s +(@GUID+2,202083,0,1,1,-3020.76,-3245.81,58.8009,5.38478,0,0,0.434249,-0.900793,18000,100,1), +-- https://www.youtube.com/watch?v=f0rCteF0Ras#t=200s , https://www.youtube.com/watch?v=yWSvwdNHspY#t=30s +(@GUID+3,202083,0,1,1,-2992.36,-3188.19,55.1982,3.01524,0,0,0.998005,0.0631367,18000,100,1); + +DELETE FROM `pool_template` WHERE `entry`=@POOL; +INSERT INTO `pool_template` (`entry`,`max_limit`,`description`) VALUES +(@POOL,1,"Razormaw Matriarch's Nest (202083)"); + +DELETE FROM `pool_gameobject` WHERE `guid` IN (14999, @GUID+0, @GUID+1, @GUID+2, @GUID+3); +INSERT INTO `pool_gameobject` (`guid`,`pool_entry`,`chance`,`description`) VALUES +(14999,@POOL,25,"Razormaw Matriarch's Nest (202083) P1"), +(@GUID+0,@POOL,25,"Razormaw Matriarch's Nest (202083) P2"), +(@GUID+1,@POOL,25,"Razormaw Matriarch's Nest (202083) P3"), +(@GUID+2,@POOL,25,"Razormaw Matriarch's Nest (202083) P4"); diff --git a/sql/updates/world/2015_05_11_05_world.sql b/sql/updates/world/2015_05_11_05_world.sql new file mode 100644 index 00000000000..82bff616123 --- /dev/null +++ b/sql/updates/world/2015_05_11_05_world.sql @@ -0,0 +1,200 @@ +-- +-- Melizza Brimbuzzle SAI +SET @ENTRY := 12277; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,1,19,0,100,0,6132,0,0,0,53,0,@ENTRY*100+00,0,0,0,1,1,0,0,0,0,0,0,0,"Melizza Brimbuzzle - On Quest 'Get Me Out of Here!' Taken - Start Waypoint"), +(@ENTRY,0,1,12,61,0,100,0,6132,0,0,0,81,0,0,0,0,0,0,10,0,0,0,0,0,0,0,"Melizza Brimbuzzle - On Quest 'Get Me Out of Here!' Taken - Set Npc Flag "), +(@ENTRY,0,2,0,40,0,100,0,3,@ENTRY*100+00,0,0,1,0,0,0,0,0,0,21,20,0,0,0,0,0,0,"Melizza Brimbuzzle - On Waypoint 3 Reached - Say Line 0"), +(@ENTRY,0,3,4,40,0,100,0,58,@ENTRY*100+00,0,0,15,6132,0,0,0,0,0,17,0,30,0,0,0,0,0,"Melizza Brimbuzzle - On Waypoint 58 Reached - Quest Credit 'Get Me Out of Here!'"), +(@ENTRY,0,4,5,61,0,100,0,58,@ENTRY*100+00,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Melizza Brimbuzzle - On Waypoint 58 Reached - Say Line 1"), +(@ENTRY,0,5,6,61,0,100,0,58,@ENTRY*100+00,0,0,53,1,@ENTRY*100+01,0,0,0,0,1,0,0,0,0,0,0,0,"Melizza Brimbuzzle - On Waypoint 58 Reached - Start Waypoint"), +(@ENTRY,0,6,0,61,0,100,0,58,@ENTRY*100+00,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Melizza Brimbuzzle - On Waypoint 58 Reached - Set Active On"), +(@ENTRY,0,7,8,40,0,100,0,69,@ENTRY*100+01,0,0,54,10000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Melizza Brimbuzzle - On Waypoint 69 Reached - Pause Waypoint"), +(@ENTRY,0,8,0,61,0,100,0,69,@ENTRY*100+01,0,0,80,@ENTRY*100+00,0,0,0,0,0,1,0,0,0,0,0,0,0,"Melizza Brimbuzzle - On Waypoint 69 Reached - Run Script"), +(@ENTRY,0,9,0,40,0,100,0,93,@ENTRY*100+01,0,0,41,3000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Melizza Brimbuzzle - On Waypoint 93 Reached - Despawn In 3000 ms"), +(@ENTRY,0,10,13,11,0,100,0,0,0,0,0,81,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Melizza Brimbuzzle - On Respawn - Set Npc Flag Questgiver"), +(@ENTRY,0,11,0,40,0,100,1,57,@ENTRY*100+00,0,0,80,@ENTRY*100+01,0,0,0,0,0,1,0,0,0,0,0,0,0,"Melizza Brimbuzzle - On Waypoint 57 Reached - Run Script (No Repeat)"), +(@ENTRY,0,12,0,61,0,100,0,6132,0,0,0,2,250,0,0,0,0,0,1,0,0,0,0,0,0,0,"Melizza Brimbuzzle - On Quest 'Get Me Out of Here!' Taken - Set Faction 250"), +(@ENTRY,0,13,0,61,0,100,0,0,0,0,0,2,474,0,0,0,0,0,1,0,0,0,0,0,0,0,"Melizza Brimbuzzle - On Respawn - Set Faction 474"); + +-- Actionlist SAI +SET @ENTRY := 1227700; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,3000,3000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Say Line 2"), +(@ENTRY,9,1,0,0,0,100,0,3000,3000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Say Line 3"), +(@ENTRY,9,2,0,0,0,100,0,3000,3000,0,0,1,4,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Say Line 4"); + +-- Actionlist SAI +SET @ENTRY := 1227701; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,12,4655,7,0,0,0,0,8,0,0,0,-1382.56,2417.06,88.9714,2.46091,"Melizza Brimbuzzle - On Script - Summon Creature 'Maraudine Wrangler'"), +(@ENTRY,9,1,0,0,0,100,0,0,0,0,0,12,4655,7,0,0,0,0,8,0,0,0,-1406.39,2423.48,88.5732,0.20944,"Melizza Brimbuzzle - On Script - Summon Creature 'Maraudine Wrangler'"), +(@ENTRY,9,2,0,0,0,100,0,0,0,0,0,12,4655,7,0,0,0,0,8,0,0,0,-1394.38,2417.12,88.7675,0.959931,"Melizza Brimbuzzle - On Script - Summon Creature 'Maraudine Wrangler'"); + +DELETE FROM `creature_text` WHERE `entry`=12277; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextID`, `comment`) VALUES +(12277, 0, 0, 'Thanks $n. Now let''s get out of here!', 12, 0, 100, 0, 0, 0, 7540, 'Melizza Brimbuzzle'), +(12277, 1, 0, 'We made it! Thanks again! I''m going to run ahead!', 12, 0, 100, 0, 0, 0, 7544, 'Melizza Brimbuzzle'), +(12277, 2, 0, 'Hey Hornizz! I''m back! And there are some people behind me who helped me out of a jam.', 12, 0, 100, 0, 0, 0, 7550, 'Melizza Brimbuzzle'), +(12277, 3, 0, 'We''re going to have to scratch the Maraudines off our list. Too hard to work with...', 12, 0, 100, 0, 0, 0, 7551, 'Melizza Brimbuzzle'), +(12277, 4, 0, 'Well, I''m off to the Gelkis. They''re not as dumb as the Maraudines, but they''re more reasonable.', 12, 0, 100, 0, 0, 0, 7552, 'Melizza Brimbuzzle'); + +SET @PATH := 1227700; +SET @PATH_TWO := 1227701; +DELETE FROM `waypoints` WHERE `entry` IN (@PATH, @PATH_TWO); +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(@PATH,1,-1155.146,2709.409,111.2361,'Melizza Brimbuzzle'), +(@PATH,2,-1155.146,2709.409,111.2361,'Melizza Brimbuzzle'), +(@PATH,3,-1162.785,2712.464,111.5828,'Melizza Brimbuzzle'), +(@PATH,4,-1162.752,2712.397,111.6417,'Melizza Brimbuzzle'), +(@PATH,5,-1169.502,2711.397,112.3917,'Melizza Brimbuzzle'), +(@PATH,6,-1177.48,2710.258,112.1255,'Melizza Brimbuzzle'), +(@PATH,7,-1199.98,2702.508,111.6255,'Melizza Brimbuzzle'), +(@PATH,8,-1206.389,2700.128,111.496,'Melizza Brimbuzzle'), +(@PATH,9,-1248.919,2680.271,111.8919,'Melizza Brimbuzzle'), +(@PATH,10,-1272.489,2666.548,111.8956,'Melizza Brimbuzzle'), +(@PATH,11,-1288.82,2646.104,111.7111,'Melizza Brimbuzzle'), +(@PATH,12,-1290.413,2644.388,111.6542,'Melizza Brimbuzzle'), +(@PATH,13,-1290.413,2644.388,111.6542,'Melizza Brimbuzzle'), +(@PATH,14,-1290.413,2644.388,111.6542,'Melizza Brimbuzzle'), +(@PATH,15,-1309.874,2622.18,111.7776,'Melizza Brimbuzzle'), +(@PATH,16,-1309.908,2622.186,111.9743,'Melizza Brimbuzzle'), +(@PATH,17,-1323.898,2605.008,111.8986,'Melizza Brimbuzzle'), +(@PATH,18,-1336.769,2591.199,111.8607,'Melizza Brimbuzzle'), +(@PATH,19,-1349.322,2578.486,111.7647,'Melizza Brimbuzzle'), +(@PATH,20,-1359.602,2564.017,111.4906,'Melizza Brimbuzzle'), +(@PATH,21,-1361.852,2559.517,110.7406,'Melizza Brimbuzzle'), +(@PATH,22,-1362.352,2557.767,109.9906,'Melizza Brimbuzzle'), +(@PATH,23,-1363.102,2556.267,109.4906,'Melizza Brimbuzzle'), +(@PATH,24,-1364.602,2553.517,108.9906,'Melizza Brimbuzzle'), +(@PATH,25,-1365.352,2551.767,108.2406,'Melizza Brimbuzzle'), +(@PATH,26,-1366.102,2550.017,107.7406,'Melizza Brimbuzzle'), +(@PATH,27,-1366.477,2549.685,107.5719,'Melizza Brimbuzzle'), +(@PATH,28,-1366.727,2549.185,107.0719,'Melizza Brimbuzzle'), +(@PATH,29,-1367.227,2547.185,106.8219,'Melizza Brimbuzzle'), +(@PATH,30,-1367.727,2545.185,106.0719,'Melizza Brimbuzzle'), +(@PATH,31,-1368.477,2543.435,105.3219,'Melizza Brimbuzzle'), +(@PATH,32,-1368.977,2541.435,104.5719,'Melizza Brimbuzzle'), +(@PATH,33,-1369.477,2539.435,103.8219,'Melizza Brimbuzzle'), +(@PATH,34,-1370.227,2536.685,103.3219,'Melizza Brimbuzzle'), +(@PATH,35,-1370.977,2534.685,102.5719,'Melizza Brimbuzzle'), +(@PATH,36,-1371.227,2532.935,102.0719,'Melizza Brimbuzzle'), +(@PATH,37,-1371.727,2531.185,101.3219,'Melizza Brimbuzzle'), +(@PATH,38,-1372.227,2529.185,100.8219,'Melizza Brimbuzzle'), +(@PATH,39,-1372.977,2527.185,100.0719,'Melizza Brimbuzzle'), +(@PATH,40,-1373.727,2524.435,99.32188,'Melizza Brimbuzzle'), +(@PATH,41,-1374.227,2522.435,98.57188,'Melizza Brimbuzzle'), +(@PATH,42,-1374.727,2520.685,97.82188,'Melizza Brimbuzzle'), +(@PATH,43,-1375.477,2518.685,97.32188,'Melizza Brimbuzzle'), +(@PATH,44,-1375.639,2518.402,97.00177,'Melizza Brimbuzzle'), +(@PATH,45,-1375.889,2517.152,96.75177,'Melizza Brimbuzzle'), +(@PATH,46,-1376.389,2515.152,96.00177,'Melizza Brimbuzzle'), +(@PATH,47,-1376.889,2513.402,95.25177,'Melizza Brimbuzzle'), +(@PATH,48,-1378.139,2509.402,93.75177,'Melizza Brimbuzzle'), +(@PATH,49,-1378.389,2507.652,93.00177,'Melizza Brimbuzzle'), +(@PATH,50,-1379.139,2504.902,92.50177,'Melizza Brimbuzzle'), +(@PATH,51,-1379.889,2501.902,91.75177,'Melizza Brimbuzzle'), +(@PATH,52,-1380.389,2500.152,91.25177,'Melizza Brimbuzzle'), +(@PATH,53,-1381.389,2496.152,90.50177,'Melizza Brimbuzzle'), +(@PATH,54,-1381.559,2495.931,90.14986,'Melizza Brimbuzzle'), +(@PATH,55,-1381.809,2495.431,90.14986,'Melizza Brimbuzzle'), +(@PATH,56,-1382.309,2491.431,89.64986,'Melizza Brimbuzzle'), +(@PATH,57,-1385.493,2471.513,89.11208,'Melizza Brimbuzzle'), +(@PATH,58,-1386.618,2405.71,89.767,'Melizza Brimbuzzle'), +(@PATH_TWO,1,-1385.368,2401.21,90.267,'Melizza Brimbuzzle'), +(@PATH_TWO,2,-1383.618,2395.46,90.767,'Melizza Brimbuzzle'), +(@PATH_TWO,3,-1382.118,2390.71,91.517,'Melizza Brimbuzzle'), +(@PATH_TWO,4,-1377.252,2375.137,91.91622,'Melizza Brimbuzzle'), +(@PATH_TWO,5,-1373.759,2355.208,92.06256,'Melizza Brimbuzzle'), +(@PATH_TWO,6,-1366.36,2323.406,91.9967,'Melizza Brimbuzzle'), +(@PATH_TWO,7,-1362.618,2277.267,91.79288,'Melizza Brimbuzzle'), +(@PATH_TWO,8,-1358.118,2257.017,91.54288,'Melizza Brimbuzzle'), +(@PATH_TWO,9,-1354.14,2239.229,91.62033,'Melizza Brimbuzzle'), +(@PATH_TWO,10,-1352.89,2229.729,92.12033,'Melizza Brimbuzzle'), +(@PATH_TWO,11,-1350.869,2214.848,91.63843,'Melizza Brimbuzzle'), +(@PATH_TWO,12,-1351.869,2210.848,90.88843,'Melizza Brimbuzzle'), +(@PATH_TWO,13,-1352.119,2209.848,90.13843,'Melizza Brimbuzzle'), +(@PATH_TWO,14,-1352.619,2208.098,89.13843,'Melizza Brimbuzzle'), +(@PATH_TWO,15,-1352.869,2207.098,87.88843,'Melizza Brimbuzzle'), +(@PATH_TWO,16,-1353.119,2206.098,86.38843,'Melizza Brimbuzzle'), +(@PATH_TWO,17,-1353.369,2205.348,85.38843,'Melizza Brimbuzzle'), +(@PATH_TWO,18,-1353.619,2204.348,84.38843,'Melizza Brimbuzzle'), +(@PATH_TWO,19,-1354.119,2202.348,83.63843,'Melizza Brimbuzzle'), +(@PATH_TWO,20,-1354.369,2201.348,82.88843,'Melizza Brimbuzzle'), +(@PATH_TWO,21,-1354.619,2200.598,82.13843,'Melizza Brimbuzzle'), +(@PATH_TWO,22,-1354.869,2199.598,81.38843,'Melizza Brimbuzzle'), +(@PATH_TWO,23,-1355.119,2198.598,80.63843,'Melizza Brimbuzzle'), +(@PATH_TWO,24,-1355.119,2197.598,79.88843,'Melizza Brimbuzzle'), +(@PATH_TWO,25,-1355.619,2195.598,78.88843,'Melizza Brimbuzzle'), +(@PATH_TWO,26,-1356.119,2193.848,77.88843,'Melizza Brimbuzzle'), +(@PATH_TWO,27,-1356.619,2191.848,77.13843,'Melizza Brimbuzzle'), +(@PATH_TWO,28,-1357.619,2188.848,76.38843,'Melizza Brimbuzzle'), +(@PATH_TWO,29,-1355.239,2198.246,80.43513,'Melizza Brimbuzzle'), +(@PATH_TWO,30,-1355.489,2197.246,79.68513,'Melizza Brimbuzzle'), +(@PATH_TWO,31,-1355.989,2195.496,78.68513,'Melizza Brimbuzzle'), +(@PATH_TWO,32,-1356.489,2193.496,77.68513,'Melizza Brimbuzzle'), +(@PATH_TWO,33,-1356.989,2191.496,76.93513,'Melizza Brimbuzzle'), +(@PATH_TWO,34,-1357.739,2188.746,76.18513,'Melizza Brimbuzzle'), +(@PATH_TWO,35,-1357.989,2187.496,75.68513,'Melizza Brimbuzzle'), +(@PATH_TWO,36,-1358.739,2185.746,75.18513,'Melizza Brimbuzzle'), +(@PATH_TWO,37,-1359.239,2183.746,74.43513,'Melizza Brimbuzzle'), +(@PATH_TWO,38,-1359.989,2181.996,73.68513,'Melizza Brimbuzzle'), +(@PATH_TWO,39,-1360.489,2179.996,72.93513,'Melizza Brimbuzzle'), +(@PATH_TWO,40,-1361.489,2177.246,72.18513,'Melizza Brimbuzzle'), +(@PATH_TWO,41,-1362.239,2175.246,71.68513,'Melizza Brimbuzzle'), +(@PATH_TWO,42,-1362.739,2173.496,70.93513,'Melizza Brimbuzzle'), +(@PATH_TWO,43,-1363.239,2171.746,70.43513,'Melizza Brimbuzzle'), +(@PATH_TWO,44,-1363.739,2169.746,69.68513,'Melizza Brimbuzzle'), +(@PATH_TWO,45,-1364.739,2166.996,68.68513,'Melizza Brimbuzzle'), +(@PATH_TWO,46,-1365.489,2164.996,67.68513,'Melizza Brimbuzzle'), +(@PATH_TWO,47,-1365.989,2163.246,66.68513,'Melizza Brimbuzzle'), +(@PATH_TWO,48,-1366.739,2161.246,65.93513,'Melizza Brimbuzzle'), +(@PATH_TWO,49,-1367.489,2159.496,64.68513,'Melizza Brimbuzzle'), +(@PATH_TWO,50,-1367.989,2157.496,63.93513,'Melizza Brimbuzzle'), +(@PATH_TWO,51,-1368.989,2154.746,63.18513,'Melizza Brimbuzzle'), +(@PATH_TWO,52,-1369.739,2152.746,62.43513,'Melizza Brimbuzzle'), +(@PATH_TWO,53,-1370.239,2150.996,61.68513,'Melizza Brimbuzzle'), +(@PATH_TWO,54,-1370.989,2148.996,60.93513,'Melizza Brimbuzzle'), +(@PATH_TWO,55,-1369.163,2154.362,62.88633,'Melizza Brimbuzzle'), +(@PATH_TWO,56,-1369.913,2152.612,62.63633,'Melizza Brimbuzzle'), +(@PATH_TWO,57,-1370.413,2150.612,61.63633,'Melizza Brimbuzzle'), +(@PATH_TWO,58,-1371.163,2148.862,61.13633,'Melizza Brimbuzzle'), +(@PATH_TWO,59,-1371.663,2147.612,60.63633,'Melizza Brimbuzzle'), +(@PATH_TWO,60,-1374.663,2142.362,60.13633,'Melizza Brimbuzzle'), +(@PATH_TWO,61,-1381.413,2131.612,60.88633,'Melizza Brimbuzzle'), +(@PATH_TWO,62,-1387.413,2121.362,61.38633,'Melizza Brimbuzzle'), +(@PATH_TWO,63,-1391.413,2114.362,62.13633,'Melizza Brimbuzzle'), +(@PATH_TWO,64,-1395.163,2108.362,62.63633,'Melizza Brimbuzzle'), +(@PATH_TWO,65,-1391.807,2114.246,61.76419,'Melizza Brimbuzzle'), +(@PATH_TWO,66,-1395.307,2108.246,62.26419,'Melizza Brimbuzzle'), +(@PATH_TWO,67,-1396.307,2106.496,62.51419,'Melizza Brimbuzzle'), +(@PATH_TWO,68,-1404.391,2088.967,62.0089,'Melizza Brimbuzzle'), +(@PATH_TWO,69,-1405.748,2087.39,62.09642,'Melizza Brimbuzzle'), +(@PATH_TWO,70,-1407.248,2086.89,62.09642,'Melizza Brimbuzzle'), +(@PATH_TWO,71,-1408.248,2086.89,62.34642,'Melizza Brimbuzzle'), +(@PATH_TWO,72,-1410.498,2086.39,62.34642,'Melizza Brimbuzzle'), +(@PATH_TWO,73,-1412.498,2086.39,62.59642,'Melizza Brimbuzzle'), +(@PATH_TWO,74,-1413.998,2085.39,62.59642,'Melizza Brimbuzzle'), +(@PATH_TWO,75,-1415.498,2083.39,62.59642,'Melizza Brimbuzzle'), +(@PATH_TWO,76,-1416.498,2082.39,62.59642,'Melizza Brimbuzzle'), +(@PATH_TWO,77,-1417.498,2079.39,62.59642,'Melizza Brimbuzzle'), +(@PATH_TWO,78,-1417.998,2077.39,62.59642,'Melizza Brimbuzzle'), +(@PATH_TWO,79,-1419.998,2075.14,62.59642,'Melizza Brimbuzzle'), +(@PATH_TWO,80,-1424.748,2073.14,62.34642,'Melizza Brimbuzzle'), +(@PATH_TWO,81,-1418.114,2077.1,62.59175,'Melizza Brimbuzzle'), +(@PATH_TWO,82,-1420.364,2075.35,62.59175,'Melizza Brimbuzzle'), +(@PATH_TWO,83,-1425.114,2073.1,62.34175,'Melizza Brimbuzzle'), +(@PATH_TWO,84,-1425.114,2075.1,62.34175,'Melizza Brimbuzzle'), +(@PATH_TWO,85,-1436.864,2074.35,62.84175,'Melizza Brimbuzzle'), +(@PATH_TWO,86,-1451.277,2073.542,62.70998,'Melizza Brimbuzzle'), +(@PATH_TWO,87,-1464.777,2075.542,62.95998,'Melizza Brimbuzzle'), +(@PATH_TWO,88,-1465.031,2075.661,62.89689,'Melizza Brimbuzzle'), +(@PATH_TWO,89,-1473.031,2077.161,63.14689,'Melizza Brimbuzzle'), +(@PATH_TWO,90,-1480.031,2086.411,62.39689,'Melizza Brimbuzzle'), +(@PATH_TWO,91,-1485.531,2093.411,61.89689,'Melizza Brimbuzzle'), +(@PATH_TWO,92,-1485.639,2093.875,61.82396,'Melizza Brimbuzzle'), +(@PATH_TWO,93,-1487.889,2096.375,61.82396,'Melizza Brimbuzzle'); diff --git a/sql/updates/world/2015_05_11_06_world.sql b/sql/updates/world/2015_05_11_06_world.sql new file mode 100644 index 00000000000..f4a5fe6dd0a --- /dev/null +++ b/sql/updates/world/2015_05_11_06_world.sql @@ -0,0 +1,17 @@ +SET @Oguid=5638; -- 2 free Gob guid set by TC +DELETE FROM `areatrigger_scripts` WHERE `entry` IN (3746, 3766); +INSERT INTO `areatrigger_scripts` VALUES (3746,'SmartTrigger'), (3766,'SmartTrigger'); +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (3746, 3766) AND `source_type`=2; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(3746, 2, 0, 0, 46, 0, 100, 0, 3746, 0, 0, 0, 70, 7200, 0, 0, 0, 0, 0, 14, @Oguid+1, 180024, 0, 0, 0, 0, 0, 'Area Trigger 3746 - On Trigger - Respawn Mysterious Deadmines Chest'), +(3766, 2, 0, 0, 46, 0, 100, 0, 3766, 0, 0, 0, 70, 7200, 0, 0, 0, 0, 0, 14, @Oguid, 180055, 0, 0, 0, 0, 0, 'Area Trigger 3746 - On Trigger - Respawn Mysterious Wailing Caverns'); +DELETE FROM `gameobject` WHERE `id` IN (180055, 180024); +INSERT INTO `gameobject` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`animprogress`,`state`) VALUES +(@Oguid,180055,43,1,1,-97.6,173.8,-79,2.08,0,0,0.862404,0.50622,-1,100,1), +(@Oguid+1,180024,36,1,1,-32.1232,-374.64,59.06,3.0820,0,0,0.879275,-0.476315,-1,100,1); +DELETE FROM `gameobject_questender` WHERE `id`=180055 AND `quest`=7944; +INSERT INTO `gameobject_questender` (`id`,`quest`) VALUES (180055,7944); +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry` IN (3766,3746) AND `SourceId`=2; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22,1,3746,2,0,28,0,7938,0,0,0,0,'','SAI areatrigger 3746 triggers only if player has the quest 7938'), +(22,1,3766,2,0,28,0,7944,0,0,0,0,'','SAI areatrigger 3766 triggers only if player has the quest 7944'); diff --git a/sql/updates/world/2015_05_11_07_world.sql b/sql/updates/world/2015_05_11_07_world.sql new file mode 100644 index 00000000000..e35aa8e454b --- /dev/null +++ b/sql/updates/world/2015_05_11_07_world.sql @@ -0,0 +1,7 @@ +-- +-- Pit-Fighting Spectator SAI +SET @ENTRY := 26869; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,0,2000,6000,10000,20000,10,4,21,6,11,0,0,1,0,0,0,0,0,0,0,"Pit-Fighting Spectator - Out of Combat - Play Random Emote (4, 21, 6, 11)"); diff --git a/sql/updates/world/2015_05_11_08_world.sql b/sql/updates/world/2015_05_11_08_world.sql new file mode 100644 index 00000000000..d6bcc834780 --- /dev/null +++ b/sql/updates/world/2015_05_11_08_world.sql @@ -0,0 +1,99 @@ +-- Conquest Hold Legionnaire +SET @NPC := 116284; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3222.422,`position_y`=-2261.431,`position_z`=112.903 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3222.422,-2261.431,112.903,0,0,0,0,100,0), +(@PATH,2,3223.03,-2264.1,112.1124,0,0,0,0,100,0), +(@PATH,3,3223.781,-2267.022,111.1831,0,0,0,0,100,0), +(@PATH,4,3224.569,-2267.831,111.0135,0,0,0,0,100,0), +(@PATH,5,3226.668,-2270.648,110.3546,0,0,0,0,100,0), +(@PATH,6,3229.054,-2274.084,109.3319,0,0,0,0,100,0), +(@PATH,7,3230.216,-2275.468,109.1555,0,0,0,0,100,0), +(@PATH,8,3232.466,-2278.367,108.6153,0,0,0,0,100,0), +(@PATH,9,3234.924,-2280.143,108.2696,0,0,0,0,100,0), +(@PATH,10,3237.392,-2281.926,108.2696,0,0,0,0,100,0), +(@PATH,11,3239.848,-2283.7,108.2879,0,0,0,0,100,0), +(@PATH,12,3240.568,-2283.284,108.2696,0,0,0,0,100,0), +(@PATH,13,3243.724,-2282.795,108.3946,0,0,0,0,100,0), +(@PATH,14,3246.881,-2282.306,108.3946,0,0,0,0,100,0), +(@PATH,15,3250.019,-2281.82,108.5137,0,0,0,0,100,0), +(@PATH,16,3253.206,-2281.326,108.5008,0,0,0,0,100,0), +(@PATH,17,3255.859,-2280.714,108.5196,0,0,0,0,100,0), +(@PATH,18,3258.817,-2279.989,108.4834,0,0,0,0,100,0), +(@PATH,19,3261.763,-2279.267,108.3458,0,0,0,0,100,0), +(@PATH,20,3264.564,-2278.554,108.5305,0,0,0,0,100,0), +(@PATH,21,3267.448,-2277.735,108.8179,0,0,0,0,100,0), +(@PATH,22,3269.372,-2277.215,109.3157,0,0,0,0,100,0), +(@PATH,23,3273.088,-2276.127,109.8022,0,0,0,0,100,0), +(@PATH,24,3277.416,-2276.224,109.3619,0,0,0,0,100,0), +(@PATH,25,3280.093,-2277.505,108.8861,0,0,0,0,100,0), +(@PATH,26,3282.834,-2278.816,108.7433,0,0,0,0,100,0), +(@PATH,27,3285.509,-2280.093,109.0773,0,0,0,0,100,0), +(@PATH,28,3287.798,-2280.42,109.6238,0,0,0,0,100,0), +(@PATH,29,3289.805,-2280.55,110.2963,0,0,0,0,100,0), +(@PATH,30,3291.436,-2282.21,110.212,0,0,0,0,100,0), +(@PATH,31,3293.136,-2279.585,110.3022,0,0,0,0,100,0), +(@PATH,32,3294.828,-2276.973,110.6279,0,0,0,0,100,0), +(@PATH,33,3296.068,-2275.338,110.8585,0,0,0,0,100,0), +(@PATH,34,3296.431,-2272.337,111.0591,0,0,0,0,100,0), +(@PATH,35,3296.789,-2269.371,111.363,0,0,0,0,100,0), +(@PATH,36,3297.156,-2266.315,111.6388,0,0,0,0,100,0), +(@PATH,37,3297.624,-2263.012,111.854,0,0,0,0,100,0), +(@PATH,38,3298.611,-2260.142,111.9759,0,0,0,0,100,0), +(@PATH,39,3299.594,-2257.286,112.3186,0,0,0,0,100,0), +(@PATH,40,3300.581,-2254.429,112.6177,0,0,0,0,100,0), +(@PATH,41,3300.73,-2253.996,112.6697,0,0,0,0,100,0), +(@PATH,42,3300.506,-2254.651,112.5911,0,0,0,0,100,0), +(@PATH,43,3303.751,-2259.06,112.062,0,0,0,0,100,0), +(@PATH,44,3303.142,-2262.008,111.7082,0,0,0,0,100,0), +(@PATH,45,3302.529,-2264.978,111.4768,0,0,0,0,100,0), +(@PATH,46,3301.917,-2267.939,111.3507,0,0,0,0,100,0), +(@PATH,47,3301.307,-2270.89,110.9967,0,0,0,0,100,0), +(@PATH,48,3300.701,-2273.825,110.6447,0,0,0,0,100,0), +(@PATH,49,3300.092,-2276.787,110.3161,0,0,0,0,100,0), +(@PATH,50,3297.877,-2280.104,110.3195,0,0,0,0,100,0), +(@PATH,51,3295.698,-2282.238,110.1211,0,0,0,0,100,0), +(@PATH,52,3291.665,-2283.44,110.1146,0,0,0,0,100,0), +(@PATH,53,3288.628,-2283.25,109.6978,0,0,0,0,100,0), +(@PATH,54,3286.963,-2283.097,109.5514,0,0,0,0,100,0), +(@PATH,55,3284.762,-2282.979,108.7865,0,0,0,0,100,0), +(@PATH,56,3281.819,-2282.813,107.6871,0,0,0,0,100,0), +(@PATH,57,3279.023,-2282.41,106.843,0,0,0,0,100,0), +(@PATH,58,3273.752,-2281.361,107.249,0,0,0,0,100,0), +(@PATH,59,3272.823,-2281.124,107.9806,0,0,0,0,100,0), +(@PATH,60,3269.315,-2280.155,108.8164,0,0,0,0,100,0), +(@PATH,61,3266.359,-2279.441,108.5643,0,0,0,0,100,0), +(@PATH,62,3261.786,-2278.462,108.5415,0,0,0,0,100,0), +(@PATH,63,3260.874,-2277.872,108.6126,0,0,0,0,100,0), +(@PATH,64,3258.454,-2279.771,108.5095,0,0,0,0,100,0), +(@PATH,65,3256.032,-2281.672,108.5072,0,0,0,0,100,0), +(@PATH,66,3253.73,-2283.478,108.3147,0,0,0,0,100,0), +(@PATH,67,3249.822,-2284.479,108.1946,0,0,0,0,100,0), +(@PATH,68,3246.836,-2284.902,108.1438,0,0,0,0,100,0), +(@PATH,69,3243.795,-2285.332,108.0923,0,0,0,0,100,0), +(@PATH,70,3240.329,-2284.271,108.2195,0,0,0,0,100,0), +(@PATH,71,3237.559,-2282.833,108.1446,0,0,0,0,100,0), +(@PATH,72,3234.771,-2281.385,108.2696,0,0,0,0,100,0), +(@PATH,73,3231.993,-2279.943,108.3994,0,0,0,0,100,0), +(@PATH,74,3229.22,-2278.504,108.7801,0,0,0,0,100,0), +(@PATH,75,3226.602,-2277.155,108.8858,0,0,0,0,100,0), +(@PATH,76,3224.147,-2273.925,109.3004,0,0,0,0,100,0), +(@PATH,77,3223.178,-2271.634,109.9661,0,0,0,0,100,0), +(@PATH,78,3222.1,-2269.727,110.5905,0,0,0,0,100,0), +(@PATH,79,3220.919,-2266.938,111.1347,0,0,0,0,100,0), +(@PATH,80,3219.873,-2264.861,111.7715,0,0,0,0,100,0), +(@PATH,81,3219.09,-2262.018,113.0721,0,0,0,0,100,0), +(@PATH,82,3218.371,-2259.129,113.9729,0,0,0,0,100,0), +(@PATH,83,3217.72,-2256.449,114.2141,0,0,0,0,100,0), +(@PATH,84,3217.931,-2257.32,114.1792,0,0,0,0,100,0), +(@PATH,85,3221.369,-2258.965,113.6241,0,0,0,0,100,0), +(@PATH,86,3222.448,-2261.465,112.8751,0,0,0,0,100,0); + +DELETE FROM `creature_formations` WHERE `leaderGUID`=116284; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES +(116284, 116284, 0, 0, 2, 0, 0), +(116284, 116285, 3, 90, 0, 0, 0); diff --git a/sql/updates/world/2015_05_12_01_world.sql b/sql/updates/world/2015_05_12_01_world.sql new file mode 100644 index 00000000000..4d9ce60f51c --- /dev/null +++ b/sql/updates/world/2015_05_12_01_world.sql @@ -0,0 +1,2 @@ +UPDATE `gameobject_template` SET `flags`=34 WHERE `entry`=177192; +UPDATE `gameobject_template` SET `faction`=114 WHERE `entry` IN(179504,179505); diff --git a/sql/updates/world/2015_05_12_02_world.sql b/sql/updates/world/2015_05_12_02_world.sql new file mode 100644 index 00000000000..02f95b73494 --- /dev/null +++ b/sql/updates/world/2015_05_12_02_world.sql @@ -0,0 +1,522 @@ +-- Grizzlyhills Pathing/Events -1 +SET @NPC := 105919; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2659.377,`position_y`=-2080.199,`position_z`=4.346071 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2659.377,-2080.199,4.346071,0,0,0,0,100,0), +(@PATH,2,2666.377,-2073.199,4.346071,0,0,0,0,100,0), +(@PATH,3,2670.377,-2068.949,4.346071,0,0,0,0,100,0), +(@PATH,4,2672.989,-2066.296,4.340314,0,0,0,0,100,0), +(@PATH,5,2675.489,-2062.546,4.340314,0,0,0,0,100,0), +(@PATH,6,2677.239,-2060.296,4.340314,0,0,0,0,100,0), +(@PATH,7,2678.989,-2057.796,4.340314,0,0,0,0,100,0), +(@PATH,8,2677.343,-2060.426,4.340314,0,0,0,0,100,0), +(@PATH,9,2675.593,-2062.676,4.340314,0,0,0,0,100,0), +(@PATH,10,2672.564,-2066.647,4.346634,0,0,0,0,100,0), +(@PATH,11,2670.314,-2068.897,4.346634,0,0,0,0,100,0), +(@PATH,12,2666.814,-2072.397,4.346634,0,0,0,0,100,0), +(@PATH,13,2659.411,-2080.233,4.331409,0,0,0,0,100,0), +(@PATH,14,2654.911,-2084.233,4.331409,0,0,0,0,100,0), +(@PATH,15,2653.411,-2085.733,4.331409,0,0,0,0,100,0), +(@PATH,16,2648.899,-2089.858,4.311839,0,0,0,0,100,0), +(@PATH,17,2646.649,-2091.858,4.311839,0,0,0,0,100,0), +(@PATH,18,2643.899,-2094.108,4.311839,0,0,0,0,100,0), +(@PATH,19,2640.707,-2096.753,4.415871,0,0,0,0,100,0), +(@PATH,20,2638.457,-2098.503,4.415871,0,0,0,0,100,0), +(@PATH,21,2634.457,-2101.253,5.165871,0,0,0,0,100,0), +(@PATH,22,2634.269,-2101.723,5.301712,0,0,0,0,100,0), +(@PATH,23,2632.769,-2102.723,5.551712,0,0,0,0,100,0), +(@PATH,24,2629.269,-2105.473,6.301712,0,0,0,0,100,0), +(@PATH,25,2629.244,-2105.614,6.409963,0,0,0,0,100,0), +(@PATH,26,2633.158,-2102.466,5.38058,0,0,0,0,100,0), +(@PATH,27,2634.658,-2101.466,5.13058,0,0,0,0,100,0), +(@PATH,28,2638.408,-2098.466,4.38058,0,0,0,0,100,0); + +-- Pathing for Entry: 27501 'TDB FORMAT' +SET @NPC := 105928; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2650.357,`position_y`=-2025.178,`position_z`=4.323929 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2650.357,-2025.178,4.323929,0,0,0,0,100,0), +(@PATH,2,2653.107,-2027.178,4.323929,0,0,0,0,100,0), +(@PATH,3,2661.607,-2033.178,4.323929,0,0,0,0,100,0), +(@PATH,4,2664.357,-2035.323,4.346634,0,0,0,0,100,0), +(@PATH,5,2666.857,-2037.323,4.346634,0,0,0,0,100,0), +(@PATH,6,2666.913,-2037.288,4.346634,0,0,0,0,100,0), +(@PATH,7,2664.103,-2035.223,4.346634,0,0,0,0,100,0), +(@PATH,8,2661.603,-2033.223,4.346634,0,0,0,0,100,0), +(@PATH,9,2652.902,-2026.893,4.187136,0,0,0,0,100,0), +(@PATH,10,2650.152,-2024.893,4.187136,0,0,0,0,100,0), +(@PATH,11,2646.152,-2022.143,4.187136,0,0,0,0,100,0), +(@PATH,12,2644.652,-2021.143,3.937136,0,0,0,0,100,0), +(@PATH,13,2641.632,-2018.958,4.027632,0,0,0,0,100,0), +(@PATH,14,2641.649,-2019.105,3.777639,0,0,0,0,100,0), +(@PATH,15,2641.879,-2019.022,3.937136,0,0,0,0,100,0), +(@PATH,16,2644.629,-2021.022,3.937136,0,0,0,0,100,0), +(@PATH,17,2645.879,-2022.022,4.187136,0,0,0,0,100,0), +(@PATH,18,2650.129,-2025.022,4.187136,0,0,0,0,100,0); + +-- Pathing for Entry: 27501 'TDB FORMAT' +SET @NPC := 105904; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2606.301,`position_y`=-2092.257,`position_z`=7.300018 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2606.301,-2092.257,7.300018,0,0,0,0,100,0), +(@PATH,2,2614.706,-2104.54,7.32203,0,0,0,0,100,0), +(@PATH,3,2614.56,-2104.616,7.087479,0,0,0,0,100,0), +(@PATH,4,2614.464,-2104.489,7.307891,0,0,0,0,100,0), +(@PATH,5,2606.464,-2092.739,7.307891,0,0,0,0,100,0), +(@PATH,6,2606.129,-2092.514,7.232858,0,0,0,0,100,0), +(@PATH,7,2605.879,-2092.014,7.232858,0,0,0,0,100,0), +(@PATH,8,2603.379,-2088.014,6.982858,0,0,0,0,100,0), +(@PATH,9,2599.288,-2081.792,7.103763,0,0,0,0,100,0), +(@PATH,10,2596.038,-2076.792,7.103763,0,0,0,0,100,0), +(@PATH,11,2593.906,-2073.879,6.877389,0,0,0,0,100,0), +(@PATH,12,2592.156,-2070.879,6.877389,0,0,0,0,100,0), +(@PATH,13,2591.965,-2070.718,6.863516,0,0,0,0,100,0), +(@PATH,14,2594.261,-2073.978,6.842519,0,0,0,0,100,0), +(@PATH,15,2595.761,-2076.728,7.092519,0,0,0,0,100,0), +(@PATH,16,2599.636,-2081.92,7.189054,0,0,0,0,100,0), +(@PATH,17,2603.386,-2087.92,7.189054,0,0,0,0,100,0); + +-- Westfall Brigade Marine SAI +SET @ENTRY := 27501; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,0,10000,10000,10000,10000,49,0,0,0,0,0,0,19,27500,10,0,0,0,0,0,"Westfall Brigade Marine - Out of Combat - Start Attacking"); + +-- Conquest Hold Berserker SAI +SET @ENTRY := 27500; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id`=2; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,2,0,1,0,100,0,10000,10000,10000,10000,49,0,0,0,0,0,0,19,27501,10,0,0,0,0,0,"Conquest Hold Berserker - Out of Combat - Start Attacking"); + +UPDATE `creature_template` SET `AIName`="" WHERE `entry`=27131; +-- Grizzly Bear SAI +SET @ENTRY := 27131; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,0,10000,15000,10000,15000,80,@ENTRY*100+00,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grizzly Bear - Out of Combat - Run Script"); + +-- Actionlist SAI +SET @ENTRY := 2713100; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,21,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grizzly Bear - On Script - Enable Combat Movement"), +(@ENTRY,9,1,0,0,0,100,0,1000,1000,0,0,5,7,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grizzly Bear - On Script - Play Emote 7"), +(@ENTRY,9,2,0,0,0,100,0,2000,2000,0,0,5,7,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grizzly Bear - On Script - Play Emote 7"), +(@ENTRY,9,3,0,0,0,100,0,2000,2000,0,0,21,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grizzly Bear - On Script - Disable Combat Movement"), +(@ENTRY,9,4,0,0,0,100,0,0,0,0,0,89,7,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grizzly Bear - On Script - Start Random Movement"); + +-- allow movement +UPDATE `smart_scripts` SET `action_param1`=1 WHERE `entryorguid` IN (27259, 26679) AND `source_type`=0 AND `id`=0 AND `link`=0; +-- Dragonflayer Flamebinder SAI +SET @ENTRY := 27259; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id`=14; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,14,0,1,0,100,0,5000,8000,5000,8000,11,48213,0,0,0,0,0,19,26785,25,0,0,0,0,0,"Dragonflayer Flamebinder - Out of Combat - Cast 'Dragonflayer Crone Fire'"); + + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceGroup`=1 AND `SourceEntry`=48213; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, 48213, 0, 0, 31, 0, 3, 26785, 0, 0, 0, 0, '', 'Flame - only targets Bunny'); + +DELETE FROM `creature_addon` WHERE `guid` IN (103389, 103390, 107363, 110490, 107373, 110493, 11049, 110494, 110492, 116277, 116275, 116274, 116276, 116278, 110489); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(116277,0,0,8,1,0, ''), +(116275,0,0,8,1,0, ''), +(116274,0,0,8,1,0, ''), +(116276,0,0,8,1,0, ''), +(116278,0,0,8,1,0, ''), +(110489,0,0,0,1,214, ''), +(110492,0,0,0,1,214, ''), +(110494,0,0,0,1,214, ''), +(110490,0,0,0,1,214, ''), +(110493,0,0,0,1,214, ''), +(107363,0,0,1,1,0, ''), +(103389,0,0,0,1,1, ''), +(103390,0,0,0,1,1, ''), +(107373,0,0,1,1,0, ''); + +-- Graymist Hunter SAI +SET @ENTRY := 26592; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id`=1; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,1,0,1,0,100,0,15000,20000,15000,20000,5,53,0,0,0,0,0,1,0,0,0,0,0,0,0,"Graymist Hunter - Out of Combat - Play Emote 53"); + +-- Pathing for Entry: 26679 'TDB FORMAT' +SET @NPC := 100911; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4346.669,`position_y`=-2484.654,`position_z`=240.982 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,4346.669,-2484.654,240.982,0,0,0,0,100,0), +(@PATH,2,4347.169,-2484.904,240.982,0,0,0,0,100,0), +(@PATH,3,4348.169,-2488.654,241.982,0,0,0,0,100,0), +(@PATH,4,4349.169,-2492.404,242.232,0,0,0,0,100,0), +(@PATH,5,4350.169,-2495.154,242.982,0,0,0,0,100,0), +(@PATH,6,4351.169,-2498.904,243.732,0,0,0,0,100,0), +(@PATH,7,4352.729,-2503.633,244.4913,0,0,0,0,100,0), +(@PATH,8,4352.479,-2508.633,244.7413,0,0,0,0,100,0), +(@PATH,9,4352.229,-2516.383,245.4913,0,0,0,0,100,0), +(@PATH,10,4352.513,-2516.505,245.5218,0,0,0,0,100,0), +(@PATH,11,4352.513,-2519.755,245.5218,0,0,0,0,100,0), +(@PATH,12,4353.422,-2530.827,245.4402,0,0,0,0,100,0), +(@PATH,13,4353.167,-2531.085,245.3185,0,0,0,0,100,0), +(@PATH,14,4353.443,-2530.941,245.3693,0,0,0,0,100,0), +(@PATH,15,4352.554,-2519.469,245.4435,0,0,0,0,100,0), +(@PATH,16,4352.554,-2508.719,244.9435,0,0,0,0,100,0), +(@PATH,17,4352.496,-2503.444,244.2976,0,0,0,0,100,0), +(@PATH,18,4351.496,-2499.694,243.5476,0,0,0,0,100,0), +(@PATH,19,4350.246,-2495.944,243.0476,0,0,0,0,100,0), +(@PATH,20,4349.746,-2493.194,242.5476,0,0,0,0,100,0), +(@PATH,21,4348.746,-2490.194,242.0476,0,0,0,0,100,0), +(@PATH,22,4347.996,-2487.444,241.2976,0,0,0,0,100,0), +(@PATH,23,4346.94,-2484.907,240.7707,0,0,0,0,100,0), +(@PATH,24,4343.19,-2483.907,240.2707,0,0,0,0,100,0), +(@PATH,25,4339.44,-2482.907,239.7707,0,0,0,0,100,0), +(@PATH,26,4339.217,-2482.614,239.4836,0,0,0,0,100,0), +(@PATH,27,4337.717,-2482.114,239.2336,0,0,0,0,100,0), +(@PATH,28,4325.967,-2481.114,238.9836,0,0,0,0,100,0), +(@PATH,29,4320.836,-2480.163,238.4939,0,0,0,0,100,0), +(@PATH,30,4327.4,-2469.229,238.7592,0,0,0,0,100,0), +(@PATH,31,4339.832,-2457.689,239.1528,0,0,0,0,100,0), +(@PATH,32,4339.467,-2457.954,239.0422,0,0,0,0,100,0), +(@PATH,33,4339.559,-2457.928,239.3148,0,0,0,0,100,0), +(@PATH,34,4327.204,-2469.653,238.7065,0,0,0,0,100,0), +(@PATH,35,4320.694,-2480.362,238.713,0,0,0,0,100,0), +(@PATH,36,4330.444,-2481.362,239.213,0,0,0,0,100,0), +(@PATH,37,4337.947,-2482.492,239.5395,0,0,0,0,100,0), +(@PATH,38,4342.447,-2483.492,240.0395,0,0,0,0,100,0), +(@PATH,39,4346.447,-2484.492,240.5395,0,0,0,0,100,0); + +SET @NPC := 100914; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4316.283,`position_y`=-2489.055,`position_z`=238.5876 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,4316.283,-2489.055,238.5876,0,0,0,0,100,0), +(@PATH,2,4316.529,-2488.824,238.7166,0,0,0,0,100,0), +(@PATH,3,4320.335,-2479.741,238.3421,0,0,0,0,100,0), +(@PATH,4,4316.585,-2474.241,237.8421,0,0,0,0,100,0), +(@PATH,5,4313.78,-2470.097,237.5021,0,0,0,0,100,0), +(@PATH,6,4309.78,-2469.847,237.0021,0,0,0,0,100,0), +(@PATH,7,4306.03,-2469.347,236.5021,0,0,0,0,100,0), +(@PATH,8,4305.914,-2469.415,236.0416,0,0,0,0,100,0), +(@PATH,9,4303.414,-2469.165,235.5416,0,0,0,0,100,0), +(@PATH,10,4300.414,-2469.415,235.0416,0,0,0,0,100,0), +(@PATH,11,4297.414,-2469.915,234.2916,0,0,0,0,100,0), +(@PATH,12,4294.664,-2470.165,234.0416,0,0,0,0,100,0), +(@PATH,13,4290.664,-2470.415,233.2916,0,0,0,0,100,0), +(@PATH,14,4285.664,-2471.165,232.5416,0,0,0,0,100,0), +(@PATH,15,4285.473,-2471.28,232.3787,0,0,0,0,100,0), +(@PATH,16,4285.223,-2471.28,232.1287,0,0,0,0,100,0), +(@PATH,17,4277.473,-2472.28,231.8787,0,0,0,0,100,0), +(@PATH,18,4273.628,-2472.75,231.6418,0,0,0,0,100,0), +(@PATH,19,4267.374,-2468.811,231.65,0,0,0,0,100,0), +(@PATH,20,4263.313,-2458.705,231.5937,0,0,0,0,100,0), +(@PATH,21,4260.986,-2447.287,231.4928,0,0,0,0,100,0), +(@PATH,22,4258.986,-2445.537,231.4928,0,0,0,0,100,0), +(@PATH,23,4257.986,-2444.537,231.4928,0,0,0,0,100,0), +(@PATH,24,4257.986,-2443.787,231.4928,0,0,0,0,100,0), +(@PATH,25,4257.486,-2441.787,231.4928,0,0,0,0,100,0), +(@PATH,26,4257.564,-2441.543,231.4707,0,0,0,0,100,0), +(@PATH,27,4258.564,-2443.043,231.4707,0,0,0,0,100,0), +(@PATH,28,4258.814,-2444.543,231.4707,0,0,0,0,100,0), +(@PATH,29,4258.814,-2445.543,231.4707,0,0,0,0,100,0), +(@PATH,30,4259.061,-2445.944,231.3457,0,0,0,0,100,0), +(@PATH,31,4261.061,-2447.694,231.3457,0,0,0,0,100,0), +(@PATH,32,4263.474,-2458.961,231.6339,0,0,0,0,100,0), +(@PATH,33,4267.657,-2468.89,231.6431,0,0,0,0,100,0), +(@PATH,34,4273.792,-2472.652,231.7187,0,0,0,0,100,0), +(@PATH,35,4284.542,-2471.152,232.2187,0,0,0,0,100,0), +(@PATH,36,4284.735,-2471.201,232.4085,0,0,0,0,100,0), +(@PATH,37,4285.485,-2471.201,232.4085,0,0,0,0,100,0), +(@PATH,38,4289.235,-2470.701,233.1585,0,0,0,0,100,0), +(@PATH,39,4292.985,-2470.451,233.6585,0,0,0,0,100,0), +(@PATH,40,4296.985,-2469.951,234.4085,0,0,0,0,100,0), +(@PATH,41,4299.985,-2469.451,234.9085,0,0,0,0,100,0), +(@PATH,42,4303.572,-2469.107,235.8506,0,0,0,0,100,0), +(@PATH,43,4306.572,-2469.357,236.3506,0,0,0,0,100,0), +(@PATH,44,4311.322,-2469.857,237.1006,0,0,0,0,100,0), +(@PATH,45,4314.023,-2470.285,237.6709,0,0,0,0,100,0), +(@PATH,46,4318.273,-2476.535,238.1709,0,0,0,0,100,0), +(@PATH,47,4320.4,-2480.026,238.3305,0,0,0,0,100,0), +(@PATH,48,4316.393,-2488.953,238.7333,0,0,0,0,100,0), +(@PATH,49,4316.283,-2489.055,238.5876,0,0,0,0,100,0); + +SET @NPC := 100910; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4338.308,`position_y`=-2566.474,`position_z`=245.7152 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,4338.308,-2566.474,245.7152,0,0,0,0,100,0), +(@PATH,2,4339.808,-2567.724,245.7152,0,0,0,0,100,0), +(@PATH,3,4341.308,-2568.724,245.7152,0,0,0,0,100,0), +(@PATH,4,4342.308,-2569.724,245.7152,0,0,0,0,100,0), +(@PATH,5,4342.308,-2570.724,245.7152,0,0,0,0,100,0), +(@PATH,6,4345.808,-2573.724,245.7152,0,0,0,0,100,0), +(@PATH,7,4346.808,-2574.724,245.7152,0,0,0,0,100,0), +(@PATH,8,4345.922,-2575.817,245.7339,0,0,0,0,100,0), +(@PATH,9,4344.672,-2574.817,245.7339,0,0,0,0,100,0), +(@PATH,10,4342.422,-2570.817,245.7339,0,0,0,0,100,0), +(@PATH,11,4342.422,-2569.817,245.7339,0,0,0,0,100,0), +(@PATH,12,4341.422,-2568.817,245.7339,0,0,0,0,100,0), +(@PATH,13,4340.922,-2566.567,245.7339,0,0,0,0,100,0), +(@PATH,14,4340.74,-2566.308,245.6353,0,0,0,0,100,0), +(@PATH,15,4337.99,-2566.308,245.6353,0,0,0,0,100,0), +(@PATH,16,4326.376,-2555.018,245.3248,0,0,0,0,100,0), +(@PATH,17,4317.626,-2555.518,244.8248,0,0,0,0,100,0), +(@PATH,18,4313.838,-2555.828,244.4903,0,0,0,0,100,0), +(@PATH,19,4310.838,-2556.578,243.9903,0,0,0,0,100,0), +(@PATH,20,4308.088,-2557.078,243.4903,0,0,0,0,100,0), +(@PATH,21,4305.229,-2558.031,242.7213,0,0,0,0,100,0), +(@PATH,22,4304.324,-2561.028,243.1423,0,0,0,0,100,0), +(@PATH,23,4306.574,-2564.278,243.6423,0,0,0,0,100,0), +(@PATH,24,4309.324,-2568.528,244.1423,0,0,0,0,100,0), +(@PATH,25,4311.824,-2572.278,244.6423,0,0,0,0,100,0), +(@PATH,26,4314.824,-2576.528,245.3923,0,0,0,0,100,0), +(@PATH,27,4319.487,-2583.055,246.6341,0,0,0,0,100,0), +(@PATH,28,4322.487,-2587.055,247.1341,0,0,0,0,100,0), +(@PATH,29,4324.737,-2590.055,247.6341,0,0,0,0,100,0), +(@PATH,30,4327.237,-2593.055,248.1341,0,0,0,0,100,0), +(@PATH,31,4328.737,-2595.055,248.6341,0,0,0,0,100,0), +(@PATH,32,4304.205,-2560.936,242.7079,0,0,0,0,100,0), +(@PATH,33,4305.315,-2557.807,243.0027,0,0,0,0,100,0), +(@PATH,34,4308.065,-2557.307,243.5027,0,0,0,0,100,0), +(@PATH,35,4310.815,-2556.557,244.0027,0,0,0,0,100,0), +(@PATH,36,4314.014,-2555.685,244.613,0,0,0,0,100,0), +(@PATH,37,4320.764,-2555.435,245.113,0,0,0,0,100,0), +(@PATH,38,4326.62,-2555.132,245.2907,0,0,0,0,100,0), +(@PATH,39,4338.271,-2566.441,245.7103,0,0,0,0,100,0); + +SET @NPC := 100930; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4243.639,`position_y`=-2493.448,`position_z`=231.605 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,4243.639,-2493.448,231.605,0,0,0,0,100,0), +(@PATH,2,4245.705,-2503.654,231.4428,0,0,0,0,100,0), +(@PATH,3,4239.67,-2514.717,231.6307,0,0,0,0,100,0), +(@PATH,4,4239.557,-2514.651,231.5394,0,0,0,0,100,0), +(@PATH,5,4239.811,-2514.36,231.6327,0,0,0,0,100,0), +(@PATH,6,4245.605,-2503.552,231.3878,0,0,0,0,100,0), +(@PATH,7,4243.532,-2493.164,231.6278,0,0,0,0,100,0), +(@PATH,8,4237.666,-2485.062,231.6341,0,0,0,0,100,0); + +SET @NPC := 98081; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3677.196,`position_y`=-3262.262,`position_z`=271.4974 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3677.196,-3262.262,271.4974,0,0,0,0,100,0), +(@PATH,2,3675.946,-3263.512,270.4974,0,0,0,0,100,0), +(@PATH,3,3673.446,-3266.012,267.7474,0,0,0,0,100,0), +(@PATH,4,3672.196,-3267.262,266.4974,0,0,0,0,100,0), +(@PATH,5,3670.696,-3268.762,264.4974,0,0,0,0,100,0), +(@PATH,6,3669.344,-3269.899,262.9258,0,0,0,0,100,0), +(@PATH,7,3665.594,-3268.399,259.1758,0,0,0,0,100,0), +(@PATH,8,3664.594,-3267.899,258.1758,0,0,0,0,100,0), +(@PATH,9,3657.594,-3265.399,252.4258,0,0,0,0,100,0), +(@PATH,10,3656.094,-3264.742,251.3945,0,0,0,0,100,0), +(@PATH,11,3648.844,-3264.492,245.1445,0,0,0,0,100,0), +(@PATH,12,3647.094,-3264.242,243.6445,0,0,0,0,100,0), +(@PATH,13,3642.363,-3263.935,240.8384,0,0,0,0,100,0), +(@PATH,14,3642.113,-3265.185,239.8384,0,0,0,0,100,0), +(@PATH,15,3640.613,-3270.685,237.3384,0,0,0,0,100,0), +(@PATH,16,3638.873,-3276.277,236.2841,0,0,0,0,100,0), +(@PATH,17,3637.873,-3283.027,235.7841,0,0,0,0,100,0), +(@PATH,18,3637.623,-3284.527,235.5341,0,0,0,0,100,0), +(@PATH,19,3637.542,-3284.433,235.5938,0,0,0,0,100,0), +(@PATH,20,3637.792,-3282.933,235.5938,0,0,0,0,100,0), +(@PATH,21,3639.209,-3276.042,236.5234,0,0,0,0,100,0), +(@PATH,22,3640.459,-3271.292,237.2734,0,0,0,0,100,0), +(@PATH,23,3641.709,-3265.792,239.5234,0,0,0,0,100,0), +(@PATH,24,3642.543,-3264.088,240.9962,0,0,0,0,100,0), +(@PATH,25,3646.543,-3264.338,243.2462,0,0,0,0,100,0), +(@PATH,26,3649.043,-3264.588,245.2462,0,0,0,0,100,0), +(@PATH,27,3656.203,-3264.957,251.5793,0,0,0,0,100,0), +(@PATH,28,3657.703,-3265.457,252.5793,0,0,0,0,100,0), +(@PATH,29,3664.453,-3267.957,258.0793,0,0,0,0,100,0), +(@PATH,30,3665.453,-3268.457,259.0793,0,0,0,0,100,0), +(@PATH,31,3669.533,-3269.755,263.1148,0,0,0,0,100,0), +(@PATH,32,3670.783,-3268.755,264.6148,0,0,0,0,100,0), +(@PATH,33,3672.283,-3267.255,266.1148,0,0,0,0,100,0), +(@PATH,34,3673.033,-3266.005,267.8648,0,0,0,0,100,0), +(@PATH,35,3675.783,-3263.505,270.3648,0,0,0,0,100,0), +(@PATH,36,3676.181,-3263.232,270.6315,0,0,0,0,100,0), +(@PATH,37,3677.431,-3261.982,271.8815,0,0,0,0,100,0), +(@PATH,38,3679.931,-3259.982,274.1315,0,0,0,0,100,0), +(@PATH,39,3683.181,-3256.982,276.8815,0,0,0,0,100,0), +(@PATH,40,3683.275,-3257.129,276.9308,0,0,0,0,100,0), +(@PATH,41,3680.025,-3259.629,274.4308,0,0,0,0,100,0), +(@PATH,42,3677.151,-3262.089,271.6892,0,0,0,0,100,0); + +SET @NPC := 98083; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3608.663,`position_y`=-3311.686,`position_z`=224.8323 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3608.663,-3311.686,224.8323,0,0,0,0,100,0), +(@PATH,2,3610.913,-3313.436,224.5823,0,0,0,0,100,0), +(@PATH,3,3612.413,-3314.436,224.5823,0,0,0,0,100,0), +(@PATH,4,3621.448,-3320.278,226.055,0,0,0,0,100,0), +(@PATH,5,3624.948,-3320.278,226.555,0,0,0,0,100,0), +(@PATH,6,3630.948,-3320.278,227.055,0,0,0,0,100,0), +(@PATH,7,3632.198,-3320.278,227.555,0,0,0,0,100,0), +(@PATH,8,3631.236,-3320.25,227.2929,0,0,0,0,100,0), +(@PATH,9,3632.486,-3320.25,227.7929,0,0,0,0,100,0), +(@PATH,10,3633.486,-3320.25,228.2929,0,0,0,0,100,0), +(@PATH,11,3637.236,-3317,229.5429,0,0,0,0,100,0), +(@PATH,12,3637.84,-3316.242,229.9589,0,0,0,0,100,0), +(@PATH,13,3633.259,-3320.148,227.9277,0,0,0,0,100,0), +(@PATH,14,3632.259,-3320.148,227.4277,0,0,0,0,100,0), +(@PATH,15,3631.009,-3320.148,227.1777,0,0,0,0,100,0), +(@PATH,16,3624.759,-3320.398,226.4277,0,0,0,0,100,0), +(@PATH,17,3621.314,-3320.251,225.9905,0,0,0,0,100,0), +(@PATH,18,3613.064,-3315.001,224.7405,0,0,0,0,100,0), +(@PATH,19,3611.064,-3313.501,224.7405,0,0,0,0,100,0), +(@PATH,20,3608.404,-3311.755,224.6184,0,0,0,0,100,0), +(@PATH,21,3605.154,-3300.005,224.3684,0,0,0,0,100,0); + +-- drakkari event +DELETE FROM `creature` where `id` IN (26582, 26583) and `guid` NOT IN (116602); + +-- Horrified Drakkari Shaman SAI +SET @GUID := -116602; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=26583; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@GUID,0,0,0,1,0,100,0,1000,2000,1000,2000,88,11660200,11660201,0,0,0,0,1,0,0,0,0,0,0,0,"Horrified Drakkari Shaman - Out of Combat - Run Random Script"), +(@GUID,0,1,2,63,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Horrified Drakkari Shaman - On Reset - Set Active On"), +(@GUID,0,2,3,61,0,100,0,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Horrified Drakkari Shaman - On Reset - Set Visibility On"), +(@GUID,0,3,0,61,0,100,0,0,0,0,0,8,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Horrified Drakkari Shaman - On Reset - Set Reactstate Aggressive"); + +-- Actionlist SAI +SET @ENTRY := 11660200; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,12,26583,3,120000,0,0,0,8,0,0,0,4690.051270,-2045.848755,194.348404,3.160445,"On Script - Summon Creature 'Horrified Drakkari Shaman'"); + +-- Actionlist SAI +SET @ENTRY := 11660201; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,12,26582,3,120000,0,0,0,8,0,0,0,4690.051270,-2045.848755,194.348404,3.160445,"On Script - Summon Creature 'Horrified Drakkari Warrior'"); + +-- Horrified Drakkari Shaman SAI +SET @ENTRY := 26582; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,1,63,0,100,0,1,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Horrified Drakkari Warrior - On Just Created - Set Active On"), +(@ENTRY,0,1,2,61,0,100,0,1,0,0,0,88,2658200,2658201,0,0,0,0,1,0,0,0,0,0,0,0,"Horrified Drakkari Warrior - On Data Set 1 0 - Run Random Script"), +(@ENTRY,0,2,0,61,0,100,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Horrified Drakkari Warrior - On Just Created - Say Line 0"), +(@ENTRY,0,3,0,40,0,100,0,20,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Horrified Drakkari Warrior - On Waypoint 20 Reached - Despawn Instant"); + +-- Horrified Drakkari Shaman SAI +SET @ENTRY := 26583; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,1,63,0,100,0,1,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Horrified Drakkari Shaman - On Just Created - Set Active On"), +(@ENTRY,0,1,2,61,0,100,0,1,0,0,0,88,2658200,2658201,0,0,0,0,1,0,0,0,0,0,0,0,"Horrified Drakkari Shaman - On Just Created - Run Random Script"), +(@ENTRY,0,2,0,61,0,100,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Horrified Drakkari Shaman - On Just Created - Say Line 0"), +(@ENTRY,0,3,0,40,0,100,0,20,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Horrified Drakkari Shaman - On Waypoint 20 Reached - Despawn Instant"); + +-- Actionlist SAI +SET @ENTRY := 2658200; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,53,1,2658200,0,0,3000,0,0,0,0,0,0,0,0,0,"On Script - Start Waypoint"); + +-- Actionlist SAI +SET @ENTRY := 2658201; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,53,1,2658201,0,0,3000,0,0,0,0,0,0,0,0,0,"On Script - Start Waypoint"); + +DELETE FROM `waypoints` WHERE `entry`=2658200; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`) VALUES +(2658200, 1, 4680.19, -2044.68, 189.441), +(2658200, 2, 4662.73, -2045.93, 184.189), +(2658200, 3, 4651.83, -2051.77, 184.368), +(2658200, 4, 4643.71, -2060.59, 184.18), +(2658200, 5, 4635.04, -2061.83, 184.1), +(2658200, 6, 4617.55, -2061.84, 184.182), +(2658200, 7, 4596.55, -2061.57, 184.186), +(2658200, 8, 4579.06, -2061.36, 184.186), +(2658200, 9, 4562.37, -2062.32, 184.167), +(2658200, 10, 4551.87, -2062.12, 178.315), +(2658200, 11, 4534.37, -2062.09, 168.354), +(2658200, 12, 4523.88, -2061.96, 162.377), +(2658200, 13, 4509.88, -2062.05, 160.823), +(2658200, 14, 4498.51, -2063.27, 160.823), +(2658200, 15, 4490.23, -2069.98, 160.823), +(2658200, 16, 4492.74, -2078.85, 160.823), +(2658200, 17, 4496.31, -2094.72, 160.8), +(2658200, 18, 4506.59, -2103.06, 160.831), +(2658200, 19, 4518.52, -2110.39, 160.833), +(2658200, 20, 4533.43, -2119.56, 160.845), +(2658200, 21, 4545.35, -2130.19, 160.842); + +DELETE FROM `waypoints` WHERE `entry`=2658201; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`) VALUES +(2658201, 1, 4692.36, -2045.14, 195.516), +(2658201, 2, 4674.86, -2044.91, 186.46), +(2658201, 3, 4671.36, -2044.89, 185.043), +(2658201, 4, 4659.89, -2044.58, 184.318), +(2658201, 5, 4648.06, -2033.35, 184.184), +(2658201, 6, 4641.49, -2028.73, 183.862), +(2658201, 7, 4630.25, -2028.22, 184.182), +(2658201, 8, 4612.76, -2028.2, 184.185), +(2658201, 9, 4591.76, -2027.91, 184.189), +(2658201, 10, 4574.26, -2027.67, 184.185), +(2658201, 11, 4563.76, -2027.47, 184.166), +(2658201, 12, 4556.77, -2027.4, 180.928), +(2658201, 13, 4539.27, -2027.25, 170.966), +(2658201, 14, 4525.27, -2027.07, 162.997), +(2658201, 15, 4511.28, -2026.61, 160.823), +(2658201, 16, 4494.03, -2024.8, 160.824), +(2658201, 17, 4488.19, -2012.02, 161.055), +(2658201, 18, 4492.56, -1993.64, 160.824), +(2658201, 19, 4503.51, -1980.34, 160.824), +(2658201, 20, 4517.17, -1973.46, 160.824); + +DELETE FROM `creature_text` WHERE `entry` IN (26583, 26582); +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(26583, 0, 0, 'Drak\'Tharon be lost, mon!', 12, 0, 100, 0, 0, 0, 25857, 0, 'Horrified Drakkari'), +(26583, 0, 1, 'Da Scourge be everywhere, mon!', 12, 0, 100, 0, 0, 0, 25853, 0, 'Horrified Drakkari'), +(26583, 0, 2, 'Every troll for himself, mon!', 12, 0, 100, 0, 0, 0, 25855, 0, 'Horrified Drakkari'), +(26583, 0, 3, 'Ruuun!', 12, 0, 100, 0, 0, 0, 25859, 0, 'Horrified Drakkari'), +-- +(26582, 0, 0, 'Drak\'Tharon be lost, mon!', 12, 0, 100, 0, 0, 0, 25857, 0, 'Horrified Drakkari'), +(26582, 0, 1, 'Da Scourge be everywhere, mon!', 12, 0, 100, 0, 0, 0, 25853, 0, 'Horrified Drakkari'), +(26582, 0, 2, 'Every troll for himself, mon!', 12, 0, 100, 0, 0, 0, 25855, 0, 'Horrified Drakkari'), +(26582, 0, 3, 'Ruuun!', 12, 0, 100, 0, 0, 0, 25859, 0, 'Horrified Drakkari'); diff --git a/sql/updates/world/2015_05_12_03_world.sql b/sql/updates/world/2015_05_12_03_world.sql new file mode 100644 index 00000000000..2bcfa9d091b --- /dev/null +++ b/sql/updates/world/2015_05_12_03_world.sql @@ -0,0 +1,507 @@ +-- DB/Creature: Grizzlyhills Pathing -2 +UPDATE `smart_scripts` SET `action_param6`=2 WHERE `entryorguid` IN (2658200, 2658201) AND `source_type`=9 AND `id`=0 AND `link`=0; + +SET @NPC := 99310; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4194.24,`position_y`=-1806.269,`position_z`=200.4735 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,4194.24,-1806.269,200.4735,0,0,0,0,100,0), +(@PATH,2,4197.74,-1808.269,201.2235,0,0,0,0,100,0), +(@PATH,3,4199.49,-1809.269,201.7235,0,0,0,0,100,0), +(@PATH,4,4202.99,-1811.269,202.2235,0,0,0,0,100,0), +(@PATH,5,4209.49,-1815.269,202.9735,0,0,0,0,100,0), +(@PATH,6,4226.4,-1825.46,203.2541,0,0,0,0,100,0), +(@PATH,7,4227.65,-1833.96,202.7541,0,0,0,0,100,0), +(@PATH,8,4228.602,-1839.474,202.2388,0,0,0,0,100,0), +(@PATH,9,4242.543,-1857.213,202.6918,0,0,0,0,100,0), +(@PATH,10,4242.543,-1863.963,203.1918,0,0,0,0,100,0), +(@PATH,11,4242.595,-1859.661,202.7076,0,0,0,0,100,0), +(@PATH,12,4242.467,-1856.869,202.4443,0,0,0,0,100,0), +(@PATH,13,4238.217,-1851.369,201.9443,0,0,0,0,100,0), +(@PATH,14,4228.504,-1839.239,202.5002,0,0,0,0,100,0), +(@PATH,15,4227.504,-1832.739,203.0002,0,0,0,0,100,0), +(@PATH,16,4226.358,-1825.27,203.1885,0,0,0,0,100,0), +(@PATH,17,4208.108,-1814.52,202.6885,0,0,0,0,100,0), +(@PATH,18,4200.608,-1810.02,201.9385,0,0,0,0,100,0), +(@PATH,19,4198.108,-1808.52,201.1885,0,0,0,0,100,0), +(@PATH,20,4194.608,-1806.52,200.6885,0,0,0,0,100,0), +(@PATH,21,4190.358,-1803.77,199.9385,0,0,0,0,100,0); + +SET @NPC := 99309; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4163.295,`position_y`=-1958.695,`position_z`=208.3958 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,4163.295,-1958.695,208.3958,0,0,0,0,100,0), +(@PATH,2,4167.545,-1960.945,208.8958,0,0,0,0,100,0), +(@PATH,3,4189.578,-1972.83,209.2269,0,0,0,0,100,0), +(@PATH,4,4193.578,-1973.83,208.7269,0,0,0,0,100,0), +(@PATH,5,4189.997,-1972.962,209.24,0,0,0,0,100,0), +(@PATH,6,4164.317,-1959.296,208.4842,0,0,0,0,100,0), +(@PATH,7,4163.099,-1958.743,208.3662,0,0,0,0,100,0), +(@PATH,8,4157.599,-1963.243,209.1162,0,0,0,0,100,0), +(@PATH,9,4154.599,-1965.743,209.8662,0,0,0,0,100,0), +(@PATH,10,4151.599,-1968.243,210.3662,0,0,0,0,100,0), +(@PATH,11,4148.349,-1970.743,210.8662,0,0,0,0,100,0), +(@PATH,12,4143.349,-1974.993,211.3662,0,0,0,0,100,0), +(@PATH,13,4136.349,-1980.993,212.1162,0,0,0,0,100,0), +(@PATH,14,4134.099,-1982.743,212.6162,0,0,0,0,100,0), +(@PATH,15,4133.807,-1983.081,212.7842,0,0,0,0,100,0), +(@PATH,16,4137.057,-1980.331,212.0342,0,0,0,0,100,0), +(@PATH,17,4143.807,-1974.581,211.2842,0,0,0,0,100,0), +(@PATH,18,4149.057,-1970.331,210.5342,0,0,0,0,100,0), +(@PATH,19,4152.807,-1967.081,210.0342,0,0,0,0,100,0), +(@PATH,20,4155.057,-1965.331,209.5342,0,0,0,0,100,0), +(@PATH,21,4159.057,-1962.081,209.0342,0,0,0,0,100,0); + +SET @NPC := 99308; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4257.948,`position_y`=-1914.651,`position_z`=201.9758 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,4257.948,-1914.651,201.9758,0,0,0,0,100,0), +(@PATH,2,4257.902,-1914.741,202.4635,0,0,0,0,100,0), +(@PATH,3,4257.152,-1923.741,202.9635,0,0,0,0,100,0), +(@PATH,4,4256.652,-1929.491,203.4635,0,0,0,0,100,0), +(@PATH,5,4256.402,-1934.241,203.9635,0,0,0,0,100,0), +(@PATH,6,4255.238,-1946.397,204.331,0,0,0,0,100,0), +(@PATH,7,4252.988,-1961.897,204.831,0,0,0,0,100,0), +(@PATH,8,4252.238,-1966.897,205.331,0,0,0,0,100,0), +(@PATH,9,4252.688,-1964.002,204.8374,0,0,0,0,100,0), +(@PATH,10,4254.188,-1953.252,204.5874,0,0,0,0,100,0), +(@PATH,11,4255.508,-1946.051,204.2277,0,0,0,0,100,0), +(@PATH,12,4256.758,-1930.551,203.4777,0,0,0,0,100,0), +(@PATH,13,4257.008,-1925.551,202.9777,0,0,0,0,100,0), +(@PATH,14,4257.508,-1919.551,202.4777,0,0,0,0,100,0), +(@PATH,15,4257.833,-1914.49,202.1853,0,0,0,0,100,0); + +SET @NPC := 104074; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4245.058,`position_y`=-2021.197,`position_z`=237.4276 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,4245.058,-2021.197,237.4276,0,0,0,0,100,0), +(@PATH,2,4245.791,-2017.078,233.2036,0,0,0,0,100,0), +(@PATH,3,4246.791,-2007.328,223.2036,0,0,0,0,100,0), +(@PATH,4,4247.152,-2007.004,222.8537,0,0,0,0,100,0), +(@PATH,5,4247.402,-2005.004,220.8537,0,0,0,0,100,0), +(@PATH,6,4248.152,-1999.504,215.8537,0,0,0,0,100,0), +(@PATH,7,4249.402,-1990.004,207.3537,0,0,0,0,100,0), +(@PATH,8,4249.673,-1989.776,207.2351,0,0,0,0,100,0), +(@PATH,9,4249.673,-1988.776,207.2351,0,0,0,0,100,0), +(@PATH,10,4250.423,-1976.026,206.7351,0,0,0,0,100,0), +(@PATH,11,4250.069,-1981.066,206.8915,0,0,0,0,100,0), +(@PATH,12,4248.495,-1989.926,206.7487,0,0,0,0,100,0), +(@PATH,13,4247.745,-1999.926,215.9987,0,0,0,0,100,0), +(@PATH,14,4247.169,-2005.335,221.2139,0,0,0,0,100,0), +(@PATH,15,4246.919,-2007.335,223.2139,0,0,0,0,100,0), +(@PATH,16,4245.507,-2017.251,233.4465,0,0,0,0,100,0); + +DELETE FROM `creature_addon` WHERE `guid`=110106; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(110106,0,0,0,1,69, ''); + +SET @NPC := 10299; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3333.925,`position_y`=-1773.206,`position_z`=88.87373 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3333.925,-1773.206,88.87373,0,0,0,0,100,0), +(@PATH,2,3334.675,-1774.456,88.37373,0,0,0,0,100,0), +(@PATH,3,3335.175,-1775.456,88.37373,0,0,0,0,100,0), +(@PATH,4,3337.425,-1775.956,88.62373,0,0,0,0,100,0), +(@PATH,5,3338.675,-1779.706,89.12373,0,0,0,0,100,0), +(@PATH,6,3339.705,-1778.929,89.08168,0,0,0,0,100,0), +(@PATH,7,3339.705,-1775.929,88.58168,0,0,0,0,100,0), +(@PATH,8,3339.705,-1774.679,88.33168,0,0,0,0,100,0), +(@PATH,9,3339.705,-1771.679,87.83168,0,0,0,0,100,0), +(@PATH,10,3339.705,-1770.929,87.58168,0,0,0,0,100,0), +(@PATH,11,3339.705,-1766.679,87.33168,0,0,0,0,100,0), +(@PATH,12,3341.205,-1761.679,88.08168,0,0,0,0,100,0), +(@PATH,13,3340.286,-1761.39,87.88223,0,0,0,0,100,0), +(@PATH,14,3357.286,-1763.39,89.13223,0,0,0,0,100,0), +(@PATH,15,3358.286,-1763.39,89.38223,0,0,0,0,100,0), +(@PATH,16,3358.156,-1762.816,89.31908,0,0,0,0,100,0), +(@PATH,17,3357.656,-1762.816,89.06908,0,0,0,0,100,0), +(@PATH,18,3357.156,-1762.816,89.31908,0,0,0,0,100,0), +(@PATH,19,3340.241,-1761.592,87.80875,0,0,0,0,100,0), +(@PATH,20,3339.741,-1764.592,87.55875,0,0,0,0,100,0), +(@PATH,21,3339.741,-1766.592,87.30875,0,0,0,0,100,0), +(@PATH,22,3339.741,-1770.842,87.55875,0,0,0,0,100,0), +(@PATH,23,3339.741,-1774.592,88.30875,0,0,0,0,100,0), +(@PATH,24,3339.741,-1778.842,89.05875,0,0,0,0,100,0), +(@PATH,25,3335.925,-1777.206,88.87373,0,0,0,0,100,0), +(@PATH,26,3334.675,-1775.206,88.37373,0,0,0,0,100,0); + +SET @NPC := 103003; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3392.038,`position_y`=-1786.48,`position_z`=99.89154 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3392.038,-1786.48,99.89154,0,0,0,0,100,0), +(@PATH,2,3393.788,-1785.98,99.64154,0,0,0,0,100,0), +(@PATH,3,3395.788,-1784.48,99.64154,0,0,0,0,100,0), +(@PATH,4,3398.038,-1784.48,99.64154,0,0,0,0,100,0), +(@PATH,5,3400.038,-1783.73,99.39154,0,0,0,0,100,0), +(@PATH,6,3408.288,-1780.23,99.14154,0,0,0,0,100,0), +(@PATH,7,3410.538,-1780.23,99.14154,0,0,0,0,100,0), +(@PATH,8,3412.538,-1780.23,99.39154,0,0,0,0,100,0), +(@PATH,9,3414.538,-1780.23,99.39154,0,0,0,0,100,0), +(@PATH,10,3416.788,-1780.23,99.64154,0,0,0,0,100,0), +(@PATH,11,3418.788,-1780.23,99.64154,0,0,0,0,100,0), +(@PATH,12,3418.788,-1782.48,100.8915,0,0,0,0,100,0), +(@PATH,13,3418.288,-1782.98,101.1415,0,0,0,0,100,0), +(@PATH,14,3418.538,-1786.48,102.1415,0,0,0,0,100,0), +(@PATH,15,3418.788,-1788.48,102.1415,0,0,0,0,100,0), +(@PATH,16,3418.788,-1790.23,102.6415,0,0,0,0,100,0), +(@PATH,17,3417.788,-1790.73,103.1415,0,0,0,0,100,0), +(@PATH,18,3412.288,-1793.98,103.1415,0,0,0,0,100,0), +(@PATH,19,3409.038,-1795.23,103.1415,0,0,0,0,100,0), +(@PATH,20,3402.038,-1798.23,103.1415,0,0,0,0,100,0), +(@PATH,21,3405.601,-1802.971,103.1744,0,0,0,0,100,0), +(@PATH,22,3412.601,-1804.221,103.1744,0,0,0,0,100,0), +(@PATH,23,3414.101,-1804.471,102.1744,0,0,0,0,100,0), +(@PATH,24,3414.601,-1803.471,102.1744,0,0,0,0,100,0), +(@PATH,25,3415.601,-1801.721,101.9244,0,0,0,0,100,0), +(@PATH,26,3415.601,-1799.721,101.9244,0,0,0,0,100,0), +(@PATH,27,3416.601,-1798.721,101.6744,0,0,0,0,100,0), +(@PATH,28,3420.351,-1795.471,101.4244,0,0,0,0,100,0), +(@PATH,29,3422.351,-1791.721,101.1744,0,0,0,0,100,0), +(@PATH,30,3423.851,-1789.471,101.1744,0,0,0,0,100,0), +(@PATH,31,3423.851,-1787.471,100.6744,0,0,0,0,100,0), +(@PATH,32,3423.851,-1785.471,100.4244,0,0,0,0,100,0), +(@PATH,33,3423.851,-1783.221,99.92442,0,0,0,0,100,0), +(@PATH,34,3422.851,-1781.721,99.42442,0,0,0,0,100,0), +(@PATH,35,3421.851,-1781.721,99.42442,0,0,0,0,100,0), +(@PATH,36,3420.851,-1781.721,99.67442,0,0,0,0,100,0), +(@PATH,37,3418.851,-1780.221,99.67442,0,0,0,0,100,0), +(@PATH,38,3416.601,-1780.221,99.67442,0,0,0,0,100,0), +(@PATH,39,3414.601,-1780.221,99.42442,0,0,0,0,100,0), +(@PATH,40,3412.601,-1780.221,99.42442,0,0,0,0,100,0), +(@PATH,41,3410.351,-1780.221,99.17442,0,0,0,0,100,0), +(@PATH,42,3408.351,-1780.221,99.17442,0,0,0,0,100,0), +(@PATH,43,3404.601,-1783.221,99.92442,0,0,0,0,100,0), +(@PATH,44,3403.101,-1783.971,99.67442,0,0,0,0,100,0), +(@PATH,45,3402.101,-1783.971,99.42442,0,0,0,0,100,0), +(@PATH,46,3401.101,-1783.971,99.42442,0,0,0,0,100,0), +(@PATH,47,3400.101,-1783.971,99.42442,0,0,0,0,100,0), +(@PATH,48,3397.851,-1784.471,99.67442,0,0,0,0,100,0), +(@PATH,49,3395.851,-1784.471,99.67442,0,0,0,0,100,0), +(@PATH,50,3393.851,-1784.471,99.42442,0,0,0,0,100,0); + +SET @NPC := 103000; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3389.137,`position_y`=-1830.333,`position_z`=103.4552 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3389.137,-1830.333,103.4552,0,0,0,0,100,0), +(@PATH,2,3389.637,-1832.583,102.9552,0,0,0,0,100,0), +(@PATH,3,3383.887,-1839.083,102.9552,0,0,0,0,100,0), +(@PATH,4,3382.887,-1840.083,102.4552,0,0,0,0,100,0), +(@PATH,5,3382.387,-1840.583,102.7052,0,0,0,0,100,0), +(@PATH,6,3382.387,-1841.583,102.7052,0,0,0,0,100,0), +(@PATH,7,3378.887,-1844.833,103.4552,0,0,0,0,100,0), +(@PATH,8,3376.137,-1847.833,103.9552,0,0,0,0,100,0), +(@PATH,9,3375.137,-1848.833,104.2052,0,0,0,0,100,0), +(@PATH,10,3374.137,-1849.833,104.2052,0,0,0,0,100,0), +(@PATH,11,3372.387,-1852.083,104.7052,0,0,0,0,100,0), +(@PATH,12,3372.262,-1852.324,105.0966,0,0,0,0,100,0), +(@PATH,13,3371.512,-1853.574,105.3466,0,0,0,0,100,0), +(@PATH,14,3393.262,-1859.574,105.8466,0,0,0,0,100,0), +(@PATH,15,3397.262,-1860.824,106.5966,0,0,0,0,100,0), +(@PATH,16,3399.262,-1861.324,106.8466,0,0,0,0,100,0), +(@PATH,17,3403.012,-1862.324,107.5966,0,0,0,0,100,0), +(@PATH,18,3406.762,-1863.574,108.5966,0,0,0,0,100,0), +(@PATH,19,3382.792,-1856.847,105.1871,0,0,0,0,100,0), +(@PATH,20,3392.687,-1859.487,105.7214,0,0,0,0,100,0), +(@PATH,21,3396.437,-1860.737,106.4714,0,0,0,0,100,0), +(@PATH,22,3399.187,-1861.237,107.2214,0,0,0,0,100,0), +(@PATH,23,3402.937,-1862.237,107.7214,0,0,0,0,100,0), +(@PATH,24,3406.937,-1863.487,108.7214,0,0,0,0,100,0), +(@PATH,25,3408.163,-1863.834,108.8378,0,0,0,0,100,0), +(@PATH,26,3406.163,-1863.334,108.0878,0,0,0,0,100,0), +(@PATH,27,3402.413,-1862.084,107.3378,0,0,0,0,100,0), +(@PATH,28,3398.663,-1861.084,106.8378,0,0,0,0,100,0), +(@PATH,29,3394.663,-1860.084,105.8378,0,0,0,0,100,0), +(@PATH,30,3388.163,-1858.334,105.0878,0,0,0,0,100,0), +(@PATH,31,3376.036,-1851.585,104.1596,0,0,0,0,100,0), +(@PATH,32,3377.786,-1847.835,103.6596,0,0,0,0,100,0), +(@PATH,33,3379.536,-1844.335,103.1596,0,0,0,0,100,0), +(@PATH,34,3381.036,-1841.085,102.6596,0,0,0,0,100,0), +(@PATH,35,3382.036,-1839.835,102.6596,0,0,0,0,100,0), +(@PATH,36,3383.036,-1839.085,102.9096,0,0,0,0,100,0), +(@PATH,37,3389.537,-1832.41,102.813,0,0,0,0,100,0), +(@PATH,38,3389.037,-1829.91,102.813,0,0,0,0,100,0), +(@PATH,39,3388.787,-1827.91,104.813,0,0,0,0,100,0), +(@PATH,40,3386.787,-1816.66,111.313,0,0,0,0,100,0), +(@PATH,41,3386.537,-1815.41,112.063,0,0,0,0,100,0), +(@PATH,42,3386.537,-1813.41,113.313,0,0,0,0,100,0), +(@PATH,43,3386.537,-1812.41,113.813,0,0,0,0,100,0), +(@PATH,44,3386.367,-1811.625,114.3062,0,0,0,0,100,0), +(@PATH,45,3386.617,-1813.375,113.3062,0,0,0,0,100,0), +(@PATH,46,3386.867,-1814.375,112.5562,0,0,0,0,100,0), +(@PATH,47,3387.117,-1816.875,111.3062,0,0,0,0,100,0), +(@PATH,48,3388.867,-1827.875,104.8062,0,0,0,0,100,0); + +UPDATE `smart_scripts` SET `action_param1`=1 WHERE `entryorguid`=26447 AND `source_type`=0 AND `id`=0 AND `link`=0; + +SET @NPC := 102007; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4364.09,`position_y`=-3079.468,`position_z`=339.3658 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,4364.09,-3079.468,339.3658,0,0,0,0,100,0), +(@PATH,2,4367.34,-3080.468,339.6158,0,0,0,0,100,0), +(@PATH,3,4367.589,-3080.702,339.5166,0,0,0,0,100,0), +(@PATH,4,4363.933,-3079.255,339.4127,0,0,0,0,100,0), +(@PATH,5,4359.433,-3077.505,336.4127,0,0,0,0,100,0), +(@PATH,6,4355.786,-3075.964,334.2474,0,0,0,0,100,0), +(@PATH,7,4355.695,-3075.981,334.1053,0,0,0,0,100,0), +(@PATH,8,4356.195,-3076.231,334.3553,0,0,0,0,100,0), +(@PATH,9,4359.195,-3077.231,336.3553,0,0,0,0,100,0), +(@PATH,10,4364.154,-3079.562,339.3983,0,0,0,0,100,0), +(@PATH,11,4367.404,-3080.312,339.6483,0,0,0,0,100,0), +(@PATH,12,4367.589,-3080.702,339.5166,0,0,0,0,100,0), +(@PATH,13,4363.904,-3079.155,339.4361,0,0,0,0,100,0), +(@PATH,14,4359.404,-3077.405,336.4361,0,0,0,0,100,0); + +DELETE FROM `creature_addon` WHERE `guid` IN (111265,111249,111251,111254,111253,111287,111250,111252,111256, 111257, 111255, 111258); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(111255,0,0,3,1,0, ''), +(111258,0,0,3,1,0, ''), +(111257,0,0,3,1,0, ''), +(111256,0,0,3,1,0, ''), +(111265,0,0,3,1,0, ''), +(111252,0,0,3,1,0, ''), +(111250,0,0,3,1,0, ''), +(111287,0,0,3,1,0, ''), +(111253,0,0,3,1,0, ''), +(111254,0,0,3,1,0, ''), +(111251,0,0,3,1,0, ''), +(111249,0,0,3,1,0, ''); + +SET @NPC := 111286; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4542.684,`position_y`=-3543.378,`position_z`=229.5949 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,4542.684,-3543.378,229.5949,0,0,0,0,100,0), +(@PATH,2,4538.324,-3550.24,230.4706,0,0,0,0,100,0), +(@PATH,3,4538.574,-3554.24,230.9706,0,0,0,0,100,0), +(@PATH,4,4538.824,-3559.99,231.4706,0,0,0,0,100,0), +(@PATH,5,4538.906,-3559.937,231.3715,0,0,0,0,100,0), +(@PATH,6,4538.906,-3560.937,231.8715,0,0,0,0,100,0), +(@PATH,7,4558.198,-3552.972,231.0125,0,0,0,0,100,0), +(@PATH,8,4556.198,-3549.472,230.5125,0,0,0,0,100,0), +(@PATH,9,4553.948,-3546.472,229.7625,0,0,0,0,100,0), +(@PATH,10,4551.948,-3543.222,229.5125,0,0,0,0,100,0), +(@PATH,11,4542.659,-3543.267,229.5627,0,0,0,0,100,0); + +SET @NPC := 111288; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4520.46,`position_y`=-3406.525,`position_z`=227.3326 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,4520.46,-3406.525,227.3326,0,0,0,0,100,0), +(@PATH,2,4521.017,-3406.375,227.0677,0,0,0,0,100,0), +(@PATH,3,4520.318,-3406.741,227.3123,0,0,0,0,100,0), +(@PATH,4,4517.467,-3403.935,227.3069,0,0,0,0,100,0), +(@PATH,5,4526.76,-3393.349,227.3997,0,0,0,0,100,0), +(@PATH,6,4531.26,-3395.099,227.8997,0,0,0,0,100,0), +(@PATH,7,4531.282,-3395.075,227.8239,0,0,0,0,100,0), +(@PATH,8,4533.532,-3395.825,228.3239,0,0,0,0,100,0), +(@PATH,9,4532.032,-3397.075,228.0739,0,0,0,0,100,0), +(@PATH,10,4527.532,-3400.825,227.3239,0,0,0,0,100,0), +(@PATH,11,4520.34,-3406.549,227.3216,0,0,0,0,100,0), +(@PATH,12,4517.471,-3403.86,227.3069,0,0,0,0,100,0), +(@PATH,13,4526.883,-3393.393,227.3997,0,0,0,0,100,0), +(@PATH,14,4531.383,-3394.893,227.8997,0,0,0,0,100,0), +(@PATH,15,4531.462,-3395.123,227.7483,0,0,0,0,100,0), +(@PATH,16,4533.462,-3395.873,228.4983,0,0,0,0,100,0), +(@PATH,17,4531.962,-3397.123,227.9983,0,0,0,0,100,0), +(@PATH,18,4527.462,-3400.623,227.2483,0,0,0,0,100,0), +(@PATH,19,4520.34,-3406.627,227.3305,0,0,0,0,100,0), +(@PATH,20,4517.294,-3403.789,227.3069,0,0,0,0,100,0), +(@PATH,21,4526.909,-3393.429,227.3997,0,0,0,0,100,0), +(@PATH,22,4531.409,-3394.929,227.8997,0,0,0,0,100,0); + +SET @NPC := 111289; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4484.351,`position_y`=-3478.285,`position_z`=227.3069 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,4484.351,-3478.285,227.3069,0,0,0,0,100,0), +(@PATH,2,4480.057,-3487.22,227.2323,0,0,0,0,100,0), +(@PATH,3,4472.557,-3489.22,227.7323,0,0,0,0,100,0), +(@PATH,4,4472.306,-3489.237,227.8791,0,0,0,0,100,0), +(@PATH,5,4470.556,-3489.737,227.6291,0,0,0,0,100,0), +(@PATH,6,4462.207,-3481.591,227.8329,0,0,0,0,100,0), +(@PATH,7,4464.199,-3484.106,227.8086,0,0,0,0,100,0), +(@PATH,8,4476.075,-3486.219,227.4328,0,0,0,0,100,0), +(@PATH,9,4480.054,-3487.25,227.2926,0,0,0,0,100,0), +(@PATH,10,4472.554,-3489.25,227.7926,0,0,0,0,100,0), +(@PATH,11,4470.448,-3489.726,227.6761,0,0,0,0,100,0), +(@PATH,12,4461.976,-3481.571,227.8154,0,0,0,0,100,0), +(@PATH,13,4466.938,-3472.407,227.8242,0,0,0,0,100,0), +(@PATH,14,4479.269,-3468.501,227.1355,0,0,0,0,100,0), +(@PATH,15,4484.383,-3478.306,227.3069,0,0,0,0,100,0), +(@PATH,16,4479.968,-3487.13,227.2323,0,0,0,0,100,0), +(@PATH,17,4472.468,-3489.13,227.7323,0,0,0,0,100,0); + +SET @NPC := 103184; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4462.269,`position_y`=-3450.493,`position_z`=229.296 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,4462.269,-3450.493,229.296,0,0,0,0,100,0), +(@PATH,2,4459.769,-3447.243,230.296,0,0,0,0,100,0), +(@PATH,3,4458.269,-3445.243,231.046,0,0,0,0,100,0), +(@PATH,4,4457.019,-3443.493,231.796,0,0,0,0,100,0), +(@PATH,5,4455.269,-3441.243,232.546,0,0,0,0,100,0), +(@PATH,6,4453.519,-3438.743,233.046,0,0,0,0,100,0), +(@PATH,7,4452.269,-3437.243,233.796,0,0,0,0,100,0), +(@PATH,8,4452.268,-3436.947,233.8038,0,0,0,0,100,0), +(@PATH,9,4451.268,-3435.697,234.0538,0,0,0,0,100,0), +(@PATH,10,4456.768,-3431.197,233.5538,0,0,0,0,100,0), +(@PATH,11,4463.518,-3425.947,232.8038,0,0,0,0,100,0), +(@PATH,12,4466.768,-3423.447,232.3038,0,0,0,0,100,0), +(@PATH,13,4471.518,-3419.947,232.0538,0,0,0,0,100,0), +(@PATH,14,4467.077,-3423.216,232.6244,0,0,0,0,100,0), +(@PATH,15,4463.827,-3425.716,232.8744,0,0,0,0,100,0), +(@PATH,16,4458.577,-3429.716,233.6244,0,0,0,0,100,0), +(@PATH,17,4452.327,-3434.716,234.1244,0,0,0,0,100,0), +(@PATH,18,4452.155,-3435.054,234.091,0,0,0,0,100,0), +(@PATH,19,4451.155,-3435.804,234.091,0,0,0,0,100,0), +(@PATH,20,4452.905,-3438.304,233.341,0,0,0,0,100,0), +(@PATH,21,4454.905,-3440.554,232.841,0,0,0,0,100,0), +(@PATH,22,4455.905,-3442.304,232.091,0,0,0,0,100,0), +(@PATH,23,4457.155,-3443.804,231.591,0,0,0,0,100,0), +(@PATH,24,4458.905,-3446.054,230.841,0,0,0,0,100,0), +(@PATH,25,4460.655,-3448.304,229.841,0,0,0,0,100,0), +(@PATH,26,4462.905,-3451.554,229.091,0,0,0,0,100,0); + +SET @NPC := 103186; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4494.403,`position_y`=-3398.471,`position_z`=228.9183 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,4494.403,-3398.471,228.9183,0,0,0,0,100,0), +(@PATH,2,4497.653,-3396.221,229.6683,0,0,0,0,100,0), +(@PATH,3,4500.653,-3394.221,230.1683,0,0,0,0,100,0), +(@PATH,4,4509.161,-3388.243,230.0648,0,0,0,0,100,0), +(@PATH,5,4526.161,-3376.743,230.3148,0,0,0,0,100,0), +(@PATH,6,4529.797,-3374.429,230.5572,0,0,0,0,100,0), +(@PATH,7,4532.547,-3377.179,230.0572,0,0,0,0,100,0), +(@PATH,8,4531.893,-3376.673,230.1904,0,0,0,0,100,0), +(@PATH,9,4529.376,-3374.406,230.6659,0,0,0,0,100,0), +(@PATH,10,4525.376,-3377.156,230.1659,0,0,0,0,100,0), +(@PATH,11,4516.626,-3383.156,229.6659,0,0,0,0,100,0), +(@PATH,12,4508.783,-3388.445,229.8696,0,0,0,0,100,0), +(@PATH,13,4503.033,-3392.445,230.1196,0,0,0,0,100,0), +(@PATH,14,4497.533,-3396.195,229.6196,0,0,0,0,100,0), +(@PATH,15,4494.283,-3398.445,228.8696,0,0,0,0,100,0); + +SET @NPC := 102291; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3636.139,`position_y`=-4596.764,`position_z`=191.9429 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3636.139,-4596.764,191.9429,0,0,0,0,100,0), +(@PATH,2,3635.861,-4596.798,191.7083,0,0,0,0,100,0), +(@PATH,3,3635.853,-4596.449,191.8018,0,0,0,0,100,0), +(@PATH,4,3625.146,-4589.744,191.7298,0,0,0,0,100,0), +(@PATH,5,3624.396,-4588.744,191.7298,0,0,0,0,100,0), +(@PATH,6,3623.646,-4587.744,191.9798,0,0,0,0,100,0), +(@PATH,7,3623.146,-4586.994,192.7298,0,0,0,0,100,0), +(@PATH,8,3622.646,-4586.244,193.2298,0,0,0,0,100,0), +(@PATH,9,3619.531,-4582.521,193.1351,0,0,0,0,100,0), +(@PATH,10,3608.531,-4574.021,193.6351,0,0,0,0,100,0), +(@PATH,11,3607.281,-4573.271,192.6351,0,0,0,0,100,0), +(@PATH,12,3606.781,-4572.771,192.6351,0,0,0,0,100,0), +(@PATH,13,3606.531,-4572.521,192.3851,0,0,0,0,100,0), +(@PATH,14,3606.273,-4572.244,192.437,0,0,0,0,100,0), +(@PATH,15,3604.773,-4570.994,192.687,0,0,0,0,100,0), +(@PATH,16,3603.523,-4569.494,193.187,0,0,0,0,100,0), +(@PATH,17,3602.023,-4566.994,194.187,0,0,0,0,100,0), +(@PATH,18,3600.023,-4563.744,194.687,0,0,0,0,100,0), +(@PATH,19,3597.773,-4560.494,195.437,0,0,0,0,100,0), +(@PATH,20,3596.023,-4557.994,196.187,0,0,0,0,100,0), +(@PATH,21,3593.575,-4554.499,197.0962,0,0,0,0,100,0), +(@PATH,22,3591.325,-4550.999,197.8462,0,0,0,0,100,0), +(@PATH,23,3589.575,-4547.999,198.3462,0,0,0,0,100,0), +(@PATH,24,3587.575,-4544.499,199.0962,0,0,0,0,100,0), +(@PATH,25,3587.266,-4544.312,199.2521,0,0,0,0,100,0), +(@PATH,26,3586.766,-4543.312,199.2521,0,0,0,0,100,0), +(@PATH,27,3583.266,-4534.312,199.7521,0,0,0,0,100,0), +(@PATH,28,3581.901,-4530.598,199.9242,0,0,0,0,100,0), +(@PATH,29,3577.257,-4510.44,199.8448,0,0,0,0,100,0), +(@PATH,30,3576.757,-4505.69,199.3448,0,0,0,0,100,0), +(@PATH,31,3576.196,-4499.946,199.2152,0,0,0,0,100,0), +(@PATH,32,3580.946,-4493.946,199.7152,0,0,0,0,100,0), +(@PATH,33,3581.288,-4493.67,199.6084,0,0,0,0,100,0), +(@PATH,34,3581.538,-4493.42,199.6084,0,0,0,0,100,0), +(@PATH,35,3586.788,-4484.17,199.1084,0,0,0,0,100,0), +(@PATH,36,3588.606,-4481.567,199.091,0,0,0,0,100,0), +(@PATH,37,3594.356,-4476.567,198.341,0,0,0,0,100,0), +(@PATH,38,3596.606,-4474.567,197.841,0,0,0,0,100,0), +(@PATH,39,3596,-4475.001,198.0385,0,0,0,0,100,0), +(@PATH,40,3593,-4477.751,198.5385,0,0,0,0,100,0), +(@PATH,41,3588.387,-4481.783,199.0264,0,0,0,0,100,0), +(@PATH,42,3582.387,-4491.783,199.5264,0,0,0,0,100,0), +(@PATH,43,3582.222,-4492.081,199.736,0,0,0,0,100,0), +(@PATH,44,3581.222,-4493.581,199.486,0,0,0,0,100,0), +(@PATH,45,3576.117,-4500.31,199.3681,0,0,0,0,100,0), +(@PATH,46,3577.448,-4510.77,199.8773,0,0,0,0,100,0), +(@PATH,47,3582.276,-4530.902,199.8257,0,0,0,0,100,0), +(@PATH,48,3585.526,-4540.152,199.3257,0,0,0,0,100,0), +(@PATH,49,3587.005,-4543.549,199.229,0,0,0,0,100,0), +(@PATH,50,3589.755,-4548.549,198.229,0,0,0,0,100,0), +(@PATH,51,3592.005,-4551.799,197.729,0,0,0,0,100,0), +(@PATH,52,3593.605,-4554.598,197.1403,0,0,0,0,100,0), +(@PATH,53,3595.355,-4557.098,196.3903,0,0,0,0,100,0), +(@PATH,54,3596.855,-4559.598,195.6403,0,0,0,0,100,0), +(@PATH,55,3598.355,-4562.098,195.1403,0,0,0,0,100,0), +(@PATH,56,3600.355,-4565.348,194.6403,0,0,0,0,100,0), +(@PATH,57,3602.105,-4567.848,193.8903,0,0,0,0,100,0), +(@PATH,58,3603.605,-4570.348,193.1403,0,0,0,0,100,0), +(@PATH,59,3604.866,-4572.453,192.3813,0,0,0,0,100,0), +(@PATH,60,3606.116,-4573.453,192.3813,0,0,0,0,100,0), +(@PATH,61,3606.366,-4573.703,192.8813,0,0,0,0,100,0), +(@PATH,62,3607.866,-4574.703,193.6313,0,0,0,0,100,0), +(@PATH,63,3619.845,-4582.56,193.2473,0,0,0,0,100,0), +(@PATH,64,3622.345,-4585.81,192.9973,0,0,0,0,100,0), +(@PATH,65,3623.095,-4586.81,192.7473,0,0,0,0,100,0), +(@PATH,66,3623.845,-4587.56,191.9973,0,0,0,0,100,0), +(@PATH,67,3624.595,-4588.81,191.7473,0,0,0,0,100,0), +(@PATH,68,3624.654,-4589.03,191.5894,0,0,0,0,100,0), +(@PATH,69,3625.404,-4589.78,191.5894,0,0,0,0,100,0), +(@PATH,70,3636.153,-4596.696,191.9285,0,0,0,0,100,0); diff --git a/sql/updates/world/2015_05_16_00_world.sql b/sql/updates/world/2015_05_16_00_world.sql new file mode 100644 index 00000000000..4a77cdd90fe --- /dev/null +++ b/sql/updates/world/2015_05_16_00_world.sql @@ -0,0 +1,100 @@ +UPDATE `creature_text` SET `emote`=25 WHERE `entry`=21797 AND `groupid`=0 AND `id`=0; +UPDATE `creature_template` SET `InhabitType`=4, `flags_extra`=128 WHERE `entry`=21876; +UPDATE `creature_template` SET `flags_extra`=128 WHERE `entry`=21872; + +UPDATE `creature_template` SET `spell1`=37729, `spell2`=37727, `spell3`=39658, `spell4`=37728 WHERE `entry`=21867; + +DELETE FROM `creature_text` WHERE `entry`in(21877,21872,21867); +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(21877, 0, 0, 'Your pathetic attempt to escape will be short lived, Gorefiend. Let the $g boy:girl, go and submit! Even with your armor and weapons, you cannot defeat the ancients!', 12, 0, 100, 1, 0, 0, 19504, 0, 'Karsius the Ancient Watcher to Player'), +(21877, 1, 0, 'What ... have you done...', 14, 0, 100, 0, 0, 0, 19506, 0, 'Karsius the Ancient Watcher to Player'), +(21867, 0, 0, 'We will meet again... Someday.', 12, 0, 100, 273, 0, 0, 19508, 0, 'Teron Gorefiend'), +(21867, 1, 0, 'Death incarnate has been released upon the world once more! Teron Gorefiend has returned...', 14, 0, 100, 22, 0, 0, 19509, 0, 'Teron Gorefiend'), +(21872, 0, 0, 'Waste no time, fool! Use our power to kill those that stand in our way! Destroy Karsius before you are subdued!', 15, 0, 100, 1, 0, 0, 19503, 0, 'The Voice of Gorefiend'); + +UPDATE `creature_template` SET `ainame`='SmartAI', `scriptname`='' WHERE `entry` IN(21797,21876,21877,21867); + +DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid` IN(21797,21876,21877,21867); +DELETE FROM `smart_scripts` WHERE `source_type`=9 AND `entryorguid` IN(2179700,2179701); + +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(21797, 0, 0, 1, 19, 0, 100, 0, 10645, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - On Quest \'Teron Gorefiend, I am...\' Taken - Store Targetlist'), +(21797, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 80, 2179700, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - On Quest \'Teron Gorefiend, I am...\' Taken - Run Script'), +(21797, 0, 2, 3, 19, 0, 100, 0, 10639, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - On Quest \'Teron Gorefiend, I am...\' Taken - Store Targetlist'), +(21797, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 80, 2179700, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - On Quest \'Teron Gorefiend, I am...\' Taken - Run Script'), +(21797, 0, 4, 0, 38, 0, 100, 0, 1, 1, 0, 0, 80, 2179701, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - On Data Set - Run Script 2'), +(21797, 0, 5, 0, 40, 0, 100, 0, 3, 21867, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - On Reached WP7 - Despawn'), +(21797, 0, 6, 7, 6, 0, 100, 0, 0, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 19, 21877, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - On Death - Set Data 2 2 on Karsius the Ancient Watcher'), +(21797, 0, 7, 8, 61, 0, 100, 0, 0, 0, 0, 0, 28, 37782, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - Just Died - Remove Aura Disembodied Spirit'), +(21797, 0, 8, 0, 61, 0, 100, 0, 0, 0, 0, 0, 28, 37748, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - Just Died - Remove Aura Teron Gorefiend'), + +(21876, 0, 0, 1, 11, 0, 100, 1, 0, 0, 0, 0, 11, 37761, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Chain of Shadows - On Respawn - Cast \'Ancient Draenei Warden\''), +(21876, 0, 1, 0, 61, 0, 100, 1, 0, 0, 0, 0, 17, 333, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Chain of Shadows - On Respawn - Set Emote State 333'), +(21876, 0, 2, 0, 1, 0, 33, 0, 8000, 21000, 8000, 21000, 11, 37784, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Chain of Shadows - OOC - Cast Enforced Submission'), +(21876, 0, 3, 0, 1, 0,100, 1, 0, 0, 0, 0, 11, 37784, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Chain of Shadows - OOC - Cast Enforced Submission (No Repeat)'), +(21877, 0, 1, 0, 11, 0, 100, 1, 0, 0, 0, 0, 17, 333, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Karsius the Ancient Watcher - On Respawn - Set Emote State 333'), +(21877, 0, 2, 0, 1, 0, 100, 0, 3000, 3000, 3000, 3000, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Karsius the Ancient Watcher - OOC - Set Unit Flags'), +(21877, 0, 3, 4, 6, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 9, 21876, 0, 200, 0, 0, 0, 0, 'Karsius the Ancient Watcher - On Death - Despawn Chain of Shadows'), +(21877, 0, 4, 5, 61, 0, 100, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 21867, 0, 0, 0, 0, 0, 0, 'Karsius the Ancient Watcher - On Death - Set Data'), +(21877, 0, 5, 0, 61, 0, 100, 0, 0, 0, 0, 0, 41, 5000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Karsius the Ancient Watcher - On Death - Despawn'), +(21877, 0, 6, 0, 1, 0, 100, 0, 3000, 3000, 3000, 3000, 19, 768, 0, 0, 0, 0, 0, 19, 21867, 0, 0, 0, 0, 0, 0, 'Karsius the Ancient Watcher - OOC - Set Unit Flags'), +(21877, 0, 7, 8, 7, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 9, 21876, 0, 200, 0, 0, 0, 0, 'Karsius the Ancient Watcher - On Evade Despawn'), +(21877, 0, 8, 9, 61, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 19, 21797, 0, 0, 0, 0, 0, 0, 'Karsius the Ancient Watcher - Despawn Ancient Shadowmoon Spirit'), +(21877, 0, 9, 10, 61, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 19, 21867, 0, 0, 0, 0, 0, 0, 'Karsius the Ancient Watcher - Despawn Ancient Shadowmoon Spirit'), +(21877, 0, 10, 0, 61, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Karsius the Ancient Watcher - Despawn Ancient Shadowmoon Spirit'), +(21877, 0, 11, 12, 6, 0, 100, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Karsius the Ancient Watcher - Just Died - Say Line 1'), +(21877, 0, 12, 13, 61, 0, 100, 0, 0, 0, 0, 0, 28, 37782, 0, 0, 0, 0, 0, 21, 100, 0, 0, 0, 0, 0, 0, 'Karsius the Ancient Watcher - Just Died - Remove Aura Disembodied Spirit'), +(21877, 0, 13, 0, 61, 0, 100, 0, 0, 0, 0, 0, 28, 37748, 0, 0, 0, 0, 0, 21, 100, 0, 0, 0, 0, 0, 0, 'Karsius the Ancient Watcher - Just Died - Remove Aura Teron Gorefiend'), +(21877, 0, 14, 0, 38, 0, 100, 0, 2, 2, 0, 0, 24, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Karsius the Ancient Watcher - On Data Set 2 2 - Evade'), +(2179701, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - On Script 2 - Evade'), +(2179701, 9, 1, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 43, 0, 10720, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - On Script 2 - Mount'), +(2179701, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - On Script 2 - Say Line 0'), -- 13:51:07.500 +(2179701, 9, 3, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - On Script 2 - Say Line 1'), -- 13:51:10.750 +(2179701, 9, 4, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 53, 1, 21867, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - On Script 2 - Start WP'), +(2179700, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - On Script - Say Line 0'), -- 13:49:05.750 +(2179700, 9, 1, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 36, 21867, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - On Script - Change Entry'), -- 13:49:09.266 +(2179700, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 18, 256, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - On Script - Set Unit Flags'), -- 13:49:09.266 +(2179700, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - On Script - Add Aura Disembodied Spirit'), -- 13:49:09.266 +(2179700, 9, 4, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 75, 37782, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - On Script - Invoker Cast - Teron Gorefiend'), -- 13:49:10.235 +(2179700, 9, 5, 0, 0, 0, 100, 0, 0, 0, 0, 0, 85, 37769, 2, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - On Script - Invoker Cast - Teron Gorefiend'), -- 13:49:10.235 +(2179700, 9, 6, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 37728, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - On Script - Cast - Haste'), -- 13:49:10.235 +(2179700, 9, 7, 0, 0, 0, 100, 0, 0, 0, 0, 0, 12, 21876, 1, 300000, 0, 0, 0, 8, 0, 0, 0, -4524.726, 1009.763, 21.32487, 2.024582, 'Ancient Shadowmoon Spirit - On Script - Summon Creature \'Chain of Shadows\''), -- 13:49:12.782 +(2179700, 9, 8, 0, 0, 0, 100, 0, 0, 0, 0, 0, 12, 21876, 1, 300000, 0, 0, 0, 8, 0, 0, 0, -4515.913, 1020.078, 23.67377, 2.722714, 'Ancient Shadowmoon Spirit - On Script - Summon Creature \'Chain of Shadows\''), -- 13:49:12.782 +(2179700, 9, 9, 0, 0, 0, 100, 0, 0, 0, 0, 0, 12, 21876, 1, 300000, 0, 0, 0, 8, 0, 0, 0, -4515.165, 1033.106, 20.71271, 3.176499, 'Ancient Shadowmoon Spirit - On Script - Summon Creature \'Chain of Shadows\''), -- 13:49:12.782 +(2179700, 9, 10, 0, 0, 0, 100, 0, 0, 0, 0, 0, 12, 21876, 1, 300000, 0, 0, 0, 8, 0, 0, 0, -4525, 1045.415, 19.89447, 4.153883, 'Ancient Shadowmoon Spirit - On Script - Summon Creature \'Chain of Shadows\''), -- 13:49:12.782 +(2179700, 9, 11, 0, 0, 0, 100, 0, 0, 0, 0, 0, 12, 21876, 1, 300000, 0, 0, 0, 8, 0, 0, 0, -4537.54, 1049.356, 18.74087, 4.415683, 'Ancient Shadowmoon Spirit - On Script - Summon Creature \'Chain of Shadows\''), -- 13:49:12.782 +(2179700, 9, 12, 0, 0, 0, 100, 0, 0, 0, 0, 0, 12, 21876, 1, 300000, 0, 0, 0, 8, 0, 0, 0, -4551.174, 1044.113, 16.52099, 5.218534, 'Ancient Shadowmoon Spirit - On Script - Summon Creature \'Chain of Shadows\''), -- 13:49:12.782 +(2179700, 9, 13, 0, 0, 0, 100, 0, 0, 0, 0, 0, 12, 21876, 1, 300000, 0, 0, 0, 8, 0, 0, 0, -4523.753, 1062.352, 24.30409, 4.433136, 'Ancient Shadowmoon Spirit - On Script - Summon Creature \'Chain of Shadows\''), -- 13:49:12.782 +(2179700, 9, 14, 0, 0, 0, 100, 0, 0, 0, 0, 0, 12, 21876, 1, 300000, 0, 0, 0, 8, 0, 0, 0, -4509.667, 1047.063, 26.45817, 3.787364, 'Ancient Shadowmoon Spirit - On Script - Summon Creature \'Chain of Shadows\''), -- 13:49:12.782 +(2179700, 9, 15, 0, 0, 0, 100, 0, 0, 0, 0, 0, 12, 21876, 1, 300000, 0, 0, 0, 8, 0, 0, 0, -4504.674, 1020.563, 33.07281, 2.932153, 'Ancient Shadowmoon Spirit - On Script - Summon Creature \'Chain of Shadows\''), -- 13:49:12.782 +(2179700, 9, 16, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 12, 21877, 1, 300000, 0, 0, 0, 8, 0, 0, 0, -4535.794, 1029.284, 8.836361, 3.787364, 'Ancient Shadowmoon Spirit - On Script - Summon Creature \'Karsius the Ancient Watcher\''), -- 13:49:12.782 +(2179700, 9, 17, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, 21877, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - On Script - Say Line 0 on \'Karsius the Ancient Watcher\''), -- 13:49:12.782 +(2179700, 9, 18, 0, 0, 0, 100, 0, 9000, 9000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, 21872, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - On Script - Say Line 0 on The Voice of Gorefiend'); -- 13:49:21.016 + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`IN(37748,37784); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, 37748, 0, 0, 31, 0, 3, 21867, 0, 0, 0, 0, '', 'Teron Gorefiend (effects 1 & 2) target teron gorefiend'), +(13, 6, 37748, 0, 0, 31, 0, 4, 0, 0, 0, 0, 0, '', 'Teron Gorefiend (effect 2 & 3) targets player'), +(13, 1, 37784, 0, 0, 31, 0, 3, 21867, 0, 0, 0, 0, '', 'Enforced Submission Targets Teron Gorefiend'), +(13, 1, 37784, 0, 1, 31, 0, 3, 21797, 0, 0, 0, 0, '', 'Enforced Submission Targets Ancient Shadowmoon Spirit'); + +DELETE FROM `spell_linked_spell` WHERE `spell_trigger`=37748; +UPDATE `quest_template` SET `SourceSpellId`=0 WHERE `Id`in(10645,10639); + +DELETE FROM `creature_template_addon` WHERE `entry` IN (21876,21877,21797,21867); +INSERT INTO `creature_template_addon` (`entry`, `mount`, `bytes1`, `bytes2`, `auras`) VALUES +(21876, 0, 0x0, 0x1, '37761'), -- 21876 - 37761 +(21877, 0, 0x0, 0x1, '37497'), -- 21877 +(21797, 0, 0x0, 0x1, '37509'), -- 21797 - 37509 +(21867, 0, 0x0, 0x1, '37509'); -- 21867 - 37509 10720 + +UPDATE `creature_template` SET `unit_flags`=768 WHERE `entry`=21876; +UPDATE `creature_template` SET `faction`=1821, `unit_flags`=33536 WHERE `entry`=21877; +UPDATE `creature_template` SET `faction`=35, `unit_flags`=768 WHERE `entry`=21867; + +DELETE FROM `waypoints` WHERE `entry`=21867; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(21867, 1, -4519.978, 1004.27, 12.49499, 'Teron Gorefiend'), +(21867, 2, -4520.013, 995.0764, 11.57806, 'Teron Gorefiend'), +(21867, 3, -4518.75, 968.75, 12.04559, 'Teron Gorefiend'), +(21867, 4, -4512.086, 938.8976, 2.529049, 'Teron Gorefiend'); diff --git a/sql/updates/world/2015_05_17_00_world.sql b/sql/updates/world/2015_05_17_00_world.sql new file mode 100644 index 00000000000..67a5c7635ae --- /dev/null +++ b/sql/updates/world/2015_05_17_00_world.sql @@ -0,0 +1,3 @@ +-- +DELETE FROM `skill_fishing_base_level` WHERE `entry`=4722; +INSERT INTO `skill_fishing_base_level` (`entry`, `skill`) VALUES (4722,430); diff --git a/sql/updates/world/2015_05_17_01_world.sql b/sql/updates/world/2015_05_17_01_world.sql new file mode 100644 index 00000000000..88e0e0e4f0a --- /dev/null +++ b/sql/updates/world/2015_05_17_01_world.sql @@ -0,0 +1,10 @@ +-- +UPDATE `creature_template` SET `AIName`='SmartAI', `ScriptName`="" WHERE `entry` IN (19991); +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (19991) AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(19991, 0, 0, 0, 4, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Bloodmaul Brute - On Death - Say text 1'), +(19991, 0, 1, 0, 0, 0, 100, 0, 2000, 5000, 4000, 5000, 11, 15496, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,0,'Bloodmaul Brute - IC - cast Cleave'), +(19991, 0, 2, 0, 0, 0, 100, 0, 5000, 10000, 8000, 12000, 11, 37577, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,0,'Bloodmaul Brute - IC - debilitating-strike'), +(19991, 0, 3, 0, 0, 0, 100, 1, 15000, 20000, 10000, 15000, 11, 34932, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Bloodmaul Brute - IC - Bloodmaul Buzz'), +(19991, 0, 4, 5, 2, 0, 100, 1, 0, 20, 1, 1, 11, 8599, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Bloodmaul Brute - Heath pct - cast Enrage'), +(19991, 0, 5, 0, 61, 0, 100, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Bloodmaul Brute - Heath pct - say text 3'); diff --git a/sql/updates/world/2015_05_19_00_world_2015_04_05_07.sql b/sql/updates/world/2015_05_19_00_world_2015_04_05_07.sql new file mode 100644 index 00000000000..2e603ee893b --- /dev/null +++ b/sql/updates/world/2015_05_19_00_world_2015_04_05_07.sql @@ -0,0 +1,7 @@ +DROP TABLE IF EXISTS `gameobject_addon`; +CREATE TABLE `gameobject_addon` ( + `guid` bigint(20) unsigned NOT NULL DEFAULT '0', + `invisibilityType` tinyint(3) unsigned NOT NULL DEFAULT '0', + `invisibilityValue` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`guid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; diff --git a/sql/updates/world/2015_05_19_01_world.sql b/sql/updates/world/2015_05_19_01_world.sql new file mode 100644 index 00000000000..83dfb06b6fd --- /dev/null +++ b/sql/updates/world/2015_05_19_01_world.sql @@ -0,0 +1,22 @@ +-- Gossip Menu Option for Squire David (33447) +SET @SourceGroup = 10340; +SET @SourceEntry = 0; +SET @ConditionTypeOrReference = 9; + +DELETE FROM conditions where SourceGroup=@SourceGroup and SourceEntry=@SourceEntry; +INSERT INTO conditions(SourceTypeOrReferenceId, SourceGroup, SourceEntry, SourceId, ElseGroup, ConditionTypeOrReference, ConditionTarget, ConditionValue1, ConditionValue2, ConditionValue3, NegativeCondition, ErrorType, ErrorTextId, ScriptName, Comment) VALUES +(15, @SourceGroup, @SourceEntry, 0, 0, @ConditionTypeOrReference, 0, 13679, 0, 0, 0, 0, 0, '', 'Show gossip option if player has quest 13679'), +(15, @SourceGroup, @SourceEntry, 0, 1, @ConditionTypeOrReference, 0, 13680, 0, 0, 0, 0, 0, '', 'Show gossip option if player has quest 13680'); + +-- Squire David SAI +SET @ENTRY := 33447; +UPDATE creature_template SET ScriptName="" WHERE entry=33447; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,1,62,0,100,0,10340,0,0,0,11,63028,0,0,0,0,0,7,0,0,0,0,0,0,0,"Squire David - On Gossip Option 0 Selected - Cast 'Force Cast'"), +(@ENTRY,0,1,0,61,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Squire David - On Gossip Option 0 Selected - Close Gossip"); + +DELETE FROM `spell_target_position` WHERE `id`=63026; +INSERT INTO `spell_target_position` (`id`, `effIndex`, `target_map`, `target_position_x`, `target_position_y`, `target_position_z`, `target_orientation`) VALUES +(63026, 0, 571, 8575.38, 921.85, 547.554, 0.2718); diff --git a/sql/updates/world/2015_05_19_02_world.sql b/sql/updates/world/2015_05_19_02_world.sql new file mode 100644 index 00000000000..6194278061e --- /dev/null +++ b/sql/updates/world/2015_05_19_02_world.sql @@ -0,0 +1,3 @@ +DELETE FROM `spell_target_position` WHERE `id`=63171; +INSERT INTO `spell_target_position` (`id`, `effIndex`, `target_map`, `target_position_x`, `target_position_y`, `target_position_z`, `target_orientation`) VALUES +(63171, 0, 571, 8533.11, 1069.66, 551.784, 0.5296); diff --git a/sql/updates/world/2015_05_20_00_world.sql b/sql/updates/world/2015_05_20_00_world.sql new file mode 100644 index 00000000000..da59eb2ed07 --- /dev/null +++ b/sql/updates/world/2015_05_20_00_world.sql @@ -0,0 +1,60 @@ +-- +-- Argent Champion SAI mechanic +SET @Arg_Champion := 33707; +SET @Script := 3370700; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`IN (@Arg_Champion, 33518); +UPDATE `creature_template_addon` SET `auras`='63501 62852 64723' WHERE `entry`= @Arg_Champion; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@Arg_Champion, 33518) AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `source_type`=9 AND `entryorguid`=@Script; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@Arg_Champion,0,0,0,25,0,100,0,0,0,0,0,28,64223,0,0,0,0,0,1,0,0,0,0,0,0,0,'Arg Champion - On Reset - Remove auras from Defend'), +(@Arg_Champion,0,1,0,63,0,100,0,0,0,0,0,80,@Script,2,0,0,0,0,1,0,0,0,0,0,0,0,'Arg Champion - Just created - Call timed actionlist'), +(@Arg_Champion,0,2,0,52,0,100,0,0,@Arg_Champion,0,0,11,63010,0,0,0,0,0,7,0,0,0,0,0,0,0,'Arg Champion - On text over - Cast Charge'), +(@Arg_Champion,0,3,0,0,0,100,0,0,0,1500,4000,11,62544,0,0,0,0,0,2,0,0,0,0,0,0,0,'Arg Champion - IC - Cast Thrust'), +(@Arg_Champion,0,4,0,9,0,100,0,5,5,4000,7000,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'Arg Champion - On more than 5 yard range - Cast Shield-Breaker'), +(@Arg_Champion,0,5,0,0,0,100,0,9000,11000,9000,10000,46,20,0,0,0,0,0,1,0,0,0,0,0,0,0,'Arg Champion - IC - Move forward 20 yards'), +(@Arg_Champion,0,6,7,9,0,100,0,9,15,3000,3000,11,63010,0,0,0,0,0,2,0,0,0,0,0,0,0,'Arg Champion - On 10-12 yard range - Cast Charge'), +(@Arg_Champion,0,7,0,61,0,100,0,0,0,0,0,11,62575,0,0,0,0,0,2,0,0,0,0,0,0,0,'Arg Champion - Linked with previous event - Cast Shield-Breaker'), +(@Arg_Champion,0,8,9,2,0,100,1,1,6,60000,60000,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,'Arg Champion - On HP% between 1% and 6% - Change faction to 35'), +(@Arg_Champion,0,9,10,61,0,100,0,0,0,0,0,45,0,1,0,0,0,0,19,33518,100,0,0,0,0,0,'Arg Champion - On HP% between 1% and 6% - set data'), +(@Arg_Champion,0,10,11,61,0,100,0,0,0,0,0,1,2,0,0,0,0,0,21,50,0,0,0,0,0,0,'Arg Champion - Linked with previous event - Say text'), +(@Arg_Champion,0,11,0,61,0,100,0,0,0,0,0,41,3000,0,0,0,0,0,1,0,0,0,0,0,0,0,'Arg Champion - Linked with previous event - Despawn in 3 sec'), +(@Arg_Champion,0,12,13,5,0,100,0,60000,60000,1,0,1,1,0,0,0,0,0,21,50,0,0,0,0,0,0,'Arg Champion - On player killed - Say text'), +(@Arg_Champion,0,13,0,61,0,100,0,0,0,0,0,41,4000,0,0,0,0,0,1,0,0,0,0,0,0,0,'Arg Champion - Linked with previous event - Despawn in 1 ms'), +-- Timed actionlist 1 +(@Script,9,0,0,0,0,100,0,0,0,0,0,59,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Arg Champion - Script 1 - Set run ON'), +(@Script,9,1,0,0,0,100,0,0,0,0,0,42,0,1,0,0,0,0,1,0,0,0,0,0,0,0,'Arg Champion - Script 1 - Set INVINCIBILITY'), +(@Script,9,2,0,0,0,100,0,0,0,0,0,11,62719,0,0,0,0,0,1,0,0,0,0,0,0,0,'Arg Champion - Script 1 - Cast Defend on self/Layer 1/'), +(@Script,9,3,0,0,0,100,0,0,0,0,0,11,62719,0,0,0,0,0,1,0,0,0,0,0,0,0,'Arg Champion - Script 1 - Cast Defend on self/Layer 2/'), +(@Script,9,4,0,0,0,100,0,0,0,0,0,11,62719,0,0,0,0,0,1,0,0,0,0,0,0,0,'Arg Champion - Script 1 - Cast Defend on self/Layer 3/'), +(@Script,9,5,0,0,0,100,0,0,0,0,0,69,0,0,0,0,0,0,8,0,0,0,8562.076172, 1115.047119, 556.787231, 2.587977,'Arg Champion - Script 1 - Move to pos'), +(@Script,9,6,0,0,0,100,0,0,0,0,0,59,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Arg Champion - Script 1 - Set run Off'), +(@Script,9,7,0,0,0,100,0,0,0,0,0,11,64223,0,0,0,0,0,1,0,0,0,0,0,0,0,'Arg Champion - Script 1 - Cast aura TriggerS for Defend /10 sec one/'), +(@Script,9,8,0,0,0,100,0,3500,3500,0,0,2,14,0,0,0,0,0,1,0,0,0,0,0,0,0,'Arg Champion - Script 1 - Change faction to 14'), +(@Script,9,9,0,0,0,100,0,0,0,0,0,1,0,1500,0,0,0,0,21,50,0,0,0,0,0,0,'Arg Champion - Script 1 - Say text'), +(33518, 0, 0, 1, 62, 0, 100, 0, 10343, 0, 0, 0, 11, 63171, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, "Squire Danny -On gossip select, summons Argent Champion" ), +(33518, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, "Squire Danny - On gossip select - Close gossip" ), +(33518, 0, 2, 0, 61,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,'Squire Danny - Linked with previous event - store target'), +(33518, 0, 3, 0, 38,0,100,0,0,1,0,0,85,63516,0,0,0,0,0,12,1,0,0,0,0,0,0,'Squire Danny - On data set - cast quest credit'); + +-- Argent Champions texts +DELETE FROM `creature_text` WHERE `entry`= @Arg_Champion; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`,`BroadcastTextId`) VALUES +(@Arg_Champion,0,1,'Ready yourself!',12,0,100,1,1000,0,'Argent Champion',33753), +(@Arg_Champion,0,2,'Prepare yourself!',12,0,100,1,1000,0,'Argent Champion',33750), +(@Arg_Champion,0,3,'On your guard!',12,0,100,1,1000,0,'Argent Champion',33752), +(@Arg_Champion,0,4,'On your guard!',12,0,100,1,1000,0,'Argent Champion',33756), +(@Arg_Champion,0,5,'Let it begin!',12,0,100,1,1000,0,'Argent Champion',33758), +(@Arg_Champion,0,6,'Argent Champion is looking winded!',12,0,100,1,1000,0,'Argent Champion',0), +(@Arg_Champion,1,7,'Victory is mine!',12,0,100,1,1000,0,'Argent Champion',33771), +(@Arg_Champion,1,8,'It seems you still need more practice. Perhaps another time.',12,0,100,1,1000,0,'Argent Champion',33763), +(@Arg_Champion,1,9,'I have won. Better luck another time, friend.',12,0,100,1,1000,0,'Argent Champion',33773), +(@Arg_Champion,1,10,'I am afraid you will need more practice to defeat me.',12,0,100,1,1000,0,'Argent Champion',33772), +(@Arg_Champion,2,11,'I yield to you.',12,0,100,1,1000,0,'Argent Champion',33767), +(@Arg_Champion,2,12,'That was a well fought battle. I yield to you.',12,0,100,1,1000,0,'Argent Champion',33776), +(@Arg_Champion,2,13,'It would seem I underestimated your skills. Well done..',12,0,100,1,1000,0,'Argent Champion',33768), +(@Arg_Champion,2,14,'I have been defeated. Good fight!',12,0,100,1,1000,0,'Argent Champion',33868); + +DELETE FROM `spell_target_position` WHERE `id`=63137; +INSERT INTO `spell_target_position` (`id`, `effIndex`, `target_map`, `target_position_x`, `target_position_y`, `target_position_z`, `target_orientation`) VALUES +(63137, 0, 571, 8542.52, 1083.690, 556.406, 1.3862); diff --git a/sql/updates/world/2015_05_20_01_world.sql b/sql/updates/world/2015_05_20_01_world.sql new file mode 100644 index 00000000000..332458a4afb --- /dev/null +++ b/sql/updates/world/2015_05_20_01_world.sql @@ -0,0 +1,10 @@ +-- +DELETE FROM `spell_group` WHERE `id`=1121; +INSERT INTO `spell_group` (`id`, `spell_id`) VALUES +(1121,3671), +(1121,3672), +(1121,3673); + +DELETE FROM `spell_group_stack_rules` WHERE `group_id`=1121; +INSERT INTO `spell_group_stack_rules` (`group_id`, `stack_rule`) VALUES +(1121,1); diff --git a/sql/updates/world/2015_05_20_02_world.sql b/sql/updates/world/2015_05_20_02_world.sql new file mode 100644 index 00000000000..0540f17eed6 --- /dev/null +++ b/sql/updates/world/2015_05_20_02_world.sql @@ -0,0 +1,5 @@ +-- +UPDATE `gossip_menu_option` SET `action_menu_id`=943 WHERE `menu_id`=942 AND `id`=0; +UPDATE `gossip_menu_option` SET `action_menu_id`=944 WHERE `menu_id`=942 AND `id`=1; +DELETE FROM `gossip_menu` WHERE `entry` IN (944,943); +INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (943,1521),(944,1646); diff --git a/sql/updates/world/2015_05_20_03_world.sql b/sql/updates/world/2015_05_20_03_world.sql new file mode 100644 index 00000000000..70abf4ee1af --- /dev/null +++ b/sql/updates/world/2015_05_20_03_world.sql @@ -0,0 +1,6 @@ +-- +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (12222); +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (12222) AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(12222, 0, 0, 0, 0, 0, 100, 0, 4000, 6000, 7000, 10000, 11, 26419, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0,0,'Creeping Sludge - IC - Cast Acid Spray'), +(12222, 0, 1, 0, 25, 0, 100, 0, 0, 0, 0, 0, 75, 22638, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Creeping Sludge - On reset - Add Poison Shock'); diff --git a/sql/updates/world/2015_05_20_04_world.sql b/sql/updates/world/2015_05_20_04_world.sql new file mode 100644 index 00000000000..863f0b86d50 --- /dev/null +++ b/sql/updates/world/2015_05_20_04_world.sql @@ -0,0 +1,8 @@ +-- +UPDATE `smart_scripts` SET `event_type`=61, `event_param1`=0, `event_param2`=0, `event_param3`=0, `event_param4`=0, `action_param1`=10000 WHERE `entryorguid`=28156 AND `source_type`=0 AND `id`=3; +UPDATE `smart_scripts` SET `link`=3 WHERE `entryorguid`=28156 AND `source_type`=0 AND `id`=2; +UPDATE `smart_scripts` SET `event_flags`=1 WHERE `entryorguid`=28156 AND `source_type`=0 AND `id`=0; + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=51276; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(13,1,51276,0,0,31,0,3,28156,0,0,0,0,'','Incinerate Corpse can be used only on Defeated Argent Footman.'); diff --git a/sql/updates/world/2015_05_20_05_world.sql b/sql/updates/world/2015_05_20_05_world.sql new file mode 100644 index 00000000000..0e678b593aa --- /dev/null +++ b/sql/updates/world/2015_05_20_05_world.sql @@ -0,0 +1,110 @@ +-- +UPDATE `npc_text` SET `BroadcastTextId0`= 33761 WHERE `id`=14391; +DELETE FROM `gossip_menu_option` WHERE `menu_id`=4007; +INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`, `OptionBroadcastTextID`)VALUES +(4007,0,3,"I would like training.",5,16,0,0,0,0,'', 2603), +(4007,1,0,"I wish to unlearn my talents.",16,16,4461,0,0,0,'', 8271), +(4007,2,0,"I wish to know about Dual Talent Specialization.",1,1,10371,0,0,0,'',33762); +DELETE FROM `gossip_menu` WHERE `Entry`=4007 AND `text_id` IN (4999, 5000); +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (4007, 4999), (4007, 5000); +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14,15) AND `SourceGroup`=4007; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`, `NegativeCondition`) VALUES +(14, 4007, 4999, 0, 15, 4, 0, 0, 0, '', 'Show gossip text if player is a hunter', 0), +(14, 4007, 5000, 0, 15, 4, 0, 0, 0, '', 'Show gossip text if player is not a hunter', 1), +(15, 4007, 0, 0, 15, 4, 0, 0, 0, '', 'Show gossip option if player is a hunter', 0), +(15, 4007, 1, 0, 15, 4, 0, 0, 0, '', 'Show gossip option if player is a hunter', 0), +(15, 4007, 2, 0, 15, 4, 0, 0, 0, '', 'Show gossip option if player is a hunter', 0); + +DELETE FROM `gossip_menu_option` WHERE `menu_id`=4534; +INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`, `OptionBroadcastTextID`)VALUES +(4534,0,3,"I would like training.",5,16,0,0,0,0,'', 2603), +(4534,1,0,"I wish to unlearn my talents.",16,16,4461,0,0,0,'', 8271), +(4534,2,0,"I wish to know about Dual Talent Specialization.",1,1,10371,0,0,0,'',33762); +DELETE FROM `gossip_menu` WHERE `Entry`=4534 AND `text_id` IN (563, 562); +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (4534, 563), (4534, 562); +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14,15) AND `SourceGroup`=4534; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`, `NegativeCondition`) VALUES +(14, 4534, 562, 0, 15, 128, 0, 0, 0, '', 'Show gossip text if player is a Mage', 0), +(14, 4534, 563, 0, 15, 128, 0, 0, 0, '', 'Show gossip text if player is not a Mage', 1), +(15, 4534, 0, 0, 15, 128, 0, 0, 0, '', 'Show gossip option if player is a Mage', 0), +(15, 4534, 1, 0, 15, 128, 0, 0, 0, '', 'Show gossip option if player is a Mage', 0), +(15, 4534, 2, 0, 15, 128, 0, 0, 0, '', 'Show gossip option if player is a Mage', 0); + +DELETE FROM `gossip_menu_option` WHERE `menu_id`=4092; +INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`, `OptionBroadcastTextID`)VALUES +(4092,0,3,"I would like training.",5,16,0,0,0,0,'', 2603), +(4092,1,0,"I wish to unlearn my talents.",16,16,4461,0,0,0,'', 8271), +(4092,2,0,"I wish to know about Dual Talent Specialization.",1,1,10371,0,0,0,'',33762); +DELETE FROM `gossip_menu` WHERE `Entry`=4092 AND `text_id` IN (4867, 4993); +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (4092, 4867), (4092, 4993); + +DELETE FROM `gossip_menu_option` WHERE `menu_id`=4621; +INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`, `OptionBroadcastTextID`)VALUES +(4621,0,3,"I would like training.",5,16,0,0,0,0,'', 2603), +(4621,1,0,"I wish to unlearn my talents.",16,16,4461,0,0,0,'', 8271), +(4621,2,0,"I wish to know about Dual Talent Specialization.",1,1,10371,0,0,0,'',33762); +DELETE FROM `gossip_menu` WHERE `Entry`=4621 AND `text_id` IN (4994, 4993); +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (4621, 4994), (4621, 4993); +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14,15) AND `SourceGroup`=4621; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`, `NegativeCondition`) VALUES +(14, 4621, 4994, 0, 15, 4, 0, 0, 0, '', 'Show gossip text if player is a hunter', 0), +(14, 4621, 4993, 0, 15, 4, 0, 0, 0, '', 'Show gossip text if player is not a hunter', 1), +(15, 4621, 0, 0, 15, 4, 0, 0, 0, '', 'Show gossip option if player is a hunter', 0), +(15, 4621, 1, 0, 15, 4, 0, 0, 0, '', 'Show gossip option if player is a hunter', 0), +(15, 4621, 2, 0, 15, 4, 0, 0, 0, '', 'Show gossip option if player is a hunter', 0); + +DELETE FROM `gossip_menu_option` WHERE `menu_id`=4694; +INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`, `OptionBroadcastTextID`)VALUES +(4694,0,3,"I would like training.",5,16,0,0,0,0,'', 2603), +(4694,1,0,"I wish to unlearn my talents.",16,16,4461,0,0,0,'', 8271), +(4694,2,0,"I wish to know about Dual Talent Specialization.",1,1,10371,0,0,0,'',33762); +DELETE FROM `gossip_menu` WHERE `Entry`=4694 AND `text_id` IN (6160, 4993); +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (4694, 6160), (4694, 4993); +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14,15) AND `SourceGroup`=4694; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`, `NegativeCondition`) VALUES +(14, 4694, 6160, 0, 15, 4, 0, 0, 0, '', 'Show gossip text if player is a hunter', 0), +(14, 4694, 4993, 0, 15, 4, 0, 0, 0, '', 'Show gossip text if player is not a hunter', 1), +(15, 4694, 0, 0, 15, 4, 0, 0, 0, '', 'Show gossip option if player is a hunter', 0), +(15, 4694, 1, 0, 15, 4, 0, 0, 0, '', 'Show gossip option if player is a hunter', 0), +(15, 4694, 2, 0, 15, 4, 0, 0, 0, '', 'Show gossip option if player is a hunter', 0); + +DELETE FROM `gossip_menu_option` WHERE `menu_id`=4826; +INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`, `OptionBroadcastTextID`)VALUES +(4826,0,3,"I would like training.",5,16,0,0,0,0,'', 2603); +DELETE FROM `gossip_menu` WHERE `Entry`=4826 AND `text_id` IN (5884, 5883); +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (4826, 5884), (4826, 5883); +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14,15) AND `SourceGroup`=4826; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`, `NegativeCondition`) VALUES +(14, 4826, 5884, 0, 15, 128, 0, 0, 0, '', 'Show gossip text if player is a Mage', 0), +(14, 4826, 5883, 0, 15, 128, 0, 0, 0, '', 'Show gossip text if player is not a Mage', 1), +(15, 4826, 0, 0, 15, 128, 0, 0, 0, '', 'Show gossip option if player is a Mage', 0); + +DELETE FROM `gossip_menu_option` WHERE `menu_id`=4674; +INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`, `OptionBroadcastTextID`)VALUES +(4674,0,3,"I would like training.",5,16,0,0,0,0,'', 2603), +(4674,1,0,"I wish to unlearn my talents.",16,16,4461,0,0,0,'', 8271), +(4674,2,0,"I wish to know about Dual Talent Specialization.",1,1,10371,0,0,0,'',33762); +DELETE FROM `gossip_menu` WHERE `Entry`=4674 AND `text_id` IN (4999, 5000); +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (4674, 4999), (4674, 5000); + +UPDATE `creature_template` SET `gossip_menu_id`= 4007 WHERE `entry`=1231; +UPDATE `creature_template` SET `gossip_menu_id`= 4534 WHERE `entry`=3047; +UPDATE `creature_template` SET `gossip_menu_id`= 4092 WHERE `entry`=3963; +UPDATE `creature_template` SET `gossip_menu_id`= 4621 WHERE `entry`=4138; +UPDATE `creature_template` SET `gossip_menu_id`= 4694 WHERE `entry`=5501; +UPDATE `creature_template` SET `gossip_menu_id`= 4826 WHERE `entry`=5958; +UPDATE `creature_template` SET `gossip_menu_id`= 4092 WHERE `entry`=8308; +UPDATE `creature_template` SET `gossip_menu_id`= 4674 WHERE `entry`=10930; + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14,15) AND `SourceGroup` IN (4092, 4674); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`, `NegativeCondition`) VALUES +(14, 4092, 4867, 0, 15, 4, 0, 0, 0, '', 'Show gossip text if player is a hunter', 0), +(14, 4092, 4993, 0, 15, 4, 0, 0, 0, '', 'Show gossip text if player is not a hunter', 1), +(15, 4092, 0, 0, 15, 4, 0, 0, 0, '', 'Show gossip option if player is a hunter', 0), +(15, 4092, 1, 0, 15, 4, 0, 0, 0, '', 'Show gossip option if player is a hunter', 0), +(15, 4092, 2, 0, 15, 4, 0, 0, 0, '', 'Show gossip option if player is a hunter', 0), +(14, 4674, 4999, 0, 15, 4, 0, 0, 0, '', 'Show gossip text if player is a hunter', 0), +(14, 4674, 5000, 0, 15, 4, 0, 0, 0, '', 'Show gossip text if player is not a hunter', 1), +(15, 4674, 0, 0, 15, 4, 0, 0, 0, '', 'Show gossip option if player is a hunter', 0), +(15, 4674, 1, 0, 15, 4, 0, 0, 0, '', 'Show gossip option if player is a hunter', 0), +(15, 4674, 2, 0, 15, 4, 0, 0, 0, '', 'Show gossip option if player is a hunter', 0); diff --git a/sql/updates/world/2015_05_20_06_world.sql b/sql/updates/world/2015_05_20_06_world.sql new file mode 100644 index 00000000000..257ab83e266 --- /dev/null +++ b/sql/updates/world/2015_05_20_06_world.sql @@ -0,0 +1,16 @@ +-- +DELETE FROM `gossip_menu_option` WHERE `menu_id`=21221; +INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`, `OptionBroadcastTextID`)VALUES +(21221,0,3,"I would like training.",5,16,0,0,0,0,'', 2603), +(21221,1,0,"I wish to unlearn my talents.",16,16,4461,0,0,0,'', 8271), +(21221,2,0,"I wish to know about Dual Talent Specialization.",1,1,10371,0,0,0,'',33762 ); +DELETE FROM `gossip_menu` WHERE `Entry`=21221 AND `text_id`=4793; +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (21221, 4793); +UPDATE `npc_text` SET `BroadcastTextId0`=3275 WHERE `id`=1124; +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14,15) AND `SourceGroup`=21221; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(14, 21221, 1124, 0, 15, 8, 0, 0, 0, '', 'Show gossip text if player is a Rogue'), +(14, 21221, 4793, 0, 15, 1527, 0, 0, 0, '', 'Show gossip text if player is not a Rogue'), +(15, 21221, 0, 0, 15, 8, 0, 0, 0, '', 'Show gossip option if player is a rogue'), +(15, 21221, 1, 0, 15, 8, 0, 0, 0, '', 'Show gossip option if player is a rogue'), +(15, 21221, 2, 0, 15, 8, 0, 0, 0, '', 'Show gossip option if player is a rogue'); diff --git a/sql/updates/world/2015_05_20_07_world.sql b/sql/updates/world/2015_05_20_07_world.sql new file mode 100644 index 00000000000..21c090c3103 --- /dev/null +++ b/sql/updates/world/2015_05_20_07_world.sql @@ -0,0 +1,4 @@ +-- +UPDATE `quest_template` SET `PrevQuestId`=9279 WHERE `id`=9369; +UPDATE `quest_template` SET `PrevQuestId`=9371 WHERE `id`=9409; +UPDATE `quest_template` SET `NextQuestId`=9409 WHERE `id` IN (9280, 9369); diff --git a/sql/updates/world/2015_05_20_08_world.sql b/sql/updates/world/2015_05_20_08_world.sql new file mode 100644 index 00000000000..42ea7da2159 --- /dev/null +++ b/sql/updates/world/2015_05_20_08_world.sql @@ -0,0 +1,18 @@ +-- +DELETE FROM `pool_template` WHERE `entry` IN (11635, 11636, 11637, 11638); +INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES +(11635, 1, 'Defenders at Bloodmyst Isle 1'), +(11636, 1, 'Defenders at Bloodmyst Isle 2'), +(11637, 1, 'Defenders at Bloodmyst Isle 3'), +(11638, 1, 'Defenders at Bloodmyst Isle 4'); + +DELETE FROM `pool_creature` WHERE `pool_entry` IN (11635, 11636, 11637, 11638); +INSERT INTO `pool_creature` (`guid`, `pool_entry`, `chance`, `description`) VALUES +(63725, 11635, 0, 'Defenders at Bloodmyst Isle 1'), +(84397, 11635, 0, 'Defenders at Bloodmyst Isle 1'), +(63726, 11636, 0, 'Defenders at Bloodmyst Isle 2'), +(84395, 11636, 0, 'Defenders at Bloodmyst Isle 2'), +(63724, 11637, 0, 'Defenders at Bloodmyst Isle 3'), +(84396, 11637, 0, 'Defenders at Bloodmyst Isle 3'), +(63727, 11638, 0, 'Defenders at Bloodmyst Isle 4'), +(84428, 11638, 0, 'Defenders at Bloodmyst Isle 4'); diff --git a/sql/updates/world/2015_05_20_09_world.sql b/sql/updates/world/2015_05_20_09_world.sql new file mode 100644 index 00000000000..bef8f966737 --- /dev/null +++ b/sql/updates/world/2015_05_20_09_world.sql @@ -0,0 +1,29 @@ +-- +SET @ENTRY := 18636; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=@ENTRY; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,25,0,100,6,0,0,0,0,11,30991,0,0,0,0,0,1,0,0,0,0,0,0,0,'Cast Stealth on Reset'), +(@ENTRY,0,1,0,9,0,100,6,0,8,0,0,11,30986,0,0,0,0,0,2,0,0,0,0,0,0,0,'Cast Cheap Shot on Close'), +(@ENTRY,0,2,0,67,0,100,6,9000,12000,0,0,11,30992,0,0,0,0,0,2,0,0,0,0,0,0,0,'Cast Backstab'), +(@ENTRY,0,3,0,0,0,100,6,2000,4500,12000,20000,11,30981,0,0,0,0,0,2,0,0,0,0,0,0,0,'Cast Crippling Poison'), +(@ENTRY,0,4,0,0,0,100,6,8000,11000,22000,25000,11,36974,0,0,0,0,0,2,0,0,0,0,0,0,0,'Cast Wound Poison'); + +SET @ENTRY := 17695; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=@ENTRY; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,25,0,100,6,0,0,0,0,11,30991,0,0,0,0,0,1,0,0,0,0,0,0,0,'Cast Stealth on Reset'), +(@ENTRY,0,1,0,9,0,100,6,0,8,0,0,11,30986,0,0,0,0,0,2,0,0,0,0,0,0,0,'Cast Cheap Shot on Close'), +(@ENTRY,0,2,0,67,0,100,6,9000,12000,0,0,11,30992,0,0,0,0,0,2,0,0,0,0,0,0,0,'Cast Backstab'), +(@ENTRY,0,3,0,0,0,100,6,2000,4500,12000,20000,11,30981,0,0,0,0,0,2,0,0,0,0,0,0,0,'Cast Crippling Poison'), +(@ENTRY,0,4,0,0,0,100,6,8000,11000,22000,25000,11,36974,0,0,0,0,0,2,0,0,0,0,0,0,0,'Cast Wound Poison'); + +-- Void Traveler +SET @ENTRY := 19226; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=@ENTRY; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,2,2000,4500,12000,20000,11,33783,0,0,0,0,0,2,0,0,0,0,0,0,0,'Cast Empowering Shadows'), +(@ENTRY,0,1,0,0,0,100,4,2000,4500,12000,20000,11,39364,0,0,0,0,0,2,0,0,0,0,0,0,0,'Cast Empowering Shadows'), +(@ENTRY,0,2,0,0,0,100,6,5000,9000,18000,25000,11,33846,0,0,0,0,0,1,0,0,0,0,0,0,0,'Cast Shadow Nova'); diff --git a/sql/updates/world/2015_05_21_00_world.sql b/sql/updates/world/2015_05_21_00_world.sql new file mode 100644 index 00000000000..c076920bbba --- /dev/null +++ b/sql/updates/world/2015_05_21_00_world.sql @@ -0,0 +1,2 @@ +-- +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry` IN (37748) AND `SourceGroup`=6; diff --git a/sql/updates/world/2015_05_21_01_world.sql b/sql/updates/world/2015_05_21_01_world.sql new file mode 100644 index 00000000000..9468a3d8073 --- /dev/null +++ b/sql/updates/world/2015_05_21_01_world.sql @@ -0,0 +1 @@ +UPDATE `gameobject_template` SET `flags`=48 WHERE `entry`=191306; diff --git a/sql/updates/world/2015_05_21_02_world.sql b/sql/updates/world/2015_05_21_02_world.sql new file mode 100644 index 00000000000..6dd265a1a3f --- /dev/null +++ b/sql/updates/world/2015_05_21_02_world.sql @@ -0,0 +1,55 @@ +-- +-- DB/Quest: The Earthbinder +-- Tola'thion SAI +SET @ENTRY := 19293; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,19,0,100,0,10349,0,0,0,45,1,0,0,0,0,0,19,19294,50,0,0,0,0,0,"Tola'thion - On Quest 'The Earthbinder' Taken - Set Data 1 0"); + +-- Earthbinder Galandria Nightbreeze SAI +SET @ENTRY := 19294; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,38,0,100,0,1,0,0,0,1,0,0,0,0,0,0,21,100,0,0,0,0,0,0,"Earthbinder Galandria Nightbreeze - On Data Set 1 0 - Say Line 0"), +(@ENTRY,0,1,2,20,0,100,0,10349,0,0,0,80,@ENTRY*100+00,0,0,0,0,0,1,0,0,0,0,0,0,0,"Earthbinder Galandria Nightbreeze - On Quest 'The Earthbinder' Finished - Run Script"), +(@ENTRY,0,2,5,61,0,100,0,10349,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Earthbinder Galandria Nightbreeze - On Quest 'The Earthbinder' Finished - Set Active On"), +(@ENTRY,0,3,0,38,0,100,0,2,0,0,0,80,@ENTRY*100+01,0,0,0,0,0,1,0,0,0,0,0,0,0,"Earthbinder Galandria Nightbreeze - On Data Set 2 0 - Run Script"), +(@ENTRY,0,4,0,11,0,100,0,0,0,0,0,81,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Earthbinder Galandria Nightbreeze - On Respawn - Set Npc Flags Gossip & Questgiver"), +(@ENTRY,0,5,0,61,0,100,0,10349,0,0,0,59,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Earthbinder Galandria Nightbreeze - On Quest 'The Earthbinder' Finished - Set Run Off"); + +-- Actionlist SAI +SET @ENTRY := 1929400; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,3000,3000,0,0,81,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Earthbinder Galandria Nightbreeze - On Script - Set Npc Flag "), +(@ENTRY,9,1,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,21,50,0,0,0,0,0,0,"Earthbinder Galandria Nightbreeze - On Script - Set Orientation Closest Player"), +(@ENTRY,9,2,0,0,0,100,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Earthbinder Galandria Nightbreeze - On Script - Say Line 1"), +(@ENTRY,9,3,0,0,0,100,0,6000,6000,0,0,69,0,0,0,0,0,0,8,0,0,0,-286.7666,4729.429,18.4418,1.727876,"Earthbinder Galandria Nightbreeze - On Script - Move To Position"), +(@ENTRY,9,4,0,0,0,100,0,11000,11000,0,0,5,16,0,0,0,0,0,1,0,0,0,0,0,0,0,"Earthbinder Galandria Nightbreeze - On Script - Play Emote 16"), +(@ENTRY,9,5,0,0,0,100,0,3000,3000,0,0,5,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Earthbinder Galandria Nightbreeze - On Script - Play Emote 0"), +(@ENTRY,9,6,0,0,0,100,0,0,0,0,0,50,184450,60,0,0,0,0,8,0,0,0,-287.0193,4731.628,18.21704,2.583081,"Earthbinder Galandria Nightbreeze - On Script - Summon Gameobject 'Crimson Crystal Shard'"), +(@ENTRY,9,7,0,0,0,100,0,4000,4000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Earthbinder Galandria Nightbreeze - On Script - Say Line 2"), +(@ENTRY,9,8,0,0,0,100,0,0,0,0,0,12,20599,3,60000,1,0,0,8,0,0,0,-288.1897,4733.63,18.29823,5.044002,"Earthbinder Galandria Nightbreeze - On Script - Summon Creature 'Lured Colossus'"); + +-- Actionlist SAI +SET @ENTRY := 1929401; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,69,0,0,0,0,0,0,8,0,0,0,-294.765991,4715.080078,28.186199,0.209440,"On Script - Move To Position"), +(@ENTRY,9,1,0,0,0,100,0,13000,13000,0,0,66,0,0,0,0,0,0,1,0,0,0,0,0,0,0.209440,"On Script - Set Orientation Home Position"), +(@ENTRY,9,2,0,0,0,100,0,0,0,0,0,81,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Set Npc Flags Gossip & Questgiver"); + +-- Lured Colossus SAI +SET @ENTRY := 20599; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,6,0,100,0,0,0,0,0,45,2,0,0,0,0,0,19,19294,50,0,0,0,0,0,"Lured Colossus - On Just Died - Set Data 2 0"); + +DELETE FROM `creature_text` WHERE `entry`=19294; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(19294, 0, 0, 'Up here on the hill, $n.', 15, 0, 100, 0, 0, 0, 18293, 0, 'Earthbinder Galandria Nightbreeze'), +(19294, 1, 0, 'I have an idea. Let\'s plant this shard in the ground and see what happens', 12, 0, 100, 0, 0, 0, 18289, 0, 'Earthbinder Galandria Nightbreeze'), +(19294, 2, 0, 'The evil emanating from the crystal shard has lured one of the colossi. Put it down quick!', 12, 0, 100, 0, 0, 0, 18291, 0, 'Earthbinder Galandria Nightbreeze'); diff --git a/sql/updates/world/2015_05_21_03_world.sql b/sql/updates/world/2015_05_21_03_world.sql new file mode 100644 index 00000000000..70fb2687b8c --- /dev/null +++ b/sql/updates/world/2015_05_21_03_world.sql @@ -0,0 +1,16 @@ +-- +-- Hellscream's Champion +DELETE FROM `gossip_menu_option` WHERE `menu_id`=9212; +INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `OptionBroadcastTextID`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`, `BoxBroadcastTextID`) VALUES +(9212, 0, 0, 'I am ready to leave, Durkot.', 25265, 1, 1, 0, 0, 0, 0, NULL, 25265); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=9212 AND `SourceEntry`=0; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15, 9212, 0, 0, 0, 28, 0, 11916, 0, 0, 0, 0, 0, '', 'Gossip Option requires quest completed'); + +-- Durkot Wolfbrother SAI +SET @ENTRY := 26044; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,62,0,100,0,9212,0,0,0,85,46621,0,0,0,0,0,7,0,0,0,0,0,0,0,"Durkot Wolfbrother - On Gossip Option 0 Selected - Invoker Cast 'Worg Taxi'"); diff --git a/sql/updates/world/2015_05_22_00_world.sql b/sql/updates/world/2015_05_22_00_world.sql new file mode 100644 index 00000000000..2949d0eca4a --- /dev/null +++ b/sql/updates/world/2015_05_22_00_world.sql @@ -0,0 +1,2 @@ +-- +DELETE FROM `spell_target_position` WHERE `id`=63171; diff --git a/sql/updates/world/2015_05_22_01_world.sql b/sql/updates/world/2015_05_22_01_world.sql new file mode 100644 index 00000000000..676fa999ebb --- /dev/null +++ b/sql/updates/world/2015_05_22_01_world.sql @@ -0,0 +1,65 @@ +-- +DELETE FROM `creature_formations` WHERE `leaderGUID`=15424; +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`)VALUES +(15424,15424,0,0,2),(15424,15423,3,0,2); +UPDATE `creature` SET `position_x`=-36.31, `position_y`=-916.366, `position_z`=55.075, `orientation`= 1.062 WHERE `guid`=15424; +UPDATE `creature` SET `position_x`=-37.248, `position_y`=-914.605, `position_z`=55.343, `orientation`= 0.826 WHERE `guid`=15423; +UPDATE `creature` SET `MovementType`=2 WHERE `guid` IN (15424); +UPDATE `creature_addon` SET `path_id`=154240 WHERE `guid` IN (15424); +DELETE FROM `waypoint_data` WHERE `id` IN (154240); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(154240, 1, -36.31, -916.366, 55.075, 1.062, 180000, 0, 0, 100, 0), +(154240, 2, -28.532600, -902.440735, 55.908634, 0, 0, 0, 0, 100, 0), +(154240, 3, -26.338741, -896.902466, 56.039452, 0, 0, 0, 0, 100, 0), +(154240, 4, -51.500923, -836.734619, 56.524872, 0, 0, 0, 0, 100, 0), +(154240, 5, -17.165236, -802.633240, 58.751846, 0, 0, 0, 0, 100, 0), +(154240, 6, -20.983173, -719.063965, 69.290993, 0, 0, 0, 0, 100, 0), +(154240, 7, -149.228104, -712.801025, 64.445107, 0, 0, 0, 0, 100, 0), +(154240, 8, -226.017303, -722.711487, 60.861263, 0, 0, 0, 0, 100, 0), +(154240, 9, -325.539337, -754.267334, 54.089657, 0, 0, 0, 0, 100, 0), +(154240, 10, -377.870178, -776.472351, 54.472977, 0, 0, 0, 0, 100, 0), +(154240, 11, -403.164459, -680.892700, 54.499004, 0, 0, 0, 0, 100, 0), +(154240, 12, -331.617737, -671.147278, 54.918808, 0, 0, 0, 0, 100, 0), +(154240, 13, -341.247772, -713.172363, 57.733025, 0, 0, 0, 0, 100, 0), +(154240, 14, -340.614716, -711.776184, 57.733025, 0, 120000, 0, 0, 100, 0), +(154240, 15, -325.247681, -677.673950, 54.596302, 0, 0, 0, 0, 100, 0), +(154240, 16, -339.869904, -673.187561, 55.012871, 0, 0, 0, 0, 100, 0), +(154240, 17, -385.749298, -685.196350, 54.387272, 0, 0, 0, 0, 100, 0), +(154240, 18, -413.708405, -656.887817, 54.488979, 0, 0, 0, 0, 100, 0), +(154240, 19, -440.757660, -585.658386, 53.424225, 0, 0, 0, 0, 100, 0), +(154240, 20, -520.923462, -558.851501, 39.920975, 0, 0, 0, 0, 100, 0), +(154240, 21, -569.159912, -567.547302, 32.809437, 0, 0, 0, 0, 100, 0), +(154240, 22, -594.511536, -575.940979, 31.982075, 0, 0, 0, 0, 100, 0), +(154240, 23, -650.699402, -560.431763, 26.120964, 0, 0, 0, 0, 100, 0), +(154240, 24, -691.624939, -568.642334, 24.540937, 0, 0, 0, 0, 100, 0), +(154240, 25, -707.109802, -562.611023, 22.809536, 0, 0, 0, 0, 100, 0), +(154240, 26, -724.787048, -549.384033, 20.291832, 0, 0, 0, 0, 100, 0), +(154240, 27, -811.109985, -542.174927, 15.771987, 0, 0, 0, 0, 100, 0), +(154240, 28, -817.549683, -533.020020, 15.160646, 0, 180000, 0, 0, 100, 0), +(154240, 29, -811.109985, -542.174927, 15.771987, 0, 0, 0, 0, 100, 0), +(154240, 30, -724.787048, -549.384033, 20.291832, 0, 0, 0, 0, 100, 0), +(154240, 31, -707.109802, -562.611023, 22.809536, 0, 0, 0, 0, 100, 0), +(154240, 32, -691.624939, -568.642334, 24.540937, 0, 0, 0, 0, 100, 0), +(154240, 33, -650.699402, -560.431763, 26.120964, 0, 0, 0, 0, 100, 0), +(154240, 34, -594.511536, -575.940979, 31.982075, 0, 0, 0, 0, 100, 0), +(154240, 35, -569.159912, -567.547302, 32.809437, 0, 0, 0, 0, 100, 0), +(154240, 36, -520.923462, -558.851501, 39.920975, 0, 0, 0, 0, 100, 0), +(154240, 37, -440.757660, -585.658386, 53.424225, 0, 0, 0, 0, 100, 0), +(154240, 38, -413.708405, -656.887817, 54.488979, 0, 0, 0, 0, 100, 0), +(154240, 39, -385.749298, -685.196350, 54.387272, 0, 0, 0, 0, 100, 0), +(154240, 40, -339.869904, -673.187561, 55.012871, 0, 0, 0, 0, 100, 0), +(154240, 41, -325.247681, -677.673950, 54.596302, 0, 0, 0, 0, 100, 0), +(154240, 42, -340.614716, -711.776184, 57.733025, 0, 120000, 0, 0, 100, 0), +(154240, 43, -341.247772, -713.172363, 57.733025, 0, 0, 0, 0, 100, 0), +(154240, 44, -331.617737, -671.147278, 54.918808, 0, 0, 0, 0, 100, 0), +(154240, 45, -403.164459, -680.892700, 54.499004, 0, 0, 0, 0, 100, 0), +(154240, 46, -377.870178, -776.472351, 54.472977, 0, 0, 0, 0, 100, 0), +(154240, 47, -325.539337, -754.267334, 54.089657, 0, 0, 0, 0, 100, 0), +(154240, 48, -226.017303, -722.711487, 60.861263, 0, 0, 0, 0, 100, 0), +(154240, 49, -149.228104, -712.801025, 64.445107, 0, 0, 0, 0, 100, 0), +(154240, 50, -20.983173, -719.063965, 69.290993, 0, 0, 0, 0, 100, 0), +(154240, 51, -17.165236, -802.633240, 58.751846, 0, 0, 0, 0, 100, 0), +(154240, 52, -51.500923, -836.734619, 56.524872, 0, 0, 0, 0, 100, 0), +(154240, 53, -26.338741, -896.902466, 56.039452, 0, 0, 0, 0, 100, 0), +(154240, 54, -28.532600, -902.440735, 55.908634, 0, 0, 0, 0, 100, 0), +(154240, 55, -38.973717, -917.010193, 55.065174, 1.062, 0, 0, 0, 100, 0); diff --git a/sql/updates/world/2015_05_22_02_world.sql b/sql/updates/world/2015_05_22_02_world.sql new file mode 100644 index 00000000000..f4322c6c2ba --- /dev/null +++ b/sql/updates/world/2015_05_22_02_world.sql @@ -0,0 +1,6 @@ +-- +UPDATE `creature_text` SET `text`='Sands consume you!', `BroadcastTextId`=6221, `sound`=5872 WHERE `entry`=7271 AND `GroupId`=1; +UPDATE `creature_text` SET `sound`=5872 WHERE `entry`=7271 AND `GroupId`=2 AND `id`=2; +UPDATE `creature_text` SET `sound`=5873 WHERE `entry`=7271 AND `GroupId`=2 AND `id`=3; +-- Fix faction for some Ethereum prisoners +UPDATE `creature_template` SET `faction`=1800 WHERE `entry`IN (20783, 20784, 20785, 20786, 20788, 20789, 20790); diff --git a/sql/updates/world/2015_05_22_03_world.sql b/sql/updates/world/2015_05_22_03_world.sql new file mode 100644 index 00000000000..31ba798f2da --- /dev/null +++ b/sql/updates/world/2015_05_22_03_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature` SET `MovementType`=1, `spawndist`=8, `position_x`=-93.361, `position_y`=1246.15, `position_z`=-123.506 WHERE `guid`=48268; diff --git a/sql/updates/world/2015_05_22_04_world.sql b/sql/updates/world/2015_05_22_04_world.sql new file mode 100644 index 00000000000..f99479a6042 --- /dev/null +++ b/sql/updates/world/2015_05_22_04_world.sql @@ -0,0 +1,3 @@ +-- +UPDATE `creature` SET `MovementType`=1, `spawndist`=10 WHERE `id`IN (10956); +UPDATE `creature_template` SET `InhabitType`=2 WHERE `entry`=10956; diff --git a/sql/updates/world/2015_05_22_05_world.sql b/sql/updates/world/2015_05_22_05_world.sql new file mode 100644 index 00000000000..076c8fe22de --- /dev/null +++ b/sql/updates/world/2015_05_22_05_world.sql @@ -0,0 +1,5 @@ +-- +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (2261); +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (2261) AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(2261, 0, 0, 0, 0, 0, 100, 0, 2000, 7000, 20000, 30000, 11, 3582, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,0,'Syndicate Watchman - IC - Cast Torch Burst'); diff --git a/sql/updates/world/2015_05_22_06_world.sql b/sql/updates/world/2015_05_22_06_world.sql new file mode 100644 index 00000000000..939ee2dbc7a --- /dev/null +++ b/sql/updates/world/2015_05_22_06_world.sql @@ -0,0 +1,35 @@ +-- +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=8276; +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=20454; +UPDATE `creature` SET `position_x`=274.23, `position_y`=-2162.325, `position_z`=159.94, `orientation`= 3.227 WHERE `guid`=92880; +UPDATE `creature` SET `MovementType`=2 WHERE `guid` IN (92880, 92881); +DELETE FROM `creature_addon` WHERE `guid` IN (92881, 92880); +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (92880, 928800), (92881, 928810); + +DELETE FROM `waypoint_data` WHERE `id` IN (928810, 928800); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(928810, 1, 87.198, -2237.385, 161.785, 0, 0, 1, 0, 100, 0), +(928810, 2, -7.544, -2549.668, 181.017, 0, 0, 1, 0, 100, 0), +(928810, 3, -237.996, -2624.749, 189.896, 0, 0, 1, 0, 100, 0), +(928810, 4, -217.604, -3346.965, 189.025, 0, 0, 1, 0, 100, 0), +(928810, 5, 63.265, -3628.146, 172.660, 0, 0, 1, 0, 100, 0), +(928810, 6, 354.298, -3663.979, 170.469, 0, 0, 1, 0, 100, 0), +(928810, 7, 438.654, -3378.017, 166.627, 0, 0, 1, 0, 100, 0), +(928810, 8, 198.273, -3037.064, 169.242, 0, 0, 1, 0, 100, 0), +(928810, 9, 61.098, -2856.964, 158.961, 0, 0, 1, 0, 100, 0), +(928810, 10, -48.316, -2553.932, 190.939, 0, 0, 1, 0, 100, 0), +(928810, 11, 139.328, -2296.988, 155.313, 0, 0, 1, 0, 100, 0), +(928810, 12, 272.772, -2096.04, 160.766, 0, 0, 1, 0, 100, 0), +(928800, 1, 160.229, -2189.599, 134.889, 0, 0, 1, 0, 100, 0), +(928800, 2, 92.713, -2488.815, 171.090, 0, 0, 1, 0, 100, 0), +(928800, 3, 34.246, -2612.019, 151.869, 0, 0, 1, 0, 100, 0), +(928800, 4, 66.592, -2894.712, 151.56, 0, 0, 1, 0, 100, 0), +(928800, 5, 242.969, -3067.849, 147.831, 0, 0, 1, 0, 100, 0), +(928800, 6, 340.322, -3286.022, 160.143, 0, 0, 1, 0, 100, 0), +(928800, 7, 383.039, -3522.556, 154.207, 0, 0, 1, 0, 100, 0), +(928800, 8, 111.62, -3633.633, 166.753, 0, 0, 1, 0, 100, 0), +(928800, 9, -156.406, -3358.144, 162.886, 0, 0, 1, 0, 100, 0), +(928800, 10, -34.626, -3047.4, 160.192, 0, 0, 1, 0, 100, 0), +(928800, 11, 171.691, -2338.09, 152.636, 0, 0, 1, 0, 100, 0), +(928800, 12, 197.218, -2249.241, 147.71, 0, 0, 1, 0, 100, 0), +(928800, 13, 274.237, -2162.325, 147.09, 0, 0, 1, 0, 100, 0); diff --git a/sql/updates/world/2015_05_22_07_world.sql b/sql/updates/world/2015_05_22_07_world.sql new file mode 100644 index 00000000000..fbc99492240 --- /dev/null +++ b/sql/updates/world/2015_05_22_07_world.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `gossip_menu` WHERE `entry`=1483 AND `text_id`=2155; +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (1483, 2155); +UPDATE `creature_template` SET `gossip_menu_id`=1483 WHERE `entry`=8767; diff --git a/sql/updates/world/2015_05_22_08_world_335.sql b/sql/updates/world/2015_05_22_08_world_335.sql new file mode 100644 index 00000000000..9cdb7edf295 --- /dev/null +++ b/sql/updates/world/2015_05_22_08_world_335.sql @@ -0,0 +1,32 @@ +-- +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (14661) AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(14661, 0, 0, 0, 0, 0, 100, 0, 3000, 5000, 4000, 6000, 11, 5416, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,0,'Stinglasher - IC - cast Venom Sting'), +(14661, 0, 1, 0, 0, 0, 100, 0, 6000, 8000, 7000, 10000, 11, 6607, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,0,'Stinglasher - IC - cast Lash'); + +UPDATE `creature_template` SET `InhabitType`=4, `AIName`='SmartAI' WHERE `entry`=14661; +UPDATE `creature` SET `MovementType`=2 WHERE `guid` IN (50074); +UPDATE `creature_addon` SET `path_id`=500740 WHERE `guid` IN (50074); + +DELETE FROM `waypoint_data` WHERE (`id`=500740); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(500740, 1, -5219.040039, 90.906799, 31.608503, 0, 0, 0, 0, 100, 0), +(500740, 2, -5224.050293, 76.003220, 29.438269, 0, 0, 0, 0, 100, 0), +(500740, 3, -5239.147949, 63.874466, 25.338007, 0, 0, 0, 0, 100, 0), +(500740, 4, -5238.693848, 49.682274, 24.432926, 0, 0, 0, 0, 100, 0), +(500740, 5, -5246.642578, 32.150028, 19.696297, 0, 0, 0, 0, 100, 0), +(500740, 6, -5261.720703, 17.697470, 18.217318, 0, 0, 0, 0, 100, 0), +(500740, 7, -5275.494629, 20.200960, 19.163641, 0, 0, 0, 0, 100, 0), +(500740, 8, -5287.398438, 15.724384, 19.484865, 0, 0, 0, 0, 100, 0), +(500740, 9, -5285.921875, -4.451639, 19.543159, 0, 0, 0, 0, 100, 0), +(500740, 10, -5266.689453, -10.566733, 15.15608, 0, 0, 0, 0, 100, 0), +(500740, 11, -5260.603027, -1.987386, 14.133003, 0, 0, 0, 0, 100, 0), +(500740, 12, -5260.889160, 16.419760, 17.921291, 0, 0, 0, 0, 100, 0), +(500740, 13, -5244.723145, 31.915073, 19.788879, 0, 0, 0, 0, 100, 0), +(500740, 14, -5240.108887, 48.679680, 24.157497, 0, 0, 0, 0, 100, 0), +(500740, 15, -5240.560547, 62.042046, 25.325819, 0, 0, 0, 0, 100, 0), +(500740, 16, -5225.194336, 76.540390, 29.50018, 0, 0, 0, 0, 100, 0), +(500740, 17, -5221.191406, 84.720314, 31.15358, 0, 0, 0, 0, 100, 0), +(500740, 18, -5207.856934, 125.004700, 33.70418, 0, 0, 0, 0, 100, 0), +(500740, 19, -5189.811523, 162.779144, 49.10691, 0, 0, 0, 0, 100, 0), +(500740, 20, -5185.788086, 183.261688, 49.97140, 0, 0, 0, 0, 100, 0); diff --git a/sql/updates/world/2015_05_22_09_world.sql b/sql/updates/world/2015_05_22_09_world.sql new file mode 100644 index 00000000000..e24e207cd3c --- /dev/null +++ b/sql/updates/world/2015_05_22_09_world.sql @@ -0,0 +1,18 @@ +-- +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (3946) AND `source_type`=0 AND `id` IN (4, 5) ; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(3946, 0, 4, 0, 1, 0, 100, 1, 4000, 4000, 0, 0, 1, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Velinde Starsong - Out of Combat - Say Line 3'), +(3946, 0, 5, 0, 1, 0, 100, 1, 11000, 11000, 0, 0, 1, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Velinde Starsong - Out of Combat - Say Line 4'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup` IN (1, 2, 3, 4, 5, 6) AND `SourceEntry`=3946; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`, `ErrorTextId`,`ScriptName`,`Comment`, `NegativeCondition`, `ConditionTarget`) VALUES +(22,2,3946,0,23,2161,0,0,0,'','event require AREA 2161', 1, 1), +(22,3,3946,0,23,2161,0,0,0,'','event require AREA 2161', 1, 1), +(22,4,3946,0,23,2161,0,0,0,'','event require AREA 2161', 1, 1), +(22,5,3946,0,23,2161,0,0,0,'','event require AREA 2161', 0, 1), +(22,6,3946,0,23,2161,0,0,0,'','event require AREA 2161', 0, 1); + +DELETE FROM `creature_text` WHERE `entry` IN (3946) AND `groupid` IN (3, 4); +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextId`) VALUES +(3946,3,0,'I have failed... I have failed in my duty... failed my people... The worgen run rampant, and the Scythe of my goddess is lost.',12,7,100,0,0,0,'Velinde Starsong', 1359), +(3946,4,0,'This evil I have unleashed... In whose hand does the power my goddess granted to me now lie... By whose hand is it directed?',12,7,100,0,0,0,'Velinde Starsong', 1360); diff --git a/sql/updates/world/2015_05_22_10_world.sql b/sql/updates/world/2015_05_22_10_world.sql new file mode 100644 index 00000000000..a87647f1cd7 --- /dev/null +++ b/sql/updates/world/2015_05_22_10_world.sql @@ -0,0 +1,26 @@ +-- +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (3984) AND `source_type`=0 AND `id` IN (1, 2, 3) ; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (398400) AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(3984, 0, 1, 0, 1, 0, 100, 0, 20000, 20000, 180000, 180000, 80, 398400, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Nancy Vishas - ooc - Action list'), +(398400, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Nancy Vishas - Action list - talk 1'), +(398400, 9, 1, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, 3985, 15, 0, 0, 0, 0,0,'Nancy Vishas - Action list - talk 1'), +(398400, 9, 2, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Nancy Vishas - Action list - talk 2'), +(398400, 9, 3, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 19, 3985, 15, 0, 0, 0, 0,0,'Nancy Vishas - Action list - talk 2'), +(398400, 9, 4, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Nancy Vishas - Action list - talk 3'), +(398400, 9, 5, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 53, 0, 3984, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Nancy Vishas - Action list - start wp'), +(3984, 0, 2, 0, 40, 0, 100, 0, 1, 3984, 0, 0, 54, 30000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Nancy Vishas - on WP1 - pause wp'), +(3984, 0, 3, 0, 40, 0, 100, 0, 2, 3984, 0, 0, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Nancy Vishas - on wp2- set home orientation'); + +DELETE FROM `waypoints` WHERE `entry`=3984; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(3984, 1, 908.933, -90.985, 33.783, 'Nancy Vishas'), +(3984, 2, 888.142, -121.849, 38.388, 'Nancy Vishas'); + +DELETE FROM `creature_text` WHERE `entry` IN (3984, 3985); +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextId`) VALUES +(3984,0,0,'Sidney is late. I thought he would be home by now.',12,7,100,0,0,0,'Nancy Vishas', 1365), +(3985,0,0,'He''s your husband, woman. How am I to know where he is?',12,7,100,0,0,0,'Grandpa Vishas', 1366), +(3984,1,0,'He must be overwhelmed with work at the Monastery. But still, he should have returned by now.',12,7,100,0,0,0,'Nancy Vishas', 1367), +(3985,1,0,'Cleansing the world of impure scum isn''t an easy job, Nancy. Someone''s got to do it.',12,7,100,0,0,0,'Grandpa Vishas', 1368), +(3984,2,0,'Well, I''m going outside to check. Something is amiss.',12,7,100,0,0,0,'Nancy Vishas', 1369); diff --git a/sql/updates/world/2015_05_22_11_world.sql b/sql/updates/world/2015_05_22_11_world.sql new file mode 100644 index 00000000000..01122a6bc57 --- /dev/null +++ b/sql/updates/world/2015_05_22_11_world.sql @@ -0,0 +1,8 @@ +-- +DELETE FROM `gossip_menu` WHERE `entry`=6024 AND `text_id`=6935; +INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (6024, 6935); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14) AND `SourceGroup`=6024; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`, `NegativeCondition`) VALUES +(14, 6024, 7176, 0, 8, 7783, 0, 0, 0, '', 'Show gossip text if player get the quest The Lord of Blackrockreward', 0), +(14, 6024, 6935, 0, 8, 7783, 0, 0, 0, '', 'Show gossip text if te quest The Lord of Blackrock is not rewarded', 1); diff --git a/sql/updates/world/2015_05_22_12_world.sql b/sql/updates/world/2015_05_22_12_world.sql new file mode 100644 index 00000000000..84b5918e7f4 --- /dev/null +++ b/sql/updates/world/2015_05_22_12_world.sql @@ -0,0 +1,10 @@ +-- +DELETE FROM `smart_scripts` WHERE `entryorguid`=16522 AND `id`=12; +UPDATE `smart_scripts` SET `action_param1`=1 WHERE `entryorguid`=16522 AND `id`=0; +UPDATE `smart_scripts` SET `event_phase_mask`=1 WHERE entryorguid=16522 AND `id`=5; +UPDATE `smart_scripts` SET `event_phase_mask`=0, `event_flags`=0 WHERE `entryorguid`=16522 AND `id`=6; +UPDATE `smart_scripts` SET `event_phase_mask`=0 WHERE `entryorguid`=16522 AND `id`=7; +UPDATE `smart_scripts` SET `event_phase_mask`=2 WHERE `entryorguid`=16522 AND `id`=11; +UPDATE `smart_scripts` SET `event_phase_mask`=1, `action_param1`=1 WHERE entryorguid=16522 AND `id`=9; +UPDATE `smart_scripts` SET `event_flags`=1 WHERE `entryorguid`=16522 AND `id`=2; +UPDATE `creature_template` SET `InhabitType`=4 WHERE `Entry`=17947; diff --git a/sql/updates/world/2015_05_22_13_world.sql b/sql/updates/world/2015_05_22_13_world.sql new file mode 100644 index 00000000000..db90e99cf4d --- /dev/null +++ b/sql/updates/world/2015_05_22_13_world.sql @@ -0,0 +1,51 @@ +-- +UPDATE `creature` SET `position_x`=-4435.777, `position_y`=-13684.191, `position_z`=44.03, `orientation`= 5.189 WHERE `guid`=57310; +UPDATE `creature` SET `MovementType`=2, `spawndist`=0 WHERE `guid` IN (57310, 57313); +DELETE FROM `creature_addon` WHERE `guid` IN (57310, 57313); +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (57310, 573100), (57313, 573130); +DELETE FROM `waypoint_data` WHERE `id` IN (573100, 573130); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(573100, 1, -4443.440918, -13695.226563, 46.834724, 0, 0, 0, 0, 100, 0), +(573100, 2, -4451.548828, -13708.859375, 48.496380, 0, 0, 0, 0, 100, 0), +(573100, 3, -4431.984863, -13722.603516, 51.757404, 0, 0, 0, 0, 100, 0), +(573100, 4, -4385.404297, -13720.467773, 50.135044, 0, 0, 0, 0, 100, 0), +(573100, 5, -4380.465820, -13740.443359, 50.451973, 0, 0, 0, 0, 100, 0), +(573100, 6, -4392.348633, -13770.427734, 52.292049, 0, 0, 0, 0, 100, 0), +(573100, 7, -4391.951660, -13786.277344, 52.664742, 0, 0, 0, 0, 100, 0), +(573100, 8, -4396.321777, -13804.233398, 55.976879, 0, 0, 0, 0, 100, 0), +(573100, 9, -4404.731934, -13815.549805, 60.186996, 0, 0, 0, 0, 100, 0), +(573100, 10, -4409.673828, -13847.877930, 71.870178, 0, 0, 0, 0, 100, 0), +(573100, 11, -4419.165527, -13854.147461, 78.347191, 0, 0, 0, 0, 100, 0), +(573100, 12, -4432.236816, -13856.821289, 85.815552, 0, 0, 0, 0, 100, 0), +(573100, 13, -4453.323730, -13875.177734, 101.67051, 0, 0, 0, 0, 100, 0), +(573100, 14, -4432.236816, -13856.821289, 85.815552, 0, 0, 0, 0, 100, 0), +(573100, 15, -4419.165527, -13854.147461, 78.347191, 0, 0, 0, 0, 100, 0), +(573100, 16, -4409.673828, -13847.877930, 71.870178, 0, 0, 0, 0, 100, 0), +(573100, 17, -4404.731934, -13815.549805, 60.186996, 0, 0, 0, 0, 100, 0), +(573100, 18, -4396.321777, -13804.233398, 55.976879, 0, 0, 0, 0, 100, 0), +(573100, 19, -4391.951660, -13786.277344, 52.664742, 0, 0, 0, 0, 100, 0), +(573100, 20, -4392.348633, -13770.427734, 52.292049, 0, 0, 0, 0, 100, 0), +(573100, 21, -4380.465820, -13740.443359, 50.451973, 0, 0, 0, 0, 100, 0), +(573100, 22, -4385.404297, -13720.467773, 50.135044, 0, 0, 0, 0, 100, 0), +(573100, 23, -4431.984863, -13722.603516, 51.757404, 0, 0, 0, 0, 100, 0), +(573100, 24, -4451.548828, -13708.859375, 48.496380, 0, 0, 0, 0, 100, 0), +(573100, 25, -4443.440918, -13695.226563, 46.834724, 0, 0, 0, 0, 100, 0), +(573130, 1, -4393.079102, -13790.173828, 52.869942, 0, 0, 0, 0, 100, 0), +(573130, 2, -4392.134766, -13761.565430, 51.793087, 0, 0, 0, 0, 100, 0), +(573130, 3, -4412.633301, -13752.276367, 53.840073, 0, 0, 0, 0, 100, 0), +(573130, 4, -4429.812012, -13722.834961, 51.848553, 0, 0, 0, 0, 100, 0), +(573130, 5, -4389.571777, -13722.364258, 50.288551, 0, 0, 0, 0, 100, 0), +(573130, 6, -4380.811523, -13731.546875, 50.451256, 0, 0, 0, 0, 100, 0), +(573130, 7, -4385.900391, -13759.079102, 50.621365, 0, 0, 0, 0, 100, 0), +(573130, 8, -4391.487305, -13762.515625, 51.752522, 0, 0, 0, 0, 100, 0), +(573130, 9, -4403.406250, -13758.519531, 53.117504, 0, 0, 0, 0, 100, 0), +(573130, 10, -4432.480469, -13756.059570, 56.591385, 0, 0, 0, 0, 100, 0), +(573130, 11, -4403.406250, -13758.519531, 53.117504, 0, 0, 0, 0, 100, 0), +(573130, 12, -4391.487305, -13762.515625, 51.752522, 0, 0, 0, 0, 100, 0), +(573130, 13, -4385.900391, -13759.079102, 50.621365, 0, 0, 0, 0, 100, 0), +(573130, 14, -4380.811523, -13731.546875, 50.451256, 0, 0, 0, 0, 100, 0), +(573130, 15, -4389.571777, -13722.364258, 50.288551, 0, 0, 0, 0, 100, 0), +(573130, 16, -4429.812012, -13722.834961, 51.848553, 0, 0, 0, 0, 100, 0), +(573130, 17, -4412.633301, -13752.276367, 53.840073, 0, 0, 0, 0, 100, 0), +(573130, 18, -4392.134766, -13761.565430, 51.793087, 0, 0, 0, 0, 100, 0), +(573130, 19, -4393.079102, -13790.173828, 52.869942, 0, 0, 0, 0, 100, 0); diff --git a/sql/updates/world/2015_05_22_14_world.sql b/sql/updates/world/2015_05_22_14_world.sql new file mode 100644 index 00000000000..43bbacd2d1a --- /dev/null +++ b/sql/updates/world/2015_05_22_14_world.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=1 AND `SourceEntry`=6994; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`Scriptname`,`Comment`) VALUES +(1,641,6994,0,0,2,0,51315,1,1,1,0 ,'' , 'whitestone oak lumber drop only if the player doesn''t have it already'); diff --git a/sql/updates/world/2015_05_22_15_world.sql b/sql/updates/world/2015_05_22_15_world.sql new file mode 100644 index 00000000000..c2a90abf892 --- /dev/null +++ b/sql/updates/world/2015_05_22_15_world.sql @@ -0,0 +1,239 @@ +-- Quest 11343 "The Echo of Ymiron" + +SET @OGUID := 5603; -- One required +SET @CGUID := 48229; -- 16 required +SET @NPC := @CGUID+5; +SET @PATH := @NPC * 10; + +-- Object Spawn from sniff +DELETE FROM `gameobject` WHERE `id`=186664; +INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES +(@OGUID,186664,571,1,2,1073.001,-5033.952,9.771218,1.518436,0,0,0.6883545,0.7253745,300,0,1); -- Baby in Crib + +-- Creature Spawns from sniff +DELETE FROM `creature` WHERE `id` IN (24314,24315,24248,24327,23935); +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`) VALUES +(@CGUID+0,24314,571,1,2,0,0,1073.562,-5029.705,9.805857,4.660029,300,0,0,5158,0,0,0,0,0), -- Ancient Male Vrykul +(@CGUID+1,24315,571,1,2,0,0,1074.889,-5033.892,9.711858,3.036873,300,0,0,5158,0,0,0,0,0), -- Ancient Female Vrykul +(@CGUID+2,24248,571,1,2,0,0,1054.514,-4918.391,10.14754,3.263766,300,0,0,1,0,0,0,0,0), -- The Lich King +(@CGUID+3,24327,571,1,2,0,0,1055.667,-4924.913,16.54569,3.281219,300,0,0,1,0,0,0,0,0), -- Val'kyr Soulclaimer +(@CGUID+4,24327,571,1,2,0,0,1054.277,-4909.997,16.50003,3.263766,300,0,0,1,0,0,0,0,0), -- Val'kyr Soulclaimer +(@CGUID+5,23935,571,1,2,0,0,927.0462,-4925.752,4.78267,0.1288379,300,0,0,1,0,2,0,0,0), -- Val'kyr Watcher +(@CGUID+6,23935,571,1,2,0,0,1036.007,-4926.114,12.45767,5.548763,300,0,0,1,0,2,0,0,0), -- Val'kyr Watcher +(@CGUID+7,23935,571,1,2,0,0,1026.868,-4944.088,12.0571,0.7522717,300,0,0,1,0,2,0,0,0), -- Val'kyr Watcher +(@CGUID+8,23935,571,1,2,0,0,1028.676,-5012.598,13.78496,0.2954222,300,0,0,1,0,2,0,0,0), -- Val'kyr Watcher +(@CGUID+9,23935,571,1,2,0,0,910.7372,-4961.667,33.09615,0.2954222,300,0,0,1,0,2,0,0,0), -- Val'kyr Watcher +(@CGUID+10,23935,571,1,2,0,0,934.7177,-4890.745,34.57682,0.2954222,300,0,0,1,0,2,0,0,0), -- Val'kyr Watcher +(@CGUID+11,23935,571,1,2,0,0,970.6052,-4993.673,29.27757,0.2954222,300,0,0,1,0,2,0,0,0), -- Val'kyr Watcher +(@CGUID+12,23935,571,1,2,0,0,1006.246,-4868.183,47.70948,0.2954222,300,0,0,1,0,2,0,0,0), -- Val'kyr Watcher +(@CGUID+13,23935,571,1,2,0,0,1046.627,-4824.385,47.09693,0.2954222,300,0,0,1,0,2,0,0,0), -- Val'kyr Watcher +(@CGUID+14,23935,571,1,2,0,0,1068.264,-4965.238,47.55685,0.2954222,300,0,0,1,0,2,0,0,0), -- Val'kyr Watcher +(@CGUID+15,23935,571,1,2,0,0,1037.688,-4934.398,31.88609,0.2954222,300,0,0,1,0,2,0,0,0); -- Val'kyr Watcher + +DELETE FROM `creature_template_addon` WHERE `entry` IN (24315,24248,24327); +INSERT INTO `creature_template_addon` (`entry`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(24315,0,0,1,0,0, ''), +(24248,0,0,0,1,0, '41408'), +(24327,0,0,33554432,0 ,0, ''); + +UPDATE `creature_template` SET `AIName`='SmartAI', `unit_flags`=768 WHERE `entry` IN (24314, 24315, 24327); +UPDATE `creature_template` SET `unit_flags`=164352, `AIName`='SmartAI' WHERE `entry`=24248; -- 131072 +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry` IN (24327, 23935); + +DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid` IN (24314,24315, 24327, 24248); +DELETE FROM `smart_scripts` WHERE `source_type`=9 AND `entryorguid` IN (2431400,2431500,2431501, 2424800, 2424801); +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(24314,0,0,0,10,0,100,0,0,15,50000,50000,80,2431400,2,0,0,0,0,1,0,0,0,0,0,0,0, 'Ancient Male Vrykul - OOC_LOS - Start Script'), +(2431400,9,0,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Anchient Male Speach 1'), +(2431400,9,1,0,0,0,100,0,2000,2000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Anchient Male Speach 2'), +(2431400,9,2,0,0,0,100,0,3000,3000,0,0,1,0,0,0,0,0,0,10,@CGUID+1,24315,0,0,0,0,0, 'Anchient Female Speach 1'), +(2431400,9,3,0,0,0,100,0,3000,3000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Anchient Male Speach 2'), +(2431400,9,4,0,0,0,100,0,3000,3000,0,0,5,25,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Anchient Male emote ONESHOT_POINT'), +(2431400,9,5,0,0,0,100,0,6000,6000,0,0,45,0,1,0,0,0,0,10,@CGUID+1,24315,0,0,0,0,0, 'Anchient Female start path'), +(2431400,9,6,0,0,0,100,0,5000,5000,0,0,1,1,0,0,0,0,0,10,@CGUID+1,24315,0,0,0,0,0, 'Anchient Female Speach 2'), -- check timing +(2431400,9,7,0,0,0,100,0,4000,4000,0,0,5,18,0,0,0,0,0,10,@CGUID+1,24315,0,0,0,0,0, 'Anchient Female emote ONESHOT_CRY'), +(2431400,9,8,0,0,0,100,0,4000,4000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Anchient Male Speach 3'), +(2431400,9,9,0,0,0,100,0,6000,6000,0,0,1,2,0,0,0,0,0,10,@CGUID+1,24315,0,0,0,0,0, 'Anchient Female Speach 2'), +(2431400,9,10,0,0,0,100,0,3000,3000,0,0,11,43458,2,0,0,0,0,7,0,0,0,0,0,0,0, 'Quest Credit'), +(2431400,9,11,0,0,0,100,0,3000,3000,0,0,45,0,2,0,0,0,0,10,@CGUID+1,24315,0,0,0,0,0, 'Anchient Female resume path'), +(24315,0,0,0,11,0,100,0,0,0,0,0,8,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Ancient Female Vrykul - Set Passive'), +(24315,0,1,0,38,0,100,0,0,1,0,0,80,2431500,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Ancient Female Vrykul - On data set 0 1 run script'), +(24315,0,2,0,38,0,100,0,0,2,0,0,80,2431501,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Ancient Female Vrykul - On data set 0 2 run script'), +(24315,0,3,4,40,0,100,0,1,24315,0,0,54,40000,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Ancient Female Vrykul - Pause at wp talk'), +(24315,0,4,5,61,0,100,0,0,0,0,0,66,0,0,0,0,0,0,9,24315,0,15,0,0,0,0, 'Ancient Female Vrykul - turn to Ancient Male Vrykul'), +(24315,0,5,0,61,0,100,0,0,0,0,0,90,8,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Ancient Female Vrykul - kneel'), +(24315,0,6,7,40,0,100,0,2,24315,0,0,55,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Ancient Female Vrykul - Stop at wp home'), +(24315,0,7,8,61,0,100,0,0,0,0,0,66,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Ancient Female Vrykul - turn to pos'), +(24315,0,8,0,61,0,100,0,0,0,0,0,90,1,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Ancient Female Vrykul - kneel'), +(2431500,9,0,0,0,0,100,0,0,0,0,0,91,1,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Ancient Female Vrykul - stand'), +(2431500,9,1,0,0,0,100,0,0,0,0,0,53,0,24315,0,0,0,0,1,0,0,0,0,0,0,0, 'Ancient Female Vrykul - wp start'), +(2431501,9,0,0,0,0,100,0,0,0,0,0,65,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Ancient Female Vrykul - wp resume'), +(2431501,9,1,0,0,0,100,0,0,0,0,0,91,8,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Ancient Female Vrykul - stand'), +(24327,0,0,0,11,0,100,0,0,0,0,0,8,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Ancient Male Vrykul - Set Passive'), + +(24248,0,0,0,10,0,100,0,0,15,3000,3000,80,2424800,2,0,0,0,0,1,0,0,0,0,0,0,0, 'The Lich King - OOC_LOS - Start Script'), +(2424800,9,0,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'The Lich King - Action list - Talk0'), +(2424800,9,1,0,0,0,100,0,0,0,0,0,11,29661,0,0,0,0,0,7,0,0,0,0,0,0,0, 'The Lich King - Action list - Cast Magnetic Pull'), +(2424800,9,2,0,0,0,100,0,1000,1000,0,0,11,43489,0,0,0,0,0,7,0,0,0,0,0,0,0, 'The Lich King - Action list - Cast Grasp of the Lich King'), +(2424800,9,3,0,0,0,100,0,1000,1000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0, 'The Lich King - Action list - Talk1'), +(2424800,9,4,0,0,0,100,0,3000,3000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0, 'The Lich King - Action list - Talk2'), +(2424800,9,5,0,0,0,100,0,15000,15000,0,0,1,0,0,0,0,0,0,19,24327,10,0,0,0,0,0, 'The Lich King - Action list - Talk0'), +(2424800,9,6,0,0,0,100,0,3000,3000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0, 'The Lich King - Action list - Talk3'), +(2424800,9,7,0,0,0,100,0,7000,7000,0,0,1,4,0,0,0,0,0,1,0,0,0,0,0,0,0, 'The Lich King - Action list - Talk4'), +(2424800,9,8,0,0,0,100,0,19000,19000,0,0,1,5,0,0,0,0,0,1,0,0,0,0,0,0,0, 'The Lich King - Action list - Talk5'), +(2424800,9,9,0,0,0,100,0,20000,20000,0,0,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0, 'The Lich King - Action list - Talk6'), +(2424800,9,10,0,0,0,100,0,17000,17000,0,0,11,43488,64,0,0,0,0,7,0,0,0,0,0,0,0, 'The Lich King - Action list - Cast'), +(2424800,9,11,0,0,0,100,0,500,500,0,0,51,0,0,0,0,0,0,7,0,0,0,0,0,0,0, 'The Lich King - Action list - kill'), + +(24248,0,1,0,10,0,100,0,0,15,3000,3000,80,2424801,2,0,0,0,0,1,0,0,0,0,0,0,0, 'The Lich King - OOC_LOS - Start Script'), +(2424801,9,0,0,0,0,100,0,0,0,0,0,1,7,0,0,0,0,0,1,0,0,0,0,0,0,0, 'The Lich King - Action list - Talk7'), +(2424801,9,1,0,0,0,100,0,0,0,0,0,11,29661,0,0,0,0,0,7,0,0,0,0,0,0,0, 'The Lich King - Action list - Cast Magnetic Pull'), +(2424801,9,2,0,0,0,100,0,1000,1000,0,0,11,43489,0,0,0,0,0,7,0,0,0,0,0,0,0, 'The Lich King - Action list - Cast Grasp of the Lich King'), +(2424801,9,3,0,0,0,100,0,8000,8000,0,0,11,50156,0,0,0,0,0,7,0,0,0,0,0,0,0, 'The Lich King - Action list - Cast'), +(2424801,9,4,0,0,0,100,0,500,500,0,0,51,0,0,0,0,0,0,7,0,0,0,0,0,0,0, 'The Lich King - Action list - kill'); +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup` IN (1,2) AND `SourceEntry` IN (24248, 24314); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`, `ErrorTextId`,`ScriptName`,`Comment`, `NegativeCondition`) VALUES +(22,1,24248,0,8,12485,0,0,0,'','event require quest 12485 not rewarded', 1), +(22,2,24248,0,8,12485,0,0,0,'','event require quest 12485 rewarded', 0), +(22,1,24314,0,9,11343,0,0,0,'','event require quest 11344 Taken', 0); + +DELETE FROM `disables` WHERE `sourceType` = 1 AND `entry` = 12485; + +-- NPC Text from sniff +DELETE FROM `creature_text` WHERE `entry` IN (24314,24315, 24248, 24327); +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`,`BroadcastTextId`) VALUES +(24314,0,0, 'So then we too are cursed?',12,0,100,1,0,0, 'Ancient Male Vrykul',23116), +(24314,1,0, '%s points to the infant.',16,0,100,0,0,0, 'Ancient Male Vrykul',23117), +(24315,0,0, '%s sobs.',16,0,100,0,0,0, 'Ancient Female Vrykul',23118), +(24314,2,0, 'The gods have forsaken us! We must dispose of it before Ymiron is notified!',12,0,100,53,0,0, 'Ancient Male Vrykul',23119), +(24315,1,0, 'NO! You cannot! I beg of you! It is our child!',12,0,100,0,0,0, 'Ancient Female Vrykul',23120), +(24314,3,0, 'Then what are we to do, wife? The others cannot find out. Should they learn of this aberration, we will all be executed.',12,0,100,1,0,0, 'Ancient Male Vrykul',23121), +(24315,2,0, 'I... I will hide it. I will hide it until I find it a home, far away from here...',12,0,100,0,0,0, 'Ancient Female Vrykul',23122), +(24248,0,0, '%s turns to face you.',16,0,100,0,0,0, 'The Lich King',23102), +(24248,1,0, '%s grins. ',16,0,100,11,0,14820, 'The Lich King',23146), +(24248,2,0, 'Shamanism has brought you here... Its scent permeates the air. *The Lich King laughs* I was once a shaman.',12,0,100,0,0,14742, 'The Lich King',23147), +(24327,0,0, 'Shall we prepare it for you, my lord?',12,0,100,0,0,0, 'Val''kyr Soulclaimer',23152), +(24248,3,0, 'No, minion. This one is not ready.',12,0,100,274,0,14743, 'The Lich King',23148), +(24248,4,0, 'Do you feel it, mortal? Death seeps through me, enveloping all that I touch. With just a snap of my finger your soul will languish in damnation for all eternity.',12,0,100,1,0,14744, 'The Lich King',23149), +(24248,5,0, 'But... It is not yet your time to serve the Lich King. Yes, a greater destiny awaits you. Power... You must become more powerful before you are to serve me.',12,0,100,1,0,14745, 'The Lich King',23150), +(24248,6,0, 'Now watch, val''kyr. Observe as I apply pressure. Can you see that it is not yet ripe? Watch as it pops and falls lifeless to the floor.',12,0,100,1,0,14746, 'The Lich King',23151), +(24248,7,0, 'Persistence or stupidity? It matters not. Let this be a lesson learned, mortal!',12,0,100,1,0,14747, 'The Lich King',27351); + +-- Waypoints for Ancient Female Vrykul from sniff +DELETE FROM `waypoints` WHERE `entry`=24315; +INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES +(24315,1,1074.016,-5031.822,9.726947,'talk point'), +(24315,2,1074.889,-5033.892,9.711858,'home point'); + +-- Pathing for Val'kyr Watcher Entry: 23935 +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7,@NPC+8,@NPC+9,@NPC+10); +INSERT INTO `creature_addon` (`guid`,`path_id`) VALUES +(@NPC,@PATH), +(@NPC+1,@PATH+10), +(@NPC+2,@PATH+20), +(@NPC+3,@PATH+30), +(@NPC+4,@PATH+40), +(@NPC+5,@PATH+50), +(@NPC+6,@PATH+60), +(@NPC+7,@PATH+70), +(@NPC+8,@PATH+80), +(@NPC+9,@PATH+90), +(@NPC+10,@PATH+100); + +DELETE FROM `waypoint_data` WHERE `id` IN (@PATH,@PATH+10,@PATH+20,@PATH+30,@PATH+40,@PATH+50,@PATH+60,@PATH+70,@PATH+80,@PATH+90,@PATH+100); +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,946.877,-4950.67,8.72458,0,0,0,100,0), +(@PATH,2,927.046,-4925.75,8.09321,0,0,0,100,0), +(@PATH,3,929.734,-4899.67,9.95518,0,0,0,100,0), +(@PATH,4,939.552,-4878.05,10.4938,0,0,0,100,0), +(@PATH,5,929.734,-4899.67,9.95518,0,0,0,100,0), +(@PATH,6,927.046,-4925.75,8.09321,0,0,0,100,0), +(@PATH+10,1,1036.835,-4931.16,12.83267,0,0,0,100,0), +(@PATH+10,2,1036.007,-4926.114,12.45767,0,0,0,100,0), +(@PATH+10,3,1023.932,-4912.754,10.5369,0,0,0,100,0), +(@PATH+10,4,1000.253,-4901.448,7.911896,0,0,0,100,0), +(@PATH+10,5,1023.932,-4912.754,10.5369,0,0,0,100,0), +(@PATH+10,6,1036.007,-4926.114,12.45767,0,0,0,100,0), +(@PATH+20,1,1026.697,-4942.586,11.8071,0,0,0,100,0), +(@PATH+20,2,1030.085,-4970.878,12.77823,0,0,0,100,0), +(@PATH+20,3,1034.023,-4972.842,13.0493,0,0,0,100,0), +(@PATH+20,4,1030.085,-4970.878,12.77823,0,0,0,100,0), +(@PATH+20,5,1026.868,-4944.088,12.0571,0,0,0,100,0), +(@PATH+30,1,1045.199,-5071.371,13.72586,0,0,0,100,0), +(@PATH+30,2,1069.113,-5069.303,13.34213,0,0,0,100,0), +(@PATH+30,3,1091.871,-5063.042,13.38427,0,0,0,100,0), +(@PATH+30,4,1103.122,-5055.239,13.92861,0,0,0,100,0), +(@PATH+30,5,1099.777,-5030.915,13.25463,0,0,0,100,0), +(@PATH+30,6,1088.535,-5001.179,13.00463,0,0,0,100,0), +(@PATH+30,7,1062.886,-4976.348,13.6743,0,0,0,100,0), +(@PATH+30,8,1044.221,-4979.022,13.7993,0,0,0,100,0), +(@PATH+30,9,1030.879,-4997.25,13.52823,0,0,0,100,0), +(@PATH+30,10,1028.676,-5012.598,13.78496,0,0,0,100,0), +(@PATH+30,11,1034.265,-5039.136,13.73875,0,0,0,100,0), +(@PATH+40,1,919.0841,-4946.079,33.09615,0,0,0,100,0), +(@PATH+40,2,937.5836,-4953.232,30.76281,0,0,0,100,0), +(@PATH+40,3,936.755,-4970.46,30.76281,0,0,0,100,0), +(@PATH+40,4,929.6907,-4992.461,30.76281,0,0,0,100,0), +(@PATH+40,5,919.143,-5002.606,30.76281,0,0,0,100,0), +(@PATH+40,6,899.7684,-4997.275,30.76281,0,0,0,100,0), +(@PATH+40,7,894.8842,-4973.352,31.20726,0,0,0,100,0), +(@PATH+40,8,910.7372,-4961.667,33.09615,0,0,0,100,0), +(@PATH+50,1,955.5239,-4883.864,28.91015,0,0,0,100,0), +(@PATH+50,2,975.0622,-4876.539,34.57682,0,0,0,100,0), +(@PATH+50,3,998.4828,-4882.556,34.57682,0,0,0,100,0), +(@PATH+50,4,1007.136,-4897.439,34.57682,0,0,0,100,0), +(@PATH+50,5,999.5431,-4915.003,34.57682,0,0,0,100,0), +(@PATH+50,6,977.8502,-4931.425,34.57682,0,0,0,100,0), +(@PATH+50,7,955.9329,-4951.924,34.57682,0,0,0,100,0), +(@PATH+50,8,932.5357,-4941.676,34.57682,0,0,0,100,0), +(@PATH+50,9,928.3145,-4926.969,35.49352,0,0,0,100,0), +(@PATH+50,10,934.7177,-4890.745,34.57682,0,0,0,100,0), +(@PATH+60,1,985.4891,-4985.466,29.27757,0,0,0,100,0), +(@PATH+60,2,1003.236,-5007.198,29.27757,0,0,0,100,0), +(@PATH+60,3,1001.194,-5018.937,29.27757,0,0,0,100,0), +(@PATH+60,4,983.9544,-5038.578,29.27757,0,0,0,100,0), +(@PATH+60,5,965.2218,-5035.844,29.27757,0,0,0,100,0), +(@PATH+60,6,955.2875,-5023.462,29.27757,0,0,0,100,0), +(@PATH+60,7,964.6006,-5006.362,29.27757,0,0,0,100,0), +(@PATH+60,8,970.6052,-4993.673,29.27757,0,0,0,100,0), +(@PATH+70,1,997.6531,-4837.691,50.98726,0,0,0,100,0), +(@PATH+70,2,978.2066,-4826.199,50.98726,0,0,0,100,0), +(@PATH+70,3,954.6121,-4846.288,50.98726,0,0,0,100,0), +(@PATH+70,4,915.1261,-4847.07,50.98726,0,0,0,100,0), +(@PATH+70,5,906.7595,-4877.092,50.98726,0,0,0,100,0), +(@PATH+70,6,911.5735,-4919.276,50.98726,0,0,0,100,0), +(@PATH+70,7,942.1261,-4946.08,42.51503,0,0,0,100,0), +(@PATH+70,8,978.0408,-4936.854,40.5428,0,0,0,100,0), +(@PATH+70,9,1002.55,-4900.139,38.45948,0,0,0,100,0), +(@PATH+70,10,1006.246,-4868.183,47.70948,0,0,0,100,0), +(@PATH+80,1,1022.976,-4810.128,38.31916,0,0,0,100,0), +(@PATH+80,2,996.8618,-4813.854,38.31916,0,0,0,100,0), +(@PATH+80,3,964.6756,-4838.639,38.31916,0,0,0,100,0), +(@PATH+80,4,940.3589,-4846.21,38.31916,0,0,0,100,0), +(@PATH+80,5,907.9418,-4846.479,34.20804,0,0,0,100,0), +(@PATH+80,6,887.7231,-4873.045,34.59694,0,0,0,100,0), +(@PATH+80,7,891.8184,-4898.238,30.04136,0,0,0,100,0), +(@PATH+80,8,912.4337,-4902.996,30.04136,0,0,0,100,0), +(@PATH+80,9,939.5068,-4887.826,30.04136,0,0,0,100,0), +(@PATH+80,10,961.7159,-4869.482,30.04136,0,0,0,100,0), +(@PATH+80,11,1005.307,-4881.67,30.04136,0,0,0,100,0), +(@PATH+80,12,1029.752,-4892.972,31.93025,0,0,0,100,0), +(@PATH+80,13,1067.775,-4894.65,39.06914,0,0,0,100,0), +(@PATH+80,14,1059.698,-4864.968,47.09693,0,0,0,100,0), +(@PATH+80,15,1060.522,-4845.491,47.09693,0,0,0,100,0), +(@PATH+80,16,1046.627,-4824.385,47.09693,0,0,0,100,0), +(@PATH+90,1,1044.91,-4980.383,47.55685,0,0,0,100,0), +(@PATH+90,2,1040.873,-5016.178,52.69574,0,0,0,100,0), +(@PATH+90,3,1054.767,-5042.476,52.69574,0,0,0,100,0), +(@PATH+90,4,1084.064,-5042.998,39.22352,0,0,0,100,0), +(@PATH+90,5,1106.236,-5031.327,39.22352,0,0,0,100,0), +(@PATH+90,6,1106.77,-4995.738,45.02908,0,0,0,100,0), +(@PATH+90,7,1086.711,-4972.376,47.55685,0,0,0,100,0), +(@PATH+90,8,1068.264,-4965.238,47.55685,0,0,0,100,0), +(@PATH+100,1,1066.911,-4940.557,48.88609,0,0,0,100,0), +(@PATH+100,2,1069.896,-4920.431,40.85831,0,0,0,100,0), +(@PATH+100,3,1057.342,-4903.877,40.85831,0,0,0,100,0), +(@PATH+100,4,1044.138,-4900.038,31.74721,0,0,0,100,0), +(@PATH+100,5,1023.748,-4899.741,28.21942,0,0,0,100,0), +(@PATH+100,6,1017.973,-4921.141,28.21942,0,0,0,100,0), +(@PATH+100,7,1037.688,-4934.398,31.88609,0,0,0,100,0); diff --git a/sql/updates/world/2015_05_23_00_world.sql b/sql/updates/world/2015_05_23_00_world.sql new file mode 100644 index 00000000000..914b721b2ed --- /dev/null +++ b/sql/updates/world/2015_05_23_00_world.sql @@ -0,0 +1,4 @@ +-- +UPDATE `creature_template` SET `npcflag`=3, `gossip_menu_id`=4047 WHERE `entry`=658; +DELETE FROM `gossip_menu` WHERE `entry`=4047; +INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (4047, 4937); diff --git a/sql/updates/world/2015_05_23_01_world.sql b/sql/updates/world/2015_05_23_01_world.sql new file mode 100644 index 00000000000..44c17b81f48 --- /dev/null +++ b/sql/updates/world/2015_05_23_01_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature_template` SET `gossip_menu_id`=21212 WHERE `entry`=13000; diff --git a/sql/updates/world/2015_05_23_02_world.sql b/sql/updates/world/2015_05_23_02_world.sql new file mode 100644 index 00000000000..b00fa1c2d86 --- /dev/null +++ b/sql/updates/world/2015_05_23_02_world.sql @@ -0,0 +1,7 @@ +-- +UPDATE `creature_template` SET `npcflag`=3, `gossip_menu_id`=694 WHERE `entry`=1343; +DELETE FROM `gossip_menu` WHERE `entry`=694; +INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (694, 1244); +DELETE FROM `npc_text` WHERE `ID`=1244; +INSERT INTO `npc_text` (`ID`, `text0_0`, `text0_1`, `BroadcastTextID0`, `lang0`, `prob0`, `em0_0`, `em0_1`) VALUES +(1244, 'Well, if it isn''t a young, bristling $c, no doubt drawn here by talk of my exploits in fields of battle!$B$BNo time for stories now, for there are great, important deeds that need doing! So if you''re looking for glory, then luck shines on you today...', 'Well, if it isn''t a young, bristling $c, no doubt drawn here by talk of my exploits in fields of battle!$B$BNo time for stories now, for there are great, important deeds that need doing! So if you''re looking for glory, then luck shines on you today...', 0, 0, 1, 0, 0); diff --git a/sql/updates/world/2015_05_23_03_world.sql b/sql/updates/world/2015_05_23_03_world.sql new file mode 100644 index 00000000000..ace8253bbde --- /dev/null +++ b/sql/updates/world/2015_05_23_03_world.sql @@ -0,0 +1,7 @@ +-- +UPDATE `creature_template` SET `npcflag`=3, `gossip_menu_id`=6159 WHERE `entry`=240; +DELETE FROM `gossip_menu` WHERE `entry`=6159; +INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (6159, 6157); +DELETE FROM `npc_text` WHERE `ID`=6157; +INSERT INTO `npc_text` (`ID`, `text0_0`, `text0_1`, `BroadcastTextID0`, `lang0`, `prob0`, `em0_0`, `em0_1`) VALUES +(6157, 'Ach, it''s hard enough keeping order around here without all these new troubles popping up! I hope you have good news, $n...', 'Ach, it''s hard enough keeping order around here without all these new troubles popping up! I hope you have good news, $n...', 42172, 0, 1, 5, 5); diff --git a/sql/updates/world/2015_05_24_00_world.sql b/sql/updates/world/2015_05_24_00_world.sql new file mode 100644 index 00000000000..946c20339cb --- /dev/null +++ b/sql/updates/world/2015_05_24_00_world.sql @@ -0,0 +1,170 @@ +-- Gnomeregan Scripts +-- Irradiated Pillager SAI +SET @ENTRY := 6329; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,25,0,100,0,0,0,0,0,75,9798,0,0,0,0,0,1,0,0,0,0,0,0,0,"Irradiated Pillager - On Reset - Add Aura 'Radiation'"), +(@ENTRY,0,1,0,0,0,100,0,3000,5000,10000,11000,11,9771,64,0,0,0,0,17,0,50,0,0,0,0,0,"Irradiated Pillager - In Combat CMC - Cast 'Radiation Bolt'"), +(@ENTRY,0,2,0,2,0,100,1,0,40,0,0,11,8269,2,0,0,0,0,1,0,0,0,0,0,0,0,"Irradiated Pillager - Between 0-40% Health - Cast 'Frenzy' (No Repeat)"); + +-- Caverndeep Ambusher SAI +SET @ENTRY := 6207; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,3700,3700,3600,12400,11,2590,0,0,0,0,0,2,0,0,0,0,0,0,0,"Caverndeep Ambusher - In Combat - Cast 'Backstab'"); + +-- Caverndeep Burrower SAI +SET @ENTRY := 6206; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,3000,5000,9000,13000,11,1604,0,0,0,0,0,2,0,0,0,0,0,0,0,"Caverndeep Burrower - In Combat - Cast 'Dazed'"), +(@ENTRY,0,1,0,0,0,100,0,2000,4000,4000,6000,11,9770,64,0,0,0,0,2,0,0,0,0,0,0,0,"Caverndeep Burrower - In Combat CMC - Cast 'Radiation'"), +(@ENTRY,0,2,0,0,0,100,0,6000,7000,4000,8000,11,16145,0,0,0,0,0,2,0,0,0,0,0,0,0,"Caverndeep Burrower - In Combat - Cast 'Sunder Armor'"), +(@ENTRY,0,3,0,2,0,100,1,0,15,0,0,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Caverndeep Burrower - Between 0-15% Health - Flee For Assist (No Repeat)"); + +-- Irradiated Slime SAI +SET @ENTRY := 6218; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,1,1000,2000,0,0,75,10341,0,0,0,0,0,1,0,0,0,0,0,0,0,"Irradiated Slime - In Combat - Add Aura 'Radiation Cloud'"), +(@ENTRY,0,1,0,0,0,100,0,2000,9000,11000,14000,11,9459,0,0,0,0,0,17,0,50,0,0,0,0,0,"Irradiated Slime - In Combat - Cast 'Corrosive Ooze'"), +(@ENTRY,0,2,0,0,0,100,0,4000,6000,8000,9000,11,1604,64,0,0,0,0,2,0,0,0,0,0,0,0,"Irradiated Slime - In Combat CMC - Cast 'Dazed'"); + +-- Irradiated Horror SAI +SET @ENTRY := 6220; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,1,1000,2000,0,0,75,10341,0,0,0,0,0,1,0,0,0,0,0,0,0,"Irradiated Horror - In Combat - Add Aura 'Radiation Cloud' (No Repeat)"), +(@ENTRY,0,1,0,0,0,100,0,4000,5000,10000,12000,11,8211,0,0,0,0,0,2,0,0,0,0,0,0,0,"Irradiated Horror - In Combat - Cast 'Chain Burn'"), +(@ENTRY,0,2,0,0,0,100,0,2000,9000,11000,14000,11,9459,0,0,0,0,0,17,0,50,0,0,0,0,0,"Irradiated Horror - In Combat - Cast 'Corrosive Ooze'"), +(@ENTRY,0,3,0,0,0,100,0,4000,6000,8000,9000,11,1604,64,0,0,0,0,2,0,0,0,0,0,0,0,"Irradiated Horror - In Combat CMC - Cast 'Dazed'"); + +-- Corrosive Lurker SAI +SET @ENTRY := 6219; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,1,1000,2000,0,0,75,10341,0,0,0,0,0,1,0,0,0,0,0,0,0,"Corrosive Lurker - In Combat - Add Aura 'Radiation Cloud' (No Repeat)"), +(@ENTRY,0,1,0,0,0,100,0,2000,9000,11000,14000,11,9459,0,0,0,0,0,17,0,50,0,0,0,0,0,"Corrosive Lurker - In Combat - Cast 'Corrosive Ooze'"), +(@ENTRY,0,2,0,0,0,100,0,4000,6000,8000,9000,11,1604,64,0,0,0,0,2,0,0,0,0,0,0,0,"Corrosive Lurker - In Combat CMC - Cast 'Dazed'"); + +UPDATE `creature` SET `spawndist`=20, `MovementType`=1 WHERE `guid`=30137; + +-- Viscous Fallout SAI +SET @ENTRY := 7079; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,1,1000,2000,0,0,75,10341,2,0,0,0,0,1,0,0,0,0,0,0,0,"Viscous Fallout - In Combat - Add Aura 'Radiation Cloud'"), +(@ENTRY,0,1,0,0,0,100,0,2000,9000,11000,14000,11,9459,64,0,0,0,0,17,0,50,0,0,0,0,0,"Viscous Fallout - In Combat CMC - Cast 'Corrosive Ooze'"); + +-- Mechanized Sentry SAI +SET @ENTRY := 6233; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,3000,5000,8000,9000,11,1604,0,0,0,0,0,2,0,0,0,0,0,0,0,"Mechanized Sentry - In Combat - Cast 'Dazed'"); + +-- Leprous Defender SAI +SET @ENTRY := 6223; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,1000,1500,2300,3900,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Leprous Defender - Combat CMC - Cast 'Shoot'"), +(@ENTRY,0,1,0,9,0,100,0,5,30,7000,9000,11,14443,0,0,0,0,0,2,0,0,0,0,0,0,0,"Leprous Defender - Within 5-30 Range - Cast 'Multi-Shot'"), +(@ENTRY,0,2,0,9,0,100,0,5,30,9000,11000,11,5116,0,0,0,0,0,2,0,0,0,0,0,0,0,"Leprous Defender - Within 5-30 Range - Cast 'Concussive Shot'"), +(@ENTRY,0,3,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Leprous Defender - Between 0-15% Health - Flee For Assist (No Repeat)"); + +-- Leprous Technician SAI +SET @ENTRY := 6222; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,4,0,100,0,0,0,0,0,11,12024,64,0,0,0,0,2,0,0,0,0,0,0,0,"Leprous Technician - On Aggro CMC - Cast 'Net'"), +(@ENTRY,0,1,0,0,0,100,0,2000,6000,8000,9000,11,1604,0,0,0,0,0,2,0,0,0,0,0,0,0,"Leprous Technician - In Combat - Cast 'Dazed'"), +(@ENTRY,0,2,0,0,0,100,0,2000,5000,6000,8000,11,13398,64,0,0,0,0,21,30,0,0,0,0,0,0,"Leprous Technician - In Combat CMC - Cast 'Throw Wrench'"); + +-- Mechano-Tank SAI +SET @ENTRY := 6225; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,5,30,2300,3900,11,1604,64,0,0,0,0,2,0,0,0,0,0,0,0,"Mechano-Tank - Combat CMC - Cast 'Dazed'"), +(@ENTRY,0,1,0,9,0,100,0,5,30,7000,9000,11,10346,0,0,0,0,0,2,0,0,0,0,0,0,0,"Mechano-Tank - Within 5-30 Range - Cast 'Multi-Shot'"), +(@ENTRY,0,2,0,9,0,100,0,5,30,9000,11000,11,5116,0,0,0,0,0,2,0,0,0,0,0,0,0,"Mechano-Tank - Within 5-30 Range - Cast 'Concussive Shot'"), +(@ENTRY,0,3,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mechano-Tank - Between 0-15% Health - Flee For Assist (No Repeat)"); + +-- Peacekeeper Security Suit SAI +SET @ENTRY := 6230; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,5000,6000,6000,8000,11,6533,64,0,0,0,0,2,0,0,0,0,0,0,0,"Peacekeeper Security Suit - In Combat CMC - Cast 'Net'"), +(@ENTRY,0,1,0,0,0,50,0,5000,6000,14000,16000,11,10730,0,0,0,0,0,2,0,0,0,0,0,0,0,"Peacekeeper Security Suit - In Combat - Cast 'Pacify'"); + +-- Mechanized Guardian SAI +SET @ENTRY := 6234; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,2000,5000,6000,7000,11,1604,0,0,0,0,0,2,0,0,0,0,0,0,0,"Mechanized Guardian - In Combat - Cast 'Dazed'"), +(@ENTRY,0,1,0,0,0,100,0,3000,6000,6000,7000,11,11820,0,0,0,0,0,21,40,0,0,0,0,0,0,"Mechanized Guardian - In Combat - Cast 'Field'"); + +-- Mechano-Flamewalker SAI +SET @ENTRY := 6226; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,2000,6000,6000,10000,11,11306,64,0,0,0,0,1,0,0,0,0,0,0,0,"Mechano-Flamewalker - In Combat CMC - Cast 'Fire Nova'"), +(@ENTRY,0,1,0,0,0,100,0,3000,6000,10000,12000,11,10733,0,0,0,0,0,2,0,0,0,0,0,0,0,"Mechano-Flamewalker - In Combat - Cast 'Flame Spray'"); + +-- Mechano-Frostwalker SAI +SET @ENTRY := 6227; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,2,0,100,1,0,40,0,0,11,22519,2,0,0,0,0,1,0,0,0,0,0,0,0,"Mechano-Frostwalker - Between 0-40% Health - Cast 'Ice Nova' (No Repeat)"), +(@ENTRY,0,1,0,0,0,100,0,2000,6000,8000,9000,11,11264,64,0,0,0,0,1,0,0,0,0,0,0,0,"Mechano-Frostwalker - In Combat CMC - Cast 'Ice Blast'"); + +-- Caverndeep Reaver SAI +SET @ENTRY := 6211; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,4,0,100,1,0,0,0,0,11,7366,2,0,0,0,0,1,0,0,0,0,0,0,0,"Caverndeep Reaver - On Aggro - Cast 'Berserker Stance' (No Repeat)"), +(@ENTRY,0,1,0,0,0,100,0,2000,6000,5000,8000,11,8374,2,0,0,0,0,2,0,0,0,0,0,0,0,"Caverndeep Reaver - In Combat - Cast 'Arcing Smash'"), +(@ENTRY,0,2,0,0,0,100,0,4000,4000,4000,4000,11,845,2,0,0,0,0,2,0,0,0,0,0,0,0,"Caverndeep Reaver - In Combat - Cast 'Cleave'"); + +-- Holdout Medic SAI +SET @ENTRY := 6392; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,2,0,100,1,0,60,0,0,11,22167,0,0,0,0,0,1,0,0,0,0,0,0,0,"Holdout Medic - Between 0-60% Health - Cast 'Heal' (No Repeat)"), +(@ENTRY,0,1,0,4,0,100,1,0,0,0,0,11,22168,64,0,0,0,0,1,0,0,0,0,0,0,0,"Holdout Medic - On Aggro CMC - Cast 'Renew' (No Repeat)"), +(@ENTRY,0,2,0,1,0,100,0,5000,5000,8000,10000,11,22167,0,0,0,0,0,1,0,0,0,0,0,0,0,"Holdout Medic - Out of Combat - Cast 'Heal'"), +(@ENTRY,0,3,0,1,0,100,0,4000,10000,15000,20000,11,22168,0,0,0,0,0,1,0,0,0,0,0,0,0,"Holdout Medic - Out of Combat - Cast 'Renew'"); + +-- Walking Bomb SAI +SET @ENTRY := 7915; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,3,0,0,15000,15000,11,11504,0,0,0,0,0,1,0,0,0,0,0,0,0,"Walking Bomb - In Combat - Cast 'Walking Bomb Effect' (No Repeat) (Normal Dungeon)"); + +UPDATE `creature` SET `spawndist`=20, `MovementType`=1 WHERE `guid`=30133; + +-- Leprous Machinesmith SAI +SET @ENTRY := 6224; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,4000,5000,20000,25000,11,10732,0,0,0,0,0,19,6224,50,0,0,0,0,0,"Leprous Machinesmith - In Combat - Cast 'Supercharge'"), +(@ENTRY,0,1,0,0,0,100,0,2000,5000,4000,6000,11,13398,64,0,0,0,0,21,30,0,0,0,0,0,0,"Leprous Machinesmith - In Combat CMC - Cast 'Throw Wrench'"), +(@ENTRY,0,2,0,2,0,100,1,0,90,0,0,11,10348,0,0,0,0,0,1,0,0,0,0,0,0,0,"Leprous Machinesmith - Between 0-90% Health - Cast 'Tune Up' (No Repeat)"); + diff --git a/sql/updates/world/2015_05_24_01_world.sql b/sql/updates/world/2015_05_24_01_world.sql new file mode 100644 index 00000000000..b8e343d9840 --- /dev/null +++ b/sql/updates/world/2015_05_24_01_world.sql @@ -0,0 +1,365 @@ +-- Ammo for Rumbleshot +UPDATE `creature` SET position_x = -6070.349121, position_y = -285.940399, position_z = 428.220367, orientation = 1.496177 WHERE guid = 263; +UPDATE `creature` SET position_x = -6104.470703, position_y = -163.987122, position_z = 433.257080, orientation = 1.833880 WHERE guid = 1716; +UPDATE `creature` SET position_x = -5988.834473, position_y = -135.639069, position_z = 400.818604, orientation = 4.441411 WHERE guid = 290; +-- Mortar Combat - event +-- correct spawn possition for all involved in event +UPDATE `creature` SET position_x = -6009.25, position_y = -202.649994, position_z = 406.982605, orientation = 1.58825 WHERE guid = 269; -- angus +UPDATE `creature` SET orientation = 0.03490658 WHERE guid = 265 ; -- hegnar +UPDATE `creature` SET position_x = -6007.301758, position_y = -200.348206, position_z = 406.777496, orientation = 3.282219 WHERE guid = 272; -- klemmy +UPDATE `creature` SET position_x = -6007.458984, position_y = -202.157593, position_z = 407.447937, orientation = 2.478368 WHERE guid = 267; -- shorty +UPDATE `creature` SET position_x = -6010.668151495, position_y = -199.434006, position_z = 406.792480, orientation = 5.532694 WHERE guid = 268; -- middlecamp +UPDATE `creature` SET position_x = -6008.527832, position_y = -199.145203, position_z = 406.687225, orientation = 4.372177 WHERE guid = 266; -- wheeler + +DELETE FROM `waypoints` WHERE `entry`=10610; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(10610, 1, -6009.25,-202.649994,406.982605, 'Angus'), +(10610, 2, -6009.25,-202.649994,406.982605, 'Angus'), +(10610, 3, -6009.25,-202.649994,406.982605, 'Angus'), +(10610, 4, -6031.16,-230.264,414.361, 'Angus'); + +DELETE FROM `spell_target_position` WHERE id IN (18634,16572,16767,16768,16772,16775,16776,16777,16778,16779,16780,16786,18634); +INSERT INTO `spell_target_position` (id, target_map, target_position_x, target_position_y, target_position_z, target_orientation) VALUES +(16572,0,-6046.85,-207.329,418.304,0), +(16767,0,-6046.73,-207.159,417.267,0), +(16768,0,-6051.39,-206.749,418.159,0), +(16772,0,-6046.84,-204.535,416.897,0), +(16775,0,-6044.47,-205.783,417.267,0), +(16776,0,-6044.54,-205.562,417.663,0), +(16777,0,-6044.53,-202.912,416.756,0), +(16778,0,-6042.18,-204.949,416.336,0), +(16779,0,-6042.02,-204.134,416.894,0), +(16780,0,-6044.79,-196.959,419.19,0), +(16786,0,-6078.3,-211.89,424.197,0), +(18634,0,-6076,-215,424,0); + +-- Hegnar Rumbleshot SAI +SET @ENTRY := 1243; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,1,20,0,100,0,5541,0,0,0,45,1,0,0,0,0,0,19,10610,20,0,0,0,0,0,"Hegnar Rumbleshot - On Quest 'Ammo for Rumbleshot' Finished - Set Data 1 0"), +(@ENTRY,0,1,2,61,0,100,0,5541,0,0,0,45,1,0,0,0,0,0,19,10611,20,0,0,0,0,0,"Hegnar Rumbleshot - On Quest 'Ammo for Rumbleshot' Finished - Set Data 1 0"), +(@ENTRY,0,2,3,61,0,100,0,5541,0,0,0,45,1,0,0,0,0,0,19,10804,20,0,0,0,0,0,"Hegnar Rumbleshot - On Quest 'Ammo for Rumbleshot' Finished - Set Data 1 0"), +(@ENTRY,0,3,4,61,0,100,0,5541,0,0,0,45,1,0,0,0,0,0,19,10805,20,0,0,0,0,0,"Hegnar Rumbleshot - On Quest 'Ammo for Rumbleshot' Finished - Set Data 1 0"), +(@ENTRY,0,4,0,61,0,100,0,5541,0,0,0,45,1,0,0,0,0,0,19,10803,20,0,0,0,0,0,"Hegnar Rumbleshot - On Quest 'Ammo for Rumbleshot' Finished - Set Data 1 0"), +(@ENTRY,0,5,0,38,0,100,0,2,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,3.68522,"Hegnar Rumbleshot - On Data Set 2 0 - Set Orientation 3,68522"), +(@ENTRY,0,6,0,38,0,100,0,3,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,0.03490658,"Hegnar Rumbleshot - On Data Set 3 0 - Set Orientation 0.03490658"); + +-- Angus SAI +SET @ENTRY := 10610; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,1,38,0,100,0,1,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Angus - On Data Set 1 0 - Set Active On"), +(@ENTRY,0,1,2,61,0,100,0,1,0,0,0,53,0,10610,0,0,0,0,1,0,0,0,0,0,0,0,"Angus - On Data Set 1 0 - Start Waypoint"), +(@ENTRY,0,2,0,61,0,100,0,1,0,0,0,4,6598,0,0,0,0,0,21,50,0,0,0,0,0,0,"Angus - On Data Set 1 0 - Play Sound 6598"), +(@ENTRY,0,3,4,40,0,100,0,4,10610,0,0,54,250000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Angus - On Waypoint 4 Reached - Pause Waypoint"), +(@ENTRY,0,4,0,61,0,100,0,4,10610,0,0,80,@ENTRY*100+00,0,0,0,0,0,1,0,0,0,0,0,0,0,"Angus - On Waypoint 4 Reached - Run Script"), +(@ENTRY,0,5,0,38,0,100,0,2,0,0,0,69,0,0,0,0,0,0,8,0,0,0,-6009.25,-202.649994,406.982605,2,"Shorty - On Data Set 2 0 - Move To Position"), +(@ENTRY,0,6,0,38,0,100,0,3,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,1.58825,"Shorty - On Data Set 3 0 - Set Orientation 1.58825"); + +-- Mortar Team Target Dummy SAI +SET @ENTRY := 11875; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,1,100,100,0,0,75,42716,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mortar Team Target Dummy - Out of Combat - Add Aura 'Self Root Forever (No Visual)' (No Repeat)"); + +-- move to eventplace +-- Shorty SAI +SET @ENTRY := 10611; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,1,38,0,100,0,1,0,0,0,69,0,0,0,0,0,0,8,0,0,0,-6031.589,-228.182,414.4035,2,"Shorty - On Data Set 1 0 - Move To Position"), +(@ENTRY,0,1,0,61,0,100,0,1,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Shorty - On Data Set 1 0 - Set Active On"), +(@ENTRY,0,2,0,38,0,100,0,2,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,2.18492,"Shorty - On Data Set 2 0 - Set Orientation 2,18492"), +(@ENTRY,0,3,0,38,0,100,0,3,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,2.844887,"Shorty - On Data Set 3 0 - Set Orientation 2.844887"), +(@ENTRY,0,4,0,38,0,100,0,4,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,4.54215,"Shorty - On Data Set 4 0 - Set Orientation 4.54215"), +(@ENTRY,0,5,0,38,0,100,0,5,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,2.844887,"Shorty - On Data Set 4 0 - Set Orientation 2.844887"), +(@ENTRY,0,6,0,38,0,100,0,6,0,0,0,11,18655,0,0,0,0,0,1,0,0,0,0,0,0,0,"Shorty - On Data Set 6 0 - Cast 'Mortar Animate'"), +(@ENTRY,0,7,0,38,0,100,0,7,0,0,0,11,16786,0,0,0,0,0,1,0,0,0,0,0,0,0,"Shorty - On Data Set 7 0 - Cast 'Mortar Shot'"), +(@ENTRY,0,8,0,38,0,100,0,8,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,4.54215,"Shorty - On Data Set 8 0 - Set Orientation 4.54215"), +(@ENTRY,0,9,0,38,0,100,0,9,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,4.54215,"Shorty - On Data Set 9 0 - Set Orientation 4.54215"), +(@ENTRY,0,10,0,38,0,100,0,10,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,2.844887,"Shorty - On Data Set 10 0 - Set Orientation 2.844887"), +(@ENTRY,0,11,0,38,0,100,0,11,0,0,0,69,0,0,0,0,0,0,8,0,0,0,-6007.458984,-202.157593,407.447937,2,"Shorty - On Data Set 11 0 - Move To Position"), +(@ENTRY,0,12,0,38,0,100,0,12,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,2.478368,"Shorty - On Data Set 12 0 - Set Orientation 2.478368"); + +-- Klemmy SAI +SET @ENTRY := 10805; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,1,38,0,100,0,1,0,0,0,53,0,10805,0,0,0,0,1,0,0,0,0,0,0,0,"Klemmy - On Data Set 1 0 - Start Waypoint"), +(@ENTRY,0,1,0,61,0,100,0,1,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Klemmy - On Data Set 1 0 - Set Active On"), +(@ENTRY,0,2,0,38,0,100,0,2,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,5.59936,"Spotter Klemmy - On Data Set 2 0 - Set Orientation 5,59936"), +(@ENTRY,0,3,0,38,0,100,0,3,0,0,0,69,0,0,0,0,0,0,8,0,0,0,-6077.43,-213.2565,424.0502,5.59936,"Spotter Klemmy - On Data Set 3 0 - Move To Position"), +(@ENTRY,0,4,0,38,0,100,0,4,0,0,0,69,0,0,0,0,0,0,8,0,0,0,-6065.903,-202.2976,424.3693,5,"Spotter Klemmy - On Data Set 4 0 - Move To Position"), +(@ENTRY,0,5,0,38,0,100,0,5,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,5.59936,"Spotter Klemmy - On Data Set 5 0 - Set Orientation 5.59936"), +(@ENTRY,0,6,0,38,0,100,0,6,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,4.0985,"Spotter Klemmy - On Data Set 6 0 - Set Orientation 4.0985"), +(@ENTRY,0,7,0,38,0,100,0,7,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,4.0985,"Spotter Klemmy - On Data Set 7 0 - Set Orientation 4.0985"), +(@ENTRY,0,8,0,38,0,100,0,8,0,0,0,69,0,0,0,0,0,0,8,0,0,0,-6077.43,-213.2565,424.0502,5.59936,"Spotter Klemmy - On Data Set 8 0 - Move To Position"), +(@ENTRY,0,9,0,38,0,100,0,9,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,2.844887,"Spotter Klemmy - On Data Set 9 0 - Set Orientation 2.844887"), +(@ENTRY,0,10,0,38,0,100,0,10,0,0,0,69,0,0,0,0,0,0,8,0,0,0,-6071.88,-212.831,422.929,5,"Spotter Klemmy - On Data Set 10 0 - Move To Position"), +(@ENTRY,0,11,0,38,0,100,0,11,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,6.04228,"Spotter Klemmy - On Data Set 11 0 - Set Orientation 6.04228"), +(@ENTRY,0,12,0,38,0,100,0,12,0,0,0,69,0,0,0,0,0,0,8,0,0,0,-6065.903,-202.2976,424.3693,5,"Spotter Klemmy - On Data Set 12 0 - Move To Position"), +(@ENTRY,0,13,0,38,0,100,0,13,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,4.0985,"Spotter Klemmy - On Data Set 13 0 - Set Orientation 4.0985"), +(@ENTRY,0,14,0,38,0,100,0,14,0,0,0,69,0,0,0,0,0,0,8,0,0,0,-6064.07,-209.851,421.98,6.10275,"Spotter Klemmy - On Data Set 14 0 - Move To Position"), +(@ENTRY,0,15,0,38,0,100,0,15,0,0,0,69,0,0,0,0,0,0,8,0,0,0,-6061.97,-218.956,421.085,5.92054,"Spotter Klemmy - On Data Set 15 0 - Move To Position"), +(@ENTRY,0,16,0,38,0,100,0,16,0,0,0,69,0,0,0,0,0,0,8,0,0,0,-6040.96,-221.929,414.921,5.92054,"Spotter Klemmy - On Data Set 16 0 - Move To Position"), +(@ENTRY,0,17,0,38,0,100,0,17,0,0,0,69,0,0,0,0,0,0,8,0,0,0,-6007.301758,-200.348206,406.777496,3.282219,"Spotter Klemmy - On Data Set 17 0 - Move To Position"), +(@ENTRY,0,18,0,38,0,100,0,18,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,3.282219,"Spotter Klemmy - On Data Set 18 0 - Set Orientation 3.282219"); + +-- Wheeler SAI +SET @ENTRY := 10803; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,1,38,0,100,0,1,0,0,0,53,0,10803,0,0,0,0,1,0,0,0,0,0,0,0,"Wheeler - On Data Set 1 0 - Start Waypoint"), +(@ENTRY,0,1,0,61,0,100,0,1,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Wheeler - On Data Set 1 0 - Set Active On"), +(@ENTRY,0,2,0,38,0,100,0,2,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,2.443461,"Wheeler - On Data Set 2 0 - Set Orientation 2,443461"), +(@ENTRY,0,3,0,38,0,100,0,3,0,0,0,11,16767,0,0,0,0,0,1,0,0,0,0,0,0,0,"Wheeler - On Data Set 3 0 - Cast 'Shoot'"), +(@ENTRY,0,4,0,38,0,100,0,4,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,4.00565,"Wheeler - On Data Set 4 0 - Set Orientation 4.00565"), +(@ENTRY,0,5,0,38,0,100,0,5,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,2.443461,"Wheeler - On Data Set 5 0 - Set Orientation 2.443461"), +(@ENTRY,0,6,0,38,0,100,0,6,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,4.00565,"Wheeler - On Data Set 6 0 - Set Orientation 4.00565"), +(@ENTRY,0,7,0,38,0,100,0,7,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,2.443461,"Wheeler - On Data Set 7 0 - Set Orientation 2.443461"), +(@ENTRY,0,8,0,38,0,100,0,8,0,0,0,11,16775,0,0,0,0,0,1,0,0,0,0,0,0,0,"Wheeler - On Data Set 8 0 - Cast 'Shoot'"), +(@ENTRY,0,9,0,38,0,100,0,9,0,0,0,11,16778,0,0,0,0,0,1,0,0,0,0,0,0,0,"Wheeler - On Data Set 9 0 - Cast 'Shoot'"), +(@ENTRY,0,10,0,38,0,100,0,10,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,4.00565,"Wheeler - On Data Set 10 0 - Set Orientation 4.00565"), +(@ENTRY,0,11,0,38,0,100,0,11,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,2.443461,"Wheeler - On Data Set 11 0 - Set Orientation 4.00565"), +(@ENTRY,0,12,0,38,0,100,0,12,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,4.00565,"Wheeler - On Data Set 12 0 - Set Orientation 4.00565"), +(@ENTRY,0,13,0,38,0,100,0,13,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,4.77803,"Wheeler - On Data Set 13 0 - Set Orientation 4.77803"), +(@ENTRY,0,14,0,38,0,100,0,14,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,3.01942,"Wheeler - On Data Set 14 0 - Set Orientation 3.01942"), +(@ENTRY,0,15,0,38,0,100,0,15,0,0,0,69,0,0,0,0,0,0,8,0,0,0,-6008.527832,-199.145203,406.687225,4.372177,"Wheeler - On Data Set 15 0 - Move To Position"), +(@ENTRY,0,16,0,38,0,100,0,16,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,4.372177,"Wheeler - On Data Set 16 0 - Set Orientation 4.372177"); + +-- Rifleman Middlecamp SAI +SET @ENTRY := 10804; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,1,38,0,100,0,1,0,0,0,69,0,0,0,0,0,0,8,0,0,0,-6034.14,-223.333,413.4,1,"Rifleman Middlecamp - On Data Set 1 0 - Move To Position"), +(@ENTRY,0,1,0,61,0,100,0,1,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Rifleman Middlecamp - On Data Set 1 0 - Set Active On"), +(@ENTRY,0,2,0,38,0,100,0,2,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,1.884956,"Rifleman Middlecamp - On Data Set 2 0 - Set Orientation 1,884956"), +(@ENTRY,0,3,0,38,0,100,0,3,0,0,0,11,16768,0,0,0,0,0,1,0,0,0,0,0,0,0,"Rifleman Middlecamp - On Data Set 3 0 - Cast 'Shoot'"), +(@ENTRY,0,4,0,38,0,100,0,4,0,0,0,11,16772,0,0,0,0,0,1,0,0,0,0,0,0,0,"Rifleman Middlecamp - On Data Set 4 0 - Cast 'Shoot'"), +(@ENTRY,0,5,0,38,0,100,0,5,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,0.810652,"Rifleman Middlecamp - On Data Set 5 0 - Set Orientation 0.810652"), +(@ENTRY,0,6,0,38,0,100,0,6,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,1.884956,"Rifleman Middlecamp - On Data Set 6 0 - Set Orientation 1.884956"), +(@ENTRY,0,7,0,38,0,100,0,7,0,0,0,11,16777,0,0,0,0,0,1,0,0,0,0,0,0,0,"Rifleman Middlecamp - On Data Set 7 0 - Cast 'Shoot'"), +(@ENTRY,0,8,0,38,0,100,0,8,0,0,0,11,16780,0,0,0,0,0,1,0,0,0,0,0,0,0,"Rifleman Middlecamp - On Data Set 8 0 - Cast 'Shoot'"), +(@ENTRY,0,9,0,38,0,100,0,9,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,0.810652,"Rifleman Middlecamp - On Data Set 9 0 - Set Orientation 0.810652"), +(@ENTRY,0,10,0,38,0,100,0,10,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,1.884956,"Rifleman Middlecamp - On Data Set 10 0 - Set Orientation 1.884956"), +(@ENTRY,0,11,0,38,0,100,0,11,0,0,0,11,16572,0,0,0,0,0,1,0,0,0,0,0,0,0,"Rifleman Middlecamp - On Data Set 11 0 - Cast 'Shoot'"), +(@ENTRY,0,12,0,38,0,100,0,12,0,0,0,11,16776,0,0,0,0,0,1,0,0,0,0,0,0,0,"Rifleman Middlecamp - On Data Set 12 0 - Cast 'Shoot'"), +(@ENTRY,0,13,0,38,0,100,0,13,0,0,0,11,16779,0,0,0,0,0,1,0,0,0,0,0,0,0,"Rifleman Middlecamp - On Data Set 13 0 - Cast 'Shoot'"), +(@ENTRY,0,14,0,38,0,100,0,14,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,0.810652,"Rifleman Middlecamp - On Data Set 14 0 - Set Orientation 0.810652"), +(@ENTRY,0,15,0,38,0,100,0,15,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,5.13852,"Rifleman Middlecamp - On Data Set 15 0 - Set Orientation 5.13852"), +(@ENTRY,0,16,0,38,0,100,0,16,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,2.9147,"Rifleman Middlecamp - On Data Set 16 0 - Set Orientation 2.9147"), +(@ENTRY,0,17,1,38,0,100,0,17,0,0,0,69,0,0,0,0,0,0,8,0,0,0,-6010.668151495,-199.434006,406.792480,5.532694,"Rifleman Middlecamp - On Data Set 17 0 - Move To Position"), +(@ENTRY,0,18,0,38,0,100,0,18,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,5.532694,"Rifleman Middlecamp - On Data Set 18 0 - Set Orientation 5.532694"); + +DELETE FROM `waypoints` WHERE `entry`=10805; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(10805, 1, -6011.17,-197.021,406.765, 'Klemmy'), +(10805, 2, -6015.51,-184.362,407.712, 'Klemmy'), +(10805, 3, -6042.365723,-191.418701,421.045868, 'Klemmy'), +(10805, 4, -6065.18,-201.938,424.419, 'Klemmy'); + +DELETE FROM `waypoints` WHERE `entry`=10803; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(10803, 1, -6011.87,-199.241,406.834, 'Wheeler'), +(10803, 2, -6031.929,-221.0882,413.1531, 'Wheeler'); + +DELETE FROM `creature_text` WHERE `entry` IN (10804, 10803); +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextId`) VALUES +(10804, 0, 0, '%s picks the orc target...', 16, 0, 100, 25, 0, 0, 'Middlecamp', 6107), +(10804, 1, 0, '%s misses...', 16, 0, 100, 6, 0, 0, 'Middlecamp', 6140), +(10804, 2, 0, '%s takes a more careful aim...', 16, 0, 100, 6, 0, 6247, 'Middlecamp', 6106), +(10804, 3, 0, '%s misses again...', 16, 0, 100, 6, 0, 0, 'Middlecamp', 6141), +(10804, 4, 0, '%s takes aim at the bottles...', 16, 0, 100, 0, 0, 0, 'Middlecamp', 6120), +(10804, 5, 0, '%s misses...', 16, 0, 100, 15, 0, 0, 'Middlecamp', 6140), +(10804, 6, 0, '%s takes aim at the bottles again...', 16, 0, 100, 0, 0, 0, 'Middlecamp', 6121), +(10804, 7, 0, '%s misses again...', 16, 0, 100, 18, 0, 0, 'Middlecamp', 6141), +(10804, 8, 0, '%s quickly shoots the orc dummy...', 16, 0, 100, 0, 0, 0, 'Middlecamp', 6137), +(10804, 9, 0, '%s turns to the paper target...', 16, 0, 100, 0, 0, 0, 'Middlecamp', 6136), +(10804, 10, 0, '%s shoots from the hip at the bottles...', 16, 0, 100, 0, 0, 0, 'Middlecamp', 6138), +-- +(10803, 0, 0, '%s casually points at the orc target...', 16, 0, 100, 25, 0, 0, 'Wheeler', 6118), +(10803, 1, 0, '%s hits!', 16, 0, 100, 0, 0, 0, 'Wheeler', 6142), +(10803, 2, 0, '%s quickly shoots the middle target dead center...', 16, 0, 100, 0, 0, 0, 'Wheeler', 6124), +(10803, 3, 0, '%s then takes aim at the bottles...', 16, 0, 100, 0, 0, 0, 'Wheeler', 6122), +(10803, 4, 0, '%s only hits the side of the box!', 16, 0, 100, 0, 0, 0, 'Wheeler', 6123); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceGroup`=1 AND `SourceEntry`=18655; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, 18655, 0, 0, 31, 0, 5, 176557, 0, 0, 0, 0, '', 'Mörser - Mörser'); + +-- Actionlist SAI +SET @ENTRY := 1061000; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,45,2,0,0,0,0,0,19,10805,100,0,0,0,0,0,"On Script - Set Data 2 0"), +(@ENTRY,9,1,0,0,0,100,0,0,0,0,0,45,2,0,0,0,0,0,19,10611,100,0,0,0,0,0,"On Script - Set Data 2 0"), +(@ENTRY,9,2,0,0,0,100,0,0,0,0,0,45,2,0,0,0,0,0,19,10803,100,0,0,0,0,0,"On Script - Set Data 2 0"), +(@ENTRY,9,3,0,0,0,100,0,0,0,0,0,45,2,0,0,0,0,0,19,10804,100,0,0,0,0,0,"On Script - Set Data 2 0"), +(@ENTRY,9,4,0,0,0,100,0,0,0,0,0,45,2,0,0,0,0,0,19,1243,100,0,0,0,0,0,"On Script - Set Data 2 0"), +(@ENTRY,9,5,0,0,0,100,0,5000,5000,0,0,1,0,0,0,0,0,0,19,10804,100,0,0,0,0,0,"Angus - On Script - Say Line 0"), +(@ENTRY,9,6,0,0,0,100,0,3000,3000,0,0,45,3,0,0,0,0,0,19,10804,50,0,0,0,0,0,"Angus - On Script - Set Data 3 0"), +(@ENTRY,9,7,0,0,0,100,0,2000,2000,0,0,1,1,0,0,0,0,0,19,10804,100,0,0,0,0,0,"Angus - On Script - Say Line 1"), +(@ENTRY,9,8,0,0,0,100,0,4000,4000,0,0,1,2,0,0,0,0,0,19,10804,100,0,0,0,0,0,"Angus - On Script - Say Line 2"), +(@ENTRY,9,9,0,0,0,100,0,2000,2000,0,0,45,4,0,0,0,0,0,19,10804,50,0,0,0,0,0,"Angus - On Script - Set Data 4 0"), +(@ENTRY,9,10,0,0,0,100,0,2000,2000,0,0,1,3,0,0,0,0,0,19,10804,100,0,0,0,0,0,"Angus - On Script - Say Line 3"), +(@ENTRY,9,11,0,0,0,100,0,2000,2000,0,0,45,5,0,0,0,0,0,19,10804,50,0,0,0,0,0,"Angus - On Script - Set Data 5 0"), +(@ENTRY,9,12,0,0,0,100,0,1000,1000,0,0,5,5,0,0,0,0,0,19,10804,100,0,0,0,0,0,"Angus - On Script - Play Emote 5"), +(@ENTRY,9,13,0,0,0,100,0,1000,1000,0,0,5,11,0,0,0,0,0,19,10803,100,0,0,0,0,0,"Angus - On Script - Play Emote 11"), +(@ENTRY,9,14,0,0,0,100,0,1000,1000,0,0,5,274,0,0,0,0,0,19,10611,100,0,0,0,0,0,"Angus - On Script - Play Emote 11"), +(@ENTRY,9,15,0,0,0,100,0,0,0,0,0,5,274,0,0,0,0,0,1,0,0,0,0,0,0,0,"Angus - On Script - Play Emote 11"), +(@ENTRY,9,16,0,0,0,100,0,1000,1000,0,0,45,6,0,0,0,0,0,19,10804,50,0,0,0,0,0,"Angus - On Script - Set Data 6 0"), +(@ENTRY,9,17,0,0,0,100,0,1000,1000,0,0,1,0,0,0,0,0,0,19,10803,100,0,0,0,0,0,"Angus - On Script - Say Line 0"), +(@ENTRY,9,18,0,0,0,100,0,4000,4000,0,0,45,3,0,0,0,0,0,19,10803,50,0,0,0,0,0,"Angus - On Script - Set Data 3 0"), +(@ENTRY,9,19,0,0,0,100,0,2000,2000,0,0,1,1,0,0,0,0,0,19,10803,100,0,0,0,0,0,"Angus - On Script - Say Line 1"), +(@ENTRY,9,20,0,0,0,100,0,2000,2000,0,0,45,4,0,0,0,0,0,19,10803,50,0,0,0,0,0,"Angus - On Script - Set Data 4 0"), +(@ENTRY,9,21,0,0,0,100,0,1000,1000,0,0,5,25,0,0,0,0,0,19,10803,50,0,0,0,0,0,"Angus - On Script - Play Emote 25"), +(@ENTRY,9,22,0,0,0,100,0,0,0,0,0,4,6249,0,0,0,0,0,21,100,0,0,0,0,0,0,"Angus - On Script - Play Sound 6249"), +(@ENTRY,9,23,0,0,0,100,0,2000,2000,0,0,5,21,0,0,0,0,0,1,0,0,0,0,0,0,0,"Angus - On Script - Play Emote 21"), +(@ENTRY,9,24,0,0,0,100,0,1000,1000,0,0,5,21,0,0,0,0,0,19,10611,100,0,0,0,0,0,"Angus - On Script - Play Emote 21"), +(@ENTRY,9,25,0,0,0,100,0,0,0,0,0,5,23,0,0,0,0,0,19,10803,100,0,0,0,0,0,"Angus - On Script - Play Emote 23"), +(@ENTRY,9,26,0,0,0,100,0,2000,2000,0,0,45,5,0,0,0,0,0,19,10803,50,0,0,0,0,0,"Angus - On Script - Set Data 5 0 Wheeler"), +(@ENTRY,9,27,0,0,0,100,0,3000,3000,0,0,1,4,0,0,0,0,0,19,10804,100,0,0,0,0,0,"Angus - On Script - Say Line 4"), +(@ENTRY,9,28,0,0,0,100,0,2000,2000,0,0,45,7,0,0,0,0,0,19,10804,50,0,0,0,0,0,"Angus - On Script - Set Data 5 0 Middlecamp"), +(@ENTRY,9,29,0,0,0,100,0,2000,2000,0,0,1,5,0,0,0,0,0,19,10804,100,0,0,0,0,0,"Angus - On Script - Say Line 5 Middlecamp"), +(@ENTRY,9,30,0,0,0,100,0,2000,2000,0,0,5,20,0,0,0,0,0,19,10804,100,0,0,0,0,0,"Angus - On Script - Play Emote 20 Middlecamp"), +(@ENTRY,9,31,0,0,0,100,0,0,0,0,0,45,6,0,0,0,0,0,19,10803,50,0,0,0,0,0,"Angus - On Script - Set Data 6 0 Wheeler"), +(@ENTRY,9,32,0,0,0,100,0,1000,1000,0,0,5,6,0,0,0,0,0,19,10803,100,0,0,0,0,0,"Angus - On Script - Play Emote 6 Wheeler"), +(@ENTRY,9,33,0,0,0,100,0,0,0,0,0,4,6248,0,0,0,0,0,21,100,0,0,0,0,0,0,"Angus - On Script - Play Sound 6248"), +(@ENTRY,9,34,0,0,0,100,0,3000,3000,0,0,45,7,0,0,0,0,0,19,10803,50,0,0,0,0,0,"Angus - On Script - Set Data 6 0 Wheeler"), +(@ENTRY,9,35,0,0,0,100,0,0,0,0,0,1,6,0,0,0,0,0,19,10804,100,0,0,0,0,0,"Angus - On Script - Say Line 6 Middlecamp"), +(@ENTRY,9,36,0,0,0,100,0,1000,1000,0,0,45,8,0,0,0,0,0,19,10804,50,0,0,0,0,0,"Angus - On Script - Set Data 8 0 Middlecamp"), +(@ENTRY,9,38,0,0,0,100,0,0,0,0,0,1,7,0,0,0,0,0,19,10804,100,0,0,0,0,0,"Angus - On Script - Say Line 7 Middlecamp"), +(@ENTRY,9,40,0,0,0,100,0,0,0,0,0,1,2,0,0,0,0,0,19,10803,100,0,0,0,0,0,"Angus - On Script - Say Line 2 Wheeler"), +(@ENTRY,9,41,0,0,0,100,0,2000,2000,0,0,45,8,0,0,0,0,0,19,10803,50,0,0,0,0,0,"Angus - On Script - Set Data 8 0 Wheeler"), +(@ENTRY,9,42,0,0,0,100,0,2000,2000,0,0,1,3,0,0,0,0,0,19,10803,100,0,0,0,0,0,"Angus - On Script - Say Line 3 Wheeler"), +(@ENTRY,9,43,0,0,0,100,0,2000,2000,0,0,45,9,0,0,0,0,0,19,10803,50,0,0,0,0,0,"Angus - On Script - Set Data 9 0 Wheeler"), +(@ENTRY,9,44,0,0,0,100,0,2000,2000,0,0,1,4,0,0,0,0,0,19,10803,100,0,0,0,0,0,"Angus - On Script - Say Line 4 Wheeler"), +(@ENTRY,9,45,0,0,0,100,0,1000,1000,0,0,45,10,0,0,0,0,0,19,10803,50,0,0,0,0,0,"Angus - On Script - Set Data 10 0 Wheeler"), +(@ENTRY,9,46,0,0,0,100,0,1000,1000,0,0,5,5,0,0,0,0,0,19,10803,100,0,0,0,0,0,"Angus - On Script - Play Emote 5 Wheeler"), +(@ENTRY,9,47,0,0,0,100,0,0,0,0,0,45,9,0,0,0,0,0,19,10804,50,0,0,0,0,0,"Angus - On Script - Set Data 9 0 Middlecamp"), +(@ENTRY,9,48,0,0,0,100,0,2000,2000,0,0,5,25,0,0,0,0,0,19,10804,100,0,0,0,0,0,"Angus - On Script - Play Emote 25 Middlecamp"), +(@ENTRY,9,59,0,0,0,100,0,2000,2000,0,0,5,11,0,0,0,0,0,19,10804,100,0,0,0,0,0,"Angus - On Script - Play Emote 11 Middlecamp"), +(@ENTRY,9,60,0,0,0,100,0,3000,3000,0,0,45,10,0,0,0,0,0,19,10803,50,0,0,0,0,0,"Angus - On Script - Set Data 10 0 Middlecamp"), +(@ENTRY,9,61,0,0,0,100,0,0,0,0,0,45,11,0,0,0,0,0,19,10803,50,0,0,0,0,0,"Angus - On Script - Set Data 11 0 Wheeler"), +(@ENTRY,9,62,0,0,0,100,0,2000,2000,0,0,1,8,0,0,0,0,0,19,10804,100,0,0,0,0,0,"Angus - On Script - Say Line 8 Middlecamp"), +(@ENTRY,9,63,0,0,0,100,0,0,0,0,0,4,6250,0,0,0,0,0,21,100,0,0,0,0,0,0,"Angus - On Script - Play Sound 6250"), +(@ENTRY,9,64,0,0,0,100,0,0,0,0,0,45,11,0,0,0,0,0,19,10804,50,0,0,0,0,0,"Angus - On Script - Set Data 11 0 Middlecamp"), +(@ENTRY,9,65,0,0,0,100,0,3000,3000,0,0,1,9,0,0,0,0,0,19,10804,100,0,0,0,0,0,"Angus - On Script - Say Line 9 Middlecamp"), +(@ENTRY,9,66,0,0,0,100,0,0,0,0,0,4,6250,0,0,0,0,0,21,100,0,0,0,0,0,0,"Angus - On Script - Play Sound 6250"), +(@ENTRY,9,67,0,0,0,100,0,0,0,0,0,45,12,0,0,0,0,0,19,10804,50,0,0,0,0,0,"Angus - On Script - Set Data 12 0 Middlecamp"), +(@ENTRY,9,68,0,0,0,100,0,3000,3000,0,0,1,10,0,0,0,0,0,19,10804,100,0,0,0,0,0,"Angus - On Script - Say Line 10 Middlecamp"), +(@ENTRY,9,69,0,0,0,100,0,0,0,0,0,4,6250,0,0,0,0,0,21,100,0,0,0,0,0,0,"Angus - On Script - Play Sound 6250"), +(@ENTRY,9,70,0,0,0,100,0,0,0,0,0,45,13,0,0,0,0,0,19,10804,50,0,0,0,0,0,"Angus - On Script - Set Data 13 0 Middlecamp"), +(@ENTRY,9,71,0,0,0,100,0,0,0,0,0,5,71,0,0,0,0,0,19,10804,100,0,0,0,0,0,"Angus - On Script - Play Emote 71 Middlecamp"), +(@ENTRY,9,72,0,0,0,100,0,0,0,0,0,4,6246,0,0,0,0,0,21,100,0,0,0,0,0,0,"Angus - On Script - Play Sound 6246"), +(@ENTRY,9,73,0,0,0,100,0,3000,3000,0,0,45,14,0,0,0,0,0,19,10804,50,0,0,0,0,0,"Angus - On Script - Set Data 14 0 Middlecamp"), +(@ENTRY,9,74,0,0,0,100,0,1000,1000,0,0,45,12,0,0,0,0,0,19,10803,50,0,0,0,0,0,"Angus - On Script - Set Data 12 0 Wheeler"), +(@ENTRY,9,75,0,0,0,100,0,1000,1000,0,0,5,2,0,0,0,0,0,19,10804,100,0,0,0,0,0,"Angus - On Script - Play Emote 2 Middlecamp"), +(@ENTRY,9,76,0,0,0,100,0,0,0,0,0,5,21,0,0,0,0,0,19,10803,100,0,0,0,0,0,"Angus - On Script - Play Emote 21 Wheeler"), +(@ENTRY,9,77,0,0,0,100,0,4000,4000,0,0,45,15,0,0,0,0,0,19,10804,50,0,0,0,0,0,"Angus - On Script - Set Data 15 0 Middlecamp"), +(@ENTRY,9,78,0,0,0,100,0,0,0,0,0,45,13,0,0,0,0,0,19,10803,50,0,0,0,0,0,"Angus - On Script - Set Data 13 0 Wheeler"), +(@ENTRY,9,79,0,0,0,100,0,0,0,0,0,45,3,0,0,0,0,0,19,10611,50,0,0,0,0,0,"Angus - On Script - Set Data 3 0 Shorty"), +(@ENTRY,9,80,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,2.844887,"Angus - On Script - Set Orientation 2,844887"), +(@ENTRY,9,81,0,0,0,100,0,2000,2000,0,0,5,4,0,0,0,0,0,1,0,0,0,0,0,0,0,"Angus - On Script - Play Emote 4 Wheeler"), +(@ENTRY,9,82,0,0,0,100,0,0,0,0,0,5,4,0,0,0,0,0,19,10611,100,0,0,0,0,0,"Angus - On Script - Play Emote 4 Shorty"), +(@ENTRY,9,83,0,0,0,100,0,0,0,0,0,4,6256,0,0,0,0,0,21,100,0,0,0,0,0,0,"Angus - On Script - Play Sound 6256"), +(@ENTRY,9,84,0,0,0,100,0,0,0,0,0,45,3,0,0,0,0,0,19,10805,100,0,0,0,0,0,"Angus - On Script - Set Data 3 0 Klemmy"), +(@ENTRY,9,85,0,0,0,100,0,10000,10000,0,0,11,18634,2,0,0,0,0,8,0,0,0,0,0,0,0,"Angus - On Script - Summon Creature 'Mortar Team Target Dummy'"), +(@ENTRY,9,86,0,0,0,100,0,3000,3000,0,0,45,4,0,0,0,0,0,19,10805,100,0,0,0,0,0,"Angus - On Script - Set Data 4 0 Klemmy"), +(@ENTRY,9,87,0,0,0,100,0,3000,3000,0,0,45,5,0,0,0,0,0,19,10805,100,0,0,0,0,0,"Angus - On Script - Set Data 5 0 Klemmy"), +(@ENTRY,9,88,0,0,0,100,0,2000,2000,0,0,5,3,0,0,0,0,0,19,10805,100,0,0,0,0,0,"Angus - On Script - Play Emote 3 Klemmy"), +(@ENTRY,9,89,0,0,0,100,0,0,0,0,0,45,4,0,0,0,0,0,19,10611,50,0,0,0,0,0,"Angus - On Script - Set Data 4 0 Shorty"), +(@ENTRY,9,90,0,0,0,100,0,1000,1000,0,0,45,6,0,0,0,0,0,19,10805,100,0,0,0,0,0,"Angus - On Script - Set Data 6 0 Klemmy"), +(@ENTRY,9,91,0,0,0,100,0,1000,1000,0,0,5,16,0,0,0,0,0,19,10611,100,0,0,0,0,0,"Angus - On Script - Play Emote 16 Shorty"), +(@ENTRY,9,92,0,0,0,100,0,1000,1000,0,0,5,69,0,0,0,0,0,19,10611,100,0,0,0,0,0,"Angus - On Script - Play Emote 69 Shorty"), +(@ENTRY,9,93,0,0,0,100,0,1000,1000,0,0,5,0,0,0,0,0,0,19,10611,100,0,0,0,0,0,"Angus - On Script - Play Emote 0 Shorty"), +(@ENTRY,9,94,0,0,0,100,0,2000,2000,0,0,45,5,0,0,0,0,0,19,10611,50,0,0,0,0,0,"Angus - On Script - Set Data 5 0 Shorty"), +(@ENTRY,9,95,0,0,0,100,0,1000,1000,0,0,45,16,0,0,0,0,0,19,10804,50,0,0,0,0,0,"Angus - On Script - Set Data 16 0 Middlecamp"), +(@ENTRY,9,96,0,0,0,100,0,0,0,0,0,45,14,0,0,0,0,0,19,10803,50,0,0,0,0,0,"Angus - On Script - Set Data 14 0 Wheeler"), +(@ENTRY,9,97,0,0,0,100,0,0,0,0,0,5,25,0,0,0,0,0,1,0,0,0,0,0,0,0,"Angus - On Script - Play Emote 25"), +(@ENTRY,9,98,0,0,0,100,0,1000,1000,0,0,45,6,0,0,0,0,0,19,10611,50,0,0,0,0,0,"Angus - On Script - Set Data 6 0 Shorty"), +(@ENTRY,9,99,0,0,0,100,0,2000,2000,0,0,4,7316,0,0,0,0,0,21,100,0,0,0,0,0,0,"Angus - On Script - Play Sound 7316"), +(@ENTRY,9,100,0,0,0,100,0,2000,2000,0,0,45,7,0,0,0,0,0,19,10611,50,0,0,0,0,0,"Angus - On Script - Set Data 7 0 Shorty"), +(@ENTRY,9,101,0,0,0,100,0,0,0,0,0,51,0,0,0,0,0,0,19,11875,200,0,0,0,0,0,"On Script - Kill Target"), +(@ENTRY,9,102,0,0,0,100,0,3000,3000,0,0,5,17,0,0,0,0,0,19,10611,100,0,0,0,0,0,"Angus - On Script - Play Emote 17 Shorty"), +(@ENTRY,9,103,0,0,0,100,0,3000,3000,0,0,45,8,0,0,0,0,0,19,10611,50,0,0,0,0,0,"Angus - On Script - Set Data 8 0 Shorty"), +(@ENTRY,9,104,0,0,0,100,0,0,0,0,0,45,8,0,0,0,0,0,19,10805,100,0,0,0,0,0,"Angus - On Script - Set Data 8 0 Klemmy"), +(@ENTRY,9,105,0,0,0,100,0,0,0,0,0,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Angus - On Script - Play Emote 1"), +(@ENTRY,9,106,0,0,0,100,0,0,0,0,0,4,6252,0,0,0,0,0,21,100,0,0,0,0,0,0,"Angus - On Script - Play Sound 6252"), +(@ENTRY,9,107,0,0,0,100,0,1000,1000,0,0,5,4,0,0,0,0,0,19,10611,100,0,0,0,0,0,"Angus - On Script - Play Emote 4 Shorty"), +(@ENTRY,9,108,0,0,0,100,0,3000,3000,0,0,45,9,0,0,0,0,0,19,10611,100,0,0,0,0,0,"Angus - On Script - Set Data 8 0 Shorty"), +(@ENTRY,9,109,0,0,0,100,0,5000,5000,0,0,11,18634,2,0,0,0,0,1,0,0,0,0,0,0,0,"Angus - On Script - Summon Creature 'Mortar Team Target Dummy'"), +(@ENTRY,9,110,0,0,0,100,0,2000,2000,0,0,45,10,0,0,0,0,0,19,10805,100,0,0,0,0,0,"Angus - On Script - Set Data 10 0 Klemmy"), +(@ENTRY,9,111,0,0,0,100,0,2000,2000,0,0,45,11,0,0,0,0,0,19,10805,100,0,0,0,0,0,"Angus - On Script - Set Data 11 0 Klemmy"), +(@ENTRY,9,112,0,0,0,100,0,2000,2000,0,0,5,66,0,0,0,0,0,19,10805,100,0,0,0,0,0,"Angus - On Script - Play Emote 66 Klemmy"), +(@ENTRY,9,113,0,0,0,100,0,3000,3000,0,0,45,9,0,0,0,0,0,19,10611,100,0,0,0,0,0,"Angus - On Script - Set Data 9 0 Shorty"), +(@ENTRY,9,114,0,0,0,100,0,2000,2000,0,0,45,12,0,0,0,0,0,19,10805,100,0,0,0,0,0,"Angus - On Script - Set Data 12 0 Klemmy"), +(@ENTRY,9,115,0,0,0,100,0,0,0,0,0,5,25,0,0,0,0,0,19,10611,100,0,0,0,0,0,"Angus - On Script - Play Emote 8 Shorty"), +(@ENTRY,9,116,0,0,0,100,0,2000,2000,0,0,4,6254,0,0,0,0,0,21,100,0,0,0,0,0,0,"Angus - On Script - Play Sound 6254"), +(@ENTRY,9,117,0,0,0,100,0,1000,1000,0,0,45,13,0,0,0,0,0,19,10805,100,0,0,0,0,0,"Angus - On Script - Set Data 13 0 Klemmy"), +(@ENTRY,9,118,0,0,0,100,0,3000,3000,0,0,17,0,0,0,0,0,0,19,10611,100,0,0,0,0,0,"Angus - On Script - Play Emote 0 Shorty"), +(@ENTRY,9,119,0,0,0,100,0,1000,1000,0,0,45,10,0,0,0,0,0,19,10611,100,0,0,0,0,0,"Angus - On Script - Set Data 10 0 Shorty"), +(@ENTRY,9,120,0,0,0,100,0,1000,1000,0,0,5,25,0,0,0,0,0,19,10611,100,0,0,0,0,0,"Angus - On Script - Play Emote 25 Shorty"), +(@ENTRY,9,121,0,0,0,100,0,0,0,0,0,4,6255,0,0,0,0,0,21,100,0,0,0,0,0,0,"Angus - On Script - Play Sound 6255"), +(@ENTRY,9,122,0,0,0,100,0,1000,1000,0,0,45,6,0,0,0,0,0,19,10611,50,0,0,0,0,0,"Angus - On Script - Set Data 6 0 Shorty"), +(@ENTRY,9,123,0,0,0,100,0,1000,1000,0,0,4,7316,0,0,0,0,0,21,100,0,0,0,0,0,0,"Angus - On Script - Play Sound 7316"), +(@ENTRY,9,124,0,0,0,100,0,1000,1000,0,0,45,7,0,0,0,0,0,19,10611,50,0,0,0,0,0,"Angus - On Script - Set Data 7 0 Shorty"), +(@ENTRY,9,125,0,0,0,100,0,0,0,0,0,51,0,0,0,0,0,0,19,11875,200,0,0,0,0,0,"On Script - Kill Target"), +(@ENTRY,9,126,0,0,0,100,0,1000,1000,0,0,45,9,0,0,0,0,0,19,10611,50,0,0,0,0,0,"Angus - On Script - Set Data 9 0 Shorty"), +(@ENTRY,9,127,0,0,0,100,0,2000,2000,0,0,5,25,0,0,0,0,0,19,10611,100,0,0,0,0,0,"Angus - On Script - Play Emote 25 Shorty"), +(@ENTRY,9,128,0,0,0,100,0,0,0,0,0,4,6251,0,0,0,0,0,21,100,0,0,0,0,0,0,"Angus - On Script - Play Sound 6251"), +(@ENTRY,9,129,0,0,0,100,0,1000,1000,0,0,45,15,0,0,0,0,0,19,10804,50,0,0,0,0,0,"Angus - On Script - Set Data 15 0 Middlecamp"), +(@ENTRY,9,130,0,0,0,100,0,0,0,0,0,45,8,0,0,0,0,0,19,10805,100,0,0,0,0,0,"Angus - On Script - Set Data 8 0 Klemmy"), +(@ENTRY,9,131,0,0,0,100,0,1000,1000,0,0,45,13,0,0,0,0,0,19,10803,100,0,0,0,0,0,"Angus - On Script - Set Data 13 0 Wheeler"), +(@ENTRY,9,132,0,0,0,100,0,1000,1000,0,0,45,10,0,0,0,0,0,19,10611,100,0,0,0,0,0,"Angus - On Script - Set Data 10 0 Shorty"), +(@ENTRY,9,133,0,0,0,100,0,0,0,0,0,5,4,0,0,0,0,0,19,10803,100,0,0,0,0,0,"Angus - On Script - Play Emote 4 Wheeler"), +(@ENTRY,9,134,0,0,0,100,0,7000,7000,0,0,11,18634,0,0,0,0,0,1,0,0,0,0,0,0,0,"Angus - On Script - Summon Creature 'Mortar Team Target Dummy'"), +(@ENTRY,9,135,0,0,0,100,0,1000,1000,0,0,45,10,0,0,0,0,0,19,10805,100,0,0,0,0,0,"Angus - On Script - Set Data 10 0 Klemmy"), +(@ENTRY,9,136,0,0,0,100,0,1000,1000,0,0,45,11,0,0,0,0,0,19,10805,100,0,0,0,0,0,"Angus - On Script - Set Data 11 0 Klemmy"), +(@ENTRY,9,137,0,0,0,100,0,2000,2000,0,0,45,6,0,0,0,0,0,19,10611,50,0,0,0,0,0,"Angus - On Script - Set Data 6 0 Shorty"), +(@ENTRY,9,138,0,0,0,100,0,0,0,0,0,5,25,0,0,0,0,0,19,10805,100,0,0,0,0,0,"Angus - On Script - Play Emote 25 Klemmy"), +(@ENTRY,9,139,0,0,0,100,0,1000,1000,0,0,5,11,0,0,0,0,0,19,10805,100,0,0,0,0,0,"Angus - On Script - Play Emote 11 Klemmy"), +(@ENTRY,9,140,0,0,0,100,0,0,0,0,0,5,15,0,0,0,0,0,19,10611,100,0,0,0,0,0,"Angus - On Script - Play Emote 15 Shorty"), +(@ENTRY,9,141,0,0,0,100,0,0,0,0,0,5,5,0,0,0,0,0,1,0,0,0,0,0,0,0,"Angus - On Script - Play Emote 5"), +(@ENTRY,9,142,0,0,0,100,0,0,0,0,0,4,6258,0,0,0,0,0,21,100,0,0,0,0,0,0,"Angus - On Script - Play Sound 6258"), +(@ENTRY,9,143,0,0,0,100,0,2000,2000,0,0,4,7316,0,0,0,0,0,21,100,0,0,0,0,0,0,"Angus - On Script - Play Sound 7316"), +(@ENTRY,9,144,0,0,0,100,0,1000,1000,0,0,45,16,0,0,0,0,0,19,10804,50,0,0,0,0,0,"Angus - On Script - Set Data 16 0 Middlecamp"), +(@ENTRY,9,145,0,0,0,100,0,1000,1000,0,0,45,14,0,0,0,0,0,19,10803,100,0,0,0,0,0,"Angus - On Script - Set Data 14 0 Wheeler"), +(@ENTRY,9,146,0,0,0,100,0,0,0,0,0,45,14,0,0,0,0,0,19,10805,100,0,0,0,0,0,"Angus - On Script - Set Data 14 0 Klemmy"), +(@ENTRY,9,147,0,0,0,100,0,1000,1000,0,0,45,7,0,0,0,0,0,19,10611,50,0,0,0,0,0,"Angus - On Script - Set Data 6 0 Shorty"), +(@ENTRY,9,148,0,0,0,100,0,0,0,0,0,51,0,0,0,0,0,0,19,11875,200,0,0,0,0,0,"On Script - Kill Target"), +(@ENTRY,9,149,0,0,0,100,0,1000,1000,0,0,5,10,0,0,0,0,0,1,0,0,0,0,0,0,0,"Angus - On Script - Play Emote 10"), +(@ENTRY,9,150,0,0,0,100,0,0,0,0,0,5,10,0,0,0,0,0,19,10611,100,0,0,0,0,0,"Angus - On Script - Play Emote 10 Shorty"), +(@ENTRY,9,151,0,0,0,100,0,2000,2000,0,0,45,15,0,0,0,0,0,19,10805,100,0,0,0,0,0,"Angus - On Script - Set Data 15 0 Klemmy"), +(@ENTRY,9,152,0,0,0,100,0,3000,3000,0,0,45,16,0,0,0,0,0,19,10805,100,0,0,0,0,0,"Angus - On Script - Set Data 16 0 Klemmy"), +(@ENTRY,9,153,0,0,0,100,0,6000,6000,0,0,5,14,0,0,0,0,0,19,10805,100,0,0,0,0,0,"Angus - On Script - Play Emote 14 Klemmy"), +(@ENTRY,9,154,0,0,0,100,0,0,0,0,0,5,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Angus - On Script - Play Emote 0"), +(@ENTRY,9,155,0,0,0,100,0,0,0,0,0,5,0,0,0,0,0,0,19,10611,100,0,0,0,0,0,"Angus - On Script - Play Emote 0 Shorty"), +(@ENTRY,9,156,0,0,0,100,0,0,0,0,0,5,11,0,0,0,0,0,1,0,0,0,0,0,0,0,"Angus - On Script - Play Emote 11"), +(@ENTRY,9,157,0,0,0,100,0,0,0,0,0,5,11,0,0,0,0,0,19,10611,100,0,0,0,0,0,"Angus - On Script - Play Emote 11 Shorty"), +(@ENTRY,9,158,0,0,0,100,0,1000,1000,0,0,5,11,0,0,0,0,0,19,10804,100,0,0,0,0,0,"Angus - On Script - Play Emote 11 Middlecamp"), +(@ENTRY,9,159,0,0,0,100,0,0,0,0,0,5,11,0,0,0,0,0,19,10803,100,0,0,0,0,0,"Angus - On Script - Play Emote 11 Wheeler"), +(@ENTRY,9,160,0,0,0,100,0,0,0,0,0,5,11,0,0,0,0,0,19,10805,100,0,0,0,0,0,"Angus - On Script - Play Emote 11 Klemmy"), +(@ENTRY,9,161,0,0,0,100,0,1000,1000,0,0,5,11,0,0,0,0,0,1,0,0,0,0,0,0,0,"Angus - On Script - Play Emote 11"), +(@ENTRY,9,162,0,0,0,100,0,0,0,0,0,5,11,0,0,0,0,0,19,10611,100,0,0,0,0,0,"Angus - On Script - Play Emote 11 Shorty"), +(@ENTRY,9,163,0,0,0,100,0,1000,1000,0,0,5,11,0,0,0,0,0,19,10804,100,0,0,0,0,0,"Angus - On Script - Play Emote 11 Middlecamp"), +(@ENTRY,9,164,0,0,0,100,0,0,0,0,0,5,11,0,0,0,0,0,19,10803,100,0,0,0,0,0,"Angus - On Script - Play Emote 11 Wheeler"), +(@ENTRY,9,165,0,0,0,100,0,1000,1000,0,0,45,17,0,0,0,0,0,19,10805,100,0,0,0,0,0,"Angus - On Script - Set Data 17 0 Klemmy"), +(@ENTRY,9,166,0,0,0,100,0,0,0,0,0,45,11,0,0,0,0,0,19,10611,50,0,0,0,0,0,"Angus - On Script - Set Data 11 0 Shorty"), +(@ENTRY,9,167,0,0,0,100,0,0,0,0,0,45,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Angus - On Script - Set Data 2 0 Angus"), +(@ENTRY,9,168,0,0,0,100,0,0,0,0,0,45,17,0,0,0,0,0,19,10804,50,0,0,0,0,0,"Angus - On Script - Set Data 17 0 Middlecamp"), +(@ENTRY,9,169,0,0,0,100,0,0,0,0,0,45,15,0,0,0,0,0,19,10803,50,0,0,0,0,0,"Angus - On Script - Set Data 15 0 Wheeler"), +(@ENTRY,9,170,0,0,0,100,0,12000,12000,0,0,45,18,0,0,0,0,0,19,10805,100,0,0,0,0,0,"Angus - On Script - Set Data 18 0 Klemmy"), +(@ENTRY,9,171,0,0,0,100,0,4000,4000,0,0,45,16,0,0,0,0,0,19,10803,100,0,0,0,0,0,"Angus - On Script - Set Data 16 0 Wheeler"), +(@ENTRY,9,172,0,0,0,100,0,2000,2000,0,0,45,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Angus - On Script - Set Data 3 0 Angus"), +(@ENTRY,9,173,0,0,0,100,0,1000,1000,0,0,45,18,0,0,0,0,0,19,10804,100,0,0,0,0,0,"Angus - On Script - Set Data 18 0 Middlecamp"), +(@ENTRY,9,174,0,0,0,100,0,1000,1000,0,0,45,3,0,0,0,0,0,19,1243,100,0,0,0,0,0,"Angus - On Script - Set Data 3 0 Hegnar"), +(@ENTRY,9,175,0,0,0,100,0,0,0,0,0,45,12,0,0,0,0,0,19,10611,100,0,0,0,0,0,"Angus - On Script - Set Data 12 0 Shorty"); diff --git a/sql/updates/world/2015_05_24_02_world.sql b/sql/updates/world/2015_05_24_02_world.sql new file mode 100644 index 00000000000..7f8cd3a457f --- /dev/null +++ b/sql/updates/world/2015_05_24_02_world.sql @@ -0,0 +1,16 @@ +-- The Farstrider Lodge flavor texts +DELETE FROM `gossip_menu` WHERE `text_id` IN (3522, 3525, 3495); +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES +(2831, 3522), +(2831, 3525), +(2801, 3495); + +-- +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=14 AND `SourceEntry` IN (3522, 3525, 3495, 3523) AND `ConditionTypeOrReference` IN (8); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(14, 2831, 3523, 0, 0, 8, 0, 258, 0, 0, 1, 0, 0, '', 'Show gossip text if player has quest 258 not completed'), +(14, 2831, 3522, 0, 0, 8, 0, 258, 0, 0, 0, 0, 0, '', 'Show gossip text if player has quest 258 completed'), +(14, 2831, 3525, 0, 0, 8, 0, 271, 0, 0, 0, 0, 0, '', 'Show gossip text if player has quest 271 completed'), +(14, 2801, 3495, 0, 0, 8, 0, 385, 0, 0, 0, 0, 0, '', 'Show gossip text if player has quest 385 completed'); + +UPDATE `npc_text` SET `BroadcastTextID0`=5854 WHERE `id`=3522; diff --git a/sql/updates/world/2015_05_24_03_world.sql b/sql/updates/world/2015_05_24_03_world.sql new file mode 100644 index 00000000000..e4283fae295 --- /dev/null +++ b/sql/updates/world/2015_05_24_03_world.sql @@ -0,0 +1,13 @@ +-- +-- Grizzly Hills Giant SAI +SET @ENTRY := 26261; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,1,8,0,100,0,47394,0,0,0,80,26261,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grizzly Hills Giant - On Spellhit 'Kurun's Blessing' - Run Script"), +(@ENTRY,0,1,0,61,0,100,0,47394,0,0,0,33,26261,0,0,0,0,0,7,0,0,0,0,0,0,0,"Grizzly Hills Giant - On Spellhit 'Kurun's Blessing' - Quest Credit 'Rallying the Troops'"), +(@ENTRY,0,2,0,1,0,100,0,2000,5000,4000,6000,11,46815,0,0,0,0,0,19,26264,500,0,0,0,0,0,"Grizzly Hills Giant - Out of Combat - Cast 'Toss Boulder'"); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceGroup`=1 AND `SourceEntry`=46815; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, 46815, 0, 0, 31, 0, 3, 26264, 0, 0, 0, 0, '', 'Toss Boulder - only targets Dummy'); diff --git a/sql/updates/world/2015_05_24_04_world.sql b/sql/updates/world/2015_05_24_04_world.sql new file mode 100644 index 00000000000..70cc65fb490 --- /dev/null +++ b/sql/updates/world/2015_05_24_04_world.sql @@ -0,0 +1,902 @@ +-- Complete Grizzlyhills Movement +DELETE FROM `creature_addon` WHERE `guid` IN (109382, 109390,109409,110794, 110792,110787,110793, 110791,110797,110796,110795,110799,110798, 110801,98066, 98056, 98060, 118835, 98047, 98059, 98053); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(118835,0,0,1,1,0, ''), +(98047,0,0,1,1,0, ''), +(98059,0,0,0,1,69, ''), +(98060,0,0,0,1,234, ''), +(98053,0,0,0,1,1, ''), +(98056,0,0,0,1,234, ''), +(98066,0,0,0,1,234, ''), +(110801,0,0,0,1,234, ''), +(110798,0,0,0,1,234, ''), +(110799,0,0,0,1,234, ''), +(110795,0,0,0,1,234, ''), +(110796,0,0,0,1,234, ''), +(110797,0,0,0,1,234, ''), +(110791,0,0,0,1,234, ''), +(110793,0,0,0,1,234, ''), +(110787,0,0,0,1,234, ''), +(110792,0,0,0,1,234, ''), +(110794,0,0,0,1,234, ''), +(109409,0,0,8,1,0, ''), +(109390,0,0,8,1,0, ''), +(109382,0,0,8,1,0, ''); + +SET @NPC := 109402; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4642.88,`position_y`=-5573.969,`position_z`=43.38401 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,4642.88,-5573.969,43.38401,0,0,0,0,100,0), +(@PATH,2,4642.38,-5575.719,43.63401,0,0,0,0,100,0), +(@PATH,3,4639.13,-5580.469,42.88401,0,0,0,0,100,0), +(@PATH,4,4637.13,-5583.719,41.63401,0,0,0,0,100,0), +(@PATH,5,4635.38,-5586.219,40.38401,0,0,0,0,100,0), +(@PATH,6,4635.204,-5586.526,40.13166,0,0,0,0,100,0), +(@PATH,7,4634.204,-5587.776,39.63166,0,0,0,0,100,0), +(@PATH,8,4633.204,-5587.776,38.88166,0,0,0,0,100,0), +(@PATH,9,4632.204,-5588.026,38.13166,0,0,0,0,100,0), +(@PATH,10,4631.204,-5588.026,37.63166,0,0,0,0,100,0), +(@PATH,11,4630.204,-5588.026,36.88166,0,0,0,0,100,0), +(@PATH,12,4629.204,-5588.026,36.38166,0,0,0,0,100,0), +(@PATH,13,4628.204,-5588.026,35.63166,0,0,0,0,100,0), +(@PATH,14,4626.204,-5588.026,35.13166,0,0,0,0,100,0), +(@PATH,15,4625.204,-5588.026,34.38166,0,0,0,0,100,0), +(@PATH,16,4624.204,-5588.026,33.88166,0,0,0,0,100,0), +(@PATH,17,4623.454,-5588.026,33.38166,0,0,0,0,100,0), +(@PATH,18,4622.454,-5588.276,32.88166,0,0,0,0,100,0), +(@PATH,19,4621.454,-5588.276,32.13166,0,0,0,0,100,0), +(@PATH,20,4620.454,-5588.276,31.63166,0,0,0,0,100,0), +(@PATH,21,4618.454,-5588.276,30.38166,0,0,0,0,100,0), +(@PATH,22,4616.454,-5588.276,29.63166,0,0,0,0,100,0), +(@PATH,23,4615.454,-5588.276,28.88166,0,0,0,0,100,0), +(@PATH,24,4613.454,-5588.276,27.88166,0,0,0,0,100,0), +(@PATH,25,4615.112,-5588.271,28.6151,0,0,0,0,100,0), +(@PATH,26,4613.112,-5588.271,27.6151,0,0,0,0,100,0), +(@PATH,27,4612.612,-5588.271,27.3651,0,0,0,0,100,0), +(@PATH,28,4609.862,-5587.021,25.8651,0,0,0,0,100,0), +(@PATH,29,4608.112,-5586.021,24.8651,0,0,0,0,100,0), +(@PATH,30,4606.362,-5585.021,24.1151,0,0,0,0,100,0), +(@PATH,31,4604.612,-5584.021,22.8651,0,0,0,0,100,0), +(@PATH,32,4602.862,-5583.021,21.6151,0,0,0,0,100,0), +(@PATH,33,4601.112,-5582.021,20.8651,0,0,0,0,100,0), +(@PATH,34,4599.362,-5581.021,19.3651,0,0,0,0,100,0), +(@PATH,35,4597.612,-5580.021,18.3651,0,0,0,0,100,0), +(@PATH,36,4595.362,-5578.521,16.8651,0,0,0,0,100,0), +(@PATH,37,4593.612,-5577.771,15.6151,0,0,0,0,100,0), +(@PATH,38,4591.862,-5576.771,14.6151,0,0,0,0,100,0), +(@PATH,39,4590.112,-5575.771,13.8651,0,0,0,0,100,0), +(@PATH,40,4588.362,-5574.771,13.1151,0,0,0,0,100,0), +(@PATH,41,4586.612,-5573.771,12.1151,0,0,0,0,100,0), +(@PATH,42,4584.862,-5572.771,11.6151,0,0,0,0,100,0), +(@PATH,43,4583.112,-5571.771,10.8651,0,0,0,0,100,0), +(@PATH,44,4580.612,-5570.271,10.1151,0,0,0,0,100,0), +(@PATH,45,4578.862,-5569.271,9.365101,0,0,0,0,100,0), +(@PATH,46,4578.588,-5569.066,9.268532,0,0,0,0,100,0), +(@PATH,47,4577.088,-5568.316,8.768532,0,0,0,0,100,0), +(@PATH,48,4575.838,-5565.566,7.768532,0,0,0,0,100,0), +(@PATH,49,4575.338,-5563.816,7.018532,0,0,0,0,100,0), +(@PATH,50,4574.588,-5562.066,6.518532,0,0,0,0,100,0), +(@PATH,51,4573.588,-5560.316,5.768532,0,0,0,0,100,0), +(@PATH,52,4572.338,-5557.566,5.018532,0,0,0,0,100,0), +(@PATH,53,4572.302,-5557.273,4.829211,0,0,0,0,100,0), +(@PATH,54,4571.052,-5554.523,4.079211,0,0,0,0,100,0), +(@PATH,55,4570.302,-5551.523,3.579211,0,0,0,0,100,0), +(@PATH,56,4569.302,-5544.773,3.079211,0,0,0,0,100,0), +(@PATH,57,4565.425,-5523.652,2.546694,0,0,0,0,100,0), +(@PATH,58,4558.431,-5505.637,2.508454,0,0,0,0,100,0), +(@PATH,59,4558.492,-5505.963,2.279056,0,0,0,0,100,0), +(@PATH,60,4558.656,-5505.855,2.526844,0,0,0,0,100,0), +(@PATH,61,4565.748,-5523.84,2.603909,0,0,0,0,100,0), +(@PATH,62,4569.748,-5548.34,3.103909,0,0,0,0,100,0), +(@PATH,63,4570.498,-5552.09,3.603909,0,0,0,0,100,0), +(@PATH,64,4571.125,-5554.945,4.307666,0,0,0,0,100,0), +(@PATH,65,4572.375,-5557.695,5.057666,0,0,0,0,100,0), +(@PATH,66,4573.375,-5559.445,5.807666,0,0,0,0,100,0), +(@PATH,67,4574.375,-5561.945,6.307666,0,0,0,0,100,0), +(@PATH,68,4575.125,-5563.695,7.057666,0,0,0,0,100,0), +(@PATH,69,4575.875,-5565.445,7.807666,0,0,0,0,100,0), +(@PATH,70,4577.315,-5568.442,8.979671,0,0,0,0,100,0), +(@PATH,71,4580.065,-5569.942,9.979671,0,0,0,0,100,0), +(@PATH,72,4581.815,-5570.942,10.72967,0,0,0,0,100,0), +(@PATH,73,4584.315,-5572.442,11.47967,0,0,0,0,100,0), +(@PATH,74,4586.065,-5573.442,12.22967,0,0,0,0,100,0), +(@PATH,75,4587.815,-5574.442,12.97967,0,0,0,0,100,0), +(@PATH,76,4589.565,-5575.442,13.72967,0,0,0,0,100,0), +(@PATH,77,4591.315,-5576.442,14.72967,0,0,0,0,100,0), +(@PATH,78,4593.065,-5577.442,15.72967,0,0,0,0,100,0), +(@PATH,79,4594.565,-5578.192,16.47967,0,0,0,0,100,0), +(@PATH,80,4596.315,-5579.192,17.47967,0,0,0,0,100,0), +(@PATH,81,4598.065,-5580.192,18.72967,0,0,0,0,100,0), +(@PATH,82,4599.815,-5581.192,19.72967,0,0,0,0,100,0), +(@PATH,83,4601.565,-5582.192,20.97967,0,0,0,0,100,0), +(@PATH,84,4603.315,-5583.192,21.97967,0,0,0,0,100,0), +(@PATH,85,4605.065,-5583.942,22.72967,0,0,0,0,100,0), +(@PATH,86,4606.815,-5584.942,24.22967,0,0,0,0,100,0), +(@PATH,87,4609.315,-5586.442,25.47967,0,0,0,0,100,0), +(@PATH,88,4611.065,-5587.442,26.72967,0,0,0,0,100,0), +(@PATH,89,4611.174,-5587.652,26.94344,0,0,0,0,100,0), +(@PATH,90,4612.674,-5588.402,27.69344,0,0,0,0,100,0), +(@PATH,91,4615.674,-5588.402,28.94344,0,0,0,0,100,0), +(@PATH,92,4616.674,-5588.402,29.69344,0,0,0,0,100,0), +(@PATH,93,4618.674,-5588.152,30.44344,0,0,0,0,100,0), +(@PATH,94,4619.674,-5588.152,31.19344,0,0,0,0,100,0), +(@PATH,95,4621.674,-5588.152,32.19344,0,0,0,0,100,0), +(@PATH,96,4622.424,-5588.152,32.94344,0,0,0,0,100,0), +(@PATH,97,4623.424,-5588.152,33.19344,0,0,0,0,100,0), +(@PATH,98,4624.424,-5588.152,33.94344,0,0,0,0,100,0), +(@PATH,99,4625.424,-5588.152,34.44344,0,0,0,0,100,0), +(@PATH,100,4626.424,-5588.152,35.19344,0,0,0,0,100,0), +(@PATH,101,4627.424,-5588.152,35.69344,0,0,0,0,100,0), +(@PATH,102,4628.424,-5588.152,36.44344,0,0,0,0,100,0), +(@PATH,103,4629.424,-5587.902,36.94344,0,0,0,0,100,0), +(@PATH,104,4630.424,-5587.902,37.69344,0,0,0,0,100,0), +(@PATH,105,4631.424,-5587.902,38.19344,0,0,0,0,100,0), +(@PATH,106,4632.424,-5587.902,38.94344,0,0,0,0,100,0), +(@PATH,107,4633.424,-5587.902,39.44344,0,0,0,0,100,0), +(@PATH,108,4632.743,-5587.937,39.25474,0,0,0,0,100,0), +(@PATH,109,4633.743,-5587.937,39.75474,0,0,0,0,100,0), +(@PATH,110,4634.243,-5587.937,40.00474,0,0,0,0,100,0), +(@PATH,111,4635.993,-5585.437,40.75474,0,0,0,0,100,0), +(@PATH,112,4636.993,-5583.687,41.50474,0,0,0,0,100,0), +(@PATH,113,4638.493,-5581.437,42.25474,0,0,0,0,100,0), +(@PATH,114,4640.743,-5578.187,43.50474,0,0,0,0,100,0), +(@PATH,115,4641.032,-5577.918,43.48087,0,0,0,0,100,0), +(@PATH,116,4642.532,-5575.418,43.48087,0,0,0,0,100,0), +(@PATH,117,4643.532,-5572.418,42.98087,0,0,0,0,100,0), +(@PATH,118,4644.032,-5570.668,42.23087,0,0,0,0,100,0), +(@PATH,119,4644.532,-5567.668,41.23087,0,0,0,0,100,0), +(@PATH,120,4645.032,-5565.668,40.23087,0,0,0,0,100,0), +(@PATH,121,4645.532,-5564.168,38.98087,0,0,0,0,100,0), +(@PATH,122,4646.032,-5562.168,37.98087,0,0,0,0,100,0), +(@PATH,123,4646.532,-5560.168,36.98087,0,0,0,0,100,0), +(@PATH,124,4647.032,-5558.168,35.98087,0,0,0,0,100,0), +(@PATH,125,4647.782,-5555.418,35.23087,0,0,0,0,100,0), +(@PATH,126,4648.282,-5553.418,34.48087,0,0,0,0,100,0), +(@PATH,127,4648.611,-5553.267,34.28629,0,0,0,0,100,0), +(@PATH,128,4648.861,-5552.517,33.78629,0,0,0,0,100,0), +(@PATH,129,4649.361,-5550.767,33.03629,0,0,0,0,100,0), +(@PATH,130,4650.361,-5547.767,32.28629,0,0,0,0,100,0), +(@PATH,131,4651.111,-5546.017,31.78629,0,0,0,0,100,0), +(@PATH,132,4651.611,-5544.267,31.28629,0,0,0,0,100,0), +(@PATH,133,4652.111,-5542.517,30.78629,0,0,0,0,100,0), +(@PATH,134,4653.611,-5538.767,30.03629,0,0,0,0,100,0), +(@PATH,135,4654.861,-5534.767,29.53629,0,0,0,0,100,0), +(@PATH,136,4655.176,-5534.61,29.14608,0,0,0,0,100,0), +(@PATH,137,4655.426,-5533.86,29.14608,0,0,0,0,100,0), +(@PATH,138,4658.176,-5528.61,28.39608,0,0,0,0,100,0), +(@PATH,139,4661.176,-5522.61,28.14608,0,0,0,0,100,0), +(@PATH,140,4663.296,-5518.52,27.41638,0,0,0,0,100,0), +(@PATH,141,4666.796,-5515.52,26.66638,0,0,0,0,100,0), +(@PATH,142,4667.602,-5514.735,26.7351,0,0,0,0,100,0), +(@PATH,143,4664.102,-5517.985,27.2351,0,0,0,0,100,0), +(@PATH,144,4663.71,-5518.2,27.46549,0,0,0,0,100,0), +(@PATH,145,4663.21,-5518.7,27.71549,0,0,0,0,100,0), +(@PATH,146,4660.71,-5523.2,27.96549,0,0,0,0,100,0), +(@PATH,147,4657.71,-5529.2,28.71549,0,0,0,0,100,0), +(@PATH,148,4655.082,-5533.99,29.53152,0,0,0,0,100,0), +(@PATH,149,4653.332,-5538.74,30.03152,0,0,0,0,100,0), +(@PATH,150,4652.332,-5542.49,30.78152,0,0,0,0,100,0), +(@PATH,151,4651.832,-5544.24,31.28152,0,0,0,0,100,0), +(@PATH,152,4651.082,-5546.24,31.78152,0,0,0,0,100,0), +(@PATH,153,4650.332,-5547.99,32.28152,0,0,0,0,100,0), +(@PATH,154,4649.832,-5549.99,33.03152,0,0,0,0,100,0), +(@PATH,155,4648.461,-5552.834,34.08023,0,0,0,0,100,0), +(@PATH,156,4647.961,-5554.834,34.83023,0,0,0,0,100,0), +(@PATH,157,4647.461,-5556.584,35.58023,0,0,0,0,100,0), +(@PATH,158,4646.961,-5558.584,36.58023,0,0,0,0,100,0), +(@PATH,159,4646.461,-5560.584,37.58023,0,0,0,0,100,0), +(@PATH,160,4645.711,-5563.334,38.33023,0,0,0,0,100,0), +(@PATH,161,4645.461,-5565.084,39.58023,0,0,0,0,100,0), +(@PATH,162,4644.961,-5567.084,40.83023,0,0,0,0,100,0), +(@PATH,163,4644.461,-5569.084,41.83023,0,0,0,0,100,0), +(@PATH,164,4643.961,-5570.834,42.58023,0,0,0,0,100,0), +(@PATH,165,4642.961,-5573.834,43.33023,0,0,0,0,100,0), +(@PATH,166,4642.868,-5574.016,43.39613,0,0,0,0,100,0), +(@PATH,167,4642.368,-5575.766,43.64613,0,0,0,0,100,0), +(@PATH,168,4639.118,-5580.516,42.89613,0,0,0,0,100,0), +(@PATH,169,4637.118,-5583.766,41.64613,0,0,0,0,100,0), +(@PATH,170,4635.368,-5586.266,40.39613,0,0,0,0,100,0); + +SET @NPC := 110474; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4974.067,`position_y`=-4702.151,`position_z`=211.6858 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,4974.067,-4702.151,211.6858,0,0,0,0,100,0), +(@PATH,2,4973.567,-4694.401,211.6858,0,0,0,0,100,0), +(@PATH,3,4972.317,-4684.151,211.6858,0,0,0,0,100,0), +(@PATH,4,4972.449,-4684.032,211.6815,0,0,0,0,100,0), +(@PATH,5,4972.199,-4683.032,211.6815,0,0,0,0,100,0), +(@PATH,6,4972.073,-4683.314,211.4305,0,0,0,0,100,0), +(@PATH,7,4972.434,-4683.377,211.6818,0,0,0,0,100,0), +(@PATH,8,4973.184,-4694.377,211.6818,0,0,0,0,100,0), +(@PATH,9,4974.222,-4702.475,211.6772,0,0,0,0,100,0), +(@PATH,10,4976.222,-4706.975,211.6772,0,0,0,0,100,0), +(@PATH,11,4979.872,-4716.739,211.652,0,0,0,0,100,0), +(@PATH,12,4979.707,-4716.649,211.4221,0,0,0,0,100,0), +(@PATH,13,4979.64,-4716.295,211.6743,0,0,0,0,100,0), +(@PATH,14,4976.14,-4707.045,211.6743,0,0,0,0,100,0); + +SET @NPC := 110473; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4971.524,`position_y`=-4651.398,`position_z`=211.6646 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,4971.524,-4651.398,211.6646,0,0,0,0,100,0), +(@PATH,2,4971.524,-4650.148,211.6646,0,0,0,0,100,0), +(@PATH,3,4971.274,-4642.898,211.6646,0,0,0,0,100,0), +(@PATH,4,4971.195,-4642.912,211.4312,0,0,0,0,100,0), +(@PATH,5,4971.593,-4650.481,211.6812,0,0,0,0,100,0), +(@PATH,6,4971.843,-4651.481,211.6812,0,0,0,0,100,0), +(@PATH,7,4972.093,-4657.231,211.6812,0,0,0,0,100,0), +(@PATH,8,4972.093,-4659.231,211.6812,0,0,0,0,100,0), +(@PATH,9,4972.093,-4660.231,211.6812,0,0,0,0,100,0), +(@PATH,10,4972.593,-4665.231,211.6812,0,0,0,0,100,0), +(@PATH,11,4972.628,-4665.171,211.6984,0,0,0,0,100,0), +(@PATH,12,4972.378,-4661.171,211.6984,0,0,0,0,100,0), +(@PATH,13,4972.128,-4659.421,211.6984,0,0,0,0,100,0), +(@PATH,14,4972.128,-4657.421,211.6984,0,0,0,0,100,0), +(@PATH,15,4971.628,-4651.671,211.6984,0,0,0,0,100,0); + +SET @NPC := 110472; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=5006.468,`position_y`=-4761.551,`position_z`=211.3855 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,5006.468,-4761.551,211.3855,0,0,0,0,100,0), +(@PATH,2,5005.218,-4760.301,211.3855,0,0,0,0,100,0), +(@PATH,3,5003.468,-4759.551,211.3855,0,0,0,0,100,0), +(@PATH,4,5001.968,-4758.551,211.6355,0,0,0,0,100,0), +(@PATH,5,4999.169,-4756.928,211.6723,0,0,0,0,100,0), +(@PATH,6,4999.078,-4756.74,211.6491,0,0,0,0,100,0), +(@PATH,7,4995.578,-4756.99,211.6491,0,0,0,0,100,0), +(@PATH,8,4994.328,-4755.24,211.6491,0,0,0,0,100,0), +(@PATH,9,4994.02,-4755.05,211.6453,0,0,0,0,100,0), +(@PATH,10,4994.472,-4755.252,211.6491,0,0,0,0,100,0), +(@PATH,11,4995.472,-4757.002,211.6491,0,0,0,0,100,0), +(@PATH,12,4999.36,-4757.021,211.6276,0,0,0,0,100,0), +(@PATH,13,5001.86,-4758.521,211.6276,0,0,0,0,100,0), +(@PATH,14,5003.61,-4759.271,211.3776,0,0,0,0,100,0), +(@PATH,15,5003.792,-4759.599,211.3631,0,0,0,0,100,0), +(@PATH,16,5005.542,-4760.349,211.6131,0,0,0,0,100,0), +(@PATH,17,5006.792,-4761.849,211.6131,0,0,0,0,100,0), +(@PATH,18,5011.292,-4766.849,211.6131,0,0,0,0,100,0), +(@PATH,19,5014.042,-4769.599,211.6131,0,0,0,0,100,0), +(@PATH,20,5014.364,-4769.94,211.6148,0,0,0,0,100,0), +(@PATH,21,5014.864,-4770.44,211.6148,0,0,0,0,100,0), +(@PATH,22,5018.389,-4774.991,211.6234,0,0,0,0,100,0), +(@PATH,23,5020.639,-4778.491,211.6234,0,0,0,0,100,0), +(@PATH,24,5021.389,-4779.741,211.3734,0,0,0,0,100,0), +(@PATH,25,5021.803,-4779.973,211.3778,0,0,0,0,100,0), +(@PATH,26,5023.303,-4782.723,211.6278,0,0,0,0,100,0), +(@PATH,27,5031.042,-4794.147,211.6393,0,0,0,0,100,0), +(@PATH,28,5032.792,-4795.897,211.6393,0,0,0,0,100,0), +(@PATH,29,5037.042,-4799.647,211.6393,0,0,0,0,100,0), +(@PATH,30,5023.104,-4782.475,211.6226,0,0,0,0,100,0), +(@PATH,31,5021.354,-4779.975,211.6226,0,0,0,0,100,0), +(@PATH,32,5020.854,-4778.725,211.6226,0,0,0,0,100,0), +(@PATH,33,5018.14,-4774.706,211.6087,0,0,0,0,100,0), +(@PATH,34,5014.669,-4770.225,211.5951,0,0,0,0,100,0), +(@PATH,35,5011.419,-4766.725,211.5951,0,0,0,0,100,0); + +DELETE FROM `creature_template_addon` WHERE `entry`=26268; +INSERT INTO `creature_template_addon` (`entry`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(26268,0,0,0,1,27, ''); + +SET @NPC := 110556; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4970.492,`position_y`=-4715.575,`position_z`=219.7441 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,4970.492,-4715.575,219.7441,0,0,0,0,100,0), +(@PATH,2,4971.992,-4715.325,220.4941,0,0,0,0,100,0), +(@PATH,3,4973.492,-4714.825,221.2441,0,0,0,0,100,0), +(@PATH,4,4975.742,-4714.325,221.7441,0,0,0,0,100,0), +(@PATH,5,4978.742,-4713.825,222.2441,0,0,0,0,100,0), +(@PATH,6,4980.742,-4713.575,221.9941,0,0,0,0,100,0), +(@PATH,7,4981.992,-4713.325,221.7441,0,0,0,0,100,0), +(@PATH,8,4983.742,-4712.825,221.2441,0,0,0,0,100,0), +(@PATH,9,4985.242,-4712.575,220.4941,0,0,0,0,100,0), +(@PATH,10,4986.242,-4712.325,219.7441,0,0,0,0,100,0), +(@PATH,11,4968.5,-4716.197,219.4686,0,0,0,0,100,0), +(@PATH,12,4968.5,-4716.197,219.4686,0.2173836,0,0,0,100,0), +(@PATH,13,4970.5,-4714.933,219.7303,0,0,0,0,100,0), +(@PATH,14,4971.75,-4714.433,220.4803,0,0,0,0,100,0), +(@PATH,15,4973,-4713.683,221.2303,0,0,0,0,100,0), +(@PATH,16,4975,-4712.683,221.7303,0,0,0,0,100,0), +(@PATH,17,4976,-4712.183,221.9803,0,0,0,0,100,0), +(@PATH,18,4978,-4711.183,222.2303,0,0,0,0,100,0), +(@PATH,19,4979.75,-4710.183,222.2303,0,0,0,0,100,0), +(@PATH,20,4982.5,-4708.683,221.4803,0,0,0,0,100,0), +(@PATH,21,4984,-4707.933,220.7303,0,0,0,0,100,0), +(@PATH,22,4985,-4707.433,219.7303,0,0,0,0,100,0), +(@PATH,23,4985.5,-4707.183,219.7303,0,0,0,0,100,0), +(@PATH,24,4987.75,-4704.183,219.7303,0,0,0,0,100,0), +(@PATH,25,4985.311,-4707.438,219.4958,0,0,0,0,100,0), +(@PATH,26,4985.311,-4707.438,219.4958,0.6189525,0,0,0,100,0), +(@PATH,27,4987.121,-4708.128,219.7317,0,0,0,0,100,0), +(@PATH,28,4996.999,-4712.775,219.6996,0,0,0,0,100,0), +(@PATH,29,4997.249,-4716.525,219.6996,0,0,0,0,100,0), +(@PATH,30,4996.261,-4712.509,219.4735,0,0,0,0,100,0), +(@PATH,31,4996.261,-4712.509,219.4735,5.849536,0,0,0,100,0), +(@PATH,32,4997.006,-4716.74,219.7261,0,0,0,0,100,0), +(@PATH,33,4997.506,-4720.74,219.4761,0,0,0,0,100,0), +(@PATH,34,4998.006,-4723.49,219.7261,0,0,0,0,100,0), +(@PATH,35,4998.103,-4723.636,219.7025,0,0,0,0,100,0), +(@PATH,36,4997.853,-4720.886,219.7025,0,0,0,0,100,0), +(@PATH,37,4997.595,-4720.635,219.7042,0,0,0,0,100,0), +(@PATH,38,4997.345,-4720.135,219.7042,0,0,0,0,100,0), +(@PATH,39,4997.345,-4716.885,219.4542,0,0,0,0,100,0), +(@PATH,40,4997.056,-4712.651,219.6972,0,0,0,0,100,0), +(@PATH,41,4991.556,-4700.401,219.6972,0,0,0,0,100,0), +(@PATH,42,4988.556,-4693.901,219.6972,0,0,0,0,100,0), +(@PATH,43,4986.112,-4688.446,219.7411,0,0,0,0,100,0), +(@PATH,44,4988.362,-4693.696,219.7411,0,0,0,0,100,0), +(@PATH,45,4989.805,-4696.215,219.7516,0,0,0,0,100,0), +(@PATH,46,4991.805,-4699.465,219.7516,0,0,0,0,100,0), +(@PATH,47,4988.768,-4694.563,219.4946,0,0,0,0,100,0), +(@PATH,48,4988.768,-4694.563,219.4946,5.140615,0,0,0,100,0), +(@PATH,49,4987.719,-4703.979,219.9336,0,0,0,0,100,0), +(@PATH,50,4985.469,-4706.229,219.9336,0,0,0,0,100,0), +(@PATH,51,4984.969,-4707.479,220.4336,0,0,0,0,100,0), +(@PATH,52,4984.469,-4708.479,220.4336,0,0,0,0,100,0), +(@PATH,53,4983.469,-4710.229,221.1836,0,0,0,0,100,0), +(@PATH,54,4982.217,-4712.462,221.5245,0,0,0,0,100,0), +(@PATH,55,4980.967,-4712.462,221.7745,0,0,0,0,100,0), +(@PATH,56,4978.467,-4712.962,222.0245,0,0,0,0,100,0), +(@PATH,57,4976.467,-4713.462,221.7745,0,0,0,0,100,0), +(@PATH,58,4976.035,-4713.909,221.9419,0,0,0,0,100,0), +(@PATH,59,4974.785,-4714.159,221.6919,0,0,0,0,100,0), +(@PATH,60,4973.035,-4714.659,221.1919,0,0,0,0,100,0), +(@PATH,61,4972.035,-4714.909,220.6919,0,0,0,0,100,0), +(@PATH,62,4970.535,-4715.409,219.9419,0,0,0,0,100,0), +(@PATH,63,4978.076,-4713.338,221.915,0,0,0,0,100,0), +(@PATH,64,4978.076,-4713.338,221.915,3.368376,0,0,0,100,0), +(@PATH,65,4976.91,-4713.574,221.9563,0,0,0,0,100,0), +(@PATH,66,4975.91,-4713.574,221.9563,0,0,0,0,100,0), +(@PATH,67,4972.91,-4713.824,221.2063,0,0,0,0,100,0), +(@PATH,68,4971.41,-4714.074,220.7063,0,0,0,0,100,0), +(@PATH,69,4970.16,-4714.324,219.9563,0,0,0,0,100,0), +(@PATH,70,4967.606,-4714.529,219.4961,0,0,0,0,100,0), +(@PATH,71,4967.606,-4714.529,219.4961,3.254826,0,0,0,100,0), +(@PATH,72,4965.34,-4710.163,219.7599,0,0,0,0,100,0), +(@PATH,73,4963.59,-4707.163,219.7599,0,0,0,0,100,0), +(@PATH,74,4959.034,-4705.619,219.5352,0,0,0,0,100,0), +(@PATH,75,4959.39,-4705.551,219.7635,0,0,0,0,100,0), +(@PATH,76,4959.64,-4707.801,219.7635,0,0,0,0,100,0), +(@PATH,77,4960.14,-4711.551,219.7635,0,0,0,0,100,0), +(@PATH,78,4960.938,-4715.122,219.7473,0,0,0,0,100,0), +(@PATH,79,4968.219,-4716.248,219.9708,0,0,0,0,100,0), +(@PATH,80,4970.219,-4715.498,219.9708,0,0,0,0,100,0), +(@PATH,81,4971.719,-4714.998,220.4708,0,0,0,0,100,0), +(@PATH,82,4972.969,-4714.748,221.2208,0,0,0,0,100,0), +(@PATH,83,4975.053,-4713.824,221.6586,0,0,0,0,100,0), +(@PATH,84,4976.303,-4713.574,221.9086,0,0,0,0,100,0), +(@PATH,85,4978.303,-4713.324,222.1586,0,0,0,0,100,0), +(@PATH,86,4980.553,-4712.824,221.9086,0,0,0,0,100,0), +(@PATH,87,4975.714,-4713.883,221.6543,0,0,0,0,100,0), +(@PATH,88,4975.714,-4713.883,221.6543,0.2268625,0,0,0,100,0), +(@PATH,89,4978.577,-4713.063,222.0859,0,0,0,0,100,0), +(@PATH,90,4980.827,-4712.813,221.8359,0,0,0,0,100,0), +(@PATH,91,4983.827,-4712.563,221.0859,0,0,0,0,100,0), +(@PATH,92,4985.077,-4712.313,220.5859,0,0,0,0,100,0), +(@PATH,93,4986.077,-4712.063,219.8359,0,0,0,0,100,0); + +SET @NPC := 118822; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3494.382,`position_y`=-4552.813,`position_z`=224.2461 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3494.382,-4552.813,224.2461,0,0,0,0,100,0), +(@PATH,2,3495.632,-4551.813,223.9961,0,0,0,0,100,0), +(@PATH,3,3497.382,-4550.813,222.9961,0,0,0,0,100,0), +(@PATH,4,3499.882,-4549.313,222.4961,0,0,0,0,100,0), +(@PATH,5,3501.382,-4548.313,221.9961,0,0,0,0,100,0), +(@PATH,6,3503.882,-4546.813,221.2461,0,0,0,0,100,0), +(@PATH,7,3506.382,-4545.313,220.4961,0,0,0,0,100,0), +(@PATH,8,3506.673,-4544.896,220.2739,0,0,0,0,100,0), +(@PATH,9,3507.423,-4544.646,220.2739,0,0,0,0,100,0), +(@PATH,10,3508.673,-4543.396,219.7739,0,0,0,0,100,0), +(@PATH,11,3511.423,-4540.896,219.2739,0,0,0,0,100,0), +(@PATH,12,3514.411,-4538.24,218.5021,0,0,0,0,100,0), +(@PATH,13,3515.411,-4534.24,217.7521,0,0,0,0,100,0), +(@PATH,14,3516.161,-4531.74,217.2521,0,0,0,0,100,0), +(@PATH,15,3517.161,-4528.74,216.7521,0,0,0,0,100,0), +(@PATH,16,3518.161,-4524.99,216.2521,0,0,0,0,100,0), +(@PATH,17,3518.383,-4524.767,216.0448,0,0,0,0,100,0), +(@PATH,18,3518.883,-4523.517,215.7948,0,0,0,0,100,0), +(@PATH,19,3521.883,-4521.517,215.2948,0,0,0,0,100,0), +(@PATH,20,3523.383,-4520.267,214.7948,0,0,0,0,100,0), +(@PATH,21,3524.552,-4519.662,214.4079,0,0,0,0,100,0), +(@PATH,22,3526.552,-4519.912,213.4079,0,0,0,0,100,0), +(@PATH,23,3528.552,-4519.912,212.6579,0,0,0,0,100,0), +(@PATH,24,3530.552,-4519.912,211.9079,0,0,0,0,100,0), +(@PATH,25,3533.302,-4520.162,211.4079,0,0,0,0,100,0), +(@PATH,26,3535.302,-4520.162,210.6579,0,0,0,0,100,0), +(@PATH,27,3537.302,-4520.412,209.9079,0,0,0,0,100,0), +(@PATH,28,3537.519,-4520.006,209.603,0,0,0,0,100,0), +(@PATH,29,3539.019,-4520.256,209.103,0,0,0,0,100,0), +(@PATH,30,3542.519,-4518.756,208.353,0,0,0,0,100,0), +(@PATH,31,3541.411,-4519.309,208.4283,0,0,0,0,100,0), +(@PATH,32,3538.654,-4520.119,209.2209,0,0,0,0,100,0), +(@PATH,33,3536.654,-4520.119,209.7209,0,0,0,0,100,0), +(@PATH,34,3534.654,-4519.869,210.4709,0,0,0,0,100,0), +(@PATH,35,3532.654,-4519.869,211.2209,0,0,0,0,100,0), +(@PATH,36,3530.904,-4519.869,211.9709,0,0,0,0,100,0), +(@PATH,37,3528.904,-4519.619,212.7209,0,0,0,0,100,0), +(@PATH,38,3526.904,-4519.619,213.4709,0,0,0,0,100,0), +(@PATH,39,3524.904,-4519.619,214.2209,0,0,0,0,100,0), +(@PATH,40,3524.787,-4519.809,214.4233,0,0,0,0,100,0), +(@PATH,41,3524.287,-4519.809,214.6733,0,0,0,0,100,0), +(@PATH,42,3522.537,-4520.809,214.9233,0,0,0,0,100,0), +(@PATH,43,3520.537,-4522.309,215.6733,0,0,0,0,100,0), +(@PATH,44,3520.155,-4522.621,215.7749,0,0,0,0,100,0), +(@PATH,45,3518.655,-4523.871,216.2749,0,0,0,0,100,0), +(@PATH,46,3517.655,-4527.621,216.7749,0,0,0,0,100,0), +(@PATH,47,3516.905,-4530.121,217.0249,0,0,0,0,100,0), +(@PATH,48,3515.655,-4534.121,217.7749,0,0,0,0,100,0), +(@PATH,49,3514.23,-4538.046,218.7422,0,0,0,0,100,0), +(@PATH,50,3511.48,-4540.546,219.2422,0,0,0,0,100,0), +(@PATH,51,3507.98,-4544.046,219.9922,0,0,0,0,100,0), +(@PATH,52,3507.672,-4544.28,220.189,0,0,0,0,100,0), +(@PATH,53,3507.172,-4544.78,220.439,0,0,0,0,100,0), +(@PATH,54,3503.672,-4547.03,221.439,0,0,0,0,100,0), +(@PATH,55,3501.922,-4547.78,221.939,0,0,0,0,100,0), +(@PATH,56,3499.672,-4549.28,222.439,0,0,0,0,100,0), +(@PATH,57,3497.922,-4550.28,223.189,0,0,0,0,100,0), +(@PATH,58,3495.37,-4551.927,224.1924,0,0,0,0,100,0), +(@PATH,59,3493.12,-4553.927,224.9424,0,0,0,0,100,0), +(@PATH,60,3491.37,-4555.177,225.4424,0,0,0,0,100,0), +(@PATH,61,3489.37,-4556.927,226.1924,0,0,0,0,100,0), +(@PATH,62,3487.12,-4558.677,226.9424,0,0,0,0,100,0), +(@PATH,63,3488.252,-4557.707,226.4908,0,0,0,0,100,0), +(@PATH,64,3490.502,-4555.957,225.7408,0,0,0,0,100,0), +(@PATH,65,3492.002,-4554.957,225.2408,0,0,0,0,100,0), +(@PATH,66,3494.252,-4552.957,224.4908,0,0,0,0,100,0), +(@PATH,67,3494.369,-4552.621,224.1573,0,0,0,0,100,0), +(@PATH,68,3495.619,-4551.871,223.9073,0,0,0,0,100,0), +(@PATH,69,3497.369,-4550.621,223.1573,0,0,0,0,100,0), +(@PATH,70,3499.869,-4549.121,222.4073,0,0,0,0,100,0), +(@PATH,71,3501.369,-4548.371,222.1573,0,0,0,0,100,0), +(@PATH,72,3503.869,-4546.871,221.4073,0,0,0,0,100,0), +(@PATH,73,3506.369,-4545.371,220.6573,0,0,0,0,100,0); +UPDATE `smart_scripts` SET `action_param1`=1 WHERE `entryorguid`=26356 AND `source_type`=0 AND `id`=0 AND `link`=1; + +SET @NPC := 98061; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4037.801,`position_y`=-4305.377,`position_z`=252.4434 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,4037.801,-4305.377,252.4434,0,0,0,0,100,0), +(@PATH,2,4029.266,-4311.001,252.5234,0,0,0,0,100,0), +(@PATH,3,4029.175,-4310.955,252.2501,0,0,0,0,100,0), +(@PATH,4,4029.509,-4310.642,252.4412,0,0,0,0,100,0), +(@PATH,5,4037.943,-4305.163,252.2845,0,0,0,0,100,0), +(@PATH,6,4054.193,-4300.913,251.7845,0,0,0,0,100,0), +(@PATH,7,4062.19,-4298.607,251.5605,0,0,0,0,100,0), +(@PATH,8,4086.898,-4293.291,251.9268,0,0,0,0,100,0), +(@PATH,9,4086.576,-4293.453,251.7249,0,0,0,0,100,0), +(@PATH,10,4086.678,-4293.366,251.7816,0,0,0,0,100,0), +(@PATH,11,4062,-4298.887,251.8086,0,0,0,0,100,0), +(@PATH,12,4046.75,-4302.637,252.0586,0,0,0,0,100,0), +(@PATH,13,4037.769,-4305.386,252.4443,0,0,0,0,100,0), +(@PATH,14,4029.219,-4311.032,252.5237,0,0,0,0,100,0), +(@PATH,15,4029.175,-4310.955,252.2501,0,0,0,0,100,0); + +UPDATE `smart_scripts` SET `action_param1`=1 WHERE `entryorguid`=26389 AND `source_type`=0 AND `id`=0 AND `link`=1; +SET @NPC := 98054; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4043.963,`position_y`=-4430.786,`position_z`=261.5165 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,4043.963,-4430.786,261.5165,0,0,0,0,100,0), +(@PATH,2,4044.963,-4432.786,262.0165,0,0,0,0,100,0), +(@PATH,3,4044.713,-4435.286,262.7665,0,0,0,0,100,0), +(@PATH,4,4045.213,-4436.286,263.0165,0,0,0,0,100,0), +(@PATH,5,4045.463,-4436.786,263.0165,0,0,0,0,100,0), +(@PATH,6,4047.463,-4438.786,262.7665,0,0,0,0,100,0), +(@PATH,7,4047.963,-4439.786,263.5165,0,0,0,0,100,0), +(@PATH,8,4047.949,-4440.013,263.7135,0,0,0,0,100,0), +(@PATH,9,4049.949,-4440.513,264.2135,0,0,0,0,100,0), +(@PATH,10,4048.949,-4441.763,264.7135,0,0,0,0,100,0), +(@PATH,11,4048.949,-4443.763,265.2135,0,0,0,0,100,0), +(@PATH,12,4047.699,-4445.763,266.2135,0,0,0,0,100,0), +(@PATH,13,4046.199,-4447.263,266.7135,0,0,0,0,100,0), +(@PATH,14,4043.449,-4446.763,267.4635,0,0,0,0,100,0), +(@PATH,15,4042.699,-4448.013,267.9635,0,0,0,0,100,0), +(@PATH,16,4041.949,-4448.513,267.9635,0,0,0,0,100,0), +(@PATH,17,4041.449,-4453.513,267.4635,0,0,0,0,100,0), +(@PATH,18,4041.242,-4453.717,267.8022,0,0,0,0,100,0), +(@PATH,19,4040.242,-4454.467,268.3022,0,0,0,0,100,0), +(@PATH,20,4040.242,-4456.467,268.8022,0,0,0,0,100,0), +(@PATH,21,4040.242,-4460.217,269.5522,0,0,0,0,100,0), +(@PATH,22,4040.489,-4464.713,269.6811,0,0,0,0,100,0), +(@PATH,23,4046.239,-4480.213,269.1811,0,0,0,0,100,0), +(@PATH,24,4046.276,-4479.878,269.3551,0,0,0,0,100,0), +(@PATH,25,4044.026,-4474.378,270.1051,0,0,0,0,100,0), +(@PATH,26,4040.298,-4464.532,269.725,0,0,0,0,100,0), +(@PATH,27,4040.298,-4459.782,269.225,0,0,0,0,100,0), +(@PATH,28,4040.298,-4455.782,268.475,0,0,0,0,100,0), +(@PATH,29,4040.299,-4455.474,268.2261,0,0,0,0,100,0), +(@PATH,30,4040.299,-4454.224,267.9761,0,0,0,0,100,0), +(@PATH,31,4042.799,-4453.224,267.7261,0,0,0,0,100,0), +(@PATH,32,4046.049,-4454.224,267.7261,0,0,0,0,100,0), +(@PATH,33,4047.799,-4452.974,267.2261,0,0,0,0,100,0), +(@PATH,34,4048.549,-4450.474,266.7261,0,0,0,0,100,0), +(@PATH,35,4049.049,-4444.724,265.7261,0,0,0,0,100,0), +(@PATH,36,4050.049,-4444.724,265.7261,0,0,0,0,100,0), +(@PATH,37,4050.549,-4442.974,264.9761,0,0,0,0,100,0), +(@PATH,38,4049.437,-4441.189,263.9388,0,0,0,0,100,0), +(@PATH,39,4047.937,-4438.439,262.9388,0,0,0,0,100,0), +(@PATH,40,4045.687,-4436.939,262.9388,0,0,0,0,100,0), +(@PATH,41,4044.687,-4436.189,262.9388,0,0,0,0,100,0), +(@PATH,42,4043.937,-4433.189,261.9388,0,0,0,0,100,0), +(@PATH,43,4043.437,-4430.439,261.4388,0,0,0,0,100,0), +(@PATH,44,4043.437,-4428.939,261.4388,0,0,0,0,100,0), +(@PATH,45,4038.512,-4412.942,261.4726,0,0,0,0,100,0), +(@PATH,46,4045.009,-4403.787,261.2599,0,0,0,0,100,0), +(@PATH,47,4050.509,-4398.787,260.7599,0,0,0,0,100,0), +(@PATH,48,4054.184,-4395.831,260.5081,0,0,0,0,100,0), +(@PATH,49,4060.914,-4401.005,260.7264,0,0,0,0,100,0), +(@PATH,50,4060.763,-4401.35,260.5203,0,0,0,0,100,0), +(@PATH,51,4060.835,-4401.013,260.7022,0,0,0,0,100,0); + +-- Earthen Warrior SAI +SET @ENTRY := 26282; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,0,5000,5000,10000,10000,49,0,0,0,0,0,0,19,26284,10,0,0,0,0,0,"Earthen Warrior - Out of Combat - Start Attacking"); + +SET @NPC := 112260; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4626.77,`position_y`=-4468.18,`position_z`=188.7218 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,4626.77,-4468.18,188.7218,0,0,0,0,100,0), +(@PATH,2,4628.02,-4468.43,188.7218,0,0,0,0,100,0), +(@PATH,3,4633.77,-4469.43,189.2218,0,0,0,0,100,0), +(@PATH,4,4638.52,-4470.18,189.7218,0,0,0,0,100,0), +(@PATH,5,4642.52,-4470.93,190.4718,0,0,0,0,100,0), +(@PATH,6,4644.66,-4471.42,191.0322,0,0,0,0,100,0), +(@PATH,7,4647.66,-4471.42,191.5322,0,0,0,0,100,0), +(@PATH,8,4651.41,-4471.42,191.7822,0,0,0,0,100,0), +(@PATH,9,4655.41,-4471.42,192.5322,0,0,0,0,100,0), +(@PATH,10,4659.563,-4471.758,193.4037,0,0,0,0,100,0), +(@PATH,11,4667.063,-4474.758,193.9037,0,0,0,0,100,0), +(@PATH,12,4667.158,-4472.282,193.5602,0,0,0,0,100,0), +(@PATH,13,4659.328,-4471.715,193.0153,0,0,0,0,100,0), +(@PATH,14,4655.328,-4471.715,192.5153,0,0,0,0,100,0), +(@PATH,15,4651.578,-4471.465,191.7653,0,0,0,0,100,0), +(@PATH,16,4647.578,-4471.465,191.5153,0,0,0,0,100,0), +(@PATH,17,4644.492,-4471.189,190.7167,0,0,0,0,100,0), +(@PATH,18,4640.492,-4470.439,189.9667,0,0,0,0,100,0), +(@PATH,19,4635.742,-4469.689,189.7167,0,0,0,0,100,0), +(@PATH,20,4630.992,-4468.939,188.9667,0,0,0,0,100,0), +(@PATH,21,4627.861,-4468.194,188.4529,0,0,0,0,100,0), +(@PATH,22,4625.361,-4467.944,188.7029,0,0,0,0,100,0), +(@PATH,23,4619.689,-4466.896,187.1016,0,0,0,0,100,0), +(@PATH,24,4609.689,-4465.646,184.6016,0,0,0,0,100,0), +(@PATH,25,4608.689,-4465.646,184.6016,0,0,0,0,100,0), +(@PATH,26,4608.402,-4465.411,184.3824,0,0,0,0,100,0), +(@PATH,27,4605.652,-4465.161,184.3824,0,0,0,0,100,0), +(@PATH,28,4595.808,-4461.938,184.4014,0,0,0,0,100,0), +(@PATH,29,4595.772,-4462.198,184.1551,0,0,0,0,100,0), +(@PATH,30,4595.927,-4462.176,184.3824,0,0,0,0,100,0), +(@PATH,31,4605.99,-4465.424,184.4906,0,0,0,0,100,0), +(@PATH,32,4609.24,-4465.924,183.9906,0,0,0,0,100,0), +(@PATH,33,4619.987,-4467.194,187.3334,0,0,0,0,100,0), +(@PATH,34,4626.487,-4467.944,188.5834,0,0,0,0,100,0), +(@PATH,35,4626.743,-4468.349,188.8552,0,0,0,0,100,0), +(@PATH,36,4627.993,-4468.349,188.8552,0,0,0,0,100,0), +(@PATH,37,4633.993,-4469.349,189.1052,0,0,0,0,100,0), +(@PATH,38,4638.493,-4470.099,189.8552,0,0,0,0,100,0), +(@PATH,39,4642.493,-4470.849,190.3552,0,0,0,0,100,0); + +SET @NPC := 112265; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4740.915,`position_y`=-4506.604,`position_z`=199.756 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,4740.915,-4506.604,199.756,0,0,0,0,100,0), +(@PATH,2,4739.165,-4508.604,200.256,0,0,0,0,100,0), +(@PATH,3,4736.571,-4511.472,200.7764,0,0,0,0,100,0), +(@PATH,4,4732.571,-4516.722,201.2764,0,0,0,0,100,0), +(@PATH,5,4729.089,-4521.665,201.4696,0,0,0,0,100,0), +(@PATH,6,4729.089,-4524.915,202.2196,0,0,0,0,100,0), +(@PATH,7,4727.339,-4528.165,202.7196,0,0,0,0,100,0), +(@PATH,8,4725.089,-4532.415,203.2196,0,0,0,0,100,0), +(@PATH,9,4720.262,-4531.4,203.6031,0,0,0,0,100,0), +(@PATH,10,4719.762,-4532.4,203.8531,0,0,0,0,100,0), +(@PATH,11,4719.762,-4533.4,204.1031,0,0,0,0,100,0), +(@PATH,12,4718.512,-4536.15,204.6031,0,0,0,0,100,0), +(@PATH,13,4715.762,-4538.4,205.1031,0,0,0,0,100,0), +(@PATH,14,4714.762,-4539.65,205.6031,0,0,0,0,100,0), +(@PATH,15,4715.869,-4538.347,205.2154,0,0,0,0,100,0), +(@PATH,16,4717.119,-4536.597,204.7154,0,0,0,0,100,0), +(@PATH,17,4718.119,-4535.847,204.4654,0,0,0,0,100,0), +(@PATH,18,4717.619,-4533.347,204.4654,0,0,0,0,100,0), +(@PATH,19,4719.119,-4530.597,203.4654,0,0,0,0,100,0), +(@PATH,20,4719.277,-4530.432,203.2003,0,0,0,0,100,0), +(@PATH,21,4720.527,-4531.182,203.4503,0,0,0,0,100,0), +(@PATH,22,4721.527,-4529.432,202.9503,0,0,0,0,100,0), +(@PATH,23,4723.027,-4525.432,202.4503,0,0,0,0,100,0), +(@PATH,24,4726.277,-4523.432,201.7003,0,0,0,0,100,0), +(@PATH,25,4729.367,-4521.513,201.2202,0,0,0,0,100,0), +(@PATH,26,4736.9,-4511.23,200.8284,0,0,0,0,100,0), +(@PATH,27,4739.9,-4507.73,199.8284,0,0,0,0,100,0), +(@PATH,28,4742.65,-4504.73,199.5784,0,0,0,0,100,0); + +SET @NPC := 112263; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4763.436,`position_y`=-4489.991,`position_z`=196.598 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,4763.436,-4489.991,196.598,0,0,0,0,100,0), +(@PATH,2,4777.686,-4503.491,197.098,0,0,0,0,100,0), +(@PATH,3,4777.988,-4503.717,197.3403,0,0,0,0,100,0), +(@PATH,4,4779.238,-4504.967,197.3403,0,0,0,0,100,0), +(@PATH,5,4787.988,-4509.217,197.5903,0,0,0,0,100,0), +(@PATH,6,4797.488,-4514.217,198.3403,0,0,0,0,100,0), +(@PATH,7,4791.602,-4511.282,197.6792,0,0,0,0,100,0), +(@PATH,8,4781.352,-4506.032,197.4292,0,0,0,0,100,0), +(@PATH,9,4779.015,-4504.664,197.1621,0,0,0,0,100,0), +(@PATH,10,4764.765,-4491.164,196.6621,0,0,0,0,100,0), +(@PATH,11,4764.466,-4490.788,196.5181,0,0,0,0,100,0), +(@PATH,12,4763.216,-4489.788,196.5181,0,0,0,0,100,0), +(@PATH,13,4757.216,-4483.288,195.7681,0,0,0,0,100,0), +(@PATH,14,4751.675,-4477.44,195.3216,0,0,0,0,100,0), +(@PATH,15,4740.917,-4467.688,195.4378,0,0,0,0,100,0), +(@PATH,16,4733.417,-4458.938,194.9378,0,0,0,0,100,0), +(@PATH,17,4730.063,-4454.976,194.4022,0,0,0,0,100,0), +(@PATH,18,4726.313,-4450.476,193.9022,0,0,0,0,100,0), +(@PATH,19,4721.563,-4444.476,193.4022,0,0,0,0,100,0), +(@PATH,20,4721.331,-4444.313,193.3035,0,0,0,0,100,0), +(@PATH,21,4719.581,-4442.063,193.0535,0,0,0,0,100,0), +(@PATH,22,4712.081,-4433.313,192.5535,0,0,0,0,100,0), +(@PATH,23,4706.962,-4427.567,192.1902,0,0,0,0,100,0), +(@PATH,24,4700.712,-4420.317,191.6902,0,0,0,0,100,0), +(@PATH,25,4704.823,-4424.94,191.8282,0,0,0,0,100,0), +(@PATH,26,4705.068,-4425.129,192.0756,0,0,0,0,100,0), +(@PATH,27,4707.318,-4427.629,192.3256,0,0,0,0,100,0), +(@PATH,28,4714.318,-4435.879,192.8256,0,0,0,0,100,0), +(@PATH,29,4719.729,-4442.429,193.2542,0,0,0,0,100,0), +(@PATH,30,4725.229,-4449.179,193.7542,0,0,0,0,100,0), +(@PATH,31,4729.479,-4454.679,194.2542,0,0,0,0,100,0), +(@PATH,32,4729.81,-4454.901,194.5507,0,0,0,0,100,0), +(@PATH,33,4730.31,-4455.401,194.5507,0,0,0,0,100,0), +(@PATH,34,4734.56,-4460.401,195.0507,0,0,0,0,100,0), +(@PATH,35,4741.313,-4467.867,195.4152,0,0,0,0,100,0); + +-- correction +-- Grizzly Hills Giant SAI +SET @ENTRY := 26261; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,8,0,100,0,47394,0,0,0,33,26261,0,0,0,0,0,7,0,0,0,0,0,0,0,"Grizzly Hills Giant - On Spellhit 'Kurun's Blessing' - Quest Credit 'Rallying the Troops'"), +(@ENTRY,0,1,0,1,0,100,0,2000,5000,4000,6000,11,46815,0,0,0,0,0,19,26264,100,0,0,0,0,0,"Grizzly Hills Giant - Out of Combat - Cast 'Toss Boulder'"); + +SET @NPC := 110559; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4974.938,`position_y`=-4745.822,`position_z`=219.5011 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,4974.938,-4745.822,219.5011,0,0,0,0,100,0), +(@PATH,2,4974.938,-4745.822,219.5011,2.057687,0,0,0,100,0), +(@PATH,3,4974.938,-4745.822,219.5011,0,0,0,0,100,0), +(@PATH,4,4974.938,-4745.822,219.5011,2.057687,0,0,0,100,0), +(@PATH,5,4970.268,-4736.388,219.75,0,0,0,0,100,0), +(@PATH,6,4969.018,-4734.138,219.75,0,0,0,0,100,0), +(@PATH,7,4968.648,-4734.162,219.7481,0,0,0,0,100,0), +(@PATH,8,4969.148,-4736.162,219.7481,0,0,0,0,100,0), +(@PATH,9,4970.325,-4738.761,219.7499,0,0,0,0,100,0), +(@PATH,10,4974.973,-4749.851,219.75,0,0,0,0,100,0), +(@PATH,11,4977.148,-4754.923,219.7599,0,0,0,0,100,0), +(@PATH,12,4977.898,-4756.173,219.7599,0,0,0,0,100,0), +(@PATH,13,4976.332,-4753.346,219.5004,0,0,0,0,100,0), +(@PATH,14,4976.332,-4753.346,219.5004,5.131248,0,0,0,100,0), +(@PATH,15,4978.357,-4755.924,219.7322,0,0,0,0,100,0), +(@PATH,16,4985.357,-4766.174,219.7322,0,0,0,0,100,0), +(@PATH,17,4988.607,-4770.424,219.7322,0,0,0,0,100,0), +(@PATH,18,4990.607,-4773.424,219.7322,0,0,0,0,100,0), +(@PATH,19,4978.615,-4756.599,219.5061,0,0,0,0,100,0), +(@PATH,20,4978.615,-4756.599,219.5061,5.324385,0,0,0,100,0), +(@PATH,21,4989.826,-4764.923,219.9392,0,0,0,0,100,0), +(@PATH,22,4992.076,-4766.923,220.9392,0,0,0,0,100,0), +(@PATH,23,4994.826,-4767.173,219.9392,0,0,0,0,100,0), +(@PATH,24,4997.076,-4766.923,220.9392,0,0,0,0,100,0), +(@PATH,25,4998.326,-4766.423,221.4392,0,0,0,0,100,0), +(@PATH,26,5002.076,-4765.673,221.9392,0,0,0,0,100,0), +(@PATH,27,5004.826,-4765.173,222.1892,0,0,0,0,100,0), +(@PATH,28,5005.213,-4765.373,222.2207,0,0,0,0,100,0), +(@PATH,29,5006.713,-4764.873,221.9707,0,0,0,0,100,0), +(@PATH,30,5008.463,-4763.873,221.7207,0,0,0,0,100,0), +(@PATH,31,5010.463,-4762.623,221.2207,0,0,0,0,100,0), +(@PATH,32,5011.713,-4762.123,220.7207,0,0,0,0,100,0), +(@PATH,33,5012.463,-4761.623,219.9707,0,0,0,0,100,0), +(@PATH,34,5014.963,-4760.373,219.9707,0,0,0,0,100,0), +(@PATH,35,5013.416,-4761.159,219.5162,0,0,0,0,100,0), +(@PATH,36,5013.416,-4761.159,219.5162,0.5364561,0,0,0,100,0), +(@PATH,37,5012.949,-4758.56,219.7025,0,0,0,0,100,0), +(@PATH,38,5011.449,-4752.56,219.7025,0,0,0,0,100,0), +(@PATH,39,5011.199,-4749.81,219.7025,0,0,0,0,100,0), +(@PATH,40,5010.699,-4747.81,219.7025,0,0,0,0,100,0), +(@PATH,41,5011.182,-4745.968,219.433,0,0,0,0,100,0), +(@PATH,42,5013.682,-4748.968,219.683,0,0,0,0,100,0), +(@PATH,43,5014.682,-4750.218,219.683,0,0,0,0,100,0), +(@PATH,44,5013.822,-4749.14,219.4679,0,0,0,0,100,0), +(@PATH,45,5015.072,-4750.64,219.7179,0,0,0,0,100,0), +(@PATH,46,5015.822,-4751.89,219.7179,0,0,0,0,100,0), +(@PATH,47,5016.797,-4758.994,219.9411,0,0,0,0,100,0), +(@PATH,48,5014.797,-4760.244,219.9411,0,0,0,0,100,0), +(@PATH,49,5013.047,-4760.994,219.9411,0,0,0,0,100,0), +(@PATH,50,5011.547,-4761.994,220.6911,0,0,0,0,100,0), +(@PATH,51,5010.547,-4762.744,221.1911,0,0,0,0,100,0), +(@PATH,52,5008.547,-4763.994,221.6911,0,0,0,0,100,0), +(@PATH,53,5007.547,-4764.494,221.9411,0,0,0,0,100,0), +(@PATH,54,5016.685,-4757.653,219.5163,0,0,0,0,100,0), +(@PATH,55,5016.685,-4757.653,219.5163,4.85295,0,0,0,100,0), +(@PATH,56,5014.053,-4759.563,219.7658,0,0,0,0,100,0), +(@PATH,57,5012.553,-4760.563,219.7658,0,0,0,0,100,0), +(@PATH,58,5011.053,-4761.563,220.5158,0,0,0,0,100,0), +(@PATH,59,5010.053,-4762.563,221.2658,0,0,0,0,100,0), +(@PATH,60,5007.553,-4764.063,221.7658,0,0,0,0,100,0), +(@PATH,61,5005.303,-4765.813,222.0158,0,0,0,0,100,0), +(@PATH,62,5003.553,-4767.063,222.0158,0,0,0,0,100,0), +(@PATH,63,5000.803,-4769.063,221.2658,0,0,0,0,100,0), +(@PATH,64,4999.553,-4769.813,220.5158,0,0,0,0,100,0), +(@PATH,65,4998.303,-4770.813,219.7658,0,0,0,0,100,0), +(@PATH,66,5015.091,-4758.8,219.5454,0,0,0,0,100,0), +(@PATH,67,5015.091,-4758.8,219.5454,3.765347,0,0,0,100,0), +(@PATH,68,5013.777,-4759.399,219.7824,0,0,0,0,100,0), +(@PATH,69,5012.027,-4760.149,219.5324,0,0,0,0,100,0), +(@PATH,70,5010.527,-4760.399,220.5324,0,0,0,0,100,0), +(@PATH,71,5009.027,-4761.149,221.2824,0,0,0,0,100,0), +(@PATH,72,5007.277,-4761.899,221.5324,0,0,0,0,100,0), +(@PATH,73,5005.277,-4761.899,222.0324,0,0,0,0,100,0), +(@PATH,74,5003.527,-4763.399,222.2824,0,0,0,0,100,0), +(@PATH,75,5001.527,-4764.899,222.2824,0,0,0,0,100,0), +(@PATH,76,4998.527,-4766.399,221.2824,0,0,0,0,100,0), +(@PATH,77,4997.527,-4767.149,220.7824,0,0,0,0,100,0), +(@PATH,78,4996.527,-4767.399,219.7824,0,0,0,0,100,0), +(@PATH,79,4995.777,-4767.649,219.7824,0,0,0,0,100,0), +(@PATH,80,4991.527,-4767.899,219.7824,0,0,0,0,100,0), +(@PATH,81,4987.777,-4765.649,219.7824,0,0,0,0,100,0), +(@PATH,82,4981.399,-4761.659,219.763,0,0,0,0,100,0), +(@PATH,83,4977.899,-4756.159,219.763,0,0,0,0,100,0), +(@PATH,84,4977.707,-4755.765,219.7526,0,0,0,0,100,0), +(@PATH,85,4976.957,-4754.515,219.7526,0,0,0,0,100,0), +(@PATH,86,4974.813,-4749.59,219.7486,0,0,0,0,100,0), +(@PATH,87,4975.045,-4750.456,219.4998,0,0,0,0,100,0), +(@PATH,88,4975.045,-4750.456,219.4998,1.989743,0,0,0,100,0), +(@PATH,89,4969.571,-4736.454,219.7493,0,0,0,0,100,0), +(@PATH,90,4968.821,-4734.204,219.7493,0,0,0,0,100,0), +(@PATH,91,4972.802,-4744.884,219.4986,0,0,0,0,100,0), +(@PATH,92,4972.802,-4744.884,219.4986,1.953552,0,0,0,100,0), +(@PATH,93,4969.699,-4736.418,219.7488,0,0,0,0,100,0), +(@PATH,94,4968.699,-4734.168,219.7488,0,0,0,0,100,0); + +-- Runed Giant SAI +SET @ENTRY := 26417; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id`=2; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,2,0,1,0,100,0,5000,5000,10000,10000,49,0,0,0,0,0,0,19,26261,15,0,0,0,0,0,"Runed Giant - Out of Combat - Start Attacking"); + +SET @NPC := 86438; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4795.183,`position_y`=-4858.25,`position_z`=25.82121 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,4795.183,-4858.25,25.82121,0,0,0,0,100,0), +(@PATH,2,4793.933,-4857.25,25.82121,0,0,0,0,100,0), +(@PATH,3,4786.933,-4851,25.82121,0,0,0,0,100,0), +(@PATH,4,4783.933,-4848.5,25.57121,0,0,0,0,100,0), +(@PATH,5,4775.606,-4841.151,25.45528,0,0,0,0,100,0), +(@PATH,6,4775.606,-4841.151,25.45528,2.513274,0,0,0,100,0), +(@PATH,7,4783.6,-4848.556,25.60373,0,0,0,0,100,0), +(@PATH,8,4786.35,-4851.306,25.85373,0,0,0,0,100,0), +(@PATH,9,4793.35,-4858.056,25.85373,0,0,0,0,100,0), +(@PATH,10,4793.512,-4857.986,25.97804,0,0,0,0,100,0), +(@PATH,11,4794.762,-4859.236,25.97804,0,0,0,0,100,0), +(@PATH,12,4798.762,-4857.986,25.72804,0,0,0,0,100,0), +(@PATH,13,4800.262,-4857.736,25.72804,0,0,0,0,100,0), +(@PATH,14,4802.262,-4856.986,25.72804,0,0,0,0,100,0), +(@PATH,15,4810.12,-4854.692,25.79934,0,0,0,0,100,0), +(@PATH,16,4816.12,-4851.192,25.79934,0,0,0,0,100,0), +(@PATH,17,4818.37,-4850.192,25.54934,0,0,0,0,100,0), +(@PATH,18,4819.37,-4849.692,25.54934,0,0,0,0,100,0), +(@PATH,19,4821.12,-4848.942,25.79934,0,0,0,0,100,0), +(@PATH,20,4823.87,-4847.192,25.54934,0,0,0,0,100,0), +(@PATH,21,4825.23,-4846.544,25.45987,5.550147,0,0,0,100,0), +(@PATH,22,4823.903,-4847.049,25.59635,0,0,0,0,100,0), +(@PATH,23,4821.653,-4848.049,25.59635,0,0,0,0,100,0), +(@PATH,24,4820.403,-4848.549,25.59635,0,0,0,0,100,0), +(@PATH,25,4816.653,-4850.049,25.59635,0,0,0,0,100,0), +(@PATH,26,4814.903,-4850.549,25.59635,0,0,0,0,100,0), +(@PATH,27,4803.903,-4854.799,25.84635,0,0,0,0,100,0), +(@PATH,28,4800.153,-4856.299,25.84635,0,0,0,0,100,0), +(@PATH,29,4799.153,-4856.799,25.84635,0,0,0,0,100,0), +(@PATH,30,4795.174,-4858.254,25.82136,0,0,0,0,100,0), +(@PATH,31,4793.924,-4857.254,25.82136,0,0,0,0,100,0), +(@PATH,32,4786.924,-4851.004,25.82136,0,0,0,0,100,0), +(@PATH,33,4783.924,-4848.504,25.57136,0,0,0,0,100,0), +(@PATH,34,4775.606,-4841.151,25.45528,0,0,0,0,100,0), +(@PATH,35,4775.606,-4841.151,25.45528,2.513274,0,0,0,100,0); + +SET @NPC := 86437; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4766.285,`position_y`=-4851.221,`position_z`=25.88538 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,4766.285,-4851.221,25.88538,0,0,0,0,100,0), +(@PATH,2,4764.035,-4852.971,25.63538,0,0,0,0,100,0), +(@PATH,3,4762.535,-4853.971,25.38538,0,0,0,0,100,0), +(@PATH,4,4761.535,-4853.971,25.38538,0,0,0,0,100,0), +(@PATH,5,4760.035,-4853.971,25.63538,0,0,0,0,100,0), +(@PATH,6,4758.785,-4853.971,26.13538,0,0,0,0,100,0), +(@PATH,7,4758.035,-4854.221,26.38538,0,0,0,0,100,0), +(@PATH,8,4756.035,-4854.471,26.38538,0,0,0,0,100,0), +(@PATH,9,4753.785,-4854.971,26.38538,0,0,0,0,100,0), +(@PATH,10,4752.035,-4855.221,26.38538,0,0,0,0,100,0), +(@PATH,11,4748.035,-4856.471,26.38538,0,0,0,0,100,0), +(@PATH,12,4745.785,-4856.721,26.38538,0,0,0,0,100,0), +(@PATH,13,4739.535,-4857.221,26.38538,0,0,0,0,100,0), +(@PATH,14,4733.245,-4857.637,26.4931,0,0,0,0,100,0), +(@PATH,15,4733.245,-4857.637,26.4931,2.617994,0,0,0,100,0), +(@PATH,16,4737.667,-4857.782,26.4303,0,0,0,0,100,0), +(@PATH,17,4739.417,-4857.782,26.4303,0,0,0,0,100,0), +(@PATH,18,4745.917,-4857.782,26.4303,0,0,0,0,100,0), +(@PATH,19,4747.667,-4857.782,26.1803,0,0,0,0,100,0), +(@PATH,20,4750.917,-4857.782,26.1803,0,0,0,0,100,0), +(@PATH,21,4752.667,-4857.782,26.1803,0,0,0,0,100,0), +(@PATH,22,4755.667,-4857.782,26.1803,0,0,0,0,100,0), +(@PATH,23,4755.755,-4857.606,26.16596,0,0,0,0,100,0), +(@PATH,24,4758.755,-4857.606,25.91596,0,0,0,0,100,0), +(@PATH,25,4761.005,-4855.856,25.66596,0,0,0,0,100,0), +(@PATH,26,4762.505,-4854.356,25.41596,0,0,0,0,100,0), +(@PATH,27,4764.255,-4853.106,25.66596,0,0,0,0,100,0), +(@PATH,28,4766.005,-4851.606,25.66596,0,0,0,0,100,0); + +-- Shade of Arugal SAI +SET @ENTRY := 27018; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,0,1000,1000,20000,20000,11,48185,0,0,0,0,0,19,27024,20,0,0,0,0,0,"Shade of Arugal - Out of Combat - Cast 'Arugal Channel'"), +(@ENTRY,0,1,0,0,0,100,0,2000,3000,2000,3000,11,53086,0,0,0,0,0,2,0,0,0,0,0,0,0,"Shade of Arugal - In Combat - Cast 'Shadow Bolt'"); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceGroup`=1 AND `SourceEntry`=48185; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, 48185, 0, 0, 31, 0, 3, 27024, 0, 0, 0, 0, '', 'Arugal Channel only target Cultists'); diff --git a/sql/updates/world/2015_05_24_05_world.sql b/sql/updates/world/2015_05_24_05_world.sql new file mode 100644 index 00000000000..2b3641b257c --- /dev/null +++ b/sql/updates/world/2015_05_24_05_world.sql @@ -0,0 +1,10 @@ +-- Scarlet Hound +DELETE FROM `creature` WHERE `id` IN (10979); +DELETE FROM `creature_addon` WHERE `guid` IN (52633, 52634, 52635, 52637, 52641, 52662, 52664, 52665, 52666, 52667, 52668); +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=10979; +DELETE FROM `smart_scripts` WHERE `entryorguid`=10979 AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=1831 AND `source_type`=0 AND `id`=2; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(1831, 0, 2, 0, 25, 0, 100, 0, 0, 0, 0, 0, 11, 17164, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Scarlet Hunter - On Reset - Cast to summon Scarlet Hound'), +(10979, 0, 0, 0, 0, 0, 100, 0, 3000, 7000, 6000, 9000, 11, 17260, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,0,'Scarlet Hound - IC - Cast Bite'), +(10979, 0, 1, 0, 0, 0, 100, 0, 5000, 10000, 22000, 25000, 11, 59274, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Scarlet Hound - IC - Furious Howl'); diff --git a/sql/updates/world/2015_05_24_06_world.sql b/sql/updates/world/2015_05_24_06_world.sql new file mode 100644 index 00000000000..756b2d569cf --- /dev/null +++ b/sql/updates/world/2015_05_24_06_world.sql @@ -0,0 +1,45 @@ +-- DB/Quest: Escape from the Staging Grounds +DELETE FROM `waypoints` WHERE `entry`=20763; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`) VALUES +(20763, 1, 4081.3, 2296.6, 110.75), +(20763, 2, 4095.3, 2296.37, 108.392), +(20763, 3, 4123.42, 2297.51, 104.368), +(20763, 4, 4146.48, 2298.85, 102.475), +(20763, 5, 4169.75, 2301.11, 104.503), +(20763, 6, 4181.37, 2301.19, 108.692), +(20763, 7, 4195.51, 2301.28, 113.981), +(20763, 8, 4215.69, 2295.79, 122.162), +(20763, 9, 4229.79, 2295.09, 127.068), +(20763, 10, 4250.86, 2293.49, 128.848), +(20763, 11, 4271.72, 2290, 125.243), +(20763, 12, 4277.21, 2276.97, 125.337), +(20763, 13, 4269.13, 2262.97, 127.868), +(20763, 14, 4262.07, 2250.73, 131.257), +(20763, 15, 4253.95, 2236.66, 134.959), +(20763, 16, 4249.61, 2220.86, 137.445), +(20763, 17, 4251.74, 2186.12, 137.08), +(20763, 18, 4252, 2172.27, 137.678); + +-- Captured Protectorate Vanguard SAI +SET @ENTRY := 20763; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,1,19,0,100,0,10425,0,0,0,1,0,0,0,0,0,0,21,10,0,0,0,0,0,0,"Captured Protectorate Vanguard - On Quest 'Escape from the Staging Grounds' Taken - Say Line 0"), +(@ENTRY,0,1,2,61,0,100,0,10425,0,0,0,53,0,20763,0,0,0,2,1,0,0,0,0,0,0,0,"Captured Protectorate Vanguard - On Quest 'Escape from the Staging Grounds' Taken - Start Waypoint"), +(@ENTRY,0,2,14,61,0,100,0,10425,0,0,0,64,1,0,0,0,0,0,21,10,0,0,0,0,0,0,"Captured Protectorate Vanguard - On Quest 'Escape from the Staging Grounds' Taken - Store Targetlist"), +(@ENTRY,0,7,0,40,0,100,0,16,20763,0,0,54,4000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Captured Protectorate Vanguard - On Waypoint 16 Reached - Pause Waypoint"), +(@ENTRY,0,8,10,40,0,100,0,17,20763,0,0,15,10425,0,0,0,0,0,12,1,0,0,0,0,0,0,"Captured Protectorate Vanguard - On Waypoint 17 Reached - Quest Credit 'Escape from the Staging Grounds'"), +(@ENTRY,0,9,0,6,0,100,0,0,0,0,0,6,10425,0,0,0,0,0,12,1,0,0,0,0,0,0,"Captured Protectorate Vanguard - On Just Died - Fail Quest 'Escape from the Staging Grounds'"), +(@ENTRY,0,10,0,61,0,100,0,17,20763,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Captured Protectorate Vanguard - On Waypoint 17 Reached - Say Line 1"), +(@ENTRY,0,11,12,40,0,100,0,18,20763,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Captured Protectorate Vanguard - On Waypoint 18 Reached - Say Line 2"), +(@ENTRY,0,12,13,61,0,100,0,18,20763,0,0,11,35517,0,0,0,0,0,1,0,0,0,0,0,0,0,"Captured Protectorate Vanguard - On Waypoint 18 Reached - Cast 'Teleport'"), +(@ENTRY,0,13,0,61,0,100,0,18,20763,0,0,41,3000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Captured Protectorate Vanguard - On Waypoint 18 Reached - Despawn In 3000 ms"), +(@ENTRY,0,14,0,61,0,100,0,10425,0,0,0,81,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Captured Protectorate Vanguard - On Quest 'Escape from the Staging Grounds' Taken - Set Npc Flag "), +(@ENTRY,0,15,0,11,0,100,0,0,0,0,0,81,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Captured Protectorate Vanguard - On Respawn - Set Npc Flag Questgiver"); + +DELETE FROM `creature_text` WHERE `entry`=20763; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextID`, `comment`) VALUES +(20763, 0, 0, 'We''re not too far from the Protectorate Watch Post, $n. This way!', 12, 0, 100, 0, 0, 0, 18566, 'Captured Protectorate Vanguard to Player'), +(20763, 1, 0, 'Commander! This fleshling rescued me!', 12, 0, 100, 0, 0, 0, 18567, 'Captured Protectorate Vanguard to Player'), +(20763, 2, 0, '%s salutes Commander Ameer.', 16, 0, 100, 0, 0, 0, 18568, 'Captured Protectorate Vanguard to Player'); diff --git a/sql/updates/world/2015_05_24_07_world.sql b/sql/updates/world/2015_05_24_07_world.sql new file mode 100644 index 00000000000..af7e82b8087 --- /dev/null +++ b/sql/updates/world/2015_05_24_07_world.sql @@ -0,0 +1,30 @@ +-- Dragonflayer Fanatic +DELETE FROM `waypoints` WHERE `entry`=26553; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`) VALUES +(26553,1,467.5089,-325.5417,104.0859), +(26553,2,483.179,-325.046,104.0471); + +-- Dragonflayer Fanatic SAI +SET @GUID := -126160; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=26553; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@GUID,0,0,0,25,0,100,0,0,0,0,0,53,0,26553,1,0,0,0,1,0,0,0,0,0,0,0,"Dragonflayer Fanatic - On Reset - Start Waypoint"), +(@GUID,0,1,0,40,0,100,0,1,26553,0,0,80,12616000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonflayer Fanatic - On Waypoint 1 Reached - Run Script"), +(@GUID,0,2,0,40,0,100,0,2,26553,0,0,80,12616001,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonflayer Fanatic - On Waypoint 2 Reached - Run Script"), +(@GUID,0,3,0,1,1,100,0,2000,2000,2000,2000,10,274,25,5,22,0,0,1,0,0,0,0,0,0,0,"Dragonflayer Fanatic - Out of Combat - Play Random Emote (274, 25, 5, 22)"); + +-- Actionlist SAI +SET @ENTRY := 12616000; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,54,35000,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Pause Waypoint"), +(@ENTRY,9,1,0,0,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Set Event Phase 1"), +(@ENTRY,9,2,0,0,0,100,0,35000,35000,0,0,22,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Set Event Phase 2"); + +-- Actionlist SAI +SET @ENTRY := 12616001; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,54,15000,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Pause Waypoint"), +(@ENTRY,9,1,0,0,0,100,0,2000,2000,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,5.986479,"On Script - Set Orientation 5,986479"); diff --git a/sql/updates/world/2015_05_24_08_world.sql b/sql/updates/world/2015_05_24_08_world.sql new file mode 100644 index 00000000000..d8bc19aaffb --- /dev/null +++ b/sql/updates/world/2015_05_24_08_world.sql @@ -0,0 +1,94 @@ +-- Complete UP Movement +SET @NPC := 126159; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=408.6479,`position_y`=-247.8646,`position_z`=105.1593 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,408.6479,-247.8646,105.1593,0,0,0,0,100,0), +(@PATH,2,413.1479,-247.3646,105.4093,0,0,0,0,100,0), +(@PATH,3,417.3979,-247.1146,105.4093,0,0,0,0,100,0), +(@PATH,4,421.3979,-246.8646,105.1593,0,0,0,0,100,0), +(@PATH,5,424.6479,-246.8646,105.4093,0,0,0,0,100,0), +(@PATH,6,431.6479,-246.3646,105.1593,0,0,0,0,100,0), +(@PATH,7,437.3979,-245.8646,105.1593,0,0,0,0,100,0), +(@PATH,8,439.8979,-245.6146,105.1593,0,6000,0,0,100,0), +(@PATH,9,439.8979,-245.6146,105.1593,0,0,0,0,100,0), +(@PATH,10,437.3979,-245.8646,105.1593,0,0,0,0,100,0), +(@PATH,11,431.6479,-246.3646,105.1593,0,0,0,0,100,0), +(@PATH,12,424.6479,-246.8646,105.4093,0,0,0,0,100,0), +(@PATH,13,421.3979,-246.8646,105.1593,0,0,0,0,100,0), +(@PATH,14,417.3979,-247.1146,105.4093,0,0,0,0,100,0), +(@PATH,15,413.1479,-247.3646,105.4093,0,0,0,0,100,0), +(@PATH,16,408.6479,-247.8646,105.1593,0,6000,0,0,100,0); + +SET @NPC := 126083; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=281.2139,`position_y`=-383.5794,`position_z`=90.28523 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH, 10, 273.909, -398.059, 90.1069, 0, 10, 0, 0, 100, 0), +(@PATH, 9, 262.177, -400.701, 83.5446, 0, 10, 0, 0, 100, 0), +(@PATH, 8, 248.65, -398.957, 75.1077, 0, 10, 0, 0, 100, 0), +(@PATH, 7, 262.177, -400.701, 83.5446, 0, 10, 0, 0, 100, 0), +(@PATH, 6, 273.909, -398.059, 90.1069, 0, 10, 0, 0, 100, 0), +(@PATH, 5, 281.51, -396.934, 89.9561, 0, 10, 0, 0, 100, 0), +(@PATH, 4, 281.066, -384.517, 90.0477, 0, 10, 0, 0, 100, 0), +(@PATH, 3, 263.144, -381.767, 96.7176, 0, 10, 0, 0, 100, 0), +(@PATH, 2, 248.789, -383.987, 104.753, 0, 10, 0, 0, 100, 0), +(@PATH, 1, 263.144, -381.767, 96.7176, 0, 10, 0, 0, 100, 0); + +UPDATE `smart_scripts` SET `action_param1`=1 WHERE `entryorguid`=26670 AND `source_type`=0 AND `id`=0 AND `link`=1; + +DELETE FROM `creature_formations` WHERE `leaderGUID`=126083; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES +(126083, 126087, 3, 270, 2, 0, 0), +(126083, 126088, 3, 90, 2, 0, 0), +(126083, 126083, 0, 0, 2, 0, 0); + + +SET @NPC := 126086; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH, 8, 238.128, -450.66, 104.736, 0, 10, 0, 0, 100, 0), +(@PATH, 7, 236.583, -435.635, 104.736, 0, 10, 0, 0, 100, 0), +(@PATH, 6, 236.444, -449.692, 104.736, 0, 10, 0, 0, 100, 0), +(@PATH, 5, 238.128, -450.66, 104.736, 0, 10, 0, 0, 100, 0), +(@PATH, 4, 309.006, -451.589, 104.718, 0, 10, 0, 0, 100, 0), +(@PATH, 3, 310.79, -451.589, 104.718, 0, 10, 0, 0, 100, 0), +(@PATH, 2, 310.682, -467.433, 104.718, 0, 10, 0, 0, 100, 0), +(@PATH, 1, 310.79, -451.589, 104.718, 0, 10, 0, 0, 100, 0); + +DELETE FROM `creature_formations` WHERE `leaderGUID`=126086; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES +(126086, 126078, 5, 180, 2, 0, 0), +(126086, 126081, 5, 90, 2, 0, 0), +(126086, 126082, 5, 270, 2, 0, 0), +(126086, 126086, 0, 0, 2, 0, 0); + +SET @NPC := 126111; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH, 7, 368.053, -432.959, 75.1209, 0, 10, 0, 0, 100, 0), +(@PATH, 6, 402.875, -428.319, 75.1263, 0, 10, 0, 0, 100, 0), +(@PATH, 5, 407.49, -441.521, 75.0988, 0, 10, 0, 0, 100, 0), +(@PATH, 4, 429.311, -447.42, 75.1166, 0, 10, 0, 0, 100, 0), +(@PATH, 3, 428.506, -467.335, 75.1153, 0, 10, 0, 0, 100, 0), +(@PATH, 2, 400.957, -455.234, 75.1132, 0, 10, 0, 0, 100, 0), +(@PATH, 1, 372.02, -450.569, 75.1308, 0, 10, 0, 0, 100, 0); + +DELETE FROM `creature_formations` WHERE `leaderGUID`=126111; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES +(126111, 126110, 3, 280, 2, 0, 0), +(126111, 126111, 0, 0, 2, 0, 0); diff --git a/sql/updates/world/2015_05_25_00_world.sql b/sql/updates/world/2015_05_25_00_world.sql new file mode 100644 index 00000000000..4b1cc48da5a --- /dev/null +++ b/sql/updates/world/2015_05_25_00_world.sql @@ -0,0 +1,6 @@ +-- +-- Forsaken Crossbowman SAI +SET @ENTRY := 23883; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,0,0,2000,2000,3000,11,61512,0,0,0,0,0,19,23803,200,0,0,0,0,0,"Forsaken Crossbowman - Out of Combat - Cast 'Shoot'"); diff --git a/sql/updates/world/2015_05_26_00_world.sql b/sql/updates/world/2015_05_26_00_world.sql new file mode 100644 index 00000000000..cc1a6810764 --- /dev/null +++ b/sql/updates/world/2015_05_26_00_world.sql @@ -0,0 +1,7 @@ +-- +UPDATE `creature_template` SET `npcflag`=3, `gossip_menu_id`=5032 WHERE `entry`=241; +DELETE FROM `gossip_menu` WHERE `entry`=5032; +INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (5032, 6158); +DELETE FROM `npc_text` WHERE `ID`=6158; +INSERT INTO `npc_text` (`ID`, `text0_0`, `text0_1`, `BroadcastTextID0`, `lang0`, `prob0`, `em0_0`, `em0_1`) VALUES +(6158, 'Hey there, friend. My name''s Remy. I''m from Redridge to the east, and came here looking for business, looking for business. You got any...got any??', 'Hey there, friend. My name''s Remy. I''m from Redridge to the east, and came here looking for business, looking for business. You got any...got any??', 0, 0, 1, 0, 0); diff --git a/sql/updates/world/2015_05_26_01_world.sql b/sql/updates/world/2015_05_26_01_world.sql new file mode 100644 index 00000000000..b1dd41196a6 --- /dev/null +++ b/sql/updates/world/2015_05_26_01_world.sql @@ -0,0 +1,40 @@ +-- +DELETE FROM `creature_formations` WHERE `leaderGUID`=26233; +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`)VALUES +(26233,26233,0,0,2),(26233,26192,15,0,2),(26233,26194,15,90,2),(26233,26193,9,0,2),(26233,26195,9,90,2); +UPDATE `creature` SET `MovementType`=2 WHERE `guid` IN (26233); +UPDATE `creature_addon` SET `path_id`=262330 WHERE `guid` IN (26233); +DELETE FROM `creature_addon` WHERE `guid` IN (26233); +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (26233, 262330); +DELETE FROM `waypoint_data` WHERE `id` IN (262330); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(262330, 1,-1317.949951, -926.414978, 1.9346, 0, 0, 0, 0, 100, 0), +(262330, 2,-1244.693726, -980.329773, -4.920392, 0, 0, 0, 0, 100, 0), +(262330, 3,-1193.669312, -948.340393, -3.643325, 0, 0, 0, 0, 100, 0), +(262330, 4,-1182.622681, -859.417419, -11.058956, 0, 0, 0, 0, 100, 0), +(262330, 5,-1183.541138, -796.475952, -36.551662, 0, 0, 0, 0, 100, 0), +(262330, 6,-1182.812988, -740.116638, -52.754967, 0, 0, 0, 0, 100, 0), +(262330, 7,-1200.200806, -605.367249, -57.754887, 0, 0, 0, 0, 100, 0), +(262330, 8,-1242.377563, -494.067078, -57.610630, 0, 0, 0, 0, 100, 0), +(262330, 9,-1468.878052, -522.602173, -55.496475, 0, 0, 0, 0, 100, 0), +(262330, 10,-1551.133789, -656.098145, -50.817574, 0, 0, 0, 0, 100, 0), +(262330, 11,-1394.677490, -802.561279, -21.880009, 0, 0, 0, 0, 100, 0), +(262330, 12,-1317.949951, -926.414978, 1.9346, 0, 0, 0, 0, 100, 0); + +DELETE FROM `creature_formations` WHERE `leaderGUID`=26213; +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`)VALUES +(26213,26213,0,0,2),(26213,26185,15,0,2),(26213,26207,15,90,2),(26213,26186,9,0,2),(26213,26187,9,90,2); +UPDATE `creature` SET `MovementType`=2 WHERE `guid` IN (26213); +UPDATE `creature_addon` SET `path_id`=262130 WHERE `guid` IN (26213); +DELETE FROM `creature_addon` WHERE `guid` IN (26213); +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (26213, 262130); +DELETE FROM `waypoint_data` WHERE `id` IN (262130); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(262130, 1,-2545.065918, 21.190157, 11.805480, 0, 0, 0, 0, 100, 0), +(262130, 2,-2487.883789, 100.192146, 33.786736, 0, 0, 0, 0, 100, 0), +(262130, 3,-2420.558350, 88.399445, 38.040539, 0, 0, 0, 0, 100, 0), +(262130, 4,-2318.995361, 115.247169, 50.718586, 0, 0, 0, 0, 100, 0), +(262130, 5,-2284.748779, 27.045509, 22.492968, 0, 0, 0, 0, 100, 0), +(262130, 6,-2349.130615, -61.506725, -8.763674, 0, 0, 0, 0, 100, 0); + +UPDATE `creature` SET `MovementType`=1, `spawndist`=15 WHERE `guid` IN (26214, 26231, 26189, 26188, 26196, 26184, 26210, 26209, 26211, 26232, 26190, 26191, 26212); diff --git a/sql/updates/world/2015_05_26_02_world.sql b/sql/updates/world/2015_05_26_02_world.sql new file mode 100644 index 00000000000..d56e45a1514 --- /dev/null +++ b/sql/updates/world/2015_05_26_02_world.sql @@ -0,0 +1,8 @@ +-- +DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN (12479, 12480, -12480) AND `spell_effect` IN (12480, 530, -530); +INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comment`) VALUES +(12479, 12480, 0, 'Hex of Jammal''an'), +(12480, 530, 0, 'Hex of Jammal''an'), +(-12480, -530, 0, 'Hex of Jammal''an'); + +UPDATE `smart_scripts` SET `event_type`=0, `Comment`= "Jammal'an the Prophet - In combat - Cast 'Hex of Jammal'an' (Phase 1)" WHERE `entryorguid`=5710 AND `source_Type`=0 AND `id`=5; diff --git a/sql/updates/world/2015_05_26_03_world.sql b/sql/updates/world/2015_05_26_03_world.sql new file mode 100644 index 00000000000..30b5103caa8 --- /dev/null +++ b/sql/updates/world/2015_05_26_03_world.sql @@ -0,0 +1,3 @@ +-- +DELETE FROM `spell_group` WHERE `id`=1001 AND `spell_id` IN (45694, 20875, 25804, 25722, 25037); +INSERT INTO `spell_group` (`id`, `spell_id`) VALUES (1001, 45694), (1001, 20875), (1001, 25804), (1001, 25722), (1001, 25037); diff --git a/sql/updates/world/2015_05_26_04_world.sql b/sql/updates/world/2015_05_26_04_world.sql new file mode 100644 index 00000000000..39728f515ee --- /dev/null +++ b/sql/updates/world/2015_05_26_04_world.sql @@ -0,0 +1,6 @@ +-- +DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid` IN (20748); +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(20748,0,0,0,25,0,100,0,0,0,0,0,11,37691,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Thunderlord Dire Wolf - On Reset - Cast Stealth Detection'), +(20748,0,1,0,0,0,100,0,4000,6000,10000,11000,11,5781,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Thunderlord Dire Wolf - IC - Cast Threatening Growl'), +(20748,0,2,0,8,0,100,0,32578,0,120000,120000,33,21142,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Thunderlord Dire Wolf - on spell hit - Credit quest'); diff --git a/sql/updates/world/2015_05_26_05_world.sql b/sql/updates/world/2015_05_26_05_world.sql new file mode 100644 index 00000000000..d7ef0e17204 --- /dev/null +++ b/sql/updates/world/2015_05_26_05_world.sql @@ -0,0 +1,3 @@ +DELETE FROM `spell_script_names` WHERE `spell_id` = 39291; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(39291, 'spell_remove_kargath_executioner'); diff --git a/sql/updates/world/2015_05_26_06_world.sql b/sql/updates/world/2015_05_26_06_world.sql new file mode 100644 index 00000000000..09010f2475b --- /dev/null +++ b/sql/updates/world/2015_05_26_06_world.sql @@ -0,0 +1,281 @@ +-- Stranglethorn - Missing Scripts +-- Gorlash SAI +SET @ENTRY := 1492; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,3000,4000,5000,6000,11,5568,2,0,0,0,0,2,0,0,0,0,0,0,0,"Gorlash - In Combat - Cast 'Trample'"); + +-- Silverback Patriarch SAI +SET @ENTRY := 1558; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,4000,6000,7000,8000,11,6253,2,0,0,0,0,2,0,0,0,0,0,0,0,"Silverback Patriarch - In Combat - Cast 'Backhand'"); + +-- Zanzil Witch Doctor SAI +SET @ENTRY := 1490; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,3000,4000,5000,6000,11,9613,64,0,0,0,0,2,0,0,0,0,0,0,0,"Zanzil Witch Doctor - In Combat CMC - Cast 'Shadow Bolt'"); + +-- Zanzil Zombie SAI +SET @ENTRY := 1488; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,1,2000,3000,0,0,11,7102,2,0,0,0,0,2,0,0,0,0,0,0,0,"Zanzil Zombie - In Combat - Cast 'Contagion of Rot' (No Repeat)"); + +-- Zanzil the Outcast SAI +SET @ENTRY := 2534; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,1,0,0,0,0,11,8832,2,0,0,0,0,1,0,0,0,0,0,0,0,"Zanzil the Outcast - In Combat - Cast 'Ward of Zanzil' (No Repeat)"), +(@ENTRY,0,1,0,0,0,100,0,3000,4000,5000,6000,11,9532,64,0,0,0,0,2,0,0,0,0,0,0,0,"Zanzil the Outcast - In Combat CMC - Cast 'Lightning Bolt'"); + +-- Bloodscalp Axe Thrower SAI +SET @ENTRY := 694; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,5,30,3500,4900,11,10277,64,0,0,0,0,2,0,0,0,0,0,0,0,"Bloodscalp Axe Thrower - In Combat CMC - Cast 'Throw'"), +(@ENTRY,0,1,2,2,0,100,1,0,30,0,0,11,8599,0,0,0,0,0,1,0,0,0,0,0,0,0,"Bloodscalp Axe Thrower - Between 0-30% Health - Cast 'Enrage' (No Repeat)"), +(@ENTRY,0,2,0,61,0,100,0,0,30,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Bloodscalp Axe Thrower - Between 0-30% Health - Say Line 0 (No Repeat)"), +(@ENTRY,0,3,0,2,0,100,1,0,15,0,0,25,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Bloodscalp Axe Thrower - Between 0-15% Health - Flee For Assist (No Repeat)"); + +-- Texts for Bloodscalp Axe Thrower +SET @ENTRY := 694; +DELETE FROM `creature_text` WHERE `entry`=@ENTRY; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextId`) VALUES +(@ENTRY,0,0,"%s becomes enraged!",16,0,100,0,0,0,"Bloodscalp Axe Thrower",10677); + +-- Zanzil Hunter SAI +SET @ENTRY := 1489; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,4,0,100,0,0,0,0,0,11,10277,0,0,0,0,0,2,0,0,0,0,0,0,0,"Zanzil Hunter - On Aggro - Cast 'Throw'"), +(@ENTRY,0,1,0,2,0,100,1,0,15,0,0,25,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Zanzil Hunter - Between 0-15% Health - Flee For Assist (No Repeat)"); + +-- Zanzil Naga SAI +SET @ENTRY := 1491; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,3000,6000,7000,8000,11,9080,2,0,0,0,0,2,0,0,0,0,0,0,0,"Zanzil Naga - In Combat - Cast 'Hamstring'"), +(@ENTRY,0,1,0,0,0,100,0,4000,5000,10000,11000,11,12555,2,0,0,0,0,2,0,0,0,0,0,0,0,"Zanzil Naga - In Combat - Cast 'Pummel'"); + +-- Venture Co. Tinkerer SAI +SET @ENTRY := 677; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,54,0,100,0,1000,2000,0,0,11,12544,2,0,0,0,0,1,0,0,0,0,0,0,0,"Venture Co. Tinkerer - On Just Summoned - Cast 'Frost Armor'"), +(@ENTRY,0,1,0,0,0,100,0,3000,4000,5000,6000,11,20823,64,0,0,0,0,2,0,0,0,0,0,0,0,"Venture Co. Tinkerer - In Combat CMC - Cast 'Fireball'"); + +-- Venture Co. Strip Miner SAI +SET @ENTRY := 674; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,2000,6000,12000,15000,11,7978,64,0,0,0,0,2,0,0,0,0,0,0,0,"Venture Co. Strip Miner - In Combat CMC - Cast 'Throw Dynamite'"); + +-- Skullsplitter Warrior SAI +SET @ENTRY := 667; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,2000,3000,15000,20000,11,3148,2,0,0,0,0,2,0,0,0,0,0,0,0,"Skullsplitter Warrior - In Combat - Cast 'Head Crack'"), +(@ENTRY,0,1,0,0,0,100,0,4000,5000,11000,12000,11,11972,2,0,0,0,0,2,0,0,0,0,0,0,0,"Skullsplitter Warrior - In Combat - Cast 'Shield Bash'"); + +-- Skullsplitter Witch Doctor SAI +SET @ENTRY := 670; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,1000,2000,10000,11000,11,8376,0,0,0,0,0,1,0,0,0,0,0,0,0,"Skullsplitter Witch Doctor - In Combat - Cast 'Earthgrab Totem'"), +(@ENTRY,0,1,0,0,0,100,0,5000,6000,20000,30000,11,5605,0,0,0,0,0,1,0,0,0,0,0,0,0,"Skullsplitter Witch Doctor - In Combat - Cast 'Healing Ward'"); + +-- Skullsplitter Scout SAI +SET @ENTRY := 782; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,4000,5000,18000,20000,11,3148,2,0,0,0,0,2,0,0,0,0,0,0,0,"Skullsplitter Scout - In Combat - Cast 'Head Crack'"); + +-- Skullsplitter Spiritchaser SAI +SET @ENTRY := 672; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,2,0,100,0,0,40,10000,11000,11,11986,0,0,0,0,0,1,0,0,0,0,0,0,0,"Skullsplitter Spiritchaser - Between 0-40% Health - Cast 'Healing Wave'"), +(@ENTRY,0,1,0,0,0,100,0,3000,4000,5000,6000,11,9532,64,0,0,0,0,2,0,0,0,0,0,0,0,"Skullsplitter Spiritchaser - In Combat CMC - Cast 'Lightning Bolt'"), +(@ENTRY,0,2,0,0,0,100,1,6000,7000,0,0,11,11981,0,0,0,0,0,2,0,0,0,0,0,0,0,"Skullsplitter Spiritchaser - In Combat - Cast 'Mana Burn' (No Repeat)"); + +-- Ana'thek the Cruel SAI +SET @ENTRY := 1059; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,3000,6000,18000,20000,11,9791,2,0,0,0,0,2,0,0,0,0,0,0,0,"Ana'thek the Cruel - In Combat - Cast 'Head Crack'"); + +-- Mosh'Ogg Spellcrafter SAI +SET @ENTRY := 710; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,54,0,100,1,0,0,0,0,11,12544,64,0,0,0,0,1,0,0,0,0,0,0,0,"Mosh'Ogg Spellcrafter - On Just Summoned - Cast 'Frost Armor' (No Repeat)"), +(@ENTRY,0,1,0,0,0,100,0,3000,4000,5000,6000,11,9053,64,0,0,0,0,2,0,0,0,0,0,0,0,"Mosh'Ogg Spellcrafter - In Combat CMC - Cast 'Fireball'"), +(@ENTRY,0,2,0,0,0,100,0,6000,7000,6000,7000,11,11829,0,0,0,0,0,2,0,0,0,0,0,0,0,"Mosh'Ogg Spellcrafter - In Combat - Cast 'Flamestrike'"); + +-- Mosh'Ogg Warmonger SAI +SET @ENTRY := 709; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,75,0,2000,3000,10000,11000,11,8147,2,0,0,0,0,1,0,0,0,0,0,0,0,"Mosh'Ogg Warmonger - In Combat - Cast 'Thunderclap'"); + +-- Mosh'Ogg Lord SAI +SET @ENTRY := 680; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,3000,4000,30000,40000,11,9128,2,0,0,0,0,1,0,0,0,0,0,0,0,"Mosh'Ogg Lord - In Combat - Cast 'Battle Shout'"); + +-- Mosh'Ogg Mauler SAI +SET @ENTRY := 678; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,50,0,4000,6000,11000,12000,11,5164,2,0,0,0,0,2,0,0,0,0,0,0,0,"Mosh'Ogg Mauler - In Combat - Cast 'Knockdown'"); + +-- Mai'Zoth SAI +SET @ENTRY := 818; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,2000,5000,5000,6000,11,8398,64,0,0,0,0,2,0,0,0,0,0,0,0,"Mai'Zoth - In Combat CMC - Cast 'Frostbolt Volley'"), +(@ENTRY,0,1,0,0,0,100,0,3000,6000,8000,9000,11,8814,0,0,0,0,0,2,0,0,0,0,0,0,0,"Mai'Zoth - In Combat - Cast 'Flame Spike'"); + +-- Young Panther SAI +SET @ENTRY := 683; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,2000,5000,5000,6000,11,16830,2,0,0,0,0,2,0,0,0,0,0,0,0,"Young Panther - In Combat - Cast 'Claw'"); + +-- Bloodscalp Witch Doctor SAI +SET @ENTRY := 660; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,1,2000,3000,0,0,11,8376,64,0,0,0,0,1,0,0,0,0,0,0,0,"Bloodscalp Witch Doctor - In Combat - Cast 'Earthgrab Totem' (No Repeat)"), +(@ENTRY,0,1,0,2,0,100,1,0,30,0,0,11,8599,2,0,0,0,0,1,0,0,0,0,0,0,0,"Bloodscalp Witch Doctor - Between 0-30% Health - Cast 'Enrage' (No Repeat)"); + +-- Bloodscalp Beastmaster SAI +SET @ENTRY := 699; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,4,0,100,0,0,0,0,0,11,10277,0,0,0,0,0,2,0,0,0,0,0,0,0,"Bloodscalp Beastmaster - On Aggro - Cast 'Throw'"), +(@ENTRY,0,1,2,2,0,100,1,0,30,0,0,11,8599,0,0,0,0,0,1,0,0,0,0,0,0,0,"Bloodscalp Beastmaster - Between 0-30% Health - Cast 'Enrage' (No Repeat)"), +(@ENTRY,0,2,0,61,0,100,0,0,30,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Bloodscalp Beastmaster - Between 0-30% Health - Say Line 0 (No Repeat)"), +(@ENTRY,0,3,0,2,0,100,1,0,15,0,0,25,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Bloodscalp Beastmaster - Between 0-15% Health - Flee For Assist (No Repeat)"); + +-- Texts for Bloodscalp Axe Thrower +SET @ENTRY := 699; +DELETE FROM `creature_text` WHERE `entry`=@ENTRY; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextId`) VALUES +(@ENTRY,0,0,"%s becomes enraged!",16,0,100,0,0,0,"Bloodscalp Beastmaster",10677); + +-- Bloodscalp Headhunter SAI +SET @ENTRY := 671; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,4,0,100,0,0,0,0,0,11,10277,0,0,0,0,0,2,0,0,0,0,0,0,0,"Bloodscalp Headhunter - On Aggro - Cast 'Throw'"), +(@ENTRY,0,1,2,2,0,100,1,0,30,0,0,11,8599,0,0,0,0,0,1,0,0,0,0,0,0,0,"Bloodscalp Headhunter - Between 0-30% Health - Cast 'Enrage' (No Repeat)"), +(@ENTRY,0,2,0,61,0,100,0,0,30,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Bloodscalp Headhunter - Between 0-30% Health - Say Line 0 (No Repeat)"), +(@ENTRY,0,3,0,2,0,100,1,0,15,0,0,25,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Bloodscalp Headhunter - Between 0-15% Health - Flee For Assist (No Repeat)"); + +-- Texts for Bloodscalp Headhunter +SET @ENTRY := 671; +DELETE FROM `creature_text` WHERE `entry`=@ENTRY; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextId`) VALUES +(@ENTRY,0,0,"%s becomes enraged!",16,0,100,0,0,0,"Bloodscalp Headhunter",10677); + +-- Bloodscalp Tiger SAI +SET @ENTRY := 698; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,2,0,50,1,0,30,0,0,11,8599,2,0,0,0,0,1,0,0,0,0,0,0,0,"Bloodscalp Tiger - Between 0-30% Health - Cast 'Enrage' (No Repeat)"); + +-- Nezzliok the Dire SAI +SET @ENTRY := 1062; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,2000,4000,5000,6000,11,421,64,0,0,0,0,2,0,0,0,0,0,0,0,"Nezzliok the Dire - In Combat CMC - Cast 'Chain Lightning'"), +(@ENTRY,0,1,0,0,0,100,0,6000,7000,6000,7000,11,2610,0,0,0,0,0,2,0,0,0,0,0,0,0,"Nezzliok the Dire - In Combat - Cast 'Shock'"); + +-- Gan'zulah SAI +SET @ENTRY := 1061; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,2,0,100,1,0,30,0,0,11,8599,2,0,0,0,0,1,0,0,0,0,0,0,0,"Gan'zulah - Between 0-30% Health - Cast 'Enrage' (No Repeat)"); + +-- Bloodscalp Scout SAI +SET @ENTRY := 588; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,2,0,50,1,0,30,0,0,11,8599,2,0,0,0,0,1,0,0,0,0,0,0,0,"Bloodscalp Scout - Between 0-30% Health - Cast 'Enrage' (No Repeat)"); + +-- Panther SAI +SET @ENTRY := 736; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,3000,4000,4000,5000,11,16831,2,0,0,0,0,2,0,0,0,0,0,0,0,"Panther - In Combat - Cast 'Claw'"); + +-- Mosh'Ogg Witch Doctor SAI +SET @ENTRY := 1144; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,1000,4000,20000,30000,11,11980,2,0,0,0,0,2,0,0,0,0,0,0,0,"Mosh'Ogg Witch Doctor - In Combat - Cast 'Curse of Weakness'"), +(@ENTRY,0,1,0,0,0,100,1,4000,6000,0,0,11,3827,2,0,0,0,0,1,0,0,0,0,0,0,0,"Mosh'Ogg Witch Doctor - In Combat - Cast 'Ward of Laze' (No Repeat)"); + +-- Roloch SAI +SET @ENTRY := 14488; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,2000,4000,5000,6000,11,15496,2,0,0,0,0,2,0,0,0,0,0,0,0,"Roloch - In Combat - Cast 'Cleave'"); + +-- Bloodscalp Scavenger SAI +SET @ENTRY := 702; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,2000,4000,6000,7000,11,37685,0,0,0,0,0,2,0,0,0,0,0,0,0,"Bloodscalp Scavenger - In Combat - Cast 'Backstab'"), +(@ENTRY,0,1,0,0,0,50,0,1000,2000,20000,30000,11,744,2,0,0,0,0,2,0,0,0,0,0,0,0,"Bloodscalp Scavenger - In Combat - Cast 'Poison'"), +(@ENTRY,0,2,0,2,0,100,0,0,30,0,0,11,8599,2,0,0,0,0,1,0,0,0,0,0,0,0,"Bloodscalp Scavenger - Between 0-30% Health - Cast 'Enrage'"); + +-- Tethis SAI +SET @ENTRY := 730; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,3000,4000,10000,10000,11,3604,2,0,0,0,0,2,0,0,0,0,0,0,0,"Tethis - In Combat - Cast 'Tendon Rip'"); + +-- Sin'Dall SAI +SET @ENTRY := 729; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,3000,4000,10000,10000,11,5164,2,0,0,0,0,2,0,0,0,0,0,0,0,"Sin'Dall - In Combat - Cast 'Knockdown'"); diff --git a/sql/updates/world/2015_05_27_00_world.sql b/sql/updates/world/2015_05_27_00_world.sql new file mode 100644 index 00000000000..8f0f712ea27 --- /dev/null +++ b/sql/updates/world/2015_05_27_00_world.sql @@ -0,0 +1,343 @@ +-- Horde Honor the Flame Quests +DELETE FROM `creature_queststarter` WHERE `quest` IN (11821,11836,11856,11838,11843); +DELETE FROM `creature_questender` WHERE `quest` IN (11847,11849,11854); +INSERT INTO `creature_questender` (`id`, `quest`) VALUES +(25932, 11849), -- Feralas +(25930, 11847), -- Dustwallow marsh +(25937, 11854); -- Nagrand +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Durotar flame!' WHERE `Id`=11846; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Mulgore flame!' WHERE `Id`=11852; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Barrens flame!' WHERE `Id`=11859; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Tanaris flame!' WHERE `Id`=11838; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Ashenvale flame!' WHERE `Id`=11841; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Winterspring flame!' WHERE `Id`=11839; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Desolace flame!' WHERE `Id`=11845; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Thousand Needles flame!' WHERE `Id`=11861; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Feralas flame!' WHERE `Id`=11849; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Dustwallow Marsh flame!' WHERE `Id`=11847; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Silithus flame!' WHERE `Id`=11836; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Stonetalon Mountains flame!' WHERE `Id`=11856; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Hellfire Peninsula flame!' WHERE `Id`=11851; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Shadowmoon Valley flame!' WHERE `Id`=11855; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Nagrand flame!' WHERE `Id`=11854; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Netherstorm flame!' WHERE `Id`=11835; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Blades Edge Mountains flame! ' WHERE `Id`=11843; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Terokkar flame!' WHERE `Id`=11858; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Zangarmarsh flame!' WHERE `Id`=11863; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Zul''Drak flame!' WHERE `Id`=13500; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Borean Tundra flame!' WHERE `Id`=13493; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Sholazar Basin flame!' WHERE `Id`=13494; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Dragonblight flame!' WHERE `Id`=13495; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Crystalsong Forest flame!' WHERE `Id`=13499; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Storm Peaks flame!' WHERE `Id`=13498; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Grizzly Hills flame!' WHERE `Id`=13497; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Howling Fjords flame!' WHERE `Id`=13496; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Ghostland flame!' WHERE `Id`=11850; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Eversong woods flame!' WHERE `Id`=11848; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Hillsbrad Foothills flame!' WHERE `Id`=11853; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Swamp of sorrows flame!' WHERE `Id`=11857; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Cape of Stranglethorn flame!' WHERE `Id`=11837; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Burning Steppes flame!' WHERE `Id`=11844; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Hinterlands flame!' WHERE `Id`=11860; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Silverpine Forest flame!' WHERE `Id`=11584; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Tirisfal Glades flame!' WHERE `Id`=11862; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Badlands flame!' WHERE `Id`=11842; +UPDATE `quest_template` SET `RequiredRaces`=690,`OfferRewardText`='Honor the Arathi Highlands flame!' WHERE `Id`=11840; +UPDATE `creature_template` SET `npcflag`=3, `unit_flags`=33356 WHERE `entry`=32816; +UPDATE `creature_template` SET `npcflag`=3, `unit_flags`=33536 WHERE `entry`=32813; +UPDATE `creature_template` SET `npcflag`=3, `unit_flags`=33536 WHERE `entry`=32812; +UPDATE `creature_template` SET `npcflag`=3, `unit_flags`=33536 WHERE `entry`=32811; +UPDATE `creature_template` SET `npcflag`=3, `unit_flags`=33536 WHERE `entry`=25946; +UPDATE `creature_template` SET `npcflag`=3, `unit_flags`=33536 WHERE `entry`=25938; +UPDATE `creature_template` SET `npcflag`=3, `unit_flags`=33536 WHERE `entry`=25936; +UPDATE `creature_template` SET `npcflag`=3, `unit_flags`=33536 WHERE `entry`=25933; +UPDATE `creature_template` SET `npcflag`=3, `unit_flags`=33536 WHERE `entry`=25931; +UPDATE `creature_template` SET `npcflag`=3, `unit_flags`=33536 WHERE `entry`=25929; +UPDATE `creature_template` SET `npcflag`=3, `unit_flags`=33536 WHERE `entry`=25926; +UPDATE `creature_template` SET `npcflag`=3, `unit_flags`=33536 WHERE `entry`=25918; +-- Alliance Honor the Flame Quests +DELETE FROM `creature_questender` WHERE `quest` IN (11805,11812,11815,11834,11833,11831,11817,11811,11806,11809,11826,11824,11826,11827,11819,11583,11828,11816,11810,11808,11804,11832,11813,11814,11820,11822,13485,13487,13489,13488,13492,13490,13486,13491,11823,11821,11830,11818,11825,11807,11829); +INSERT INTO `creature_questender` (`id`, `quest`) VALUES +(25883, 11805), -- Ashenvale +(25894, 11812), -- Desolace +(25897, 11815), -- Dustwallow Marsh +(25917, 11834), -- Winterspring +(25916, 11833), -- Tanaris +(25914, 11831), -- Silithus +(25899, 11817), -- Feralas +(25893, 11811), -- Darkshore +(25888, 11806), -- Azuremyst Isle +(25891, 11809), -- Bloodmyst Isle +(25906, 11824), -- Teldrassil +(25908, 11826), -- The Hinterlands +(25909, 11827), -- The Western Plaguelands +(25901, 11819), -- Hillsbrad Foothills +(25910, 11583), -- Westfall +(25911, 11828), -- Wetlands +(25898, 11816), -- Elwynn Forest +(25892, 11810), -- Burning Steppes +(25890, 11808), -- Blasted Lands +(25887, 11804), -- Arathi Highlands +(25915, 11832), -- Cape of Stranglethorn +(25895, 11813), -- Dun Morogh +(25896, 11814), -- Duskwood +(25902, 11820), -- Loch Modan +(25904, 11822), -- Redridge Mountains +(32801, 13485), -- Borean Tundra +(32803, 13487), -- Dragonblight +(32805, 13489), -- Grizzly Hills +(32804, 13488), -- Howling Fjord +(32808, 13492), -- Zul'Drak +(32806, 13490), -- The Storm Peaks +(32802, 13486), -- Sholazar Basin +(32807, 13491), -- Crystalsong Forest +(25905, 11823), -- Shadowmoon Valley +(25903, 11821), -- Nagrand +(25913, 11830), -- Netherstorm +(25900, 11818), -- Hellfire Peninsula +(25907, 11825), -- Terokkar +(25889, 11807), -- Blade's Edge +(25912, 11829); -- Zangarmarsh +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Ashenvale flame!' WHERE `Id`=11805; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Desolace flame!' WHERE `Id`=11812; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Dustwallow Marsh flame!' WHERE `Id`=11815; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Winterspring flame!' WHERE `Id`=11834; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Tanaris flame!' WHERE `Id`=11833; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Silithus flame!' WHERE `Id`=11831; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Feralas flame!' WHERE `Id`=11817; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Darkshore flame!' WHERE `Id`=11811; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Azuremyst Isle flame!' WHERE `Id`=11806; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Bloodmyst Isle flame!' WHERE `Id`=11809; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Teldrassil flame!' WHERE `Id`=11824; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Hinterlands flame!' WHERE `Id`=11826; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Western Plaguelands flame!' WHERE `Id`=11827; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Hillsbrad Foothills flame!' WHERE `Id`=11819; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Westfall flame!' WHERE `Id`=11583; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Wetlands flame!' WHERE `Id`=11828; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Elwynn Forest flame!' WHERE `Id`=11816; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Burning Steppes flame!' WHERE `Id`=11810; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Blasted Lands flame!' WHERE `Id`=11808; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Arathi Highlands flame!' WHERE `Id`=11804; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Cape of Stranglethorn flame!' WHERE `Id`=11832; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Dun Morogh flame!' WHERE `Id`=11813; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Duskwood flame!' WHERE `Id`=11814; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Loch Modan flame!' WHERE `Id`=11820; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Redridge Mountains flame!' WHERE `Id`=11822; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Borean Tundra flame!' WHERE `Id`=13485; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Dragonblight flame!' WHERE `Id`=13487; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Grizzly Hills flame!' WHERE `Id`=13489; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Howling Fjord flame!' WHERE `Id`=13488; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Zul''Drak flame!' WHERE `Id`=13492; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Storm Peaks flame!' WHERE `Id`=13490; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Sholazar Basin flame!' WHERE `Id`=13486; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Crystalsong Forest flame!' WHERE `Id`=13491; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Shadowmoon Valley flame!' WHERE `Id`=11823; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Nagrand flame!' WHERE `Id`=11821; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Netherstorm flame!' WHERE `Id`=11830; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Hellfire Peninsula flame!' WHERE `Id`=11818; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Terokkar flame!' WHERE `Id`=11825; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Blade''s Edge Mountains flame!' WHERE `Id`=11807; +UPDATE `quest_template` SET `RequiredRaces`=1101,`OfferRewardText`='Honor the Zangarmarsh flame!' WHERE `Id`=11829; +UPDATE `creature_template` SET `gossip_menu_id`=9203, `npcflag`=3, `unit_flags`=33536 WHERE `entry`=32803; +UPDATE `creature_template` SET `gossip_menu_id`=9203, `npcflag`=3, `unit_flags`=33536 WHERE `entry`=32804; +UPDATE `creature_template` SET `gossip_menu_id`=9203, `npcflag`=3, `unit_flags`=33536 WHERE `entry`=32805; +UPDATE `creature_template` SET `npcflag`=3, `unit_flags`=33536 WHERE `entry`=25888; +UPDATE `creature_template` SET `npcflag`=3, `unit_flags`=33536 WHERE `entry`=25891; +UPDATE `creature_template` SET `npcflag`=3, `unit_flags`=33536 WHERE `entry`=25892; +UPDATE `creature_template` SET `npcflag`=3, `unit_flags`=33536 WHERE `entry`=25903; +UPDATE `creature_template` SET `npcflag`=3, `unit_flags`=33536 WHERE `entry`=25905; +UPDATE `creature_template` SET `npcflag`=3, `unit_flags`=33536 WHERE `entry`=25907; +UPDATE `creature_template` SET `npcflag`=3, `unit_flags`=33536 WHERE `entry`=25909; +UPDATE `creature_template` SET `npcflag`=3, `unit_flags`=33536 WHERE `entry`=25912; +UPDATE `creature_template` SET `npcflag`=3, `unit_flags`=33536 WHERE `entry`=25913; +UPDATE `creature_template` SET `npcflag`=3, `unit_flags`=33536 WHERE `entry`=32808; +UPDATE `creature_template` SET `npcflag`=3, `unit_flags`=33536 WHERE `entry`=25889; +-- Northrend Alliance's Bonfire Quests +DELETE FROM `gameobject_queststarter` WHERE `quest` IN (13441,13450,13451,13453,13454,13455,13457,13458); +-- Northrend Horde's Bonfire Quests +DELETE FROM `gameobject_queststarter` WHERE `quest` IN (13440,13442,13443,13444,13445,13446,13447,13449); +-- Stealing the flame +DELETE FROM `creature_queststarter` WHERE `quest` IN (11933,11935); +DELETE FROM `spell_scripts` WHERE `id` IN (29137,29135,29126,46671,29139,29138,29136,46672); +INSERT INTO `spell_scripts` (`id`, `effIndex`,`command`, `datalong`, `datalong2`) VALUES +(29137, 2, 15,29101, 2), +(29135, 2, 15,29102, 2), +(29126, 2, 15,29099, 2), +(46671, 2, 15,46690, 2), +(29139, 2, 15,29133, 2), +(29136, 2, 15,29130, 2), +(29138, 2, 15,29132, 2), +(46672, 2, 15,46689, 2); +-- A Thief's Reward +DELETE FROM `creature_queststarter` WHERE `quest` IN (9365,9339); +INSERT INTO `creature_queststarter` (`id`, `quest`) VALUES +(16817, 9365), -- Alliance +(16818, 9339); -- Horde +DELETE FROM `creature_questender` WHERE `quest` IN (9365,9339); +INSERT INTO `creature_questender` (`id`, `quest`) VALUES +(16817, 9365), -- Alliance +(16818, 9339); -- Horde +-- Alliance Desecrate the flame +DELETE FROM `gameobject_queststarter` WHERE `id` IN (187958,187952,187953,187950,187973,187971,187968,187965,187961,187957,187959,187948,187963,187967,187949,187970,187975,187966,187955,194048,194033,194034,194037,194046,194043,194042,194039,187962,187960,187964,187969,187951,187956,187972,187559,187974,187954,187947); +DELETE FROM `gameobject_questender` WHERE `id` IN (187958,187952,187953,187950,187973,187971,187968,187965,187961,187957,187959,187948,187963,187967,187949,187970,187975,187966,187955,194048,194033,194034,194037,194046,194043,194042,194039,187962,187960,187964,187969,187951,187956,187972,187559,187974,187954,187947); +INSERT INTO `gameobject_questender` (`id`, `quest`) VALUES +(187958, 11770), -- Durotar +(187957, 11769), -- Desolace +(187965, 11777), -- Mulgore +(187953, 11803), -- Winterspring +(187971, 11783), -- Barrens +(187961, 11773), -- Feralas +(187948, 11765), -- Ashenvale +(187959, 11771), -- Dustwallow marsh +(187973, 11785), -- Thousand Needles +(187950, 11800), -- Silithus +(187968, 11780), -- Stonetalon Mountains +(187952, 11802), -- Tanaris +(187963, 11775), -- Hellfire Peninsula +(187967, 11779), -- Shadowmoon Valley +(187949, 11799), -- Netherstorm +(187970, 11782), -- Terokkar +(187975, 11787), -- Zangarmarsh +(187955, 11767), -- Blade' Edge +(187966, 11778), -- Nagrand +(194048, 13458), -- Zul'Drak +(194033, 13441), -- Borean Tundra +(194034, 13450), -- Sholazar Basin +(194037, 13451), -- Dragonblight +(194046, 13457), -- Crystalsong Forest +(194043, 13455), -- Storm Peaks +(194042, 13454), -- Grizzly Hills +(194039, 13453), -- Howling Fjords +(187962, 11774), -- Ghostland +(187960, 11772), -- Eversong woods +(187964, 11776), -- Hillsbrad Foothills +(187969, 11781), -- Swamp of sorrows +(187951, 11801), -- Cape of Stranglethorn +(187956, 11768), -- Burning Steppes +(187972, 11784), -- The Hinterlands +(187559, 11580), -- Silverpine Forest +(187974, 11786), -- Tirisfal Glades +(187954, 11766), -- Badlands +(187947, 11764); -- Arathi Highlands +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Zul''Drak bonfire!' WHERE `id`=13458; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Crystalsong Forest bonfire!' WHERE `id`=13457; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Storm Peaks bonfire!' WHERE `id`=13455; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Grizzly Hills bonfire!' WHERE `id`=13454; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Howling Fjord bonfire!' WHERE `id`=13453; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Dragonblight bonfire!' WHERE `id`=13451; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Sholazar Basin bonfire!' WHERE `id`=13450; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Borean Tundra bonfire!' WHERE `id`=13441; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Winterspring bonfire!' WHERE `id`=11803; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Tanaris bonfire!' WHERE `id`=11802; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Stranglethorn Vale bonfire!' WHERE `id`=11801; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Silithus bonfire!' WHERE `id`=11800; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Netherstorm bonfire!' WHERE `id`=11799; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Zangarmarsh bonfire!' WHERE `id`=11787; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Dustwallow Marsh bonfire!' WHERE `id`=11771; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Hinterlands bonfire!' WHERE `id`=11784; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Terokkar Forest bonfire!' WHERE `id`=11782; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Shadowmoon Valley bonfire!' WHERE `id`=11779; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Nagrand bonfire!' WHERE `id`=11778; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Hillsbrad Foothills Bonfire!' WHERE `id`=11776; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Hellfire Peninsula bonfire!' WHERE `id`=11775; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Feralas bonfire!' WHERE `id`=11773; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Desolace bonfire!' WHERE `id`=11769; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Burning Steppes bonfire!' WHERE `id`=11768; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Blade''s Edge Mountains bonfire!' WHERE `id`=11767; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Ashenvale bonfire!' WHERE `id`=11765; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Arathi Highlands bonfire!' WHERE `id`=11764; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Silverpine bonfire!' WHERE `id`=11580; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Durotar bonfire!' WHERE `id`=11770; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Mulgore bonfire!' WHERE `id`=11777; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Barrens bonfire!' WHERE `id`=11783; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Thousand Needles bonfire!' WHERE `id`=11785; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Stonetalon Mountains bonfire!' WHERE `id`=11780; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Ghostlands bonfire!' WHERE `id`=11774; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Eversong Woods bonfire!' WHERE `id`=11772; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Swamp of Sorrows bonfire!' WHERE `id`=11781; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Tirisfal Glades bonfire!' WHERE `id`=11786; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Horde''s Badlands bonfire!' WHERE `id`=11766; +-- Horde Desecrate the flame +DELETE FROM `gameobject_queststarter` WHERE `id` IN (187916,187924,187927,187946,187945,187943,187929,187923,187917,187921,187936,187938,187939,187931,187564,187940,187928,187922,187920,187914,187944,187925,187926,187932,187934,194032,194036,194040,194038,194049,194044,194035,194045,187935,187933,187942,187930,187937,187919,187941); +DELETE FROM `gameobject_questender` WHERE `id` IN (187916,187924,187927,187946,187945,187943,187929,187923,187917,187921,187936,187938,187939,187931,187564,187940,187928,187922,187920,187914,187944,187925,187926,187932,187934,194032,194036,194040,194038,194049,194044,194035,194045,187935,187933,187942,187930,187937,187919,187941); +INSERT INTO `gameobject_questender` (`id`, `quest`) VALUES +(187916, 11734), -- Ashenvale +(187924, 11741), -- Desolace +(187927, 11744), -- Dustwallow Marsh +(187946, 11763), -- Winterspring +(187945, 11762), -- Tanaris +(187943, 11760), -- Silithus +(187929, 11746), -- Feralas +(187923, 11740), -- Darkshore +(187917, 11735), -- Azuremyst Isle +(187921, 11738), -- Bloodmyst Isle +(187936, 11753), -- Teldrassil +(187938, 11755), -- The Hinterlands +(187939, 11756), -- The Western Plaguelands +(187931, 11748), -- Hillsbrad Foothills +(187564, 11581), -- Westfall +(187940, 11757), -- Wetlands +(187928, 11745), -- Elwynn Forest +(187922, 11739), -- Burning Steppes +(187920, 11737), -- Blasted Lands +(187914, 11732), -- Arathi Highlands +(187944, 11761), -- Cape of Stranglethorn +(187925, 11742), -- Dun Morogh +(187926, 11743), -- Duskwood +(187932, 11749), -- Loch Modan +(187934, 11751), -- Redridge Mountains +(194032, 13440), -- Borean Tundra +(194036, 13443), -- Dragonblight +(194040, 13445), -- Grizzly +(194038, 13444), -- Howling Fjord +(194049, 13449), -- Zul'Drak +(194044, 13446), -- The Storm Peaks +(194035, 13442), -- Sholazar Basin +(194045, 13447), -- Crystalsong Forest +(187935, 11752), -- Shadowmoon Valley +(187933, 11750), -- Nagrand +(187942, 11759), -- Netherstorm +(187930, 11747), -- Hellfire Peninsula +(187937, 11754), -- Terokkar +(187919, 11736), -- Blade's Edge +(187941, 11758); -- Zangarmarsh +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Zul''Drak bonfire!' WHERE `id`=13449; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Crystalsong Forest bonfire!' WHERE `id`=13447; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Storm Peaks bonfire!' WHERE `id`=13446; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Grizzly Hills bonfire!' WHERE `id`=13445; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Howling Fjord bonfire!' WHERE `id`=13444; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Dragonblight bonfire!' WHERE `id`=13443; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Sholazar Basin bonfire!' WHERE `id`=13442; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Borean Tundra bonfire!' WHERE `id`=13440; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Winterspring bonfire!' WHERE `id`=11763; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Tanaris bonfire!' WHERE `id`=11762; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Stranglethorn Vale bonfire!' WHERE `id`=11761; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Silithus bonfire!' WHERE `id`=11760; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Netherstorm bonfire!' WHERE `id`=11759; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Zangarmarsh bonfire!' WHERE `id`=11758; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Wetlands bonfire!' WHERE `id`=11757; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Western Plaguelands bonfire!' WHERE `id`=11756; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Hinterlands bonfire!' WHERE `id`=11755; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Terokkar Forest bonfire!' WHERE `id`=11754; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Teldrassil bonfire!' WHERE `id`=11753; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Shadowmoon Valley bonfire!' WHERE `id`=11752; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Redridge Mountains bonfire!' WHERE `id`=11751; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Nagrand bonfire!' WHERE `id`=11750; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Loch Modan bonfire!' WHERE `id`=11749; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Hillsbrad Foothills Bonfire!' WHERE `id`=11748; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Hellfire Peninsula bonfire!' WHERE `id`=11747; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Feralas bonfire!' WHERE `id`=11746; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Elywnn Forest bonfire!' WHERE `id`=11745; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Dustwallow Marsh bonfire!' WHERE `id`=11744; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Duskwood bonfire!' WHERE `id`=11743; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Dun Morogh bonfire!' WHERE `id`=11742; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Desolace bonfire!' WHERE `id`=11741; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Darkshore bonfire!' WHERE `id`=11740; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Burning Steppes bonfire!' WHERE `id`=11739; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Bloodmyst Isle bonfire!' WHERE `id`=11738; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Blasted Lands bonfire!' WHERE `id`=11737; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Blade''s Edge Mountains bonfire!' WHERE `id`=11736; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Azuremyst Isle bonfire!' WHERE `id`=11735; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Ashenvale bonfire!' WHERE `id`=11734; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Arathi Highlands bonfire!' WHERE `id`=11732; +UPDATE `quest_template` SET `OfferRewardText`='Desecrate the Alliance''s Westfall bonfire!' WHERE `id`=11581; diff --git a/sql/updates/world/2015_05_27_01_world.sql b/sql/updates/world/2015_05_27_01_world.sql new file mode 100644 index 00000000000..0c706304d60 --- /dev/null +++ b/sql/updates/world/2015_05_27_01_world.sql @@ -0,0 +1,43 @@ +UPDATE `creature_template` SET `gossip_menu_id`=5746, `npcflag`=1 WHERE `entry`=11444; +UPDATE `gameobject_template` SET `faction`=114 ,`flags`=34 where `entry`=177219; + +DELETE FROM `smart_scripts` WHERE `entryorguid`=14323 AND `id`>6; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(14323, 0, 7, 0, 11, 0, 100, 0, 0, 0, 0, 0, 53, 0, 14323, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 'Guard Slip\'kik - On Spawn - Start WP'), +(14323, 0, 8, 0, 38, 0, 100, 0, 1, 1, 0, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Guard Slip\'kik - On Data Set 1 1 - Set Phase 2'), +(14323, 0, 9, 10, 40, 2, 100, 0, 19, 14323, 0, 0, 55, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Guard Slip\'kik - On Reached WP19 (Phase 2) - Stop WP'), +(14323, 0, 10, 11, 61, 2, 100, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Guard Slip\'kik - On Reached WP19 (Phase 2) - Set Home Position'), +(14323, 0, 11, 12, 61, 2, 100, 0, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Guard Slip\'kik - On Reached WP19 (Phase 2) - Set Unit Flags'), +(14323, 0, 12, 0, 61, 2, 100, 0, 0, 0, 0, 0, 11, 22856, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Guard Slip\'kik - On Reached WP19 (Phase 2) - Cast Icelock'); + +DELETE FROM `waypoints` where `entry`=14323; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(14323, 1, 550.9423, 528.1198, -25.40169, 'Guard Slip kik'), +(14323, 2, 556.3312, 543.3906, -25.39986, 'Guard Slip kik'), +(14323, 3, 566.9871, 557.3884, -25.39788, 'Guard Slip kik'), +(14323, 4, 573.3212, 578.565, -25.40273, 'Guard Slip kik'), +(14323, 5, 532.9773, 586.9559, -25.40273, 'Guard Slip kik'), +(14323, 6, 515.2665, 599.5718, -25.40246, 'Guard Slip kik'), +(14323, 7, 494.9027, 606.5114, -25.40438, 'Guard Slip kik'), +(14323, 8, 480.8065, 598.4612, -25.40517, 'Guard Slip kik'), +(14323, 9, 477.7994, 587.293, -25.40587, 'Guard Slip kik'), +(14323, 10, 504.7797, 574.7651, -25.40086, 'Guard Slip kik'), +(14323, 11, 480.9391, 578.991, -25.40194, 'Guard Slip kik'), +(14323, 12, 477.7994, 587.293, -25.40587, 'Guard Slip kik'), +(14323, 13, 484.9685, 603.9871, -25.40483, 'Guard Slip kik'), +(14323, 14, 501.5791, 606.5353, -25.40406, 'Guard Slip kik'), +(14323, 15, 519.1758, 594.009, -25.403, 'Guard Slip kik'), +(14323, 16, 570.0894, 586.4958, -25.40273, 'Guard Slip kik'), +(14323, 17, 573.4045, 571.6358, -25.40239, 'Guard Slip kik'), +(14323, 18, 561.7436, 552.6977, -25.3998, 'Guard Slip kik'), +(14323, 19, 560.2891, 551.3965, -25.39884, 'Guard Slip kik'); + +UPDATE `gameobject_template` SET `AIName`= 'SmartGameObjectAI' WHERE `entry` =179485; + +DELETE FROM `smart_scripts` WHERE `entryorguid` =179485 AND `source_type`=1; + +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES + +(179485,1,0,1,20,0,100,0,1193,0,0,0,45,1,1,0,0,0,0,19,14323,0,0,0,0,0,0,'Broken Trap - On Quest Reward (A Broken Trap) - Set Data on Guard Slip kik'), +(179485,1,1,2,61,0,100,0,0,0,0,0,70,7200,0,0,0,0,0,1,0,0,0,0,0,0,0,'Broken Trap - On Quest Reward (A Broken Trap) - Despawn GO'), +(179485,1,2,0,61,0,100,0,0,0,0,0,50,179512,300,0,0,0,0,8,0,0,0,558.806, 550.065, -25.4008, 3.14159,'Broken Trap - On Quest Reward (A Broken Trap) - Summon Fixed Trap'); diff --git a/sql/updates/world/2015_05_28_00_world.sql b/sql/updates/world/2015_05_28_00_world.sql new file mode 100644 index 00000000000..e8bdb13ddb5 --- /dev/null +++ b/sql/updates/world/2015_05_28_00_world.sql @@ -0,0 +1,158 @@ +UPDATE `creature_template` SET `gossip_menu_id`=5746, `npcflag`=1 WHERE `entry`=11444; +UPDATE `gameobject_template` SET `faction`=114 ,`flags`=34 where `entry`=177219; + +DELETE FROM `smart_scripts` WHERE `entryorguid`=14323 AND `id`>6; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(14323, 0, 7, 0, 11, 0, 100, 0, 0, 0, 0, 0, 53, 0, 14323, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 'Guard Slip\'kik - On Spawn - Start WP'), +(14323, 0, 8, 0, 38, 0, 100, 0, 1, 1, 0, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Guard Slip\'kik - On Data Set 1 1 - Set Phase 2'), +(14323, 0, 9, 10, 40, 2, 100, 0, 19, 14323, 0, 0, 55, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Guard Slip\'kik - On Reached WP19 (Phase 2) - Stop WP'), +(14323, 0, 10, 11, 61, 2, 100, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Guard Slip\'kik - On Reached WP19 (Phase 2) - Set Home Position'), +(14323, 0, 11, 12, 61, 2, 100, 0, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Guard Slip\'kik - On Reached WP19 (Phase 2) - Set Unit Flags'), +(14323, 0, 12, 0, 61, 2, 100, 0, 0, 0, 0, 0, 11, 22856, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Guard Slip\'kik - On Reached WP19 (Phase 2) - Cast Icelock'), +(14323, 0, 13, 0, 62, 2, 100, 0, 5733, 0, 0, 0, 85, 22820, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Guard Slip\'kik - On Gossip Option Selected - Invoker Cast 22820'); + +DELETE FROM `waypoints` where `entry`=14323; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(14323, 1, 550.9423, 528.1198, -25.40169, 'Guard Slip kik'), +(14323, 2, 556.3312, 543.3906, -25.39986, 'Guard Slip kik'), +(14323, 3, 566.9871, 557.3884, -25.39788, 'Guard Slip kik'), +(14323, 4, 573.3212, 578.565, -25.40273, 'Guard Slip kik'), +(14323, 5, 532.9773, 586.9559, -25.40273, 'Guard Slip kik'), +(14323, 6, 515.2665, 599.5718, -25.40246, 'Guard Slip kik'), +(14323, 7, 494.9027, 606.5114, -25.40438, 'Guard Slip kik'), +(14323, 8, 480.8065, 598.4612, -25.40517, 'Guard Slip kik'), +(14323, 9, 477.7994, 587.293, -25.40587, 'Guard Slip kik'), +(14323, 10, 504.7797, 574.7651, -25.40086, 'Guard Slip kik'), +(14323, 11, 480.9391, 578.991, -25.40194, 'Guard Slip kik'), +(14323, 12, 477.7994, 587.293, -25.40587, 'Guard Slip kik'), +(14323, 13, 484.9685, 603.9871, -25.40483, 'Guard Slip kik'), +(14323, 14, 501.5791, 606.5353, -25.40406, 'Guard Slip kik'), +(14323, 15, 519.1758, 594.009, -25.403, 'Guard Slip kik'), +(14323, 16, 570.0894, 586.4958, -25.40273, 'Guard Slip kik'), +(14323, 17, 573.4045, 571.6358, -25.40239, 'Guard Slip kik'), +(14323, 18, 561.7436, 552.6977, -25.3998, 'Guard Slip kik'), +(14323, 19, 560.2891, 551.3965, -25.39884, 'Guard Slip kik'); + +UPDATE `gameobject_template` SET `AIName`= 'SmartGameObjectAI' WHERE `entry` =179485; + +DELETE FROM `smart_scripts` WHERE `entryorguid` =179485 AND `source_type`=1; + +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES + +(179485,1,0,1,20,0,100,0,1193,0,0,0,45,1,1,0,0,0,0,19,14323,0,0,0,0,0,0,'Broken Trap - On Quest Reward (A Broken Trap) - Set Data on Guard Slip kik'), +(179485,1,1,2,61,0,100,0,0,0,0,0,70,7200,0,0,0,0,0,1,0,0,0,0,0,0,0,'Broken Trap - On Quest Reward (A Broken Trap) - Despawn GO'), +(179485,1,2,0,61,0,100,0,0,0,0,0,50,179512,300,0,0,0,0,8,0,0,0,558.806, 550.065, -25.4008, 3.14159,'Broken Trap - On Quest Reward (A Broken Trap) - Summon Fixed Trap'); + + +DELETE FROM `creature_text` WHERE `entry` IN(14353,11501); +DELETE FROM `creature_text` WHERE `entry` IN(14325) AND `groupid`>2; + +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextID`, `comment`) VALUES +(14353, 0, 0, 'OH NOES! Da king is dead! Uh... hail to da new king! Yeah!', 14, 0, 100, 0, 0, 0, 9348, 'Mizzle the Crafty to 58960'), +(14353, 1, 0, 'Yar, he''s dead all right. That makes you da new king... well, all of you! Gordok is yours now, boss! You should talk to me so you can learn everything there is about being da king! I was... is his assistant! Yeah, that''s why I''m called da crafty one!', 12, 0, 100, 0, 0, 0, 9411, 'Mizzle the Crafty to 58960'), +(11501, 0, 0, 'You no challenge me, scrubs! I''m da king now, and I stay king FOREVER!!!', 12, 0, 100, 0, 0, 0, 9481, 'King Gordok to Player'), +(14325, 3, 0, 'Hey, who Fengus callin'' a gnoll lover?! Take da prisoners to da king; you smart to bring them with their weapons and show da king that they a threat. I''ll go see if Fengus talk smack when I give him da beatdown! HAR!', 12, 0, 100, 0, 0, 0, 9416, 'Captain Kromcrush'), +(14325, 4, 0, 'OK Fengus, where you at?! You come call me a gnoll lover while I give you da hammer upside da head!', 14, 0, 100, 0, 0, 0, 9424, 'Captain Kromcrush'); + +UPDATE `creature_template` SET `gossip_menu_id`=5739, `npcflag`=1 WHERE `entry`=14325; +UPDATE `creature_template` SET `gossip_menu_id`=5734, `npcflag`=1 WHERE `entry`=14321; + +DELETE FROM `creature` WHERE `guid`IN(84194,84195); +DELETE FROM `gameobject` WHERE `guid`=35834; + +DELETE FROM `gossip_menu` WHERE `entry` IN(5739,5738,5734); +DELETE FROM `gossip_menu` WHERE `entry` =5733 AND `text_id`=6906; +DELETE FROM `gossip_menu` WHERE `entry` =5735 AND `text_id`=6908; + +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES +(5733, 6906), +(5734, 6903), +(5734, 6904), +(5735, 6908), +(5739, 6913), +(5739, 6914), +(5738, 6915); + +DELETE FROM `gossip_menu_option` WHERE `menu_id` IN(5738,5739,5733,5734,5735); +INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `OptionBroadcastTextID`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`, `BoxBroadcastTextID`) VALUES +(5739, 0, 0, 'Um, I''m taking some prisoners we found outside before the king for punishment.', 9421, 1, 1, 5738, 0, 0, 0, '', 0), +(5738, 0, 0, 'Er... that''s how I found them. I wanted to show the king that they were a threat! Say Captain... I overheard Guard Fengus calling you a fat, useless gnoll lover!', 9423, 1, 1, 0, 0, 0, 0, '', 0), +(5733, 0, 0, 'Yeah, you''re a real brainiac. Just how smart do you think you are, Slip''kik?', 9398, 1, 1, 5733, 0, 0, 0, '', 0), +(5734, 0, 0, 'So, now that I''m the king... what have you got for me?!', 9451, 1, 1, 5734, 0, 0, 0, '', 0), +(5735, 0, 0, 'Call me "Boss". What have you got for me!', 9401, 1, 1, 5735, 0, 0, 0, '', 0); + +UPDATE `gameobject_template` SET `faction`=0, `flags`=34 WHERE `entry`=177217; + +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=14353; + +DELETE FROM `smart_scripts` WHERE `entryorguid`=11501 AND `id`>3; +DELETE FROM `smart_scripts` WHERE `entryorguid`=14324 AND `id`>27; +DELETE FROM `smart_scripts` WHERE `entryorguid`=14325 AND `id`>7; +DELETE FROM `smart_scripts` WHERE `entryorguid`=14326 AND `id`>6; +DELETE FROM `smart_scripts` WHERE `entryorguid`=14321 AND `id`>6; + +DELETE FROM `smart_scripts` WHERE `entryorguid`=14353; + +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(11501, 0, 4, 0, 4, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'King Gordok - On Agro - Say'), +(11501, 0, 5, 0, 6, 0, 100, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 14324, 0, 0, 0, 0, 0, 0, 'King Gordok - On Death - Set Data on Cho Rush the Observer'), +(14324, 0, 28, 0, 11, 0, 100, 0, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Cho\'Rush the Observer - On Spawn - Set Invincibility HP'), +(14324, 0, 29, 30, 38, 0, 100, 0, 1, 1, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Cho\'Rush the Observer - On Data Set - Set Unit Flags'), +(14324, 0, 30, 31, 61, 0, 100, 0, 0, 0, 0, 0, 12, 14353, 1, 720000, 0, 0, 0, 8, 0, 0, 0, 683.2966, 484.3845, 29.54451, 0.01745329, 'Cho\'Rush the Observer - On Data Set - Summon Mizzle the Crafty'), +(14324, 0, 31, 0, 61, 0, 100, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Cho\'Rush the Observer - On Data Set - Evade'), +(14325, 0, 8, 9, 62, 0, 100, 0, 5738, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Captain Kromcrush - On Gossip Option Selected - Close Gossip'), +(14325, 0, 9, 10, 61, 0, 100, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Captain Kromcrush - On Gossip Option Selected - Say Line 3'), +(14325, 0, 10, 11, 61, 0, 100, 0, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Captain Kromcrush - On Gossip Option Selected - Set Unit Flags'), +(14325, 0, 11, 0, 61, 0, 100, 0, 0, 0, 0, 0, 53, 1, 14325, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Captain Kromcrush - On Gossip Option Selected - Start WP'), +(14325, 0, 12, 0, 40, 0, 100, 0, 1, 14325, 0, 0, 1, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Captain Kromcrush - On Reached WP1 - Say Line 4'), +(14325, 0, 13, 0, 40, 0, 100, 0, 2, 14325, 0, 0, 81, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Captain Kromcrush - On Reached WP2 - Set NPC Flags'), +(14326, 0, 7, 0, 62, 0, 100, 0, 5735, 0, 0, 0, 85, 22818, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Guard Mol\'dar - On Gossip Option Selected - Invoker Cast 22818'), +(14321, 0, 7, 0, 62, 0, 100, 0, 5734, 0, 0, 0, 85, 22817, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Guard Fengus - On Gossip Option Selected - Invoker Cast 22818'), +(14353, 0, 0, 1, 54, 0, 100, 0, 0, 0, 0, 0, 53, 0, 14353, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Mizzle the Crafty - On Just Summoned - Start WP'), +(14353, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Mizzle the Crafty - On Just Summoned - Set NPC Flags'), +(14353, 0, 2, 0, 40, 0, 100, 0, 1, 14353, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Mizzle the Crafty - On Reached WP1 - Say Line 0'), +(14353, 0, 3, 4, 40, 0, 100, 0, 4, 14353, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Mizzle the Crafty - On Reached WP4 - Say Line 1'), +(14353, 0, 4, 0, 61, 0, 100, 0, 0, 0, 0, 0, 81, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Mizzle the Crafty - On Reached WP4 - Set NPC Flags'), +(14353, 0, 5, 0, 62, 0, 100, 0, 5708, 0, 0, 0, 11, 22799, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 'Mizzle the Crafty - On Gossip Option Selected - Cast King of the Gordok'), +(14353, 0, 6, 0, 62, 0, 100, 0, 5715, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Mizzle the Crafty - On Gossip Option Selected - Close Gossip'), +(14353, 0, 7, 0, 62, 0, 100, 0, 5740, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Mizzle the Crafty - On Gossip Option Selected - Close Gossip'), +(14353, 0, 8, 9, 62, 0, 100, 1, 5740, 0, 0, 0, 50, 179564, 7200, 0, 0, 0, 0, 8, 0, 0, 0, 808.3697, 482.1281, 37.3182, 3.194002, 'Mizzle the Crafty - On Gossip Option Selected - Summon Gordok Tribute (No Repeat)'), +(14353, 0, 9, 0, 61, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Mizzle the Crafty - On Gossip Option Selected - Set NPC Flags'); + +DELETE FROM `waypoints` WHERE `entry`IN(14353,14325); +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(14353, 1, 683.2966, 484.3845, 29.54451, 'Mizzle the Crafty'), +(14353, 2, 721.1365, 483.4832, 28.18014, 'Mizzle the Crafty'), +(14353, 3, 756.7082, 482.5323, 28.18394, 'Mizzle the Crafty'), +(14353, 4, 816.5302, 482.3017, 37.31819, 'Mizzle the Crafty'), +(14325, 1, 492.7128, 483.2709, 29.46278 , 'Captain Kromcrush'), +(14325, 2, 491.0189, 505.9179, 29.46236 , 'Captain Kromcrush'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`IN(14,15) AND `SourceGroup`IN(5708,5739,5733,5734,5735); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15, 5708, 0, 0, 0, 1, 0, 22799, 0, 0, 1, 0, 0, '', 'Mizzle the Crafty Show Gossip option 0 only if player does not have aura 22799'), +(15, 5708, 1, 0, 0, 1, 0, 22799, 0, 0, 0, 0, 0, '', 'Mizzle the Crafty Show Gossip option 1 only if player has aura 22799'), +(15, 5739, 0, 0, 0, 1, 0, 22799, 0, 0, 1, 0, 0, '', 'Captain Kromcrush Show Gossip option 0 only if player does not have aura 22799'), +(15, 5733, 0, 0, 0, 1, 0, 22799, 0, 0, 0, 0, 0, '', 'Guard Slip Kik Show Gossip option 0 only if player has aura 22799'), +(15, 5733, 0, 0, 0, 1, 0, 22820, 0, 0, 1, 0, 0, '', 'Guard Slip Kik Show Gossip option 0 only if player does not have aura 22820'), +(15, 5733, 0, 0, 0,27, 0, 63, 4, 0, 0, 0, 0, '', 'Guard Slip Kik Show Gossip option 0 only if player is level 63 or Lower'), +(15, 5735, 0, 0, 0, 1, 0, 22799, 0, 0, 0, 0, 0, '', 'Guard Mol Dar Show Gossip option 0 only if player has aura 22799'), +(15, 5735, 0, 0, 0, 1, 0, 22818, 0, 0, 1, 0, 0, '', 'Guard Mol Dar Show Gossip option 0 only if player does not have aura 22818'), +(15, 5735, 0, 0, 0,27, 0, 63, 4, 0, 0, 0, 0, '', 'Guard Mol Dar Show Gossip option 0 only if player is level 63 or Lower'), +(15, 5734, 0, 0, 0, 1, 0, 22799, 0, 0, 0, 0, 0, '', 'Guard Fengus Show Gossip option 0 only if player has aura 22799'), +(15, 5734, 0, 0, 0, 1, 0, 22817, 0, 0, 1, 0, 0, '', 'Guard Fengus Show Gossip option 0 only if player does not have aura 22817'), +(15, 5734, 0, 0, 0,27, 0, 63, 4, 0, 0, 0, 0, '', 'Guard Fengus Show Gossip option 0 only if player is level 63 or Lower'), +(14, 5739, 6913, 0, 0, 1, 0, 22799, 0, 0, 1, 0, 0, '', 'Captain Kromcrush Show text 6913 only if player does not have aura 22799'), +(14, 5739, 6914, 0, 0, 1, 0, 22799, 0, 0, 0, 0, 0, '', 'Captain Kromcrush Show text 6914 only if player has aura 22799'), +(14, 5733, 6905, 0, 0, 1, 0, 22820, 0, 0, 1, 0, 0, '', 'Guard Slip Kik Show text 6905 only if player does not have aura 22820'), +(14, 5733, 6905, 0, 0, 1, 0, 22799, 0, 0, 0, 0, 0, '', 'Guard Slip Kik Show text 6906 only if player has aura 22799'), +(14, 5733, 6906, 0, 0, 1, 0, 22820, 0, 0, 0, 0, 0, '', 'Guard Slip Kik Show text 6905 only if player does not have aura 22820'), +(14, 5733, 6906, 0, 0, 1, 0, 22799, 0, 0, 0, 0, 0, '', 'Guard Slip Kik Show text 6906 only if player has aura 22799'), +(14, 5734, 6903, 0, 0, 1, 0, 22817, 0, 0, 1, 0, 0, '', 'Guard Fengus Show text 6905 only if player does not have aura 22817'), +(14, 5734, 6903, 0, 0, 1, 0, 22799, 0, 0, 0, 0, 0, '', 'Guard Fengus Show text 6906 only if player has aura 22799'), +(14, 5734, 6904, 0, 0, 1, 0, 22817, 0, 0, 0, 0, 0, '', 'Guard Fengus Show text 6905 only if player does not have aura 22817'), +(14, 5734, 6904, 0, 0, 1, 0, 22799, 0, 0, 0, 0, 0, '', 'Guard Fengus Show text 6906 only if player has aura 22799'), +(14, 5735, 6907, 0, 0, 1, 0, 22818, 0, 0, 1, 0, 0, '', 'Guard Mol Dar Show text 6907 only if player does not have aura 22818'), +(14, 5735, 6907, 0, 0, 1, 0, 22799, 0, 0, 0, 0, 0, '', 'Guard Mol Dar Show text 6907 only if player has aura 22799'), +(14, 5735, 6908, 0, 0, 1, 0, 22818, 0, 0, 0, 0, 0, '', 'Guard Mol Dar Show text 6908 only if player does not have aura 22818'), +(14, 5735, 6908, 0, 0, 1, 0, 22799, 0, 0, 0, 0, 0, '', 'Guard Mol Dar Show text 6908 only if player has aura 22799'); diff --git a/sql/updates/world/2015_05_28_01_world.sql b/sql/updates/world/2015_05_28_01_world.sql new file mode 100644 index 00000000000..1199e250c47 --- /dev/null +++ b/sql/updates/world/2015_05_28_01_world.sql @@ -0,0 +1,50 @@ +-- UP Creature Emotes +-- Mindless Servant SAI +SET @ENTRY := 26536; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,0,3000,5000,12000,20000,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Mindless Servant - Out of Combat - Run Script"); + +-- Actionlist SAI +SET @ENTRY := 2653600; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,17,398,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Set Emote State 398"), +(@ENTRY,9,1,0,0,0,100,0,5000,5000,0,0,17,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Set Emote State 0"); + +-- Dragonflayer Deathseeker SAI +SET @ENTRY := 26550; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id`=3; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,3,0,1,0,100,0,1000,1000,2000,3000,10,1,11,6,92,274,273,1,0,0,0,0,0,0,0,"Dragonflayer Deathseeker - Out of Combat - Play Random Emote (1, 11, 6, 92, 274, 273)"); + +-- Dragonflayer Seer SAI +SET @ENTRY := 26554; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id`=3; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,3,0,1,0,100,0,1000,1000,2000,3000,10,1,11,6,92,274,273,1,0,0,0,0,0,0,0,"Dragonflayer Seer - Out of Combat - Play Random Emote (1, 11, 6, 92, 274, 273)"); + +-- Dragonflayer Fanatic SAI +SET @ENTRY := 26553; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id`=1; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,1,0,1,0,100,0,1000,1000,2000,3000,10,1,11,6,92,274,273,1,0,0,0,0,0,0,0,"Dragonflayer Fanatic - Out of Combat - Play Random Emote (1, 11, 6, 92, 274, 273)"); + +-- Ymirjar Necromancer SAI +SET @ENTRY := 28368; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id`=4; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,4,0,1,0,100,0,1000,1000,2000,3000,10,396,1,6,92,273,0,1,0,0,0,0,0,0,0,"Ymirjar Necromancer - Out of Combat - Play Random Emote (396,1,6,92,273)"); + +-- Ymirjar Berserker SAI +SET @ENTRY := 26696; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id`=3; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,3,0,1,0,100,0,1000,1000,2000,3000,10,396,1,6,92,273,0,1,0,0,0,0,0,0,0,"Ymirjar Berserker - Out of Combat - Play Random Emote (396,1,6,92,273)"); + +-- Ymirjar Dusk Shaman SAI +SET @ENTRY := 26694; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id`=3; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,3,0,1,0,100,0,1000,1000,2000,3000,10,396,1,6,92,273,0,1,0,0,0,0,0,0,0,"Ymirjar Dusk Shaman - Out of Combat - Play Random Emote (396,1,6,92,273)"); diff --git a/sql/updates/world/2015_05_28_02_world.sql b/sql/updates/world/2015_05_28_02_world.sql new file mode 100644 index 00000000000..1376088c3e1 --- /dev/null +++ b/sql/updates/world/2015_05_28_02_world.sql @@ -0,0 +1,115 @@ +-- Howling Fjord Initial +SET @NPC := 86760; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1704.93,`position_y`=-6282.997,`position_z`=9.110443 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1704.93,-6282.997,9.110443,0,0,0,0,100,0), +(@PATH,2,1704.68,-6282.497,9.110443,0,0,0,0,100,0), +(@PATH,3,1702.336,-6278.131,9.618036,0,0,0,0,100,0), +(@PATH,4,1706.836,-6275.631,10.36804,0,0,0,0,100,0), +(@PATH,5,1707.836,-6275.131,10.36804,0,0,0,0,100,0), +(@PATH,6,1709.219,-6274.038,10.71679,0,0,0,0,100,0), +(@PATH,7,1708.469,-6275.288,10.46679,0,0,0,0,100,0), +(@PATH,8,1707.719,-6276.788,10.21679,0,0,0,0,100,0), +(@PATH,9,1706.646,-6278.834,9.859894,0,0,0,0,100,0), +(@PATH,10,1707.896,-6280.584,9.859894,0,0,0,0,100,0), +(@PATH,11,1708.069,-6280.779,10.15218,0,0,0,0,100,0), +(@PATH,12,1708.569,-6281.529,10.15218,0,0,0,0,100,0), +(@PATH,13,1711.569,-6281.779,10.40218,0,0,0,0,100,0), +(@PATH,14,1713.069,-6281.779,10.40218,0,0,0,0,100,0), +(@PATH,15,1713.006,-6282.089,10.39413,0,0,0,0,100,0), +(@PATH,16,1714.506,-6282.339,10.64413,0,0,0,0,100,0), +(@PATH,17,1713.006,-6283.339,10.39413,0,0,0,0,100,0), +(@PATH,18,1708.032,-6286.899,9.245476,0,0,0,0,100,0), +(@PATH,19,1705.282,-6283.399,9.245476,0,0,0,0,100,0), +(@PATH,20,1704.981,-6283.126,9.115644,0,0,0,0,100,0); + +SET @NPC := 118716; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1522.899,`position_y`=-6314.966,`position_z`=6.290161 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1522.899,-6314.966,6.290161,0,0,0,0,100,0), +(@PATH,2,1524.649,-6315.216,6.040161,0,0,0,0,100,0), +(@PATH,3,1525.149,-6314.216,6.040161,0,0,0,0,100,0), +(@PATH,4,1528.399,-6312.216,6.040161,0,0,0,0,100,0), +(@PATH,5,1529.399,-6311.216,6.040161,0,0,0,0,100,0), +(@PATH,6,1531.399,-6311.216,6.040161,0,0,0,0,100,0), +(@PATH,7,1533.649,-6311.216,6.040161,0,0,0,0,100,0), +(@PATH,8,1537.399,-6309.466,6.290161,0,0,0,0,100,0), +(@PATH,9,1539.649,-6308.966,6.290161,0,0,0,0,100,0), +(@PATH,10,1541.649,-6307.216,6.290161,0,0,0,0,100,0), +(@PATH,11,1545.899,-6306.216,6.290161,0,0,0,0,100,0), +(@PATH,12,1549.899,-6306.216,6.540161,0,0,0,0,100,0), +(@PATH,13,1550.147,-6306.042,6.77546,0,0,0,0,100,0), +(@PATH,14,1551.647,-6305.042,6.77546,0,0,0,0,100,0), +(@PATH,15,1555.897,-6299.292,7.27546,0,0,0,0,100,0), +(@PATH,16,1560.647,-6293.042,7.77546,0,0,0,0,100,0), +(@PATH,17,1571.466,-6279.009,7.792542,0,0,0,0,100,0), +(@PATH,18,1569.216,-6277.009,7.542542,0,0,0,0,100,0), +(@PATH,19,1566.466,-6274.759,6.792542,0,0,0,0,100,0), +(@PATH,20,1563.323,-6271.979,6.153687,0,0,0,0,100,0), +(@PATH,21,1561.034,-6260.083,5.902053,0,0,0,0,100,0), +(@PATH,22,1550.784,-6252.083,6.652053,0,0,0,0,100,0), +(@PATH,23,1544.534,-6247.333,7.152053,0,0,0,0,100,0), +(@PATH,24,1535.034,-6240.083,6.652053,0,0,0,0,100,0), +(@PATH,25,1537.18,-6241.825,6.897589,0,0,0,0,100,0), +(@PATH,26,1553.43,-6254.325,6.147589,0,0,0,0,100,0), +(@PATH,27,1561.12,-6260.274,6.114735,0,0,0,0,100,0), +(@PATH,28,1563.273,-6272.198,6.296275,0,0,0,0,100,0), +(@PATH,29,1566.523,-6274.448,6.796275,0,0,0,0,100,0), +(@PATH,30,1568.523,-6276.448,7.296275,0,0,0,0,100,0), +(@PATH,31,1570.773,-6278.448,7.796275,0,0,0,0,100,0), +(@PATH,32,1570.818,-6278.787,7.928142,0,0,0,0,100,0), +(@PATH,33,1571.568,-6279.287,7.928142,0,0,0,0,100,0), +(@PATH,34,1559.318,-6294.787,7.428142,0,0,0,0,100,0), +(@PATH,35,1555.068,-6300.287,6.928142,0,0,0,0,100,0), +(@PATH,36,1545.231,-6307.126,6.122152,0,0,0,0,100,0), +(@PATH,37,1541.731,-6308.876,6.122152,0,0,0,0,100,0), +(@PATH,38,1541.231,-6309.376,6.122152,0,0,0,0,100,0), +(@PATH,39,1538.231,-6312.876,6.122152,0,0,0,0,100,0), +(@PATH,40,1535.731,-6313.376,5.872152,0,0,0,0,100,0), +(@PATH,41,1524.618,-6315.203,6.112886,0,0,0,0,100,0), +(@PATH,42,1520.618,-6314.953,6.612886,0,0,0,0,100,0), +(@PATH,43,1515.618,-6314.453,7.112886,0,0,0,0,100,0), +(@PATH,44,1519.643,-6314.803,6.643581,0,0,0,0,100,0), +(@PATH,45,1522.643,-6315.053,6.393581,0,0,0,0,100,0); + +SET @NPC := 108487; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1456.961,`position_y`=-6305.669,`position_z`=7.115809 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1456.961,-6305.669,7.115809,0,0,0,0,100,0), +(@PATH,2,1446.711,-6314.919,6.365809,0,0,0,0,100,0), +(@PATH,3,1433.461,-6326.669,6.115809,0,0,0,0,100,0), +(@PATH,4,1433.146,-6326.916,5.966949,0,0,0,0,100,0), +(@PATH,5,1432.646,-6327.416,5.966949,0,0,0,0,100,0), +(@PATH,6,1417.412,-6345.985,6.104269,3.805819,0,0,0,100,0), +(@PATH,7,1424.511,-6337.054,5.964785,0,0,0,0,100,0), +(@PATH,8,1434.761,-6324.054,6.214785,0,0,0,0,100,0), +(@PATH,9,1434.957,-6323.92,6.428545,0,0,0,0,100,0), +(@PATH,10,1437.457,-6320.92,6.678545,0,0,0,0,100,0), +(@PATH,11,1454.207,-6308.92,6.928545,0,0,0,0,100,0), +(@PATH,12,1466.842,-6300.059,7.55334,0,0,0,0,100,0), +(@PATH,13,1468.342,-6292.059,6.80334,0,0,0,0,100,0), +(@PATH,14,1469.842,-6283.559,6.30334,0,0,0,0,100,0), +(@PATH,15,1471.342,-6276.559,5.80334,0,0,0,0,100,0), +(@PATH,16,1383.172,-6396.671,3.304667,0,0,0,0,100,0), +(@PATH,17,1388.672,-6390.171,4.054667,0,0,0,0,100,0), +(@PATH,18,1473.499,-6265.724,5.148712,0,0,0,0,100,0), +(@PATH,19,1426.144,-6369.358,5.581006,0,0,0,0,100,0), +(@PATH,20,1422.894,-6375.108,5.331006,0,0,0,0,100,0), +(@PATH,21,1422.838,-6368.968,5.859815,0,0,0,0,100,0), +(@PATH,22,1426.253,-6368.985,5.704663,0,0,0,0,100,0), +(@PATH,23,1461.052,-6258.63,5.217323,2.633967,0,0,0,100,0), +(@PATH,24,1460.06,-6270.612,6.09376,0,0,0,0,100,0), +(@PATH,25,1459.31,-6278.612,6.59376,0,0,0,0,100,0), +(@PATH,26,1457.81,-6300.112,7.09376,0,0,0,0,100,0); diff --git a/sql/updates/world/2015_05_29_00_world.sql b/sql/updates/world/2015_05_29_00_world.sql new file mode 100644 index 00000000000..0f3c69c0b4d --- /dev/null +++ b/sql/updates/world/2015_05_29_00_world.sql @@ -0,0 +1,3 @@ +-- +DELETE FROM `skill_fishing_base_level` WHERE `entry`=4656; +INSERT INTO `skill_fishing_base_level` (`entry`, `skill`) VALUES (4656, 430); diff --git a/sql/updates/world/2015_05_29_01_world.sql b/sql/updates/world/2015_05_29_01_world.sql new file mode 100644 index 00000000000..ce03049c9a9 --- /dev/null +++ b/sql/updates/world/2015_05_29_01_world.sql @@ -0,0 +1,7 @@ +-- [Quest] No Mere Dream +UPDATE `smart_scripts` SET `event_phase_mask`=0 WHERE `entryorguid`=22834 AND `source_type`=0 AND `id`=1 AND `link`=2; +UPDATE `smart_scripts` SET `event_phase_mask`=0 WHERE `entryorguid`=22834 AND `source_type`=0 AND `id`=2 AND `link`=0; +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry` IN (22834) AND `SourceId`=0; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22,2,22834,0,0,1,0,39601,1,0,1,0,'','Event SAI triggred only if the player don''t have the aura 39601'); +UPDATE `creature_template` SET `flags_extra`=0 WHERE `entry`=22916; diff --git a/sql/updates/world/2015_05_30_00_world.sql b/sql/updates/world/2015_05_30_00_world.sql new file mode 100644 index 00000000000..df213688ba7 --- /dev/null +++ b/sql/updates/world/2015_05_30_00_world.sql @@ -0,0 +1,31 @@ +-- +-- Niby the Almighty SAI +SET @ENTRY := 14469; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,20,0,100,0,7603,0,0,0,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Niby the Almighty - On Quest 'Kroshius' Infernal Core' Finished - Run Script"); + +-- Actionlist SAI +SET @ENTRY := 1446900; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,59,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Niby the Almighty - On Script - Set Run Off"), +(@ENTRY,9,1,0,0,0,100,0,0,0,0,0,69,0,0,0,0,0,0,8,0,0,0,5407.19,-753,350.82,0,"Niby the Almighty - On Script - Move To Position"), +(@ENTRY,9,2,0,0,0,100,0,6200,6200,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,1.2,"Niby the Almighty - On Script - Set Orientation 1,2"), +(@ENTRY,9,3,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Niby the Almighty - On Script - Say Line 0"), +(@ENTRY,9,4,0,0,0,100,0,2000,2000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Niby the Almighty - On Script - Say Line 1"), +(@ENTRY,9,5,0,0,0,100,0,0,0,0,0,11,23056,0,0,0,0,0,1,0,0,0,0,0,0,0,"Niby the Almighty - On Script - Cast 'Call Infernal Destroyer'"), +(@ENTRY,9,6,0,0,0,100,0,2500,2500,0,0,1,0,0,0,0,0,0,19,14470,100,0,0,0,0,0,"Niby the Almighty - On Script - Say Line 0"), +(@ENTRY,9,7,0,0,0,100,0,0,0,0,0,1,1,0,0,0,0,0,19,14470,100,0,0,0,0,0,"Niby the Almighty - On Script - Say Line 1"), +(@ENTRY,9,8,0,0,0,100,0,2500,2500,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Niby the Almighty - On Script - Say Line 2"), +(@ENTRY,9,9,0,0,0,100,0,40000,40000,0,0,69,0,0,0,0,0,0,8,0,0,0,5412.48,-738.44,344.639,1.79643,"Niby the Almighty - On Script - Move To Position"), +(@ENTRY,9,10,0,0,0,100,0,5000,5000,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,1.653,"Niby the Almighty - On Script - Set Orientation 1,653"); + +DELETE FROM `creature_text` WHERE `entry` IN (14469, 14470); +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `comment`) VALUES +(14469, 0, 0, 'Stand back! Stand clear! The infernal will need to be given a wide berth!', 12, 0, 100, 0, 0, 0, 9634, 'Niby the Almighty'), +(14469, 1, 0, 'BOW DOWN TO THE ALMIGHTY! BOW DOWN BEFORE MY INFERNAL DESTRO... chicken?', 12, 0, 100, 0, 0, 0, 9635, 'Niby the Almighty'), +(14469, 2, 0, 'Silence, servant! Vengeance will be mine! Death to Stormwind! Death by chicken!', 12, 0, 100, 0, 0, 0, 9638, 'Niby the Almighty'), +(14470, 0, 0, '%s rolls on the floor laughing.', 16, 0, 100, 0, 0, 0, 9636, 'Impsy'), +(14470, 1, 0, 'Niby, you''re an idiot.', 12, 0, 100, 0, 0, 0, 9637, 'Impsy'); diff --git a/sql/updates/world/2015_05_30_01_world.sql b/sql/updates/world/2015_05_30_01_world.sql new file mode 100644 index 00000000000..5a3a2208d7d --- /dev/null +++ b/sql/updates/world/2015_05_30_01_world.sql @@ -0,0 +1,3670 @@ +-- +DELETE FROM `gossip_menu` WHERE `entry` IN (140, 181, 202, 542, 543, 1141, 1401, 1626, 1667, 1883, 1964, 2201, 2362, 2464, 2561, 2581, 2741, 2743, 2749, 2784, 2802, 2821, 2822, 2823, 2824, 2825, 2826, 2827, 2828, 2829, 2830, 2832, 2833, 2834, 2835, 2836, 2837, 2838, 2839, 2840, 2841, 2842, 2843, 2844, 2845, 2847, 2848, 2851, 2902, 2903, 2904, 2905, 2906, 2907, 2908, 2945, 2946, 2947, 2948, 2949, 2950, 2951, 2961, 2985, 3001, 3041, 3043, 3050, 3063, 3064, 3065, 3066, 3072, 3083, 3129, 3142, 3183, 3223, 3224, 3225, 3226, 3227, 3362, 3363, 3364, 3365, 3366, 3367, 3368, 3369, 3370, 3371, 3372, 3381, 3382, 3601, 3604, 3647, 3648, 3649, 3681, 3682, 3683, 3726, 3862, 3863, 3881, 3883, 3884, 3885, 3901, 3962, 4025, 4041, 4046, 4066, 4084, 4110, 4111, 4117, 4128, 4129, 4134, 4136, 4138, 4156, 4162, 4164, 4165, 4169, 4170, 4171, 4184, 4186, 4187, 4208, 4211, 4241, 4242, 4244, 4263, 4351, 4356, 4401, 4441, 4442, 4553, 4555, 4560, 4601, 4748, 4763, 4842, 4861, 4906, 4944, 4981, 5062, 5065, 5109, 5146, 5147, 5148, 5161, 5181, 5222, 5303, 5304, 5321, 5346, 5347, 5349, 5361, 5381, 5441, 5462, 5481, 5482, 5521, 5541, 5542, 5602, 5626, 5630, 5667, 5709, 5721, 5736, 5742, 5744, 5845, 5868, 5869, 5968, 6021, 6029, 6030, 6037, 6041, 6083, 6085, 6101, 6121, 6208, 6209, 6228, 6261, 6262, 6282, 6323, 6324, 6361, 6362, 6443, 6445, 6459, 6460, 6462, 6463, 6464, 6466, 6467, 6468, 6469, 6476, 6484, 6490, 6508, 6523, 6524, 6527, 6533, 6534, 6539, 6544, 6545, 6546, 6547, 6548, 6549, 6550, 6551, 6552, 6553, 6554, 6555, 6556, 6557, 6558, 6566, 6568, 6596, 6600, 6623, 6644, 6645, 6655, 6687, 6761, 6763, 6769, 6792, 6793, 6794, 6795, 6797, 6798, 6799, 6802, 6814, 6816, 6817, 6818, 6819, 6820, 6821, 6822, 6823, 6824, 6825, 6826, 6827, 6828, 6829, 6830, 6831, 6832, 6833, 6834, 6835, 6841, 6842, 6843, 6848, 6849, 6852, 6853, 6854, 6855, 6856, 6858, 6861, 6864, 6865, 6866, 6867, 6868, 6872, 6873, 6874, 6876, 6877, 6878, 6879, 6880, 6885, 6887, 6888, 6889, 6890, 6895, 6896, 6903, 6905, 6906, 6911, 6912, 6914, 6916, 6917, 6919, 6921, 6923, 6924, 6925, 6926, 6929, 6930, 6931, 6932, 6933, 6934, 6936, 6937, 6938, 6943, 6953, 6981, 7047, 7048, 7053, 7054, 7083, 7091, 7097, 7140, 7143, 7147, 7183, 7196, 7198, 7215, 7220, 7234, 7237, 7239, 7290, 7304, 7309, 7328, 7337, 7351, 7358, 7362, 7367, 7381, 7390, 7392, 7408, 7410, 7415, 7416, 7417, 7421, 7422, 7431, 7432, 7433, 7435, 7441, 7442, 7443, 7453, 7454, 7456, 7457, 7466, 7487, 7490, 7491, 7492, 7493, 7501, 7512, 7547, 7552, 7570, 7581, 7582, 7583, 7584, 7585, 7586, 7595, 7613, 7619, 7621, 7622, 7623, 7627, 7628, 7629, 7669, 7670, 7671, 7672, 7673, 7674, 7683, 7684, 7686, 7687, 7688, 7689, 7697, 7701, 7703, 7730, 7731, 7732, 7736, 7737, 7739, 7741, 7744, 7746, 7748, 7749, 7750, 7751, 7754, 7771, 7809, 7811, 7812, 7820, 7821, 7838, 7853, 7869, 7883, 7891, 7936, 7943, 7944, 7948, 7956, 7958, 7962, 8019, 8020, 8022, 8027, 8028, 8029, 8031, 8034, 8035, 8037, 8047, 8073, 8075, 8076, 8077, 8078, 8094, 8100, 8112, 8124, 8127, 8165, 8167, 8168, 8169, 8171, 8172, 8174, 8177, 8178, 8214, 8225, 8232, 8233, 8234, 8235, 8236, 8238, 8243, 8250, 8253, 8256, 8257, 8258, 8260, 8261, 8262, 8263, 8264, 8265, 8266, 8267, 8271, 8282, 8284, 8311, 8326, 8337, 8356, 8371, 8373, 8383, 8386, 8407, 8434, 8441, 8446, 8449, 8453, 8460, 8500, 8522, 8526, 8535, 8536, 8555, 8556, 8559, 8603, 8604, 8605, 8606, 8607, 8608, 8609, 8610, 8614, 8638, 8654, 8659, 8686, 8692, 8706, 8707, 8708, 8709, 8749, 8751, 8760, 8786, 8799, 8823, 8863, 8874, 8881, 8899, 8901, 8902, 8907, 8913, 8927, 8928, 9003, 9004, 9013, 9030, 9035, 9051, 9055, 9084, 9085, 9088, 9111, 9112, 9131, 9132, 9190, 9211, 9213, 9251, 9254, 9255, 9256, 9257, 9258, 9264, 9265, 9266, 9267, 9268, 9269, 9271, 9272, 9273, 9274, 9275, 9276, 9281, 9282, 9335, 9419, 9482, 9517, 9531, 9539, 9588, 9616, 9640, 9667, 9716, 9725, 9775, 9778, 9800, 9827, 9828, 9829, 9830, 9854, 9883, 9915, 9930, 9934, 9939, 9942, 9955, 9977, 9978, 9981, 10019, 10123, 10193, 10212, 10213, 10250, 10255, 10257, 10268, 10273, 10274, 10276, 10311, 10312, 10313, 10331, 10358, 10363, 10372, 10378, 10379, 10380, 10381, 10382, 10434, 10437, 10438, 10482, 10500, 10524, 10526, 10567, 10640, 10641, 10642, 10643, 10644, 10645, 10646, 10647, 10649, 10660, 10709, 10710, 10771, 10832, 10845, 10847, 10893, 10898, 10900, 10925, 10932, 10934, 10956, 10968, 10971, 10992, 10998, 10999, 11000, 11001, 11004, 11006, 11007, 11064, 11145, 11152, 11159, 11191, 11192, 11194, 11206, 11207, 11208, 11241, 11284, 11361, 11384, 11386, 11387, 11388, 11389, 11393, 11473, 11487, 11499, 11573, 11611, 11618, 11651, 11673, 11674, 11675, 11684, 11712, 11714, 11727, 11738, 11743, 11744, 11778, 11788, 11827, 11874, 11876, 11881, 11885, 11886, 11909, 12039, 12056, 12093, 12125, 12128, 12129, 12131, 12202, 12209, 12237, 12271, 12293, 12449, 12454, 12460, 12502, 12517, 12598, 12600, 12636, 12662, 12663, 12707, 12726, 12741, 12846, 31111, 34435, 37523, 37552); +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES +(140,68), +(181,678), +(202,699), +(542,1059), +(543,1060), +(1141,1757), +(1401,14690), +(1626,2280), +(1667,2317), +(1883,2534), +(1964,2368), +(2201,2835), +(2362,3048), +(2464,3156), +(2561,3233), +(2581,3273), +(2741,3395), +(2743,3398), +(2743,3399), +(2749,3418), +(2784,3488), +(2802,3496), +(2821,3513), +(2822,3514), +(2823,3515), +(2824,3516), +(2825,3517), +(2826,3518), +(2827,3519), +(2828,3520), +(2829,3521), +(2830,3524), +(2832,3526), +(2833,3527), +(2834,3528), +(2835,3529), +(2836,3530), +(2837,3531), +(2838,3532), +(2839,3533), +(2840,3534), +(2841,3535), +(2842,3536), +(2843,3537), +(2844,3538), +(2845,3539), +(2847,3541), +(2848,3542), +(2851,3545), +(2902,3574), +(2903,3575), +(2904,3576), +(2905,3577), +(2906,3578), +(2907,3579), +(2908,3580), +(2945,3665), +(2946,3664), +(2947,3663), +(2948,3662), +(2949,3661), +(2950,3660), +(2951,3659), +(2961,3668), +(2985,3677), +(3001,3693), +(3001,3694), +(3041,3753), +(3043,3755), +(3043,3756), +(3043,3757), +(3050,3273), +(3063,3797), +(3064,3800), +(3065,3799), +(3066,3798), +(3072,3805), +(3083,3815), +(3129,3865), +(3129,4113), +(3142,3874), +(3183,3939), +(3183,4040), +(3223,3978), +(3223,3979), +(3224,3980), +(3225,3981), +(3226,3982), +(3227,3983), +(3362,4118), +(3363,4119), +(3364,4129), +(3365,4128), +(3366,4127), +(3367,4126), +(3368,4125), +(3369,4124), +(3370,4123), +(3371,4122), +(3372,4130), +(3381,4133), +(3382,4134), +(3601,4353), +(3604,4356), +(3647,4445), +(3648,4446), +(3649,4447), +(3681,4495), +(3682,4494), +(3683,4493), +(3726,4521), +(3862,4714), +(3863,4715), +(3881,4721), +(3883,4733), +(3884,4734), +(3885,4735), +(3901,4753), +(3962,4814), +(4025,4891), +(4041,4913), +(4041,4914), +(4041,4915), +(4046,4936), +(4066,4959), +(4084,4977), +(4110,5013), +(4110,5014), +(4111,5022), +(4111,5023), +(4117,5051), +(4117,5059), +(4128,5079), +(4129,5084), +(4134,5108), +(4136,5115), +(4138,5121), +(4156,5190), +(4162,5212), +(4164,5218), +(4165,5223), +(4169,5243), +(4170,5248), +(4171,5253), +(4184,5282), +(4186,5288), +(4187,5291), +(4208,5345), +(4211,5360), +(4241,5397), +(4242,5398), +(4244,5407), +(4263,5419), +(4263,5421), +(4351,5551), +(4356,5575), +(4401,5613), +(4441,5653), +(4442,5654), +(4553,560), +(4553,561), +(4555,560), +(4555,561), +(4560,4436), +(4560,4437), +(4601,5713), +(4748,5800), +(4748,7016), +(4748,7017), +(4763,5819), +(4763,5820), +(4842,5335), +(4861,5933), +(4861,5934), +(4861,5935), +(4906,5979), +(4944,1793), +(4981,6033), +(5062,6104), +(5065,6108), +(5065,6109), +(5065,6158), +(5065,8541), +(5065,8542), +(5109,6161), +(5146,6178), +(5147,6179), +(5148,6180), +(5161,6193), +(5181,6194), +(5222,6235), +(5303,6335), +(5304,6336), +(5321,6353), +(5346,6381), +(5347,6380), +(5349,6354), +(5361,6393), +(5381,6413), +(5381,6573), +(5441,6475), +(5462,6514), +(5481,6533), +(5482,6534), +(5521,6574), +(5541,6594), +(5542,6595), +(5602,6695), +(5626,6733), +(5630,6741), +(5667,6795), +(5709,6877), +(5709,6878), +(5709,6879), +(5709,6880), +(5709,6881), +(5721,6894), +(5736,6909), +(5742,6918), +(5744,6920), +(5845,7001), +(5868,7041), +(5869,7042), +(5968,7123), +(6021,7156), +(6029,68), +(6030,68), +(6037,7190), +(6041,7196), +(6083,7237), +(6085,7239), +(6101,7256), +(6121,68), +(6208,7361), +(6209,7362), +(6228,7402), +(6261,7434), +(6262,7435), +(6282,7481), +(6282,7599), +(6323,7516), +(6324,7517), +(6361,7554), +(6362,7555), +(6443,7635), +(6443,7636), +(6445,7638), +(6445,7640), +(6459,7599), +(6459,7652), +(6460,7599), +(6460,7653), +(6462,7599), +(6462,7655), +(6463,7599), +(6463,7656), +(6464,7616), +(6464,7657), +(6466,7616), +(6466,7659), +(6467,7616), +(6467,7660), +(6468,7616), +(6468,7661), +(6469,7616), +(6469,7662), +(6476,7677), +(6484,7683), +(6484,7684), +(6484,10570), +(6490,7688), +(6490,7689), +(6490,10572), +(6508,7704), +(6508,7705), +(6508,10566), +(6523,7725), +(6524,7726), +(6527,7729), +(6533,7735), +(6534,7736), +(6539,7742), +(6544,7753), +(6545,7761), +(6546,7760), +(6547,7759), +(6548,7758), +(6549,7757), +(6550,7756), +(6551,7755), +(6552,7768), +(6553,7767), +(6554,7766), +(6555,7765), +(6556,7764), +(6557,7763), +(6558,7762), +(6566,7781), +(6568,7783), +(6596,7816), +(6600,68), +(6623,7874), +(6644,7899), +(6644,8702), +(6645,7900), +(6655,7911), +(6687,8059), +(6761,8077), +(6763,8076), +(6769,6194), +(6792,8109), +(6793,8111), +(6794,8112), +(6795,8113), +(6797,8109), +(6798,8109), +(6799,8120), +(6799,8121), +(6799,8122), +(6802,8125), +(6814,7935), +(6816,7933), +(6817,7956), +(6818,7935), +(6819,7933), +(6820,7935), +(6821,7933), +(6822,7956), +(6823,7933), +(6824,7933), +(6825,7935), +(6826,7956), +(6827,7956), +(6828,7935), +(6829,7935), +(6830,7956), +(6831,7935), +(6832,7933), +(6833,7933), +(6834,7933), +(6835,7956), +(6841,7933), +(6842,8148), +(6843,8149), +(6848,7933), +(6849,7956), +(6852,7956), +(6853,7956), +(6854,8157), +(6855,7933), +(6856,7933), +(6858,8162), +(6861,7933), +(6864,7935), +(6865,8168), +(6866,7933), +(6867,8169), +(6868,8170), +(6872,7933), +(6873,8174), +(6874,7956), +(6876,8176), +(6877,8177), +(6878,8178), +(6879,8179), +(6880,7956), +(6885,7935), +(6887,7956), +(6888,7956), +(6889,7956), +(6890,7935), +(6895,8188), +(6896,8189), +(6903,7956), +(6905,7935), +(6906,7933), +(6911,7935), +(6912,7935), +(6914,7935), +(6916,7933), +(6917,8202), +(6919,7956), +(6921,7956), +(6923,8212), +(6924,8213), +(6925,8214), +(6926,8215), +(6929,8219), +(6930,8220), +(6931,8218), +(6932,8221), +(6933,8222), +(6934,8223), +(6936,8225), +(6937,8226), +(6938,8227), +(6943,8234), +(6953,8239), +(6981,8243), +(6981,8282), +(6981,8285), +(7047,8305), +(7048,7883), +(7048,8304), +(7048,8305), +(7053,8312), +(7054,8313), +(7083,8335), +(7091,8344), +(7097,8351), +(7140,8402), +(7143,8406), +(7147,8411), +(7183,8619), +(7196,8477), +(7198,8479), +(7215,8506), +(7220,8515), +(7234,8534), +(7237,8537), +(7239,8539), +(7290,8634), +(7304,8664), +(7304,8666), +(7309,8676), +(7328,8712), +(7337,8724), +(7351,8771), +(7358,8789), +(7362,8794), +(7367,8802), +(7381,8836), +(7390,8851), +(7392,8853), +(7408,8883), +(7410,8939), +(7415,8954), +(7416,8956), +(7417,9014), +(7417,9015), +(7421,8970), +(7422,8971), +(7431,8983), +(7431,8993), +(7432,8983), +(7432,8994), +(7433,8983), +(7433,8996), +(7435,9003), +(7435,9004), +(7441,9009), +(7442,9010), +(7443,9011), +(7453,9028), +(7454,9030), +(7456,9031), +(7457,9032), +(7466,9045), +(7487,9073), +(7490,9082), +(7491,9081), +(7492,9080), +(7493,9079), +(7501,9097), +(7512,9109), +(7547,9163), +(7552,9168), +(7552,9387), +(7570,9197), +(7581,9225), +(7582,9226), +(7583,9227), +(7584,9228), +(7585,9229), +(7586,9231), +(7595,9246), +(7613,9264), +(7619,9271), +(7621,9275), +(7622,9276), +(7623,9277), +(7627,9289), +(7628,9290), +(7629,9292), +(7669,9352), +(7670,9356), +(7671,9355), +(7672,9354), +(7673,9353), +(7674,9357), +(7683,9370), +(7684,9373), +(7686,9375), +(7687,9376), +(7688,9377), +(7689,9381), +(7697,9392), +(7701,9397), +(7703,9401), +(7730,9441), +(7731,9443), +(7732,9442), +(7736,9458), +(7737,9459), +(7739,9472), +(7741,9477), +(7744,9482), +(7746,9485), +(7748,9487), +(7749,9488), +(7750,9489), +(7751,9490), +(7754,9495), +(7771,9517), +(7809,9546), +(7811,9563), +(7812,9564), +(7820,9546), +(7821,9568), +(7838,9595), +(7853,9614), +(7869,938), +(7883,9646), +(7891,9654), +(7891,9659), +(7936,9729), +(7943,9738), +(7944,9739), +(7948,9051), +(7956,9774), +(7956,15532), +(7958,9777), +(7962,68), +(8019,9886), +(8020,9894), +(8022,9897), +(8027,9904), +(8028,9905), +(8029,9914), +(8031,9917), +(8031,9918), +(8034,9921), +(8035,9921), +(8037,9923), +(8047,9936), +(8073,7642), +(8073,10278), +(8075,7699), +(8075,9981), +(8076,7599), +(8076,9982), +(8077,7599), +(8077,7705), +(8078,7616), +(8078,9984), +(8094,10009), +(8100,10717), +(8112,10042), +(8124,10062), +(8127,9971), +(8165,10107), +(8167,10113), +(8168,10114), +(8169,10115), +(8171,10119), +(8172,10118), +(8174,10122), +(8177,10125), +(8178,10126), +(8214,10209), +(8225,10222), +(8232,10234), +(8233,10236), +(8234,10237), +(8234,10324), +(8235,10245), +(8236,10246), +(8236,10247), +(8238,10250), +(8243,10258), +(8250,7616), +(8250,10269), +(8253,7616), +(8253,10272), +(8256,7599), +(8256,10277), +(8257,7642), +(8257,10278), +(8258,7599), +(8258,10279), +(8260,7683), +(8260,10282), +(8261,7599), +(8261,10283), +(8262,7699), +(8262,10284), +(8263,7693), +(8263,10285), +(8264,7599), +(8264,10286), +(8265,7642), +(8265,10287), +(8266,10288), +(8267,10290), +(8271,10300), +(8282,10321), +(8284,10323), +(8311,10375), +(8326,10391), +(8337,10402), +(8356,10427), +(8371,10446), +(8373,10448), +(8383,10460), +(8386,10467), +(8407,10509), +(8434,9546), +(8441,10546), +(8441,10884), +(8446,10553), +(8449,10556), +(8453,7693), +(8453,7694), +(8453,10560), +(8460,10568), +(8500,10625), +(8522,7026), +(8522,7028), +(8526,10662), +(8535,10677), +(8536,10679), +(8555,10680), +(8556,10719), +(8559,10721), +(8603,10781), +(8604,10782), +(8605,10783), +(8606,10784), +(8607,10785), +(8608,10786), +(8609,10787), +(8610,10788), +(8614,10791), +(8638,10835), +(8654,10866), +(8659,10887), +(8686,10934), +(8692,10936), +(8706,10955), +(8707,10955), +(8708,10955), +(8709,10955), +(8749,11078), +(8751,11083), +(8751,11085), +(8760,9546), +(8786,11234), +(8799,11279), +(8823,11365), +(8863,10649), +(8874,11578), +(8881,11596), +(8899,11689), +(8901,11694), +(8902,11696), +(8907,11743), +(8913,11799), +(8927,11907), +(8928,11910), +(9003,12163), +(9004,12162), +(9013,12178), +(9030,12208), +(9035,12213), +(9051,12239), +(9055,9051), +(9084,12282), +(9085,12283), +(9088,12287), +(9111,12319), +(9111,12320), +(9112,938), +(9131,12347), +(9132,12348), +(9190,12489), +(9211,68), +(9213,12524), +(9251,12524), +(9254,12524), +(9255,12524), +(9256,12524), +(9257,12524), +(9258,12524), +(9264,12524), +(9265,12524), +(9266,12524), +(9267,12524), +(9268,12524), +(9269,12524), +(9271,12524), +(9272,12524), +(9273,12524), +(9274,12524), +(9275,12524), +(9276,12524), +(9281,12587), +(9282,12588), +(9335,12634), +(9419,12665), +(9482,12750), +(9517,12822), +(9531,12845), +(9539,12852), +(9588,12941), +(9616,13002), +(9640,13047), +(9667,13096), +(9716,13293), +(9725,13308), +(9775,13452), +(9778,13457), +(9800,580), +(9827,13575), +(9828,13576), +(9829,13577), +(9829,13578), +(9830,13579), +(9854,13646), +(9883,13709), +(9915,13788), +(9930,13806), +(9934,13809), +(9939,7935), +(9942,68), +(9955,7933), +(9977,7933), +(9978,7935), +(9981,13832), +(9981,13833), +(10019,13890), +(10123,14053), +(10193,14137), +(10212,9902), +(10212,14192), +(10213,14194), +(10250,9690), +(10250,9692), +(10250,11962), +(10250,12134), +(10250,12376), +(10250,13044), +(10250,14233), +(10250,14544), +(10250,14641), +(10255,13794), +(10257,14239), +(10268,14259), +(10273,14266), +(10274,14267), +(10276,14272), +(10311,14313), +(10312,14315), +(10313,14316), +(10331,14344), +(10358,14372), +(10363,10650), +(10372,14392), +(10378,14406), +(10379,14402), +(10380,14403), +(10381,14404), +(10382,14405), +(10434,7778), +(10437,6961), +(10438,14474), +(10482,769), +(10500,7778), +(10524,14560), +(10526,14562), +(10567,14623), +(10567,14624), +(10567,14625), +(10640,14740), +(10641,14742), +(10642,14744), +(10643,14745), +(10644,14746), +(10645,14747), +(10646,14748), +(10647,14749), +(10649,14752), +(10660,14771), +(10709,14865), +(10710,14866), +(10771,14932), +(10832,15021), +(10845,15037), +(10847,15040), +(10893,15132), +(10898,15139), +(10900,15145), +(10925,15174), +(10932,15191), +(10934,15195), +(10956,15221), +(10968,15246), +(10971,15206), +(10992,15287), +(10998,15299), +(10999,15299), +(11000,15299), +(11001,15299), +(11004,15302), +(11006,5717), +(11007,15310), +(11064,15381), +(11145,15512), +(11152,15524), +(11159,15531), +(11191,15580), +(11192,15581), +(11194,15578), +(11206,15606), +(11207,15608), +(11208,15609), +(11241,15664), +(11284,15719), +(11361,7114), +(11361,7116), +(11384,15855), +(11386,15857), +(11387,15858), +(11388,15859), +(11389,15864), +(11393,15868), +(11393,15870), +(11473,16007), +(11487,1796), +(11499,16047), +(11573,16157), +(11611,16211), +(11618,16219), +(11651,16275), +(11673,16334), +(11674,16335), +(11675,16336), +(11684,7778), +(11712,16390), +(11714,16393), +(11727,16418), +(11738,16432), +(11743,16440), +(11744,16441), +(11778,16510), +(11788,16528), +(11827,16583), +(11874,16641), +(11874,16642), +(11876,16644), +(11881,16661), +(11885,7778), +(11886,16667), +(11909,16719), +(12039,3301), +(12056,16901), +(12093,16981), +(12125,17031), +(12128,17034), +(12129,17035), +(12131,17038), +(12202,17140), +(12209,17151), +(12237,7778), +(12271,17235), +(12293,17268), +(12449,17511), +(12454,7778), +(12460,7778), +(12502,17586), +(12517,4837), +(12598,17733), +(12600,17735), +(12636,17772), +(12662,17804), +(12663,17805), +(12707,17838), +(12726,17861), +(12741,17880), +(12846,18070), +(31111,15037), +(31111,15038), +(34435,14552), +(37523,15240), +(37552,15155); + +DELETE FROM `npc_text` WHERE `ID` IN (3, 4, 5, 18, 24, 34, 42, 48, 82, 107, 134, 141, 153, 158, 166, 185, 194, 215, 225, 246, 247, 248, 2368, 2566, 2673, 5935, 5940, 6236, 6242, 6520, 6714, 6799, 6805, 6807, 6810, 6813, 6816, 6819, 6822, 6826, 6829, 6835, 6865, 6873, 6984, 7029, 7030, 7031, 7032, 7033, 7034, 7057, 7178, 7335, 7381, 7396, 7398, 7399, 7748, 7774, 7775, 7868, 8121, 8122, 8318, 8322, 8348, 8482, 8483, 8494, 8506, 8555, 8593, 8594, 8676, 8753, 8814, 8969, 9225, 9228, 9273, 9380, 9381, 9396, 9397, 9430, 9516, 9842, 9935, 9991, 10020, 10120, 10122, 10123, 10231, 10278, 10307, 10368, 10375, 10510, 10635, 10738, 10743, 10955, 10959, 10982, 11538, 11596, 11694, 11696, 11872, 11907, 12117, 12404, 12517, 12518, 12519, 12535, 12588, 12665, 12970, 12971, 12972, 12973, 13578, 13662, 13938, 14125, 14143, 14230, 14259, 14260, 14261, 14264, 14274, 14275, 14276, 14289, 14290, 14291, 14292, 14293, 14295, 14296, 14297, 14298, 14299, 14300, 14304, 14311, 14312, 14315, 14316, 14322, 14327, 14336, 14337, 14338, 14339, 14340, 14344, 14346, 14347, 14351, 14357, 14358, 14432, 14447, 14451, 14452, 14454, 14468, 14469, 14470, 14488, 14494, 14505, 14506, 14507, 14508, 14509, 14510, 14511, 14514, 14517, 14518, 14520, 14521, 14523, 14524, 14526, 14529, 14531, 14532, 14538, 14541, 14545, 14546, 14547, 14548, 14549, 14553, 14554, 14555, 14556, 14557, 14562, 14563, 14564, 14565, 14566, 14568, 14569, 14571, 14572, 14574, 14575, 14576, 14577, 14579, 14580, 14584, 14585, 14590, 14591, 14593, 14595, 14596, 14597, 14599, 14600, 14601, 14603, 14604, 14605, 14612, 14616, 14623, 14624, 14625, 14631, 14636, 14637, 14638, 14642, 14643, 14644, 14645, 14649, 14652, 14657, 14681, 14683, 14684, 14690, 14693, 14694, 14695, 14697, 14698, 14700, 14702, 14703, 14705, 14729, 14731, 14735, 14739, 14740, 14742, 14744, 14745, 14746, 14747, 14748, 14749, 14752, 14762, 14766, 14767, 14768, 14770, 14786, 14789, 14792, 14795, 14796, 14797, 14798, 14799, 14801, 14802, 14803, 14805, 14806, 14807, 14808, 14809, 14811, 14812, 14826, 14827, 14831, 14832, 14833, 14834, 14835, 14836, 14838, 14839, 14840, 14841, 14842, 14843, 14844, 14845, 14846, 14848, 14849, 14860, 14863, 14867, 14868, 14869, 14870, 14871, 14873, 14874, 14875, 14879, 14880, 14881, 14886, 14888, 14897, 14932, 14938, 14942, 14945, 14946, 14947, 14948, 14949, 14950, 14951, 14952, 14955, 14956, 14959, 14961, 14962, 14964, 14965, 14966, 14967, 14969, 14970, 14971, 14976, 14977, 14981, 14982, 14983, 14985, 14986, 14987, 14988, 14990, 14991, 14992, 14994, 14995, 14996, 14998, 15000, 15001, 15002, 15007, 15008, 15012, 15013, 15021, 15025, 15028, 15029, 15034, 15035, 15036, 15042, 15063, 15079, 15083, 15104, 15110, 15111, 15112, 15117, 15121, 15126, 15127, 15128, 15131, 15132, 15135, 15136, 15137, 15138, 15139, 15140, 15141, 15145, 15146, 15147, 15148, 15149, 15150, 15173, 15182, 15185, 15196, 15197, 15198, 15200, 15201, 15203, 15205, 15208, 15213, 15220, 15222, 15223, 15224, 15225, 15226, 15227, 15228, 15233, 15235, 15236, 15237, 15238, 15239, 15241, 15243, 15244, 15246, 15248, 15251, 15252, 15257, 15260, 15263, 15264, 15266, 15267, 15268, 15269, 15270, 15272, 15273, 15274, 15275, 15276, 15277, 15278, 15280, 15288, 15289, 15291, 15292, 15293, 15294, 15295, 15299, 15301, 15302, 15303, 15309, 15312, 15313, 15315, 15316, 15317, 15318, 15324, 15325, 15326, 15327, 15328, 15329, 15330, 15331, 15332, 15333, 15344, 15345, 15346, 15347, 15348, 15349, 15350, 15351, 15353, 15354, 15357, 15360, 15363, 15365, 15367, 15369, 15370, 15371, 15372, 15373, 15374, 15375, 15376, 15377, 15381, 15385, 15387, 15393, 15394, 15395, 15397, 15398, 15401, 15403, 15404, 15406, 15408, 15409, 15411, 15418, 15419, 15420, 15421, 15422, 15427, 15428, 15431, 15434, 15435, 15442, 15443, 15444, 15455, 15458, 15459, 15460, 15461, 15466, 15468, 15471, 15473, 15474, 15475, 15476, 15477, 15478, 15479, 15480, 15481, 15482, 15483, 15484, 15485, 15486, 15487, 15488, 15489, 15490, 15495, 15496, 15500, 15501, 15504, 15508, 15510, 15511, 15512, 15514, 15515, 15516, 15517, 15518, 15519, 15520, 15521, 15522, 15524, 15525, 15526, 15527, 15528, 15529, 15530, 15531, 15532, 15534, 15535, 15536, 15537, 15538, 15539, 15540, 15542, 15543, 15544, 15545, 15546, 15547, 15549, 15550, 15551, 15552, 15554, 15556, 15558, 15559, 15561, 15563, 15564, 15565, 15566, 15569, 15575, 15585, 15586, 15587, 15588, 15589, 15590, 15595, 15597, 15598, 15599, 15600, 15608, 15609, 15612, 15616, 15619, 15620, 15622, 15623, 15626, 15627, 15628, 15629, 15630, 15631, 15632, 15633, 15634, 15639, 15641, 15642, 15643, 15648, 15649, 15651, 15652, 15653, 15661, 15662, 15664, 15665, 15667, 15669, 15670, 15671, 15672, 15673, 15674, 15675, 15677, 15678, 15679, 15680, 15681, 15682, 15683, 15684, 15685, 15686, 15687, 15688, 15689, 15690, 15691, 15692, 15693, 15694, 15695, 15696, 15697, 15698, 15699, 15700, 15701, 15711, 15712, 15714, 15715, 15717, 15719, 15725, 15726, 15727, 15728, 15729, 15730, 15732, 15733, 15734, 15735, 15737, 15738, 15740, 15741, 15742, 15745, 15747, 15749, 15750, 15754, 15755, 15756, 15760, 15761, 15769, 15770, 15771, 15772, 15774, 15776, 15777, 15778, 15780, 15781, 15782, 15783, 15784, 15785, 15794, 15802, 15807, 15808, 15815, 15816, 15818, 15819, 15820, 15821, 15827, 15828, 15829, 15831, 15834, 15835, 15838, 15841, 15842, 15845, 15847, 15848, 15849, 15850, 15851, 15852, 15856, 15857, 15867, 15874, 15878, 15880, 15881, 15882, 15883, 15886, 15887, 15890, 15892, 15893, 15896, 15897, 15898, 15899, 15901, 15904, 15908, 15909, 15911, 15914, 15915, 15918, 15920, 15922, 15931, 15932, 15933, 15935, 15937, 15938, 15942, 15943, 15946, 15951, 15952, 15953, 15954, 15955, 15956, 15962, 15963, 15965, 15966, 15970, 15971, 15972, 15973, 15974, 15978, 15979, 15981, 15982, 15987, 15988, 15989, 15991, 15995, 15997, 15998, 16001, 16002, 16003, 16004, 16007, 16008, 16010, 16014, 16015, 16016, 16018, 16019, 16022, 16024, 16025, 16027, 16031, 16032, 16033, 16034, 16035, 16037, 16038, 16039, 16040, 16046, 16047, 16050, 16051, 16053, 16054, 16055, 16056, 16057, 16058, 16060, 16061, 16062, 16063, 16064, 16065, 16066, 16067, 16069, 16070, 16071, 16072, 16074, 16075, 16076, 16077, 16078, 16084, 16085, 16089, 16090, 16094, 16095, 16097, 16099, 16100, 16101, 16105, 16106, 16107, 16108, 16109, 16111, 16112, 16113, 16114, 16115, 16116, 16117, 16118, 16119, 16120, 16121, 16122, 16123, 16124, 16125, 16126, 16127, 16128, 16129, 16130, 16131, 16132, 16138, 16140, 16142, 16143, 16144, 16147, 16149, 16157, 16164, 16165, 16166, 16167, 16168, 16169, 16170, 16171, 16172, 16173, 16174, 16178, 16179, 16180, 16181, 16182, 16183, 16184, 16185, 16186, 16187, 16188, 16189, 16190, 16192, 16193, 16194, 16195, 16197, 16198, 16199, 16200, 16202, 16203, 16211, 16214, 16215, 16216, 16218, 16219, 16220, 16221, 16222, 16230, 16231, 16234, 16236, 16237, 16238, 16239, 16241, 16243, 16244, 16245, 16246, 16247, 16250, 16256, 16258, 16259, 16260, 16262, 16264, 16265, 16269, 16270, 16271, 16272, 16275, 16280, 16284, 16285, 16286, 16288, 16293, 16297, 16298, 16303, 16304, 16305, 16311, 16312, 16313, 16319, 16320, 16321, 16322, 16324, 16330, 16334, 16335, 16336, 16337, 16338, 16339, 16340, 16341, 16343, 16345, 16348, 16362, 16363, 16364, 16365, 16366, 16372, 16373, 16374, 16375, 16376, 16378, 16383, 16384, 16386, 16387, 16388, 16390, 16391, 16393, 16394, 16396, 16399, 16402, 16406, 16412, 16418, 16420, 16422, 16424, 16425, 16426, 16427, 16429, 16430, 16432, 16433, 16435, 16437, 16438, 16439, 16440, 16441, 16442, 16443, 16451, 16455, 16457, 16458, 16460, 16461, 16463, 16464, 16465, 16469, 16470, 16471, 16472, 16473, 16474, 16478, 16483, 16486, 16488, 16491, 16498, 16499, 16500, 16505, 16506, 16507, 16508, 16509, 16510, 16511, 16519, 16520, 16521, 16522, 16523, 16527, 16528, 16536, 16537, 16541, 16542, 16543, 16544, 16545, 16547, 16548, 16549, 16550, 16552, 16553, 16554, 16555, 16556, 16557, 16558, 16559, 16560, 16562, 16563, 16564, 16565, 16566, 16569, 16570, 16571, 16572, 16573, 16574, 16575, 16579, 16580, 16581, 16583, 16585, 16586, 16587, 16588, 16589, 16590, 16592, 16593, 16594, 16595, 16596, 16597, 16601, 16602, 16603, 16604, 16605, 16606, 16607, 16608, 16609, 16610, 16612, 16613, 16614, 16615, 16616, 16617, 16618, 16619, 16620, 16621, 16622, 16623, 16624, 16625, 16627, 16628, 16629, 16630, 16631, 16632, 16633, 16634, 16635, 16638, 16641, 16642, 16644, 16651, 16653, 16659, 16660, 16661, 16663, 16665, 16667, 16669, 16670, 16671, 16672, 16673, 16682, 16683, 16686, 16687, 16688, 16689, 16691, 16694, 16702, 16705, 16706, 16711, 16712, 16714, 16716, 16717, 16719, 16720, 16727, 16728, 16729, 16730, 16731, 16732, 16733, 16736, 16737, 16742, 16743, 16744, 16745, 16747, 16748, 16750, 16751, 16754, 16755, 16756, 16757, 16758, 16759, 16760, 16761, 16762, 16763, 16766, 16767, 16768, 16771, 16772, 16774, 16775, 16776, 16777, 16780, 16784, 16786, 16787, 16790, 16792, 16793, 16794, 16795, 16798, 16799, 16800, 16803, 16804, 16805, 16806, 16807, 16808, 16810, 16811, 16812, 16813, 16814, 16815, 16816, 16817, 16824, 16825, 16828, 16829, 16830, 16831, 16832, 16833, 16834, 16835, 16836, 16839, 16840, 16841, 16844, 16845, 16846, 16847, 16848, 16849, 16851, 16858, 16859, 16862, 16864, 16865, 16866, 16867, 16868, 16869, 16870, 16871, 16872, 16873, 16874, 16875, 16876, 16877, 16878, 16879, 16880, 16881, 16883, 16884, 16886, 16887, 16888, 16889, 16893, 16897, 16898, 16899, 16901, 16903, 16906, 16907, 16908, 16909, 16914, 16918, 16920, 16923, 16928, 16929, 16930, 16938, 16939, 16941, 16942, 16943, 16944, 16945, 16946, 16947, 16948, 16951, 16952, 16954, 16956, 16957, 16958, 16959, 16961, 16963, 16964, 16965, 16966, 16967, 16968, 16969, 16970, 16973, 16974, 16975, 16979, 16980, 16981, 16984, 16985, 16986, 16987, 16988, 16989, 16990, 16991, 16995, 16996, 16997, 16998, 17000, 17002, 17004, 17005, 17006, 17007, 17009, 17010, 17011, 17012, 17013, 17014, 17016, 17019, 17020, 17024, 17026, 17027, 17029, 17030, 17031, 17032, 17033, 17034, 17035, 17036, 17038, 17040, 17042, 17045, 17046, 17051, 17052, 17053, 17055, 17057, 17061, 17068, 17072, 17073, 17074, 17075, 17078, 17079, 17080, 17086, 17087, 17089, 17091, 17095, 17097, 17098, 17099, 17100, 17102, 17103, 17104, 17105, 17107, 17108, 17110, 17111, 17112, 17115, 17116, 17117, 17118, 17119, 17126, 17127, 17128, 17129, 17130, 17131, 17132, 17133, 17134, 17135, 17136, 17137, 17138, 17140, 17142, 17143, 17148, 17150, 17151, 17152, 17153, 17155, 17156, 17157, 17158, 17159, 17160, 17161, 17163, 17164, 17165, 17166, 17167, 17168, 17169, 17170, 17172, 17173, 17174, 17175, 17177, 17178, 17179, 17181, 17187, 17188, 17189, 17192, 17193, 17194, 17197, 17200, 17203, 17204, 17208, 17212, 17213, 17214, 17216, 17217, 17218, 17219, 17220, 17221, 17222, 17223, 17225, 17226, 17227, 17228, 17229, 17231, 17232, 17233, 17235, 17239, 17240, 17241, 17242, 17243, 17244, 17245, 17246, 17247, 17248, 17251, 17252, 17253, 17254, 17255, 17256, 17257, 17258, 17259, 17263, 17266, 17267, 17268, 17269, 17270, 17275, 17276, 17278, 17279, 17280, 17281, 17291, 17292, 17293, 17296, 17299, 17300, 17302, 17303, 17304, 17305, 17306, 17307, 17308, 17309, 17310, 17311, 17312, 17313, 17314, 17315, 17318, 17319, 17321, 17323, 17324, 17327, 17328, 17330, 17332, 17333, 17334, 17336, 17338, 17342, 17345, 17346, 17347, 17348, 17349, 17350, 17354, 17356, 17357, 17359, 17360, 17361, 17362, 17363, 17364, 17365, 17366, 17367, 17368, 17369, 17370, 17371, 17372, 17373, 17374, 17382, 17383, 17384, 17385, 17386, 17387, 17394, 17395, 17397, 17398, 17399, 17400, 17401, 17405, 17406, 17407, 17408, 17409, 17410, 17416, 17417, 17418, 17419, 17420, 17421, 17422, 17423, 17425, 17426, 17427, 17430, 17431, 17432, 17433, 17434, 17441, 17442, 17443, 17445, 17446, 17450, 17451, 17452, 17455, 17456, 17457, 17459, 17461, 17462, 17463, 17464, 17467, 17468, 17469, 17472, 17473, 17477, 17482, 17483, 17484, 17485, 17486, 17487, 17491, 17494, 17495, 17496, 17498, 17500, 17503, 17504, 17505, 17511, 17512, 17513, 17514, 17515, 17516, 17517, 17518, 17519, 17521, 17532, 17533, 17534, 17535, 17536, 17537, 17538, 17540, 17541, 17542, 17549, 17550, 17552, 17554, 17556, 17557, 17558, 17559, 17564, 17565, 17566, 17567, 17569, 17570, 17571, 17572, 17573, 17574, 17575, 17576, 17578, 17582, 17583, 17585, 17586, 17587, 17589, 17590, 17593, 17594, 17595, 17598, 17599, 17600, 17606, 17607, 17608, 17611, 17615, 17616, 17619, 17620, 17627, 17629, 17630, 17631, 17632, 17633, 17634, 17635, 17636, 17637, 17638, 17639, 17659, 17661, 17662, 17665, 17666, 17667, 17668, 17669, 17670, 17671, 17675, 17678, 17680, 17681, 17682, 17684, 17686, 17687, 17689, 17690, 17691, 17692, 17693, 17696, 17698, 17700, 17701, 17702, 17704, 17707, 17710, 17711, 17712, 17725, 17726, 17731, 17733, 17734, 17735, 17736, 17740, 17741, 17742, 17743, 17745, 17746, 17747, 17748, 17749, 17753, 17754, 17758, 17759, 17763, 17770, 17772, 17774, 17775, 17789, 17791, 17793, 17799, 17800, 17804, 17805, 17815, 17816, 17818, 17819, 17820, 17821, 17824, 17830, 17833, 17836, 17837, 17838, 17840, 17842, 17843, 17849, 17855, 17856, 17857, 17859, 17861, 17866, 17878, 17880, 17881, 17888, 17890, 17891, 17892, 17896, 17901, 17904, 17905, 17906, 17907, 17941, 17946, 17947, 17949, 17950, 17951, 17952, 17956, 17960, 17961, 17967, 17972, 17976, 17977, 17980, 17983, 17986, 17988, 17989, 17990, 17993, 17996, 17997, 17998, 17999, 18000, 18001, 18002, 18004, 18005, 18006, 18012, 18015, 18022, 18024, 18025, 18026, 18028, 18029, 18030, 18031, 18032, 18037, 18038, 18041, 18042, 18043, 18044, 18045, 18046, 18047, 18048, 18050, 18063, 18064, 18067, 18070, 18072, 18075, 18076, 18086, 18087, 18088, 18089, 18090, 18091, 18092, 18093, 18094, 18095, 18096, 18097, 18098, 18099, 18100, 18101, 18102, 18103, 18104, 18105, 18106, 18107, 18108, 18113, 18116, 18124, 18130, 18131, 18135, 18137, 18138, 18139, 18140, 18141, 18142, 18143, 18144, 18145, 18146, 18148, 18149, 18150, 18151, 18152, 18153, 18154, 18155, 18156, 18157, 18158, 18159, 18160, 18162, 18163, 18165, 18166, 18167, 18168, 18169, 18170, 18172, 18174, 18175, 18176, 18185, 18186, 18189, 18195, 18197, 18200, 18201, 18202, 18203, 18204, 18205, 18207, 18208, 18212, 18217, 18220, 18221, 18222, 18224, 18238, 18239, 18240, 18242, 18243, 18244, 18247, 18248, 18249, 18250, 18251, 18252, 18253, 18254, 18255, 18256, 18257, 18258, 18259, 18260, 18261, 18262, 18263, 18264, 18265, 18266, 18267, 18268, 18269, 18276, 18280, 18284, 18286, 18287, 18288, 18289, 18290, 18291, 18292, 18293, 18294, 18295, 18297, 18298, 18299, 18300, 18301, 18302, 18303, 18304, 18307, 18308, 18312, 18313, 18314, 18316, 18317, 18318, 18320, 18321, 18322, 18324, 18325, 18329, 18330, 18331, 18342, 18347, 18348, 18350, 18352, 18353, 18354, 18362, 18363, 18364, 18365, 18366, 18369, 18370, 18371, 18372, 18376, 18390, 18429, 18430, 18444, 18452, 18463, 18472, 18508, 18510, 18512, 18514, 18521, 18532, 18544, 18550, 18551, 18555, 18559, 18560, 18562, 18563, 18583, 18593, 18613, 18698, 18740, 18799, 18800, 18848, 18851, 18867, 18877, 18879, 18880, 18904, 18941, 18942, 18951, 18953, 18954, 18958, 18959, 18960, 18961, 18962, 18963, 18965, 18966, 18978, 18986, 18991, 19016, 19017, 19019, 19020, 19021, 19022, 19023, 19024, 19058); +INSERT INTO `npc_text` (`ID`, `text0_0`, `text0_1`, `BroadcastTextID0`, `lang0`, `prob0`, `em0_0`, `em0_1`, `em0_2`, `em0_3`, `em0_4`, `em0_5`, `text1_0`, `text1_1`, `BroadcastTextID1`, `lang1`, `prob1`, `em1_0`, `em1_1`, `em1_2`, `em1_3`, `em1_4`, `em1_5`, `text2_0`, `text2_1`, `BroadcastTextID2`, `lang2`, `prob2`, `em2_0`, `em2_1`, `em2_2`, `em2_3`, `em2_4`, `em2_5`, `text3_0`, `text3_1`, `BroadcastTextID3`, `lang3`, `prob3`, `em3_0`, `em3_1`, `em3_2`, `em3_3`, `em3_4`, `em3_5`, `text4_0`, `text4_1`, `BroadcastTextID4`, `lang4`, `prob4`, `em4_0`, `em4_1`, `em4_2`, `em4_3`, `em4_4`, `em4_5`, `text5_0`, `text5_1`, `BroadcastTextID5`, `lang5`, `prob5`, `em5_0`, `em5_1`, `em5_2`, `em5_3`, `em5_4`, `em5_5`, `text6_0`, `text6_1`, `BroadcastTextID6`, `lang6`, `prob6`, `em6_0`, `em6_1`, `em6_2`, `em6_3`, `em6_4`, `em6_5`, `text7_0`, `text7_1`, `BroadcastTextID7`, `lang7`, `prob7`, `em7_0`, `em7_1`, `em7_2`, `em7_3`, `em7_4`, `em7_5`, `VerifiedBuild`) VALUES +(3, 'Greetings, citizen. I ask that you move along if you have nothing to ask of me.', NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(4, 'I live only to serve our King.', NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(5, 'Move along, citizen. There is nothing to see here.', NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18, 'Stay by my side, $N. We may have need of one another.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(24, 'Ah, $N! A little bird told me you would be coming.$B$BThat''s how Aviana sends messages around.', '', 0, 0, 1, 3, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(34, 'Which profession?', 'Which profession?', 0, 1, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(42, 'Deathwing has returned. He''s seized Grim Batol and much of the highlands, and I feel near powerless to stop him.$B$BSoon, our queen shall arrive, and together we shall put the once Earthwarder in his place.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(48, 'How may I help you?', 'How may I help you?', 0, 0, 0, 0, 0, 0, 0, 0, 0, 'How may I help you?', 'How may I help you?', 0, 0, 0, 0, 0, 0, 0, 0, 0, 'How may I help you?', 'How may I help you?', 0, 0, 0, 3, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(82, 'Serve the Dragonmaw and you will be handsomely rewarded, $c.', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(107, '', 'Yeah? Whadya', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(134, 'The Horde war machine needs you!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(141, '', 'I am new to the burdens of leadership. I should''ve seen Narkrall''s insubordination coming. Instead I am cleaning up his mess.$B$BI don''t know how Garrosh Hellscream does it. He must possess great strength to hold together a force as diverse as the Horde... I should like to know him more.', 0, 0, 0, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(153, 'Heya, $g champ : lady;. What''s shakin''?', '', 0, 0, 0, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(158, '', 'Welcome, $c.$B$BHyjal burns and the world I''ve spent my life protecting is on the brink of oblivion.$B$BTell me: Have you ever heard of Tyrus Blackhorn?', 0, 0, 0, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(166, 'We came here for war.$B$BThey gave it to us.', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(185, 'You may rest here, if you like. The Temple of Earth is under our care, now.', '', 0, 0, 0, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(194, 'Welcome to my Inn, weary traveler. What can I do for you?', 'Welcome to my Inn, weary traveler. What can I do for you?', 0, 0, 0, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(215, '', 'We''ve long held out hope of redeeming the Earthwarden and his children. At some point, we must have the wisdom to realize that no amount of redemption can atone for the destruction these dragons are unleashing upon the world.$B$BAt some point, we are forced to intervene.', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(225, 'In all my days, $r, I''ve never seen such a thing...', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 'We are poorly equipped to do battle here.$b$bPreparations must be made...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(246, 'Let''s get out there and put those stone troggs back into the ground, $r!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(247, 'I need you out on the front, $N.$B$BYou''re going to make the difference. We''ll crush the stone troggs once and for all.$B$BWe must rescue King Oremantle!', '', 0, 0, 1, 396, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(248, '<Clay grumbles and sneers.>$B$BDamn kids these days.', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(2368, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(2566, 'Master Pyreanor can be found among Thrall''s advisors in his fortress, Grommash Hold, in the Valley of Wisdom.', 'Master Pyreanor can be found among Thrall''s advisors in his fortress, Grommash Hold, in the Valley of Wisdom.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(2673, 'I am a mage of great power, I have spent my days studying the mind and the memory as it pertains to learning and the retention of learned abilities. I would even now be perfecting my studies if not for the great voices that came to me in the night, informing me that my services were required. I will be here for only a short time offering my ability to wipe your talents for free. Soon I will leave again, and you will once more be stuck with whatever choices you make.', 'I am a mage of great power, I have spent my days studying the mind and the memory as it pertains to learning and the retention of learned abilities. I would even now be perfecting my studies if not for the great voices that came to me in the night, informing me that my services were required. I will be here for only a short time offering my ability to wipe your talents for free. Soon I will leave again, and you will once more be stuck with whatever choices you make.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(5935, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(5940, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(6236, 'The Stormpike Graveyard is cut into the mountains, across the bridge east of Dun Baldar.$B$BThe Alliance currently controls it.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(6242, 'The Frostwolf Graveyard is along the side of the road, not far north of Frostwolf Village.$B$BThe Horde currently controls it.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(6520, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(6714, 'The Stonehearth Graveyard lies east of the Stonehearth Outpost in the Field of Strife.$B$BThe Alliance currently controls it.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(6799, 'The Stormpike Aid Station is in Dun Baldar, right outside the Dun Baldar barracks.$B$BThe Alliance currently controls it.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(6805, 'The Snowfall Graveyard lies high atop a hill in the Field of Strife, east of Winterax Hold.$B$BNeither side controls it.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(6807, 'The Frostwolf Relief Hut lies in Frostwolf Keep, south of the Frostwolf Towers.$B$BThe Horde controls it.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(6810, 'The Iceblood Graveyard is on the south side of the Field of Strife, east of the Iceblood Tower.$B$BThe Horde currently controls it.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(6813, 'The Dun Baldar South Bunker protects the south and east flanks of Dun Baldar.$B$BIt is controlled by the Alliance.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(6816, 'The Dun Baldar North Bunker protects the eastern entrance to Dun Baldar.$B$BIt is controlled by the Alliance.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(6819, 'The Icewing Bunker holds the pass between Alliance territory and the Field of Strife.$B$BIt is controlled by the Alliance.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(6822, 'The Stonehearth Bunker protects the eastern flank of the Field of Strife.$B$BIt is controlled by the Alliance.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(6826, 'The West Frostwolf Tower protects the gate between Frostwolf Village and Frostwolf Keep.$B$BIt is controlled by the Horde.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(6829, 'Tower Point East holds the pass between the Field of Strife and Horde territories to the south.$B$BIt is controlled by the Horde.The East Frostwolf Tower protects the gate between Frostwolf Village and Frostwolf Keep.$B$BIt is controlled by the Horde.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(6835, 'The Iceblood Tower protects the Iceblood Garrison from the southeast.$B$BIt is controlled by the Horde.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(6865, 'Vanndar Stormpike is the general of the Alliance military in Alterac, and directs his forces from Dun Baldar.$B$BIf he is defeated then the Alliance will surely lose the battle for Alterac.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(6873, 'Frostwolf Keep lies in the south corner of Alterac Valley and protects Frostwolf Village, home of orc clan of the same name. All Horde territories in Alterac Valley stem from this one place of power.$B$BFrostwolf Keep is intact.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(6984, '<Demitrian laughs.>$B$BYour reward is a quick and painful death, fool!', '', 0, 0, 1, 11, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(7029, '', 'Praise the Light, one has finally answered the calling.', 0, 0, 1, 0, 5, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(7030, '', '<Eris nods.>$B$BThe Eye has seen so many horrors and so many wonders.$B$BIt displays what it feels the one looking into it is most suited to see.', 0, 0, 1, 0, 1, 0, 1, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(7031, '', 'You were. The Eye is never wrong.$B$BYou are a $g priest:priestess;, after all. A powerful $g priest:priestess;, if the Eye showed you this horrible memory.$B$BYou have come for redemption, yet you yourself do not even realize this... Do you?', 0, 0, 1, 0, 1, 0, 1, 0, 6, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(7032, '', 'I know you will, $N.$B$BI myself am a priestess, though, unlike you I am long since gone from this world. My spirit, however, remains here, as do the spirits of the thousands who were brutally slain by the mad Prince, Arthas Menethil and his legion of undeath.', 0, 0, 1, 0, 1, 0, 1, 0, 1, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(7033, '', 'I never stated that you were here to redeem yourself, $g priest:priestess;. You are here to redeem me and the innocents murdered while trying to escape Stratholme.$B$BMy spirit and the spirit of those lost are bound here, cursed to endlessly relive our own tragic deaths.', 0, 0, 1, 0, 1, 0, 1, 0, 1, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(7034, '', 'You must do what I could not: Save the peasants that were cut down while fleeing from Stratholme.$B$BThey will walk towards the light, you must ensure their survival. Should too many fall, our cursed existence shall continue - you will have failed.$B$BEvery ability, prayer, and spell that you have learned will be tested. May the Light protect you, $N.', 0, 0, 1, 0, 1, 0, 1, 0, 273, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(7057, 'Your preparations are complete. All that now stands before you and your dreadsteed is the ritual for the Circle of Greater Summoning, and the binding of the dreadsteed''s spirit...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(7178, 'The Lord of Blackrock hangs from the arches!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(7335, 'Welcome back to the greatest show on Azeroth, my friend! It is truly a delight to see you once again.$B$BPlease, step right up and once more take in all we have to offer. Be sure to check around, as we are always adding new and exciting things to the Darkmoon Faire! Amaze at wonders old and new that we have uncovered! We continue to spare no expense in bringing you excitement that children of all ages will delight in!', '', 0, 0, 1, 2, 1, 1, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(7381, 'Hello friend.', 'Hello friend.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(7396, 'Hello again, $N. Did you think I would forget you?$B$BI knew you would not. You are a clever $c who knows a person with perfect memory when $ghe:she; sees him.', '', 0, 0, 1, 0, 2, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(7398, '$N, you return! The spirits of my last meal said you would come see me and that we would discuss business.$B$BWere they correct?', '', 0, 0, 1, 0, 1, 1000, 6, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(7399, 'Hello again, $N! It''s good to see you! Our Darkmoon Faire is quite a show, don''t you think?$B$BThere is quite a lot to see! So look! Look, and perhaps, one day, even more will be revealed to you...', '', 0, 0, 1, 5, 2, 0, 0, 1000, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(7748, '', 'No luck with the Twilight''s Hammer deserter? Check the mountains to the southeast thoroughly. There are numerous rumors of a mysterious hermit living there.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(7774, 'A thunderous voice bellows from the stone...$B$BGreetings, commander. What news of Silithus do you bring the Lords of the Council?', 'A thunderous voice bellows from the stone...$B$BGreetings, commander. What news of Silithus do you bring the Lords of the Council?', 0, 0, 1, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(7775, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(7868, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(8121, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(8122, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(8318, 'I am bound eternally to this cursed world. What is it you desire, mortal?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(8322, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(8348, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(8482, 'It seems the army of the Scourge has come to Tanaris. A significant number of their necropolises and other forces have been dispatched there.$B$BNumber of Necropolises remaining: $2283W', '', 0, 0, 1, 0, 25, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 255, 0, 0, 0, 0, 0, 0, 0, 0), +(8483, 'The Scourge infestation grows in the Blasted Lands. Every able bodied warrior is needed to stem the tide of their invasion.$B$BNumber of Necropolises remaining: $2280W', '', 0, 0, 1, 0, 25, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 255, 0, 0, 0, 0, 0, 0, 0, 0), +(8494, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(8506, 'There are those who would say that the Argent Crusade is a thing of the past. I am one of them, but not because the Scourge have fallen.$b$bNo... it is because of their stubborn ways. They''ve become too much like the church that they seceded from: too rigid, too governed by honor and order. This is what I''m trying to tell Barthalomew, anyhow.$b$bSure, it may sound a bit jingoistic, but it makes for a good debate.', '', 0, 0, 1, 0, 1, 0, 1, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(8555, 'We have won $2219W battles against the Scourge. Stand firm, $N! We must persevere!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 255, 0, 0, 0, 0, 0, 0, 0, 0), +(8593, 'The Scourge infestation grows in Azshara. Every able bodied warrior is needed to stem the tide of their invasion.$B$BNumber of Necropolises remaining: $2279W', '', 0, 0, 1, 0, 25, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 255, 0, 0, 0, 0, 0, 0, 0, 0), +(8594, 'The Scourge infestation grows in the Eastern Plaguelands. Every able bodied warrior is needed to stem the tide of their invasion.$B$BNumber of Necropolises remaining: $2282W', '', 0, 0, 1, 0, 25, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 255, 0, 0, 0, 0, 0, 0, 0, 0), +(8676, 'I was born here, $r. This is my world - all that I know... As a boy, my mother and father would regale me with tales of your world and the splendor it held. How I longed to leave this place.$B$BAlas, fate is a cruel mistress. My mother and father have long since passed, buried in this very graveyard. I remain to uphold their honor and the honor of my family - the Sons of Lothar.', '', 0, 0, 1, 0, 1, 0, 1, 0, 1, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(8753, 'Greetings, $c.', '', 0, 0, 1, 2, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(8814, 'Once more, thank you for your assistance with the cursed Lost Ones. Without your help I would never have been able to continue my research.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(8969, 'About time the guild sent some new blood our way! Too bad you came all this way for nothing. We''re not allowed to put on a show for our guests, can you believe it? Moroes has forbidden us from starting a new show, and my backers are going nuts! Something needs to be done about Moroes.', '', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(9225, 'Lady Proudmoore''s forces have bled to delay Archimonde and his Burning Legion, and now this grim task falls to us. Are you ready to stand with me against the onslaught?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(9228, 'Then let the Legion do their worst!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(9273, 'Notices of reward for the naga leaders of the Darkcrest and Bloodscale tribes are listed here. They both sound extremely dangerous, perhaps you should check again later.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(9380, '', 'Well done, adventurer. Rage Winterchill''s death has earned us all a small pause in the enemy''s advance. Use this short time wisely. Tend to your wounded and prepare your defenses, as soon Archimonde will send even deadlier forces at us. My meager force of reserve units will reinforce you when battle is joined again.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(9381, '', 'Then let Archimonde do his worst.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(9396, 'Outstanding! Kaz''rogal''s death cry should strike fear into the core of the Burning Legion. They now know the power your forces possess, so expect the worst the Legion can offer.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(9397, 'May the spirits be with you.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(9430, 'The beacons are lit, now is the time to strike! Take one of these battle standards and plant it at the graveyard for the Horde!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(9516, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(9842, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(9935, 'Another soldier on $ghis:her; way to Honor Hold... by Kurdran''s beard, they can use the help!', 'Another soldier on $ghis:her; way to Honor Hold... by Kurdran''s beard, they can use the help!', 0, 0, 1, 0, 4, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(9991, 'Another soldier on $ghis:her; way to Honor Hold... by Kurdran''s beard, they can use the help!', 'Another soldier on $ghis:her; way to Honor Hold... by Kurdran''s beard, they can use the help!', 0, 0, 1, 0, 4, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(10020, 'We work well together, $N. I couldn''t have taken that warp-gate down without you!', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(10120, 'I don''t have time for idle chitchat. I have men and women to train, and a tower to watch.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(10122, 'Greetings! Behold one of the finest musical instruments in all of Lordaeron. It''s a true honor to perform for the Master and all his guests. Take a seat in the audience, I hear a show is starting soon.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(10123, 'This party is pointless. Those foolish nobles will never get to see Medivh. Can''t they see this? I should have just stayed in Darkshire with my family instead of wasting my time here.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(10231, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(10278, 'Our Alliance allies are assisting the Leage of Arathor in their defense of Arathi Basin. They could use your aid against the undead Defilers, $c.', '', 0, 7, 1, 1, 66, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 255, 0, 0, 0, 0, 0, 0, 0, 0), +(10307, '', 'No, $r. Your bulk would only crush one of these noble creatures.\r\n\r\n$b\r\n\r\nNow, away with you!', 0, 1, 1, 1, 274, 2, 25, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(10368, 'I hope the Ultrasafe Transporter never lets you down! I just know it won''t but I would recommend carrying a parachute cloak just in case!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(10375, 'You have it. Do not lose it again!', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(10510, 'What you read is something that you don''t think you''re quite ready for.$B$BYou should check back later.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(10635, 'What? Where am I? This isn''t right at all! Look at you! Look at this place! It isn''t on my list! There''s going to be so much paperwork...$b$b<The goblin writes frantically in a small notebook.>$b$bLook, if you''ve got nothing better to do than stand there and stare, why don''t you go visit my cousin, Kwee Q. Peddlefeet, in one of the major cities? Says here he''s taking care of Orgrimmar, Stormwind, Thunder Bluff, Ironforge, the Undercity, and Darnassus. Go on, get outta here!', 'What? Where am I? This isn''t right at all! Look at you! Look at this place! It isn''t on my list! There''s going to be so much paperwork...$b$b<The goblin writes frantically in a small notebook.>$b$bLook, if you''ve got nothing better to do than stand there and stare, why don''t you go visit my cousin, Kwee Q. Peddlefeet, in one of the major cities? Says here he''s taking care of Orgrimmar, Stormwind, Thunder Bluff, Ironforge, the Undercity, and Darnassus. Go on, get outta here!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 127, 0, 0, 0, 0, 0, 0, 0, 0), +(10738, 'When you''re done visiting this exotic city, perhaps you would be interested in celebrating with us. The Lunar Festival is underway in Moonglade; the other cities have transport to the festivities. Come and join the other revelers!', 'When you''re done visiting this exotic city, perhaps you would be interested in celebrating with us. The Lunar Festival is underway in Moonglade; the other cities have transport to the festivities. Come and join the other revelers!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 127, 0, 0, 0, 0, 0, 0, 0, 0), +(10743, '', 'It is good to see you again, $C $N. Salandria has been asking about you.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(10955, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(10959, '<Flaskataur flaps his majestic wings.>', '', 0, 0, 1, 19, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(10982, 'Forgetting your skill in Spellfire Tailoring is not something to do lightly. If you choose to abandon it you will forget all recipes that require Spellfire Tailoring to create!$b$bAre you absolutely sure?', 'Forgetting your skill in Spellfire Tailoring is not something to do lightly. If you choose to abandon it you will forget all recipes that require Spellfire Tailoring to create!$b$bAre you absolutely sure?$B', 0, 0, 1, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(11538, 'The Tauren Chieftains play on this stage at the top of every hour. Show some energy: Cheer the minstrels on to capture some of the event''s intensity!', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(11596, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(11694, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(11696, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(11872, 'How could you lose it? Very well, but try not to ''lose'' this one as well.', '', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(11907, '', 'Oh hooray - you killed the bad troll just in time to save me from being helplessly slaughtered and having my innocent little soul enslaved and used to add power to their wicked scheme to take over Azeroth and seeing how you have risked your lives to free me from certain death I must repay your kindness regardless of who you are or where you may have come from so help me out of here and I will do my best to find some way to reward you....$b$b<Ashli takes a deep breath.>$b$bI hope you like candy....', 0, 0, 1, 0, 21, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(12117, 'If you''re looking to practice fire fighting, this is the place. There may be a heap of snow hereabouts, but you never know when Steelgrill or those gnomes''ll cause an explosion, eh?', 'If you''re looking to practice fire fighting, this is the place. There may be a heap of snow hereabouts, but you never know when Steelgrill or those gnomes''ll cause an explosion, eh?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(12404, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(12517, 'Using this orb will create a portal leading to Naxxanar.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(12518, 'This orb will create a portal to Upper Naxxanar.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(12519, 'This orb will create a portal that will return you to the Temple City of En''kilah.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(12535, 'My fastest wolf is ready to take you to Taunka''le Village, champion. Let me know when you are ready.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(12588, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(12665, 'Anveena''s sacrifice has given us all a new hope for the future.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(12970, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(12971, 'Good seein'' you again, $n. I hope our club be treatin'' ya right.', 'Good seein'' you again, $n. I hope our club be treatin'' ya right.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(12972, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(12973, 'Hey, $n! I hope you''ve been enjoying our club!', 'Hey, $n! I hope you''ve been enjoying our club!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(13578, 'You are not yet strong enough to do battle in the Eye of the Storm. Return when you have gained more experience.', 'You are not yet strong enough to do battle in the Eye of the Storm. Return when you have gained more experience.', 0, 0, 1, 1, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(13662, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(13938, 'Wait, $c....$b$bOne... final request...', 'Wait, $c....$b$bOne... final request...', 0, 0, 1, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14125, 'How may I help you?', 'How may I help you?', 0, 0, 1, 0, 2, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14143, '', 'Yes, of course, but please be more careful in the future.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14230, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14259, '', 'Our home was destroyed during the Cataclysm!$B$BAll of the rest of the survivors moved north to build Lor''danel, but those of us that stayed behind are here for a reason. We WILL retake the Ruins of Auberdine from those Twilight''s Hammer scum just as soon as we heal up.$B$BI hope that you can help us to deal with them in the meantime.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14260, 'On my flight south from Darnassus to seek out Malfurion Stormrage, I came across these injured refugees from the Ruins of Auberdine.$B$BTheir cause is just and I am helping to heal them, but their injuries are numerous, and it will take time.$B$BI trust that you will be willing to lend them your aid as well.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14261, '', 'Many years ago I died tragically while attempting to help with a local murloc problem. However, I was content to stay and watch my family and friends instead of passing on to be with the Goddess.$B$BNow they are all gone, or worse, dead, and I have only one reason to stay.$B$BVengeance.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14264, 'Thundris Windweaver''s corpse lays sprawled out here, the apparent victim of the Twilight''s Hammer''s machinations.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14274, '', 'The sentinel''s body rests here, the apparent victim of the elemental onslaught that has overtaken the town.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14275, 'Here''s where Taldan served his last drink.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14276, '', 'Far too powerful for these elementals, Caylais and her hippogryphs must have been struck down by something else.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14289, '<Allyndia''s body bobs gently in the surf. It appears that she''s been dead for some time.>', '<Allyndia''s body bobs gently in the surf. It appears that she''s been dead for some time.>', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14290, '<As you turn Barithras'' limp body over in the water, a brutal injury on his head makes it very apparent why he did not make it.>', '<As you turn Barithras'' limp body over in the water, a brutal injury on his head makes it very apparent why he did not make it.>', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14291, '<Dalmond''s body looks almost peaceful, buried only slightly in the sand..>', '<Dalmond''s body looks almost peaceful, buried only slightly in the sand..>', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14292, '<Grondal reaches futilely towards you as you approach, but his arm collapses as life slips from him.>', '<Grondal reaches futilely towards you as you approach, but his arm collapses as life slips from him.>', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14293, '<Terenthis'' eyes stare unblinking into the distance, betraying the sorrow of his last moments.>', '<Terenthis'' eyes stare unblinking into the distance, betraying the sorrow of his last moments.>', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14295, '<The night elf turns to you as you approach and reaches for your hand.>\r\n\r\nIt is too late for me. We earned our fate with our pride. Go... others may have made it. Save any that you can.\r\n\r\n<Her grip loosens as life slips from her.>', '<The night elf turns to you as you approach and reaches for your hand.>\r\n\r\nIt is too late for me. We earned our fate with our pride. Go... others may have made it. Save any that you can.\r\n\r\n<Her grip loosens as life slips from her.>', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14296, 'So this... is what it feels like... to be mortal?\r\n\r\n<The question trails off as Mavralyn''s breathing stops.>', 'So this... is what it feels like... to be mortal?\r\n\r\n<The question trails off as Mavralyn''s breathing stops.>', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14297, '<As you approach, you hear Cerellean gasp for breath. He looks to stand a chance if rescued soon.>', '<As you approach, you hear Cerellean gasp for breath. He looks to stand a chance if rescued soon.>', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14298, '<Volcor''s body lies motionless. As you begin to move away, a hand reaches out and grabs your ankle. He''s alive!>', '<Volcor''s body lies motionless. As you begin to move away, a hand reaches out and grabs your ankle. He''s alive!>', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14299, '<A whisper escapes Shaldyn''s throat as you approach.>\r\n\r\n\r\n\r\nHelp... please.', '<A whisper escapes Shaldyn''s throat as you approach.>\r\n\r\n\r\n\r\nHelp... please.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14300, '<Gershala rolls onto his side to look at you as you approach and you see a hopeful smile creep onto his face.>', '<Gershala rolls onto his side to look at you as you approach and you see a hopeful smile creep onto his face.>', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14304, '', 'Hail to the night!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14311, '', 'The forest is crawling with Horde, $c. Be mindful of your surroundings!', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14312, 'I am here to do my master''s bidding, no matter what the cost. A little girl''s life hangs in the balance and what could be more important?', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14315, 'Welcome, $g sir : my lady;. This is a much better camp than the one that I used to have.$B$BIt''s good to have company. They''ve been nice enough to teach me some of their fighting techniques so that I can hold my own against the Horde.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14316, '', 'Greetings, $c. Our position here is a bit exposed given the build up of the Horde''s forces to the south.$B$BAnything that you can do to help will be greatly appreciated.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14322, '', 'Ohmygosh! I didn''t think that I was ever going to see anyone ever again!$B$BYou have to get me out of here!', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14327, '', 'Greetings, $c.', 0, 0, 1, 0, 2, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14336, 'Come near, $c. I haven''t got much time....', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14337, 'The mortally wounded orc seems to be unconscious.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14338, '<The orc''s lifeless body is no longer responsive....>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14339, '', 'Good to see you, $c.$B$BSorry... can''t talk. We''re in a bit of a fight here.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14340, '', 'Just let me know when you''re ready to take a squad out.$B$BI''m holding some in reserve, so if you need a few more, come back.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14344, 'What is it, $c?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14346, 'Me not workin'' til elfs is gone!', 'Me not workin'' til elfs is gone!', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Elfs kill too many peons in forest. Me sittin'' here where it safe.', 'Elfs kill too many peons in forest. Me sittin'' here where it safe.', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Me not dyin'' for a little wood!', 'Me not dyin'' for a little wood!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14347, '', 'Greetings, $c.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14351, '', 'How may I help you, $c?', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14357, '', 'Make it quick, $r.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14358, '', 'Hurry, $c! There is no time to waste!$b$bSplintertree must not fall!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14432, 'What is it, puny mort-$b$bErr... yes, $r? What can I do for you?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Yes, $c? What is it?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14447, 'The strong odor coming from the bowl smells like a mixture of various herbs with burning hair.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14451, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14452, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14454, '', 'Greetings.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'Would you like a ride?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'Is there anything that I can help with?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'Good to see you.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'Looking for a ride?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'How are you, $c?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'A bit cold out, don''t you think?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'I''m glad to see that you''re well.', 0, 0, 1, 0, 0, 0, 0, 0, 0, 0), +(14468, '', 'Shhhh - Please don''t give away my position when I''m out in the field. Mathas needs to know what''s happening out here.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14469, '', 'It was folly for them to think us weak amidst recent events. There is no more hope for these trolls - we will end this today.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14470, '', 'We''re expecting the Shatterspear Leader to show here at any moment. Be patient if you wish to join the attack.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14488, 'Let''s get to it, $r.$b$bThere''s little time and much to do.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14494, 'My lady.$b$bI was unable to protect her. How can I return to Silvermoon...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14505, 'Welcome, child.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14506, '', 'I shouldn''t have expected these filthy trolls to stay peaceful forever. There''s no place for trust with any sympathizers of the Horde.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14507, 'Blood and Thunder, $n!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14508, 'There are many dangers facing us, but we cannot find ourselves neglecting nature, lest it neglect us in our time of need. We''ve learned this lesson before.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14509, 'Standing in the way of nature is heresy. Even when nature''s force is a destructive one.$B$BThe forces that would destroy Darkshore are not natural, however. I will not let this land be torn asunder.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14510, 'How do you do? I''m Gary, and I assume Gorbold sent you.\r\n\r\n\r\n\r\nIf you''re here to help, the plan''s pretty simple. I''ve rigged up some decoy bots. We prance the little fellows in near the murlocs and activate their countdown. They''ll pulse light and sound to attract the murlocs, and after several seconds, they''ll explode, taking the murlocs with them.\r\n\r\n\r\n\r\nIf we get enough of these in there, we should be able to make our way to the ships'' holds again. With less casualties this time hopefully. That part''s not for you though, just get to blowing those little fish men up!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14511, '', 'While the elements are doing their best to tear Darkshore asunder, I''ve been struggling to protect the remaining wildlife.$B$BCan I count on your help, $c?\r\n\r\n', 0, 0, 1, 0, 2, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14514, 'Don''t just stand around, $r...$b$bThere''s work to be done!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14517, 'Be still, little one, and you can hear this ancient land speak. It cries out in pain.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14518, 'Hum, hrm. A powerful reagent for one so young. You will kill many foes in the name of your Alliance, but it is important to remember that in the great cycle, birth is as powerful as death.$B$B<Onu slowly reaches up to his head and withdraws an inconspicuous acorn. He lowers his arm to you with unhurried calm.>$B$BThis is extremely potent.$B$B...I apologize, I did not wish that to sound like a boast.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14520, 'Let us see if we can freeze the enemy where they stand, little $r.', '', 0, 0, 1, 0, 33, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14521, 'Our brother has lost his way. He scorches the ground, he vaporizes the water, and devours too much air.$B$BHelp us to bring him back into balance and harmony.', '', 0, 0, 1, 33, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14523, '<*Rumble*Rumble*Rumble*>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14524, '', 'I appreciate your help defending the wildlife here. Hopefully we''re not too late.\r\n\r\n', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14526, '', 'I wish I could tell you more, but until recently nobody believed such creatures existed. Long before the Titans shaped Azeroth into the world we see today, before the natural cycle of life and death as we know it, the Old Ones ruled over the elements and corrupted creation to serve their own malignant ends.$B$BFrom what Onu here tells me, the Titans ultimately defeated the Old Ones. Or, at least, they imprisoned them under the earth. Can something like that ever really die? I wish I knew more, but this is all pre-prehistory for me, and I''ve been around a while.$B$BI know that there are some that worship the Old Ones, if you can believe that. That''s like praying for the end of the world. These Old Gods make people crazy!\r\n\r\n', 0, 0, 1, 0, 274, 800, 1, 800, 6, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14529, 'Abandon the dig? Ridiculous! In my long industrious career, I''ve never abandoned a site. Not intentionally. Misplaced a few, maybe. Who are you again? What are we doing here?', '', 0, 0, 1, 200, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14531, 'This dig here is compromised - the Explorer''s League wants us to grab whatever''s left of value and clear out. Easily said, not so easily done.', '', 0, 0, 1, 200, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14532, 'Murlocs. Bah!', '', 0, 0, 1, 200, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14538, '', 'We must do more than hold the tree, $r. The Horde will never give up.$B$BWe must destroy them!', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14541, 'I have been assisting the flight masters to round up the Hippogryphs that fled their post when the land tore itself apart. Even now our birds remain squeamish.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14545, '', 'I''m honor-bound to get these supplies to Crossroads. Pitch in or step aside.', 0, 0, 1, 50, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14546, '', 'Well, $N - are you ready to roll? It won''t be easy!', 0, 0, 1, 50, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14547, 'Elune guide us, $c.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14548, 'We must not allow an inch to our enemy. If they strike in Darkshore we will fight them back just as if they had attacked Darnassus itself.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14549, '', 'Need some help finding your way? I know this place like the back of my hand.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'It saddens me to see the furbolg all corrupted so readily. These used to be our friends.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'This place is infested... we''ll need to make our way out of here with the relics as quickly as possible.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'I haven''t seen any of the sleeping druids. They must have been taken from here already.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'We should have seen this coming. The corruption has been spreading for quite some time.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'If the furbolg could be this far gone, what does that say for the rest of Teldrassil?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'There has to be a way to stop this corruption before it consumes us all.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'Damn you, Fandral! What have you gotten us into with this cursed "World Tree?"', 0, 0, 1, 0, 0, 0, 0, 0, 0, 0), +(14553, '<Snort> Is this how cowards fight, $r?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14554, '', 'The quilboar have always scavenged the fringes of our camps for food and supplies, but direct assaults on our farms and homesteads? Something has sent them on a rampage recently.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14555, '<The quilboar fixes his beady black eyes on you.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '<The quilboar wrinkles his nose at you and snorts.>', '', 0, 0, 2, 0, 0, 0, 0, 0, 0, 'What now, $r? Do your worst.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'We''re warriors, $n. <Snort> Many and proud.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14556, '', 'Hi there!', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14557, '<The furbolg sniffs at you and grunts.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14562, '', 'Another new face? It''s so good to meet you. I''m Dellylah.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14563, '', 'I know all is not well in Shadowglen, but coming back to these woods is always like coming back home.$B$BEver peaceful. Ever pure.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14564, 'Used to be hauling gear and food from Orgrimmar to Crossroads was peon-work. Nowadays my neck''s always on the line.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14565, 'Ho, $N! My brother Balgor tells me you''re quite the shot from the back of a kodo. Great work getting that caravan here from Far Watch in one piece.$B$BListen, there''s plenty of work for you here in Grol''dom... but I could use your trigger fingers for the rest of the ride to Crossroads.$B$BCome see me when you''re ready!', '', 0, 0, 1, 0, 3, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14566, 'Are you ready to do this, $N?', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14568, 'Beware, $N!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14569, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14571, 'Good day to you, $r.', '', 0, 0, 1, 33, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14572, 'The savior of the forest! Were it not for your actions, Astranaar and then the rest of Ashenvale surely would have fallen to the Burning Legion.$B$BI hope that this day finds you well, $N!', '', 0, 0, 1, 34, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14574, 'Hey mon, how''d you find me? I gotta find a better hiding spot.', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14575, 'You call yourself, $N? That is a strange name for a furbolg.$B$BYou''re not from Ashenvale.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14576, '<Ota Wen''s eyes, already dull from his enslavement, glaze over even more at your suggestion. You feel the power of Dartol''s Rod begin to course through you and reach out to touch the furbolg.>$B$BRise up?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14577, '<A strange light ignites in Ota Wen''s eyes as he stands up straight, roaring at the heavens.>$B$BYES, WE WILL RISE UP! RISE UP AND DESTROY OUR JAILORS!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14579, 'Take a deep breath, $c. The air atop Thunderhead Summit is thin, but free of the choking dust that strangles the land below.', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14580, 'Some help, my little friend?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14584, '', 'Please $c, don''t encourage Gorgal. We''re supposed to observe and report - not raise us a ruckus.', 0, 0, 1, 0, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14585, 'Sneak, sneak, sneak. Let me tell you something about Gorgal: Gorgal doesn''t sneak.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14590, '', 'Hey there, boss. I trust that you''re enjoying your new promotion?$B$BWe all think that you''re the one who''s going to finally be able to replace that stinky ol'' Gallywix and take the title of Trade $g Prince : Princess;. But you didn''t hear that from me!$B$BWe have a lot to do and very little time. Hope you''re ready!', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14591, 'Hey $r. Seeing any profit lately?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14593, 'These monkeys are a real pain!', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14595, 'What? $N, you''re not a warlock.$B$BThere''s nothing that I can teach a $c like you, $g sir : ma''am;.', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14596, '$N, I''m glad that you''re here. Maybe I can teach you a thing or two.$B$BWhat do you think, $g sir : ma''am;?', '', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14597, 'Somehow I doubt that you want training from me, $N. I''m not sure those fingers can handle a firebolt.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14599, 'Can you believe these monkeys, $N?', '', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14600, 'Ah good, there $g he : she; is... my future $g master : mistress; of the elements! What kind of training would you like today?', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14601, '', 'You don''t have to be a priest to tithe. Your coin is just as welcome, $g sir : ma''am;.', 0, 0, 1, 0, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14603, '', 'I''m surprised that a $c like you could even see me, $N. I''m stealth on a stick!', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14604, '', 'Sure, $N, I''ll train you, $N. Just keep an eye out for those monkeys!', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14605, 'Warrior-Matic NX-01 is currently offline.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14612, '<The drunken engineer blinks blearily and waves at you.>', '', 0, 0, 1, 0, 3, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14616, '<The Engineer slumbers fitfully on the floor.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14623, 'What''re ye starin'' at, $r? Come ta torment the condemned?', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14624, '<The Baron lifts his manacles.>$B$BCome on then, $c. Do ye trust me?', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14625, 'Well? Don''t ye have heads ta roll an'' treasure ta dig up?', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14631, '', 'Do not trifle with me, $r.', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14636, 'I am told Pilgrim''s Bounty is a time to reflect upon one''s good fortune and share with all around you.$B$BWe are lucky to have found this world and its bold inhabitants; it is only fitting that we lend our knowledge and strength to these new-found allies.', 'I am told Pilgrim''s Bounty is a time to reflect upon one''s good fortune and share with all around you.$B$BWe are lucky to have found this world and its bold inhabitants; it is only fitting that we lend our knowledge and strength to these new-found allies.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14637, 'Humans can''t brew their way out of a tattered linen pouch, but there sure know how to cook. Pilgrim''s Bounty? I''m all for it!', 'Humans can''t brew their way out of a tattered linen pouch, but there sure know how to cook. Pilgrim''s Bounty? I''m all for it!', 0, 0, 1, 1, 11, 0, 0, 3, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14638, 'The logistics involved in the optimal celebration of Pilgrim''s Bounty are quite staggering... so many raw materials, so much labor, thousands upon thousands of crates of finished product shipped here and there and everywhere for countless Bountiful Tables.$B$BHonestly, I''m quite impressed! And hungry... I can smell pumpkin pie. Can you smell that pie?', 'The logistics involved in the optimal celebration of Pilgrim''s Bounty are quite staggering... so many raw materials, so much labor, thousands upon thousands of crates of finished product shipped here and there and everywhere for countless Bountiful Tables.$B$BHonestly, I''m quite impressed! And hungry... I can smell pumpkin pie. Can you smell that pie?', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14642, 'The orcs and tauren are fortunate to have found one another, for each people''s strengths compliment the other''s. We are glad to join them in this celebration.$B$BEven the Forsaken partake, though to what end I am not certain...', 'The orcs and tauren are fortunate to have found one another, for each people''s strengths compliment the other''s. We are glad to join them in this celebration.$B$BEven the Forsaken partake, though to what end I am not certain...', 0, 0, 1, 0, 1, 3, 6, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14643, 'Pilgrim''s Bounty is a time to reflect upon one''s good fortune and share with all around you.$B$BIn Mulgore and the Horde, we have found both a home and friends to enjoy its many fruits with.$B$BIt is our hope that every one of our allies will be able to join us in feasting and celebration.', 'Pilgrim''s Bounty is a time to reflect upon one''s good fortune and share with all around you.$B$BIn Mulgore and the Horde, we have found both a home and friends to enjoy its many fruits with.$B$BIt is our hope that every one of our allies will be able to join us in feasting and celebration.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14644, 'Dem tauren, dey be KNOWIN'' how ta cook. Have ya SEEN all de food dey be servin''?$B$BI''m gonna eat ''til I die... an'' den come back from de grave ta be eatin'' some more!', 'Dem tauren, dey be KNOWIN'' how ta cook. Have ya SEEN all de food dey be servin''?$B$BI''m gonna eat ''til I die... an'' den come back from de grave ta be eatin'' some more!', 0, 0, 1, 0, 5, 2, 11, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14645, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14649, '<The troll before you is covered head-to-toe with gashes and scars, including a fresh slice across his face that has fattened his lip.>$B$BHewwo!$B$BAs you know, twolls wide waptors. The pwobwem is cowwecting the wild waptors for twaining! That''s where I come in. I''m a waptor twapper.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14652, 'Be caweful with the waptors, they can be wewy wewy smawt.$B$BLast week two hewd me down while a thiwd beat me with a stick.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14657, '', '$G Mr. : Ms.; $N, so very good to see you.$B$BI hope that you are enjoying the Kaja''Cola marketing campaign. We''re planning a massive set of explosions for the next phase of the campaign. That always goes over well with our target demographic.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14681, '', 'Hi, babe! How do I look?', 0, 0, 1, 0, 4, 0, 0, 0, 0, '', 'I missed you so much! Where have you been?$B$BAre you going to answer me, or just stand there?', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', 'Do you like my outfit? It''s for the party. I charged it to your account.', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', 'There was another guy just hitting on me. Oh, the nerve!$B$BWill you beat him up for me, sweetie? Thanks. Love ya!', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', 'I can''t wait for the day when you rise to the top. Just think, I''ll be able to call myself Mrs. Trade Prince$B$BNot to mention buy all that stuff I''ve always wanted!!!', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', 'Be careful out there. I heard that there are Southsea pirates in the bay.$B$BHmm, maybe I should go check for myself...', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', 'Can we go on a nice, romantic picnic on top of Mount Kajaro?$B$BMake sure you pickup my favorite champagne!', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', 'You''ve got a miscievious look in your eye. What have you been up to, babe?$B$BWell?', 0, 0, 1, 0, 6, 0, 0, 0, 0, 0), +(14683, 'I adore you! You believe me? Right, baby?', '', 0, 0, 1, 0, 17, 0, 0, 0, 0, 'Sweetie, where have you been? You know how worried I get when you don''t check in with me!', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, 'What do you think of my abs, baby? I just got back from the gym.$B$BI am one fine piece of meat!', '', 0, 0, 1, 0, 23, 0, 0, 0, 0, 'Those other women are just friends, baby.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, 'I like what you''re wearing!', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, 'I know that I promised you last night, and the night before that, but I''m taking you out someplace really nice tomorrow night!', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, 'I heard that some Southsea pirates pulled into dock earlier. Be careful if you go into town!$B$BThey even have women pirates! Hmm, maybe I should go check it out myself? Just to make sure it''s safe for you out there, baby.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, 'How''s my hot, company executive girlfriend today? With the way you run things around here, I think that any day now we''ll be calling you Trade Princess $N!$B$BI cannot wait! I''m gonna spend my days at the gym and working on my tan by the pool.', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, 0), +(14684, 'Hey there, boss-$g man : lady;. This batch of troll slaves has got to be the worst yet!$B$BLucky for us that the Kaja''mite doesn''t seem to be making their soft brains any smarter, eh?', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14690, 'For years I served in this backwater corner of the world, learning the terrain and biding my time. At last our time has come. The full might of Orgrimmar is now turned to Azshara, our gateway to Ashenvale and dominance over this continent. Welcome to the front lines, $c.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14693, '', 'Yeah? Whatdya want?', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14694, 'Beat it, pal, before I give you the ol'' Chip Endale fist to the face!', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14695, 'Welcome to First Bank of Kezan, a wholly-owned subsidiary of the Bilgewater Traders & Merchants Bank Of The South Seas.$B$BWhat can I do for you today?', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14697, 'Yo! You look like a $g man : woman; of discerning tastes.$B$BWhat can I do you for?', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14698, 'That bling is phat like your momma!', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14700, 'Look what I have to work with. Szabo can perform miracles?$B$B<Szabo sighs>$B$BYes, yes. Szabo thinks he can do something with you.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14702, 'Oh, just look at what Szabo has done. A masterpiece!$B$BYou are not worthy of such an outfit, but Szabo needs the money. <sigh>', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14703, '', 'I gots all kinds of brands of shades. Yous name it, I sell it!', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14705, '', 'Here yous go. My best pair and I''m giving them to ya cheap!$B$BYous gonna look sharp in them!', 0, 0, 1, 0, 25, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14729, 'Begone, insect. You do not belong in these lands. Do not provoke my ire.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14731, 'Thanks again for the help with these lazy cretins, boss-$g man : lady;.$B$BIf you ask me, we shouldn''t have been so lenient with the trolls when we freed ourselves from being their slaves.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14735, 'Yes, $c?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14739, 'This monument hums and crackles with perpetual ancient energies.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14740, 'You''re looking at the most state-of-the-art mining operation in the world. Only rubes would bother to tunnel under a mountain to get at the minerals below. We moved the whole mountain! Now we can just scoop the precious metals right off of the ground.', '', 0, 0, 1, 273, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14742, '', 'At long last we have an opportunity to study the ruins that dot this landscape... Provided these moneygrubbers don''t level the place first.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14744, '', 'Are you familiar with the War of the Ancients, $N? That is what we call the period of time 10,000 years ago, when the demons of the Burning Legion first breached the realm of Azeroth and attempted to devour this entire world as they have countless others. The ancient capital of Azshara, a city that once dominated this landscape, was ground zero for the invasion. The ancient wreckage you''ll find scattered throughout the area stands in broken testament to the egotism of our forebears.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14745, '', 'My concern for the moment is with the ruins that surround Lake Mennar, to our east. Thousands of years ago the Mennar Academy was among the first to study the arcane arts. It was a beautiful terraced structure built in a ring around a tranquil lake, a place of quiet contemplation and focused study. It was there that my ancestors first discovered the potential of the magical energies seeping from the Well of Eternity.$B$BI''m sorry - is this all too much to take in? I''ve immersed myself in arcane history for several decades now, I forget that others do not share my passion.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14746, '', 'Suffice it to say that the academy was cautious in its application of these newfound powers - what few writings remain indicate that the mages there worried about arcane addiction, a problem my race suffers from to this day.$B$BThis restraint put the mages of Mennar in opposition to Queen Azshara and her highborne lackeys, who sought ever greater power with wild abandon, throwing caution to the wind and delving into ever more dangerous applications of the arts.', 0, 0, 1, 274, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14747, '', 'By the time the Burning Legion began its assault, the mages at the Mennar Academy had fallen far from the Queen''s graces. They would''ve been a powerful asset in the war to come, but they refused to fall back when the rest of the city fell.$B$BInstead of regrouping outside the city to join in the counter-assault, they stayed behind, erecting magical barriers and turning their once quiet home into a fortress. Refugees streamed to the Mennar Academy in the first terrible days of the invasion, and survivors rallied to mount a defense.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14748, '', 'Hold out? Against a full frontal assault from the legion''s vanguard? Not likely!$B$BNo, history doesn''t record what happened next... for there were no survivors. The raging demons left little more than the ruins you see today, and the secrets of the academy lay buried under the soil of Azshara.', 0, 0, 1, 11, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14749, '', 'I like the way you think, $r!$B$BUntil recently, the latent magical energies of the academy grounds attracted the attention of the Blue Dragonflight, and I wasn''t able to study them. The attention of the dragons is now elsewhere, but a worse threat is in the making - these little green brutes want to level the ruins to make way for a fuel depot! Knowledge lost for ten thousand years is days away from being lost forever. We''ve got to act fast.', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14752, '', 'The Gumps are letting me help them run their shop! I just love flowers.$B$B<Little Adeline suddenly squints at you, looking very serious.>$B$BDo you like flowers?', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14762, 'I... I lost control of the mines!$B$BPlease, $g sir : ma''am;, don''t fire me!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14766, 'Kalytha - you''re still alive! Find some cover, there''s no end to these ... things!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Am I still bleeding? I can''t ... I can''t keep this up much longer. Have you seen any of the archmages?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Hmph. I suppose these are the consequences of magic. You reap what you sew ... Elune help us all.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Kalytha! Archmage Selwyn was looking for you. She should be nearby...', '', 0, 0, 2, 0, 0, 0, 0, 0, 0, 'These creatures ... so many of them. So many dead! Look at Azshara burn. What have the highborne done?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Why didn''t I flee with the others? They''ve got the academy surrounded. We''re trapped here.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14767, '', 'I''ve got to keep the arcane wards charged.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'My strength ... is beginning ... to falter. Kalytha, please tell me the Archmages have a backup plan...', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'I can''t maintain this shield much longer. Kalytha - are any of us going to survive this?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'More of these creatures! Where are they coming from? What''s going on in the capital?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'Kalytha! Hurry - Archmage Selwyn wanted to see you, she said it was urgent. Maybe we can win this thing?', 0, 0, 2, 0, 0, 0, 0, 0, 0, '', 'It''s all I can do to keep these wards up. Find one of the Archmages, Kalytha! I feel like I''m about to collapse...', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14768, '', 'Kalytha ... it is done. The Sarcen Stone is fully charged and is already diverting energy from the portal. Are you still the incredible swimmer I knew those many years ago? The stone must not be found by either the demons or our "beloved" Queen.$B$BSwim to the bottom of the lake, Kalytha, and bury the stone deep under the center arch. Hopefully the demonic invaders will not discover it when they raze the surrounding temple. Go!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14770, '', '<The shimmering vision does not acknowledge your presence. She is lost in her own world, reacting to events that played out thousands of years ago.>', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14786, 'It is not safe out here, $N. Seek shelter before it''s too late.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14789, '', 'Marooned! Blasted to bits by the Alliance and stranded on some island in the middle of who-knows-where?!$B$BBusiness as usual, right, $N?', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14792, 'Greetings, $c.$b$bLook around you. Have you stopped to ponder what all of this means?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14795, 'Sabotage! I''m ruined....$b$bWhoever''s behind this will pay! I promise you that....', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14796, '$N? $G Sir : Ma''am;, you''re not a hunter, you''re a $c.', '', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14797, 'Oh, you and I are going to have a great time. I have so much to teach you about the ways of the hunter.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14798, 'We need you, $N! There are worgen everywhere!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14799, 'It''s just horrible. I think they''re all dead.$B$BHow will I get the Kaja''mite out of there now?', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14801, '', 'The whispering winds have made it known to me that a $r $c would come; that $ghe:she; would assist me where many others have failed.$b$bCould you be the one?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14802, 'I can''t offer you any training, $N, but I sure could use your help against these damn monkeys!', '', 0, 0, 1, 25, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14803, 'There''s my favorite warlock! What dark secret can I whisper in your ear today?', '', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14805, 'Hey there, $g Mr. : Ms.; $N. I can''t train you in the ways of magic, but all of this finger-waggling means that I can give a mean neck massage.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14806, 'What a wonderful day for some training in the mystical arts. Wouldn''t you agree, $g Mr. : Ms.; $N?', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14807, 'You''re doing a great job, $g Mr. : Ms.; $N. Keep up the good work.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14808, 'I see such a bright future for you, my $g boy : girl;! What shall I teach you today?', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14809, '', 'Shipwrecked on an island infested with bomb-throwing monkeys? What''s next... is there a volcano that''s going to blow?!', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14811, '', 'You can see me? How can you see me, boss?$B$BI''m going to have to work on that.', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14812, '', 'Training, massages, whatever you need, boss. Just don''t forget me when you''re the new Trade $g Prince : Princess;!', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14826, 'When I trained as a guard in Orgrimmar, Thrall urged us to be patient and cautious when dealing with enemies.$B$BBut Naga threaten to overrun this peninsula, and Thrall is no longer my Warchief. The time has come to shed some blood, $c.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14827, '', 'Why are you interrupting my work here?! Explain yourself!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'You''d better have good reason to approach me, minnow!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'What''s this? What do you want with me, minnow?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14831, 'Keep that sword arm straight, $N.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14832, 'You''re not a warrior! You''d better go back inside the perimeter to where it''s safe... no offense.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14833, 'My humblest apologies, Champion, but you have run out of opportunities to complete the Trial of the Grand Crusader. As a reminder, you and your fellow adventurers are able to begin the Trial of the Grand Crusader once every week. May the lessons learned this week bring you one step closer to final victory here and against the Scourge!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14834, '', 'Your efforts here shall not be forgotten, $n! I shall make certain of that.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14835, '', 'You are not initiated in the old ways. There is nothing I can teach you, child.', 0, 0, 1, 0, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14836, '', 'The worgen will pass. We shall pass.$B$BOnly the earth and her secrets will remain. Are you willing to learn, $N?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14838, 'We''ll get through this, $N. We''ll be wearing these beasts'' pelts when we''re done.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14839, 'Be very, very quiet. There''s worgen everywhere.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14840, '', 'Of course, I will share my knowledge with you. Especially if it helps us defeat the worgen.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14841, '', 'I''d have a hard time teaching you. It takes years of mental preparation to become attuned to the powers of the arcane.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14842, '', 'Ask me for help and advice... just don''t ask me for money, okay?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14843, '', 'I swear this wasn''t my fault. Why are you looking at me like that?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14844, '', 'Even now, in the darkest of times, the teachings of the Light will guide you throught this world.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14845, '', 'The Light is with you, $c. No harm will come to you today.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14846, 'I think that we might have angered them.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14848, 'Even the most superficial glimpse into the secrets I hold would drive you mad, $c.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14849, 'Yes, fleshling?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14860, '<Kilag motions you to keep your voice down.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14863, 'I''m leaving for the next rendezvous point in a few seconds.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14867, 'The quantity and quality of rewards inside the tribute chest is based upon how many unsuccessful attempts you had during the Trial of the Grand Crusader. The fewer unsuccessful attempts, the better the rewards.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14868, 'You two be more careful! There are only so many of us!', '', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14869, 'What?! You think I''m made out of miners?$B$BHow bad can it be in there?', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14870, '', 'Do you see the gyrochoppa on the far side of the beach, $N?!', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14871, 'Get the keys and then get to that gyrochoppa!', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14873, 'I have been shown the future, $r.$b$bCentaur lands will be forever corrupted if we fail to act quickly.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14874, 'Bleh! Clearly built by gnomes.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14875, 'A goblin? I must be seeing things. Throm-Ka and thank you, little one!', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14879, '$N, sit on down. The fire''s warm and the monkeys don''t seem to like it.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Who would''ve thought we''d wind up here after everything we''ve been through?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Hey, look guys, it''s $N!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Looks like we''re in a pretty tight jam. Think you can get us out of here?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14880, '', 'Oh, $N, we''re marooned!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'I miss Kezan. Will we ever see Bilgewater Port again, $N?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'Sit with me a while. We can roast crabs over the fire and sing songs.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'I put this all on you, but what are you doing to get us off of this island?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14881, '<Gobber grunts.>$B$BMe banker now!', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14886, 'Lok''tar ogar, $N!', '', 0, 0, 1, 0, 15, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14888, 'Hello! Someone who doesn''t smell like fish. I like.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14897, 'Greetings, friend.$b$bEnjoying the glade, I trust?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14932, 'Make it quick, $r.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14938, 'I failed to defend my people in Gilneas City. It seems the fates have given me a second chance, $N. I will not fail again!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14942, '', 'Look around you, $c!$b$bIsn''t it all just beautiful?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14945, '<Gormungan''s voice booms deep from within, hurting your ears and reverberating in the very ground beneath your feet.>$B$BHallo, softling.$B$BYour kind dashes about, always running, never stopping. Rest with me a while.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14946, 'Ha - harrrum! Food? We don''t eat squishlings, friend, not unless they aggravate us. We eat rocks and stones and earth. Though I sometimes find the crunch of bones makes a delightful seasoning.$B$B<Gormungan lifts up a boulder and, with one enormous hand, smashes the corpses you''ve given him onto the boulder as one would put icing on a cupcake. He crunches his treat, rumbling happily.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14947, 'Azsharite? You soft ones come up with new names for everything. What is this "azsharite?"', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14948, '<Gormungan''s laugh, deep and long, rumbles the ground and causes distant rockslides.>$B$BOh - hah! Harroooo - Ha harum! Little friend, I am sorry. I suppose my kind does not pick up after ourselves as you do.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14949, 'It comes from - harum - what is your word for it? Harrrm. Let us say that my kind does not have bathrooms. Do you understand?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14950, 'It would seem so. You and your friends are welcome to as much as you can find. I suppose it''s very potent. We don''t need to go that often.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14951, 'We don''t live our lives as quickly as you do, my mushy friend. A healthy giant eats three square meals a decade, although I am known to indulge in a snack every couple of years. We''ll go to the bathroom every 15 to 25 years... barring any tummy trouble.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14952, '<Gormungan emits a good-natured snort.>$B$BHaaarrum! I have never had my personal habits scrutinized so. Your kind never ceases to surprise me. Farewell, friend, and good luck with ... whatever it is you are on about.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14955, '', 'Yeah? Whadya want?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14956, 'Listen, $N, I can''t be seen talking with you. You''re not exactly at the top of the Trade Prince''s list these days and I need to think about my future.$B$BYou understand, right, babe? Besides, I''m with Candy now.', '', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14959, '<The trade prince lowers his voice to barely a whisper.>$B$BDon''t think for a moment that I''ve forgotten how much I despise you, $N, rescue or not.$B$BDon''t worry your $g simple : pretty; head. I''ll get my revenge soon enough, mark my words!$B$BYou''ll fare far worse than being my slave. There''ll be no escape for you this time.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14961, 'We owe you a debt that will be hard to repay, $N.', '', 0, 0, 1, 2, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14962, '', 'Thank you for freeing Thrall, $N. He''s been missed.$B$B<Aggra looks over at the Warchief.>', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14964, 'Hallo again, soft little friend. What''s that you have there?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14965, 'Hey, $g bro : lady;. Rocket ride! Yeah!', '', 0, 0, 1, 4, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14966, '', 'Oh, $N, you''ve saved us again! Thank you for getting rid of those evil humans before they could get us!', 0, 0, 1, 17, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14967, '<Gormungan eyes the laxative with suspicion, then sniffs it. With visible irritation, he begins smooshing and molding the laxative into the shape of a goblin.>$B$BI suspect your little green friends are putting you up to no good. Please explain to them that we giants are not to be toyed with.$B$B<To demonstrate his point, Gormungan twists the head off of his chocolaty goblin statue before handing it back to you.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14969, '', 'Grapplehammer relies on me to get things done. A mind like his needs to be free of distractions.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14970, '', 'Are you ready to be shrunkified? This may sting a little. And burn. The agony and convulsions will pass quickly, however.', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14971, 'Hum - Wha?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14976, 'Lovely outfit. Dressed for the part!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14977, '<A hand-lettered sign reads:>$B$B Secret Lab Archives$B X. Nizzlebex, Lab Director$B$B$BPlease ring buzzer for service.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14981, 'Hey there, $N. I know, it''s not much, but the trade prince''s wreck is home for now.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14982, '', 'Greetings, $r. Please do not alarm yourself. I am indeed speaking to you in your native tongue.$B$BMy own considerable raptor intelligence has been augmented through a series of experiments. You may refer to me as "Subject Nine," an identity recently bestowed to me by my creators, who are otherwise at the moment occupied or deceased. Perhaps you can render me some assistance?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14983, '', 'With the benefit of my improved cognitive capacity, I am able to turn fresh eyes upon the rest of my race. A majority of our energies were spent in the hunt of fresh prey. Why, I wonder, did we not invest that time developing a store of domesticated creatures from which to draw our food supply?$B$BI am naturally inclined to think that humans would make excellent foodstock. They breed quickly, fatten up nicely, and can be trained to do menial chores for the herd until harvest time. Hmmm.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14985, 'Is this really a good idea?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14986, 'My brothers and I can reach northern Gilneas by boat in a matter of days. As soon as we finish the repairs, that is.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14987, 'Oh, pay no attention to me. I''m just a messenger. The leader of the Deathstalkers certainly wouldn''t be stupid enough to stand here on the dais waiting to be gutted. No need for history to repeat itself.', '', 0, 1, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14988, 'Out of the frying pan and into the fire, eh $N?', '', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14990, 'I''ve been patient up to this point, but if they don''t get that rocket sling working soon, I''m going to shadow bolt someone!', '', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14991, 'I''ve been patient up to this point, but if they don''t get that rocket sling working soon, I''m going to shadow bolt someone!$B$BNeed some training, $N?', '', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14992, 'I saw Dampwick ride across on that thing. I''d rather use a Slow Fall spell, but I don''t know that one yet.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14994, 'Good job, $N! Isn''t this all very exciting? I wonder what the next island will be like?', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14995, 'Good job, $N! Isn''t this all very exciting? I wonder what the next island will be like?$B$BCan I teach you anything new?', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14996, '', 'Sounds like you''ve had quite the adventure, $N. There must have been plenty of moolah on those Alliance creeps.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(14998, '', 'Hey there, $N. I for one am glad to be away from those damned monkeys!', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15000, 'Warrior-Matic NX-01 is currently offline.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15001, 'Warrior-Matic NX-01 online.$B$BPlease insert coins for training.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15002, '', 'I would like to reiterate how pleased I am with the continued development of our working relationship, $N. In the weeks following my stunning cognitive enhancement, my goblin benefactors became apprehensive, perhaps outright distrustful, as my intellect eclipsed theirs.$B$BWhat a shame that my progenitors were unable to prevent this recent cascading series of industrial ''accidents'' that now allows me to operate so unencumbered...', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15007, 'Kaja''mite... you know, the stuff that legend holds helped the entire goblin race to evolve into the ultimate masters of alchemy and engineering?!$B$BIt''s the stuff that helped us to overthrow our jungle troll oppressors, to take control of Kezan -- may she rest in peace -- and is the most valuable ore in all of existence!$B$BHey, you don''t think that it''s having any effect on those monkeys do you?', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15008, 'The ruins scattered throughout this area are remnants of the night elven civilization at its former peak. They are a treasure trove of information for those who study the arcane.$B$BAnd it would seem they have attracted the attention of a most unusual group of night elven mages. Yes, you heard me $r - night elves are trying to reclaim their magical heritage! I would find it amusing but for the terrible potential should they discover anything of value here.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15012, '$N, my $g boy : girl;!$B$BWant me to teach you any of my thermal palms healing techniques?$B$BNo? How about bandages? Do you want to learn about bandages?', '', 0, 0, 1, 1, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15013, 'No hard feelings, $N. You might be a feral killing machine, but it looks like you''re with us for now.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15021, 'I remember when my brother and I would camp alone in the Azshara wilderness. Look at it now. ', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15025, '', 'It really is good to see you again, $N. Fur and all.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15028, 'Keep your sights straight, $N.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15029, 'You need something, $c?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15034, '', 'Can I provide you with anything, $N?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15035, 'Can I interest you in a new weapon, $c?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15036, 'I witnessed the handiwork of our new goblin allies when I was stranded in the Lost Isles. But now we put their ingenuity to the test: here we face down our foes in their own stronghold.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15042, '', 'Great blessings be upon you, good $r.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15063, 'If you ask me, the night elves lost this area ten thousand years ago. Their expulsion today at our hands is merely a formality.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15079, '', '<The raptor peers at you, growls, and slobbers.>$B$B<It appears Subject Nine left behind an un-augmented clone of herself in order to cover her tracks. Clever girl! You ponder over what exactly you''ve unleashed onto the cosmos...>', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15083, 'It takes a few good crashes to really "season" a flying machine.$B$BNo goblin in their right mind flies one pristine.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15104, '$G Sir.:Ma''am.;', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15110, 'The elements favor you. What will you ask of them?', 'The elements favor you. What will you ask of them?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15111, 'The elements are fickle and best left out of untrained hands. My apologies, but I have no need for yours.', 'The elements are fickle and best left out of untrained hands. My apologies, but I have no need for yours.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15112, 'I am truly blessed to have so many loyal and dedicated apprentices. My work would be impossible without this influx of test subjects.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15117, 'My commander was butchered before my eyes - my brothers dead all around me - I could not fight on. I am so ashamed, $c. I did not avenge them.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, 'We grunts were ordered to charge once more - into a wall of pikes - I could not do it, $c. My weapon slid from my hands and my legs did not move.$B$BI am dishonored.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, 'Do not look at me, $r. I have disgraced the Horde. I am done.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, 'No orc should ever flee from battle as I did. Leave me to my disgrace. Would that I would die in this tower, but I dread learning what my ancestors think of my cowardice.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15121, 'No team''s ever come back from this far behind!', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15126, '', 'These hills and hidden trails are my home. For years I have used them on the hunt.$B$BI never thought I''d use them to fight a war.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15127, 'Years ago, the Grimtotem raided my village. The pain, the anger, the loss - still they weigh on my heart.$B$BAnd now I find myself giving comfort and aid to others who have lost their village to a savage attack.', '', 0, 0, 1, 274, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15128, 'From these hidden paths we can rain terror down on our enemies below.$B$BThere is not much honor in hit-and-run strikes, but a good warrior knows to keep his foe off-balance.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15131, '', 'What d''ye want, $c?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15132, 'The trolls are acting strangely, $n. I don''t like it. I don''t like it one bit.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15135, 'We are outnumbered here, our ties to Crossroads and Durotar severed. But one orc is worth 10 Alliance cowards.$B$BWe will bottle them up in this pass and gut them like swine.', '', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15136, 'It was a clever ruse, $N. Alliance forces streamed out of Northwatch and marched up the gold road, besieging Crossroads as dusk fell. Then, in the heart of the night, they force-marched southward, leaving their campfires burning behind.$B$BOur meager forces at Honor''s Stand were caught unawares as the Alliance poured through the pass at dawn''s first light. Many of our bravest warriors fell before their blades.', '', 0, 0, 1, 1, 274, 15, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15137, 'Yes. We regrouped east of the pass and prepared a counter-attack, but the next day, the skies reddened and the land was cleaved in two, as easily as a child might split open a cactus apple. See how the devastation stretches from horizon to horizon?$B$BOur Alliance foes in their makeshift bunkers were as surprised and disorganized as we were by the disaster. It would''ve been the perfect time to strike! But Warlord Gar''dul insisted we pull back to the south to refortify.$B$B<Kilrok spits on the ground.>$B$BNot all of us followed. I stood toe-to-toe with demons in the last war, $N. I''m not about to turn tail and let the Alliance plant roots on my soil.', '', 0, 0, 1, 273, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15138, 'To fight, yes. To die? Likely. But we will give them no ground, $c.$B$BWe are outnumbered. Our armor is patchwork, our weapons scavenged.$B$BBut this is our land! Our tauren allies know every hidden trail, crevice, and pass through these hills. We descend from the high ground where they least expect us, then disappear into the terrain like phantoms. Fear is our weapon, and we will strike at them unceasingly.', '', 0, 0, 1, 5, 1, 66, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15139, 'Oh dear. Things aren''t looking good for Felix.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15140, 'When d''ye think we can leave? I need ta get back to work.', 'When d''ye think we can leave? I need ta get back to work.', 0, 0, 1, 0, 6, 0, 0, 0, 0, 'Where are all these troggs coming from? Were they livin'' underground the whole time?', 'Where are all these troggs coming from? Were they livin'' underground the whole time?', 0, 0, 1, 0, 6, 0, 0, 0, 0, 'Might as well make yerself comfortable. Ironstock''s not lettin'' anybody out until the troggs die down.', 'Might as well make yerself comfortable. Ironstock''s not lettin'' anybody out until the troggs die down.', 0, 0, 1, 0, 1, 0, 0, 0, 0, 'Have ye any news from outside? I hear the trolls have been actin'' up too.', 'Have ye any news from outside? I hear the trolls have been actin'' up too.', 0, 0, 1, 0, 1, 0, 0, 0, 0, 'It''s gettin'' awful crowded in here. I don''t do well in confined spaces.', 'It''s gettin'' awful crowded in here. I don''t do well in confined spaces.', 0, 0, 1, 0, 1, 0, 0, 0, 0, 'Ye''d think that, after an earthquake of cataclysmic proportions, the LAST place ye''d want ta be is indoors, wouldn''t ye?', 'Ye''d think that, after an earthquake of cataclysmic proportions, the LAST place ye''d want ta be is indoors, wouldn''t ye?', 0, 0, 1, 0, 5, 0, 0, 0, 0, '$N! I hear you''re Ironstock''s new little whipping $r. What''s she got ya doin'' now?', '$N! I hear you''re Ironstock''s new little whipping $r. What''s she got ya doin'' now?', 0, 0, 1, 0, 1, 0, 0, 0, 0, 'I feel like I''ve been cooped up in here forever. Is it Brewfest yet?', 'I feel like I''ve been cooped up in here forever. Is it Brewfest yet?', 0, 0, 1, 0, 5, 0, 0, 0, 0, 0), +(15141, 'My gosh, it''s full of rocks!', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15145, 'How do you do, $c?', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15146, 'By dusk, the flames towered into the sky. I lost everything. Everything.$B$BWhy would they burn an inn?', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15147, '<Kelsuwa doesn''t make eye contact with you.>$B$BI escaped amidst the fighting, but not before freeing all the stabled animals.$B$BI couldn''t keep them with me. They scattered into the smoke...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15148, 'Volcano rocks! Get your volcano rocks here!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Volcano rocks for sale! Hot off the mountain! You want ''em, I got ''em!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Volcano rocks - new low price! You''re gonna love my rocks.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Get your volcano rocks here! ...Great for cats!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Take home a piece of the Cataclysm! Volcano rocks for sale - hot, Hot, HOT!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Papers to weigh? Doors to stop? Windows to break? bam, Bam, BAM! Volcano rocks.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Volcano rocks. Million and one uses. Lava, java, sauna, banana....', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Volcano rocks! Limited time offer! Papers of authenticity and everything!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 0), +(15149, '', 'In our native tongue, "Una''fe" can be translated as "Refuge." But the name no longer fits. From the moment we set up this camp, this strange jungle has threatened to engulf it. ', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15150, '', 'They attacked Taurajo while our strongest were on the hunt. By some miracle, there was a gap in the Alliance lines through which myself and some others were able to carry the little ones...$B$B<Tawane trails off, trying not to cry in front of the children.>', 0, 0, 1, 1, 18, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15173, 'From the safety of Camp Taurajo I once trained young hunters in the ways of the wild.$B$BWe have no such luxury now - skills must be learned in the heat of battle against a foe camped on our very doorstep.', '', 0, 1, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15182, '', 'The Barrens may be dry, but these plains once teemed with life. We roamed, we hunted, and we lived off the land.$B$BThen the Alliance came... slashing, burning, killing. We call these the Fields of Blood now, $c.$B$BThe refugees have all fled. Those who remain behind remain to fight.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15185, 'This is an Emergency Evacuation Portal.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15196, 'This is Desolation Hold, $c. Here we bide our time until we are ready to strike back against the Alliance.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15197, 'Make this quick, $c. The Warchief personally sent me to evaluate our progress in the Barrens, and when I get here I find our towns aflame and Alliance dogs running amok.', '', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15198, 'You have a lot of potential, $N. I''m going to need soldiers like you if we''re going to regain the initiative here in the Barrens.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15200, 'Warlord Bloodhilt? Garrosh''s pet?$B$BThere''s no need for him to be here, as you can see, ah, tell him I have the situation well in hand.', '', 0, 0, 1, 274, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15201, 'But, ah, supplies have been tight. I''ve got, ah, a manpower shortage. Tell Bloodhilt that, ah -', '', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15203, 'Don''t delay, he''s - ah - he''s almost here!$B$BMeet me at the top of the northernmost tower.', '', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15205, 'This is it. I can sense that this was once the site of great tragedy; mortal suffering still echoes through it. No doubt this is what the horrors beyond have seized onto.$B$BTo fully seal this intrusion into our world, I must first fully open it. I will need your strength to hold back whatever may attempt to come through.$B$BAre you prepared?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15208, 'I''ve brought in the best gnomes we''ve got to get those doors open, $N! They''re estimatin'' that it''s gonna take another $4939W days before that door comes down!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15213, 'I told you what I know, now shove off!', '', 0, 0, 1, 274, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15220, 'His spirit is free from the grasp of the Lich King. We must now focus our attention on breaking down the walls that block our passage into the upper reaches. It is only a matter of time now, $N. The siege engineers should have the door down in $4939W days.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15222, 'Now - to the business of winning this war!$B$BAcross the scarred terrain to the east, the Alliance hopes to build an overland link between their coastal strongholds. They think to build a fortress here, in the center of the Barrens. In the center of MY Barrens.$B$BIt will not stand.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15223, 'It was dreadful, $c. Unceremoniously booted from Orgrimmar, jars of fresh squirming body parts smashed to the ground as I was hauled through the gates.$B$BLike I was some kind of monster!$B$BFortunately I''ve been able to continue my research here, where there''s no shortage of fresh corpses.', '', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15224, '<A cockroach slithers from Calder''s mouth and scurries back into his skull through an empty eye socket.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15225, '<On seeing you approach, Calder re-hinges his jaw to speak with you.>', '', 0, 0, 1, 273, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15226, '<You find Calder idly picking at his ear with a dagger.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15227, 'Do you know what I like, $N?', '', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15228, 'Murder.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15233, 'Slow down, friend. You say the General is coming?$B$BNow THERE''S a trophy for my wall! I''ll distract the bodyguards, but it will be up to you to kill General Hawthorne himself. Are you ready to strike?', '', 0, 0, 1, 5, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15235, 'The Butcher of Taurajo will pay.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15236, 'I will not rest, $N. Not until they are driven back to the sea.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15237, 'Yes! Grok''thar More''gar. Bok choy, friend. Um. Zub zub! ', '', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15238, 'Okidoki. Uh. R-ready to work!', '', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15239, 'Only those who have the ranger general''s approval may enter the Sunwell Plateau.', 'Only those who have the ranger general''s approval may enter the Sunwell Plateau.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15241, 'I told Gar''dul not to build a fortress on top of a Silithid colony.$B$BDid he listen to Crawgol? No!', '', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15243, 'My genius cannot be contained within a box!$B$BWait, this isn''t Azshara?! What is this place? That''s a dormant volcano!$B$BI have half a mind to go join the Trade Prince! The other half of my mind is considering the possible weaponization of the clucker eggs!', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15244, '', 'When we were packed into the Town-In-A-Box, they told us we''d be deployed somewhere in Azshara. Is this Azshara?$B$BI ask you: who prepares a Town-In-A-Box and doesn''t supply it with enough food to live on?! One measly Poultryizer?!$B$BWe all know how the "Micro" Mechachicken worked out.', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15246, 'Kneel beside me, friend. I caught a bullet during that last raid.$B$B<Gann grunts in pain as he tries to shift position. His left hand clutches a wound, blood welling between his quivering fingers.>$B$BWhen the dwarves first invaded the Barrens, I contented myself with harassing their diggers and sabotaging their equipment. I should''ve struck a killing blow when I had the chance.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15248, 'Weezil Slipshadow - master of disguise!', '', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15251, 'This ain''t much of a big challenge, mon, but we gotta know ya can handle the pit before we can take ya in.', 'This ain''t much of a big challenge, mon, but we gotta know ya can handle the pit before we can take ya in.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15252, 'They''re in mid challenge, mon. Be patient.', 'They''re in mid challenge, mon. Be patient.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15257, 'Take care of ya weapons an'' they''ll take care of ya back.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15260, 'I can''t help ya. Go talk ta Zen''Tabra if ya want druid trainin''.', 'I can''t help ya. Go talk ta Zen''Tabra if ya want druid trainin''.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15263, 'I can''t help ya. Go talk ta Soratha if ya want mage trainin''.', 'I can''t help ya. Go talk ta Soratha if ya want mage trainin''.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15264, 'I can''t help ya. Go talk ta Tunari if ya want priest trainin''.', 'I can''t help ya. Go talk ta Tunari if ya want priest trainin''.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15266, 'A squire is the right hand of the knight. As you are already fully aware, hands are especially good at carrying things, and thus your first duty will be to carry my sundries, knickknacks, and other miscellaneous paraphernalia while I dispense justice across the land. To lug around such etcetera is a job unbefitting of a knight.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15267, 'Very good. Secondly, you must know that a knight embraces no tenet more tightly than that of chivalry. He clings to his generosity as tightly as he clings to his lance. His valor shines as brightly as his armor. And while his smallsword may be sharp, his manner among allies is soft and courteous.$b$bNow tell me $n, do you give your oath to hold to the teachings of chivalry and gallantry?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15268, 'Ha! Did I not just say, good $n, chivalry and gallantry are the charge of the KNIGHT? You seek only to be a SQUIRE. The colossal burden of chivalry is unfit for the squire, for as I mentioned before, the only colossal burden that you are to bear is that of my belongings.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15269, 'Moving on! As chivalry is the way of the knight, and I am a knight, you must know then that my own intentions are indeed valorous. It is true, I fight for my Lady Doloria, to proclaim her beauty and majesty across all the lands. Any who question her beauty are without a doubt the most vile of enemies, and must be brought to justice.$b$bAs I speak, it occurs to me that I am a failure. We have come quite far in the squiring ceremony, yet I have not yet ascertained whether or not you deserve my charity or my righteous fury.$b$bI must know, now, do you agree that my Lady Doloria is unquestionably the fairest Lady across all of Azeroth?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15270, 'I''m rather glad to hear that. Congratulations, $N, for you have completed your training. You may now ride beside me into the fray.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15272, '', 'Nature will guide ya when all else fails.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15273, 'Strike swiftly an'' fade away. You''ll know ya beginin'' ta master ya skills when people know ya deeds, but never heard of you.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15274, '', 'In tha chaos of battle, it''s tha balance of light and shadow that leads us ta victory.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15275, 'Wit'' practice, ya''ll find that magic can be much stronga than any weapon.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15276, '', 'Trust in ya bow. It''ll be there for ya when ya need it most.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15277, '<Maximillian is deep in prayer, oblivious to your presence.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15278, 'Stay your sword and loosen your cap. Before we do battle with our blades, I first have prepared an assault to unleash upon your ears.$b$bAre you prepared?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15280, 'No snooping around, friend.$B$BIf you''re looking to buy Crown holiday goods, you''ll have to do it at the Lovely Merchant in the city.', 'No snooping around, friend.$B$BIf you''re looking to buy Crown holiday goods, you''ll have to do it at the Lovely Merchant in the city.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15288, 'As Druids, we are tasked with protecting the balance of nature. My life''s work has gone against this. In my folly, I have sewn chaos, and this deviant crop must be reaped before it spreads further.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15289, 'I will stay here and watch over the land as it heals. Do keep an eye out for any stragglers from here...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15291, 'Come, Squire $N, for adventure awaits us!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15292, 'Bael Modan... the dwarves... ', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15293, 'The scar is sealed! Thank Cenarius...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15294, 'Save me! I''ve dropped my belongings into the hot springs.$b$bMy gowns are in there!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15295, 'You again...I hope you didn''t put too much faith in your actions settling my spirit. I''ve realized there will be no peace without her, not anymore.$B$BI will see their very homes razed. Are you ready to slay more of these disgusting murderers?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15299, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15301, 'From up here you can see the full scope of the cataclysm''s destruction. It is chilling to see just how fragile our world really is.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15302, 'A foul wind blows from the East, $c.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15303, 'I have a few ideas on how to help heal the overgrowth, $c.$B$BUnfortunately, Naralex is so upset, he refuses to take any more chances.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15309, 'We must not let our grief weaken us. Our people will stand strong against the invaders.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15312, '', 'It is my role to test our young initiates on the ways of the hunt.$B$BAnd that hasn''t changed. Today, the quilboar are our prey.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15313, 'I''m glad you''re out here with us, $N. It''s not easy getting stuff from naga!', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15315, 'Hail, $c! Just up ahead you''ll find Honor''s Stand, the Alliance''s only link between Stonetalon and the coast.$B$BThe road''s a treacherous one, though. I speak from experience.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15316, '', 'I came over here to see if we could open up trade with these naga. Their reply wasn''t very nice.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15317, '', 'Greetings, $c. We shaman have gathered here at Firestone Point to watch over the land and tend to its wounds.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15318, 'She has returned. Tha revenge of the Darkspear finally comes to pass dis day.$B$BLet me know when ya ready, $n. We''ll not let her slip away again.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15324, '', 'Are you interested in making some money?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15325, 'We came here to Un''Goro with one objective in mind: profit. My associates and I are always looking for business partners, if you''re interested.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15326, 'Heya, $N. I''m sure glad that you''re here. This is turning into a mess.', '', 0, 0, 1, 3, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15327, 'Did you know that the Barrens was once a lush forest? Thousands of years ago, before the first Sundering, it was verdant and thriving, watched over by the Kaldorei. But when the continents were torn apart, and this land became separated as what we call Kalimdor, this valley of nature became a harsh, sun-scorched plain.$B$BWhen I first learned this, I saw it as a great tragedy. I decided I would find a way to regrow the forests once more.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15328, 'While studying the land, I discovered a cave that stretched deep beneath the earth. These waterways carried underground rivers for miles beneath the parched savannah above. I named them the Wailing Caverns, for the howls made by the wind and steam as they coursed through its depths.$B$BThis would be the instrument of revival, I thought. The water had already bubbled to the surface as small, lush oases throughout the Barrens...if it were imbued, enhanced, this growth could spread across the entire land.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15329, 'My plan was to connect these underground waters directly to the Emerald Dream itself. With my faithful disciples, I journeyed deep within the Wailing Caverns, settled into meditation, and entered the Dream. Through my own body, this world was connected to it.$B$BIt was there that everything went wrong.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15330, 'I came upon what I can only describe as an overwhelming corruption within the Emerald Dream. An unending nightmare that seized me in its claws and tore at my very mind. I could not break free of its grasp; my disciples were unable to wake me.$B$BWhatever this corruption was, it found its way into our world through my body. I did indeed channel its energies into the Wailing Caverns, and its horrible influence twisted the wildlife there into chaotic, deviate forms. Even my disciples were affected; their minds overcome by madness and savagery, they took on the forms of serpents, and called themselves the Druids of the Fang.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15331, 'I was saved by my last disciple, Muyoh, and a band of adventurers. I considered the entire incident a failure. It wasn''t until the Cataclysm occured that I realized I''d been far too successful!$B$BWhen the Barrens was cracked apart, a great font of underground water was breached and flowed up to the surface, full of the energies it was imbued with in the Wailing Caverns. Life immediately sprung from the earth around it, and the animals thrived...and then it continued to grow, uncontrollably, unchecked.$B$BNow I have to answer for my arrogance in thinking I could dictate the flow and shape of nature myself. This overgrowth must be stopped, before it chokes out the natural wildlife entirely.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15332, 'Nonsense. Have I hired a blind squire? There are dragons everywhere.$b$bMy neighbor Spark refers to them as "dinosaurs", but I know a dragon when I see one. They must be slayed.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15333, 'A fair question.$b$bOne might check the perimeter of the hot springs. Or one might look for signal fires up in the cliffs to the west. Finally, the path to Silithus, far to the north, is often wrought with danger.$b$bThose would be the places I''d check.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15344, '', 'There is nothing here for you. Now go.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15345, '', 'Do you understand now, $N?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15346, 'My patron requests your presence.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15347, 'Yes, $N?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15348, 'Who are you? What do you want with our tribe?', '', 0, 0, 3, 0, 0, 0, 0, 0, 0, 'Nablya, is that you?', '', 0, 0, 3, 0, 0, 0, 0, 0, 0, 'Welcome, outsider, to our home.', '', 0, 0, 3, 0, 0, 0, 0, 0, 0, 'Have you come to observe? Would you like a coconut?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15349, 'A few of our tribe have harnessed the power of thunder. We use it to defend ourselves against invaders, whether human, orc, or dinosaur.$b$bOur thunder stuns all dinosaurs, you know.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15350, 'Individual strength is important, but tribal strength is more so. Our tribe is only as strong as its weakest member.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15351, 'The lashers to the south will eat small creatures, like frogs and parrots. We, the gorillas, will eat the lashers. And dinosaurs will eat gorillas. All this is honorable and natural.$b$bThe humans and orcs also hunt the gorilla, but they take the skin and leave the body to rot. This is why we attack the humans and orcs.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15353, 'The flora of Un''Goro Crater are quite remarkable, to be sure. Wouldn''t you agree, $N?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15354, 'Just like old times, eh, $N?', '', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15357, 'A little help here? Or do you need more training, $N?$B$BI''m kinda busy at the moment if you hadn''t noticed.', '', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15360, 'This place seems nice enough, I suppose. Needs a little elbow grease.$B$BYou looking for a job, $N?', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15363, '', 'These pygmies are cutting into profits!', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15365, '', 'You''ve got the moves, $N. Use them!', 0, 0, 1, 397, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15367, 'Warrior-Matic NX-01 destroy!', '', 0, 0, 1, 33, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15369, 'Hey, did you hear the one about the $r $c? OK, here goes:$b$bA $r $c walks into a cave and starts fighting gorillas. The leader of the gorillas says, "Hey, why are you doing that?!" So then the $r $c says, "A goblin told me to."$b$bThe gorilla leader says, "Do you do everything that goblins tell you to do?" And the $r $c says, "Yes, because I''m stupid and smelly and I walk on two legs."$b$bPretty funny, huh? Hmm... maybe it needs some work...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15370, '', 'Un''Goro Crater serves a very specific purpose, $N. It is now time for you to learn that purpose.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15371, '', 'I am Nablya, apprentice to Khaz''goroth and envoy to Un''Goro Crater. I am known as the Watcher.$b$bI stand here in the place of my master, who has since left Azeroth. He once stood in this very spot when he shaped many of his creations.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15372, '', 'I am observing. It is my charge to watch over Un''Goro, and I do so from this spot.$b$bI am also performing tests, and recording the results. These tests allow me to observe that which most interests me.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15373, '', 'Simple stimulus-response tests. Normally my kind does not interfere with the matters of Azeroth, but here in Un''Goro, we are free to take a more direct approach. As Un''Goro is the experimental ground of the Titans, it is our right to do so.$b$bFor example, say Khaz''goroth wants to know what happens when one of his creations is exposed to a sulfurous hot spring. He could wait for millenia, observing, and waiting for the creature to accidentally stumble and fall in. Or, he could place the creature in the water himself.$b$bIn Un''Goro, we may do so.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15374, '', 'Not exactly. In fact, many of the creatures here in the crater existed long before my master arrived... but some did not.$b$bNevertheless, we observe them all, without prejudice.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15375, '', 'When the cataclysm struck Azeroth, it disrupted the cloaking mechanism that kept this terrace hidden. At that point, it was only a matter of time until the intelligent races discovered me here.$b$bThis was a scenario that, quite honestly, we did not foresee. It required us to perform some new tests. And you, $n, are my test subject.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15376, '', 'I am not authorized to answer that question. I am, however, permitted to offer you a suggestion:$b$bSeek out Brann Bronzebeard.$b$bHe has already learned much of what there is to know about us, and he is teetering on the verge of another discovery. Help him, and he may help you uncover the knowledge that you desire.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15377, 'The time to take back Gilneas City is at hand.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15381, 'Greetings, $r. I sense some confusion at my presence here. The others harbor suspicion as well, and I cannot blame them, after what my brethren have put them through.$B$BMuch has happened since the events at the Sunwell, little of it good. And so it falls to me to pick up the pieces, and attempt to salvage the pride of my flight. There is much to say, and more to do, but know this: Not all in the Blue Dragonflight blame the mortal races of Azeroth for the troubles that have befallen the world.$B$BSome of us have more sense than that.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15385, '', 'Why hello there, fellow member of the Alliance!$B$BAs an official representative of Gadgetzan, I''m here to make sure we poor scattered gnomes can peacefully co-exist with the Steamwheedle goblins here in Gadgetzan! We may even be open to tolerating the presence of their new Horde goblin friends.$B$BI''m sure we can all come to an agreeable decision with your help!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15387, '', '$N, you gotta get in there and save our people!', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15393, 'We must hold fast. If Northwatch falls, there is nothing to our backs but the sea!', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15394, 'I''m not here on vacation, pal. Noggenfogger sent me down here with a mission: Find out how to turn a profit on these silithid, or wipe ''em clean.$B$BIf a $r like you wants to do some favors for the Steamwheedle Cartel, I could use a hand.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15395, '', 'I don''t even know how to use this weapon... but I reckon if I stand here looking menacing, the worgen might go somewhere else.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15397, 'All hands topside! Run ''em through!', '', 0, 0, 1, 0, 22, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15398, 'Assuming we make it through this, it''ll take a month to clean the brains off my brasswork.', '', 0, 0, 1, 0, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15401, 'Get your head in the game, $N!', '', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15403, 'Heya, kid. Great job out there!$B$BSee you on the other side.', '', 0, 0, 1, 397, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15404, 'All this talk about food is making me hungry!', '', 0, 0, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15406, '', '$N! How ya doin'', hon?', 0, 0, 1, 4, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15408, 'It is not the time to turn against one another, $N.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15409, 'They sunk the Collingwood off the coast, but we managed to drag her carronades to the shore.$B$BThose animals won''t set one filthy green foot on this beach! Not while I''ve got powder!', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15411, 'Quick is the word and sharp is the action, $gMister:Miss; $N.', '', 0, 0, 1, 0, 273, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15418, 'We''re in a pretty tight pickle here, $N.', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15419, '', 'I definitely did NOT sign up for this! Pygmies, zombies... Hobart better give me a huge raise!', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15420, '', 'Just when I thought it couldn''t get any worse....', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15421, 'What are we doing up here? Shouldn''t we be trying to find a way off of this island?!!!', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15422, 'This Town-In-A-Box is a remarkable feat of engineering!', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15427, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15428, '', 'I''m so glad that you asked, $N!$B$BNo one ever asks how stuff works. It''s just here, gimme that, I''m gonna blow stuff up. Or, don''t bore me with the details, just let me point and shoot. Or, worse yet, who cares how it works, is it a bigger explosion than last time?$B$BI swear sometimes, I could just scream, you know? It''s like I''m always doing all of Hobart''s work for him, but I never get any of the credit! I have got to be the most underappreciated, overworked, and underpaid tinkers assistant ever!$B$BWait, what did you ask about?', 0, 0, 1, 0, 1, 0, 5, 0, 6, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15431, 'Yes, yes, that''s all very interesting, but as you can see here, we''re in a fight for our lives, and these pygmies are the least of our problems compared to what''s inside that cave!$B$BWhere''s my worthless assistant when I need her the most? Probably off being lazy somewhere and complaining that no one asks her how her day is going....', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15434, '', 'I don''t see any good reason for these ogres to waste their lives sitting out here in the sand when they could join the Horde and work for us.$B$BI mean look at them! If we don''t exploit them, who will?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15435, 'What want?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Ogre look funny.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Me hungry.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Me not like sand.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15442, 'The Battle for Gilneas City is underway! You can head to the frontlines or wait until our men regroup for the next attack.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15443, 'Our men are regrouping. They will be ready for battle in mere minutes.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15444, 'Me help goblin lady make friend with ogres.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15455, '<The unfortunate soldier you find at the side of the road has been gutted with what appears to have been long knives. Rolling the body over, you notice teeth marks.>$B$B<Could wild animals have done this?> ', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15458, '', 'An ancient score is settled today.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15459, 'Look at this mess. I was told the Barrens would be... barren.$B$BThis jungle appeared overnight and has already swallowed up my camp and choked off the roads!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15460, 'Have you come to join the hunt, $N?', 'Have you come to join the hunt, $N?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15461, 'Be gone, $c. I have no need of you in my hunt.', 'Be gone, $c. I have no need of you in my hunt.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15466, 'So, you wanna find de fabled swords of de Sandfury, eh?$B$BYa be ready ta kill for Sul''thraze? Spill de blood across de sands? In search of treasure, of power?$B$BIf ya are...welcome to de desert, mon.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15468, 'I will see ta it personally dat the Darkspear rise as a power in their own right.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15471, 'This ain''t the first time I been stuck up to me teef in a jungle that up an'' done ambushed me. I been all over the world, $gson:missy;, an'' I''ll be hog-smacked if this one''s gonna be the end of me.', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15473, 'Back in the day ''afore the day, me and me mates didn''t have much in the way of drinkin'' money, as is we spent our pay on booze an'' that didn''t leave none left over for more casual drinkin''.$B$BSo we decide we''re gonna comm-an-deer one of them epic-sized kegs of ol'' Barkerstout from the loft of Barky''s Brewpub.$B$BWe chopped the supports out with hatchets and that ol'' boy just up an'' ROLLED on out through the side of the thatch roof like a baby bird leavin'' the nest, but some sort of big round beer bird, that could crush a man.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15474, 'You know why they call it stout? ''Cuz once it were rolling down the hill it couldnae be bargained wit'', couldnae be reasoned wit''. It felt no pity, no remorse, no fear.$B$BIt were like a beervalanche, which is a damn fine way to die.$B$BSo that keg explodered soon as it hit the orphanage at the bottom of the hill, and I dove inta the mud puddle wit'' me mouth open, an''... Come to think of it, I don''t ''member how this story ends. Wanna see the tattoo?$B$B<Ol'' Durty Pete drops his pants.>', '', 0, 0, 1, 0, 1, 0, 22, 0, 14, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15475, 'You see this here gun, $gboy:missy;?$B$B<Ol'' Durty Pete casually waves his weapon directly at your face.>$B$BThis here gun''s seen action on every continent but for Northrend. It''s saved me life more times than I can count: Seven. One time, "Big Mackie" MacDungal - not the wee MacDungal now, but his pappy - offered me his youngest daughter in barter for me gun.$B$BLet me tell you somethin'' about Edie: she and me gun had a lot in common. Wide-mouthed. Buck-toofed. Dangerous from the biz-ness end. Likin'' to go oft half-cocked.$B$BYou heard about the time wee Edie bet Chuck Brandybeard 25 silver she could kick ''im in the head so hard he would weep snot?', '', 0, 0, 1, 0, 1, 0, 6, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15476, 'Ayup, word got around fast and soon the whole of Menethil gathered around to see it through, with bettin'' and fruit vendors and the like, an'' there were some consternation over the rules that had to be ironed out with a big rigamarole, ''til the mayor hisself agreed that weepin'' blood tain''t count fer nothin''.$B$BSo Chuck kneels down an'' she gets up on a stool and REARS back with that big ''ol thick leg of hers and - but I''m digressin''. Point is, I shoulda taken the deal, ''cuz this gun''s a bit dodgy.', '', 0, 0, 1, 0, 1, 0, 5, 0, 274, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15477, 'They didn''t always call me Ol'' Durty Pete.$B$BOnce, when I were young an'' durty, I thought I''d impress a sweet buxom lass named Bellie with me chiselin'' styles.$B$BOl'' Bellie! She were somthin'' else. Firm, that one. All big but for the middle, like they was meant to be.$B$BSo I found me a chunk of limestone white like her skin and I set about to chiselin'' and carvin'' and creatin'' what you''d call a masterpiece, but I got me scale all wrong, see? I ended up with an enormous, what would you call it? Butt.', '', 0, 0, 1, 0, 1, 0, 23, 0, 5, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15478, 'You heard me, $glad:lass; - a butt! Not a fitting gift for a lady. But I liked it. So I offered to donate it to me local drinkin'' hole.$B$BThey called it Durty Pete''s Bottom, and eventually named the pub after it, afore them orcs burned it to toast, and all that''s left today is me big blackened bottom amidst a heap of rubble.$B$B<Ol'' Durty Pete sheds a single tear.> ', '', 0, 0, 1, 0, 5, 0, 1, 0, 18, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15479, 'Back in the war - not that one, the udder one - when them orcs rode dragons? Me and Whistler set out to cross from Southshore to Menethil Harbor inna rowboat we''d built outta knotty pine while soused to our eyeballs on Cherry Grog.$B$BAn'' we got about a third the way by my reckoning, which were mostly far judgin'' by the fact that there were nothing all around us but the sea, when my feet got to start feelin'' wet.', '', 0, 0, 1, 0, 1, 0, 23, 0, 5, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15480, 'Now let me tell you somethin'' about knotty pine, it''s got knots, $gson:missy;.$B$BAnd knots is just big holes in trees, which makes for a stupid rowboat and I blamed Whistler but he had his own ideas about my choice of tar (I chose to forget it) so we decided to settle it by drinking.$B$BWhen the grog ran out, that''s when we had the knife fight. For sport.$B$BAnyways, we never made it to Menethil, and I''m pretty sure one or both of us drowned.', '', 0, 0, 1, 0, 5, 0, 6, 0, 273, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15481, 'There''s some good huntin'' to be found here in the Barrens, if you''ve the stomach for it.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15482, 'We''re still cut off from Forward Command, but thanks to your ''negotiations'' with the quilboar, we should be able to re-open the roads with a little elbow grease.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15483, '', 'The Corporal''s a good man, but he''s got tunnel-vision when it comes to his orders.$B$BSomething unnatural is happening to the land here, $N. This jungle shouldn''t be here!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15484, 'People tink raptors wild and vicious, but little else. In truth, they be loyal and cunnin'' in ways ya hardly know.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15485, 'Ya want to join the attack on the naga?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15486, '', 'Get away from me, you monster! Don''t look at me! I''m hideous!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15487, '', 'What are you doing here? Get out of here!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15488, '', 'First of all, I don''t need to be rescued. Second of all, I''d never allow myself to be rescued by an abomination like you!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15489, '', 'I''m NOT undead! Not for long, anyway. My father will rescue me, I know it...', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15490, 'I''ve never been more proud ta be a Darkspear. Vol''jin leads us ta glory.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15495, 'What is your name, $c? $N?$B$BWelcome to the Barrens. You are standing at the vanguard of one of our most important operations on this continent. I would be honored if you were to lend us your strength.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15496, 'I want you to know that I sincerely appreciate your aid, $c. We are not fighting beasts out here, but a foe both cunning and fanatical. We must stick together or hang separately.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15500, 'Dis is wild! Vol''jin''s not messin'' around. He''s going afta tha Sea Witch wit a vengeance.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15501, 'Hey $gman:woman;, I''m just tryin'' to get my slice of the pie.', 'Hey $gman:woman;, I''m just tryin'' to get my slice of the pie.', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'You want in on this? Smash and grab, baby!', 'You want in on this? Smash and grab, baby!', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Hurry up, $c! Take everything you can!', 'Hurry up, $c! Take everything you can!', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'All these dead Tauren got on ''em is beads and junk. Did you score anything good? ', 'All these dead Tauren got on ''em is beads and junk. Did you score anything good? ', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Hey, $c! This place is pretty picked over but you might still be able to find somethin'' worth your time.', 'Hey, $c! This place is pretty picked over but you might still be able to find somethin'' worth your time.', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Whoa, you aren''t here to bust us, are you?', 'Whoa, you aren''t here to bust us, are you?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15504, '', 'I expect this operation to proceed without major incident.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15508, 'Your friends were all taken prisoner by Trade Prince Gallywix while the volcano was exploding.$B$BWe are going to have to deal with the Alliance quickly if we''re to rescue them and get off of this island.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15510, 'Working for Jerrod isn''t all that bad. He might lose his temper now and again, but he pays well, and he even gives me a boost when I can''t reach something in the cart.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15511, 'What is it I can do for you?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15512, '<Deathguard Simmer looks at you expectantly.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15514, 'Any savage can win a war. The true hero aims not merely for victory on the battlefield, but to attain a lasting peace after the final arrow falls.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15515, 'You''re doing incredible work here in the Barrens, $N.$B$BWith the help of heroes like you, we can secure Kalimdor, and in doing so ensure a lasting peace in our homelands.', '', 0, 0, 1, 0, 273, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15516, '', 'The Warchief has promised to help us rescue our people and deal with Gallywix if we help them with the Alliance.$B$BIt sounds like a fair deal to me. The enemy of my friend is my enemy, right?', 0, 0, 1, 0, 1, 0, 6, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15517, '$N! How can I help you, old friend?', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15518, 'Just between you and me, I worry that the good General here doesn''t have the stomach to do what needs to be done.$B$BThis is the Horde we''re dealing with. History shows there can never be peace.$B$BOur goal should be ... annihilation.', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15519, 'You might not think that a Worgen like myself would know how to cook a fine steak.$B$BJust ''cuz I like my meat raw... Still panting from flight... Arterial spray in my face...$B$BWhat were we talking about? Oh yes! I was quite the gourmet back in Gilneas.', '', 0, 7, 1, 0, 6, 0, 15, 0, 1, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15520, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15521, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15522, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15524, 'Going somewhere?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15525, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15526, '', 'Can I help you with something?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15527, '', 'Are you ready to begin the procedure?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15528, 'We do our best here to heal the broken earth. It was difficult enough before we started getting raided at night.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15529, '', 'I''m a little busy at the moment, $c... return when I''m less preoccupied.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15530, '', 'Our equipment is really taking a beating out here!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15531, 'Simmer say Gordo got guts, but got no brains. Why he mean?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Gordo like picking flowers. Pick flowers kind of like killing.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'It drafty out here.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Johaan say Gordo need a tailor to fix Gordo tummy.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15532, 'On behalf of the illustrious and still neutral Steamwheedle Cartel, I hope you enjoy your stay.$B$BRemember, everyone is welcome in Gadgetzan! Everyone except pirates.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15534, '', 'The blood of the fallen cries out for justice.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15535, 'We can afford no delay. Fort Triumph must be completed and reinforced, or any hope we have for permanent settlement on this continent will be erased.', '', 0, 0, 1, 0, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15536, 'When me and my Wildhammer Mercenaries were hired on to secure Fort Triumph, I imagined we''d be fighting the Horde.$B$BBut we''re set on from all sides! ''Sploding goblins, burrowing bugs, electro-fied lizards... ', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15537, '', 'The Battlescar is a dangerous place. All the armor in the world can''t save a steam tank that''s swallowed up by the earth.', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15538, '', 'What I''m cooking up is way ahead of its time, $N.$B$BLook at these blueprints! It''s like licking the future.', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15539, '', 'Sure, it''s got bugs to work out. But the microtank is a marvel of engineering.$B$Bit uses one quarter the materials of a full-sized siege engine, and it can be mass-produced by anyone! ...with really tiny hands!', 0, 0, 1, 0, 1, 0, 5, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15540, '', 'The Bilgewater Cartel will be in business here by the end of the day, mark my words.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15542, 'Thrall Hall, $N! Here to help kill some misguided dwarves and gnomes?', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15543, '', 'This might be the only cool place left on the island... right next to the volcano!', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15544, 'Hey there, $N. You heading in?', '', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15545, '$N! You wanna help me out here with Fizz? He''s up to no good again!', '', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15546, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15547, 'Turn away, $c.$B$BBefore the cataclysm hit, we found something.$B$BWe dug something up that should''ve stayed buried.$B$BPray to whatever you believe in that the landslide was enough to keep it down...', 'Turn away, $c.$B$BBefore the cataclysm hit, we found something.$B$BWe dug something up that should''ve stayed buried.$B$BPray to whatever you believe in that the landslide was enough to keep it down...', 0, 0, 1, 0, 1, 0, 274, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15549, 'I can''t believe that Fizz and Evol are at each other''s throats again. It''s the pressure. We need you now more than ever, $N.', '', 0, 0, 1, 0, 25, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15550, '', 'Are you going in there? I''m not going back in there!', 0, 0, 1, 274, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15551, 'Please insert coins.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15552, 'That''s me job, $c. The General goes out on patrol, and I carry his banner and plant it in the dirt.$B$BImagine a General out and about without his banner. He might as well not wear pants.', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15554, 'Hey! Hands off the banner, $gson:missy;.', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15556, '', 'This was going to be a walk in the park until that airhead over there came out of nowhere with an army of gnomes.$B$BGallywix will have my head if we let these creepy runts one-up us here.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15558, 'Do not loiter; we''ve work to do here.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15559, 'This is the truth of it! Fighting leads to killing, and killing leads to warring. And that was nearly the end of all our customers!$B$BNow, when men get to fighting, it happens here. And it finishes here! For maximum viewing potential!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15561, 'I''ve heard about this Nesingwary guy, out of Stranglethorn Vale, hunting all sorts of beasts for sport.$B$BFor SPORT. What a complete idiot, right? Think of all the profit he''s letting rot in the field!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15563, 'Bah! Rowdy tauren don''t scare me none.', '', 0, 0, 1, 0, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15564, 'It''s a one-seater plane, but you can always sit up on the fuselage. It''s perfectly safe.$B$BYou ready?', '', 0, 0, 1, 0, 273, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15565, 'He''s my assistant.$B$BSure, he''s not been plagued in the same manner as we have, but he is clearly plagued nonetheless. He''s bent the knee to Sylvanas, so he''s as much one of us as you or I.$b$bAnd just between you and me... to be perfectly honest, I think the Dark Lady thought he was already bending his knee when he entered her chamber!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15566, '', 'We have to rescue everyone and get out of here before the volcano explodes for real!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15569, 'Brace yourself, $r.$b$bThe naga could attack again any moment.', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, 'This region is one of the epicenters of the cataclysm that threatens to rend our world.$b$bIf we manage to survive, we must try to discover its cause.', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, 'The attacks on these ships, they are clearly not random.$b$bWe must discover the motives of the naga here.', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15575, 'You have to help me, $c! Twilight''s Hammer attacked my zeppelin and their men tried to take the tablets and the crystal I was transporting to Orgrimmar.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15585, 'The mine cart is prepped and ready to go.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15586, 'Welcome to the field, $c! You can''t get a feel for the tactical situation if you''re hiding in a fortress all day. I always like to get my boots dirty.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15587, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15588, 'Have you been to Bael Modan? What''s going on over there?', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15589, 'They''re going to pay, $N. They''re all going to pay.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15590, 'These crazy tauren - always trying to blow up my flying machine. This has been going on for years!', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15595, '', 'Coach is here?! He''ll have a plan.', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15597, 'I''ve got a game plan, kid!', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15598, 'Don''t know how long we''re gonna be able to hold them off, $g bud : lady;. Hope you have a plan!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15599, '<Grunt>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15600, '', 'Where the heck did all of these shredders come from?!', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15608, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15609, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15612, 'Things used to be so much better... what happened to us?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15616, '', 'All the rest of our people are down there!', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15619, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15620, 'If Fizz hadn''t been so clumsy, we never would have been caught!', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15622, '', 'The Twilight''s Hammer is a major power to be reckoned with. Thanks to us, Deathwing is free. Thanks to us Old Gods have risen from the bowels of the earth. Thanks to us... Hyjal burns.$B$BWhat do you think you have to offer us?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15623, 'You''re the one, $N. You must defeat the Trade Prince or all is lost.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15626, 'Hey.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15627, 'Please insert coins and then proceed to deal with the Trade Prince.', '', 0, 0, 1, 34, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15628, 'Any luck out there?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15629, 'No earthquake, flood, or any other act of the spirits will stop me from doing my duty.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15630, 'Everything has been leading to this, $N. You must not fail, or all is lost and we will die with this island.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15631, 'Honestly, how do these people keep getting captured? It''s massive incompetence, I tell you!$B$BIt almost makes me ashamed to be a goblin.$B$BSpeaking of shame, where''s that lazy assistant of mine? No doubt she''s just sitting around somewhere doing nothing.$B$BOh the burdens that come with genius. I suppose I''ll just have to think us all out of this mess by myself.', '', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15632, 'We are here to pay respect to the great forest, and take part in the wonder of the Earth Mother''s gifts.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15633, '', 'Are you here to help, $c? This valley serves as a natural chokepoint. If we can strangle this supply line, we buy our companions at the World Tree time to mount a counter-attack.', 0, 0, 1, 0, 25, 0, 1, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15634, '', 'I don''t understand where these supplies are coming from. Somehow Twilight''s Hammer has found a way to assault the entire mountain at once...', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15639, '<This robotic gorilla appears to be damaged.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15641, '', 'What do you want, $r?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15642, 'Do I frighten you, $r?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15643, 'What''s the matter, chum... never seen a worgen before?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15648, 'Blast these rocky Durotar roads! I''ve got places to be, and this isn''t one of them.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15649, 'Up the ramp, $N! Help Thrall defeat the Trade Prince!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15651, 'Assist me, $N. The Trade Prince has become far more powerful!$B$BI do not know how much longer I can hold out.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15652, '', 'The Gordunni Ogres have blighted this land long enough. We are here to take this land and its resources for the Horde.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15653, '', 'The Stonemaul clan serves the Horde!$B$BDuring the founding of Orgrimmar, when Kalimdor was being tamed as our people''s homeland, the hero Rexxar defeated the chief of the Stonemaul ogre clan.$B$BThey have served the Horde ever since, and I''ve called them in here to do the heavy lifting against the Gordunni clan.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15661, '<Fizzle''s body bobs lifelessly. His orb is clutched tightly in his right hand.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15662, '<You grab at the orb, but Fizzle''s hand clutches around it even tighter. The orb glows slightly.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15664, 'Try to ignore the firm, feathery behinds of the harpies... the creatures are really quite deadly!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15665, 'Lok''tar ogar, soldier.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15667, 'For now we cannot return to Kalimdor. Only Chawg is going back with you. Another ship is coming to take the rest of us on to our destination.$B$BThe greatest adventure is yet ahead of you, $N. Our paths will cross again, and when they do, the fate of the world will be in your hands!', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15669, 'Lok''tar, $c.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15670, 'We''re Orgrimmar bound, $g bud : girlie;, and then on to our new home in Azshara. See you there!', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15671, '', 'It''s been a long journey to get here, hon. Thank you!$B$BLet''s get off of this island now.', 0, 0, 1, 17, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15672, 'Thank... you...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15673, '', 'You''re a true $g hero : heroine;, $N! The poster-$g boy : girl; for the Bilgewater Cartel.$B$BOur stock is going to skyrocket now and I''m going to get a raise!', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15674, '', 'This does not look good for the future of the cartel. Not one bit.$B$BYou have to pull our fat out of the fire, $N, or we might as well all just walk into that volcano up there.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15675, '', 'Oh goodness, you did it, $N, you really did it!$B$BNow, by my calculations, if we do not get this bucket sailing very very soon, there is the increasing likelihood of one of those giant volcano rocks shooting through the air and smashing the yacht to smithereens.$B$BShall we?', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15677, 'This right here is what you''d call bad for business!', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15678, '', 'What a mess! How am I going to spin this?$B$BAnd really... goblin zombies?!!', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15679, 'You got the stuff, kid! You got the ball into the endzone and you detonated it for the win!$B$BNow let''s get out of here. I''m thinking that the new team might need to be called the $N Explosion!', '', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15680, 'You did it, my $g boy : girl;, you did it!$B$BNow, let''s get to Azshara so that I can set up my new practice. This has been a long vacation and I have bills to pay!', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15681, 'I don''t suppose that there''s any way that you can get us out of here? No?$B$BAh well, I suppose it won''t be too painful as the lava slowly pours into this pit.', '', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15682, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15683, 'I knew you had it in you all along, $N.$B$BNow, do you think there''ll be a position for me in Azshara? Do they have trolls there?', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15684, 'I just wanted to say thanks, $N.$B$BI''m sure glad that the doc here was able to shock you back to life or we''d all be dead by now, or worse!', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15685, 'I am NOT going to sweep the ground of a mud pit, I can tell you that!$B$BYou need to deal with that rat, the Trade Prince, that''s what I think!', '', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15686, 'Three cheers for $N!!!$B$BI really cannot wait to setup my own little bed and breakfast in Azshara. What do you think it''s like there?', '', 0, 0, 1, 4, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15687, 'You did a superb job, $N. Top notch!$B$BNow, of course, you couldn''t have done it without my tinkering genius, which I''m sure you''ll put in your company report, but you really pulled it off, despite the bumbling of my assistant here.', '', 0, 0, 1, 273, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15688, 'We''re Orgrimmar and Azshara bound. Let''s get this baby out to sea!', '', 0, 0, 1, 4, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15689, 'Please insert coins into ship in order to move away from exploding island.', '', 0, 0, 1, 33, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15690, 'Let''s jump Fizz right before we set sail. I''ll hit him high and you go low!', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15691, 'Let''s deal with that punk, Evol, once and for all. Azshara''s not big enough for the two of us!', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15692, 'I knew you had it in you, $N! You saved our skins.$B$BNow let''s get out of here before I have to kill Fizz and Evol.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15693, '', 'Do you have any idea how much time and moolah you''ve saved us, $N? This could have been a complete disaster and you''ve single-handedly saved the entire cartel.$B$BToo bad that you and Thrall spared Gallywix. I think that you would make an excellent Trade $g Prince : Princess;!', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15694, '', 'No one could have done what you did, $N. Why you spared Gallywix is beyond me. You should have had his job.$B$BHere''s to hoping that setting up our new home in Azshara is uneventful. I''m looking forward to retiring.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15695, 'I''m not talking to you right now. If I were you, I wouldn''t count on getting a raise this year, $N.', '', 0, 0, 1, 25, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15696, 'You did it! We''re saved!', 'You did it! We''re saved!', 0, 0, 1, 4, 0, 0, 0, 0, 0, 'Are we really finally going to Azshara? Is there a volcano there, too?', 'Are we really finally going to Azshara? Is there a volcano there, too?', 0, 0, 1, 6, 0, 0, 0, 0, 0, 'How can I ever thank you, $N?', 'How can I ever thank you, $N?', 0, 0, 1, 6, 0, 0, 0, 0, 0, 'I''d keep my eyes and ears open if I were you. There''s a rumor going around that you caused both Mount Kajaro and the Lost Isles volcanoes to explode.$B$BCrazy, I know. But people will gossip about anything and love to tear down their heroes, especially if there''s a chance for profit and promotion.', 'I''d keep my eyes and ears open if I were you. There''s a rumor going around that you caused both Mount Kajaro and the Lost Isles volcanoes to explode.$B$BCrazy, I know. But people will gossip about anything and love to tear down their heroes, especially if there''s a chance for profit and promotion.', 0, 0, 1, 25, 0, 0, 0, 0, 0, 'Let''s leave dock before the volcano destroys us all!', 'Let''s leave dock before the volcano destroys us all!', 0, 0, 1, 5, 0, 0, 0, 0, 0, 'Ready to go when you are, $g sir : ma''am;!', 'Ready to go when you are, $g sir : ma''am;!', 0, 0, 1, 66, 0, 0, 0, 0, 0, 'I don''t know. I think I''m going to miss this place. We had some pretty good times here.', 'I don''t know. I think I''m going to miss this place. We had some pretty good times here.', 0, 0, 1, 6, 0, 0, 0, 0, 0, 'I have an idea... this time let''s not wander through a naval battle between the Alliance and the Horde.$B$BI''m just saying.', 'I have an idea... this time let''s not wander through a naval battle between the Alliance and the Horde.$B$BI''m just saying.', 0, 0, 1, 1, 0, 0, 0, 0, 0, 0), +(15697, '', 'May the Earth Mother watch over you, $N. Thank you for your help.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15698, 'The song of your life will be sung by the mighty, $N. Until we meet again.', '', 0, 0, 1, 2, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15699, 'I have other business that must be done in Azshara, so I will join you on your journey, $N.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15700, 'You have the heart of a giant, $N. It has been an honor!', '', 0, 0, 1, 66, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15701, '', 'Looks like this is it, boss-$g man : lady;. It''s been a real honor. I''m sure we''ll see each other again real soon.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15711, 'Thoth''al amun Ree''thael vormos! Vormos! Vormos!', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, 'Al''tha, Al''tha bormaz. Ni bormaz ta''thall? It comes, it walks in flames, $r!', '', 0, 0, 1, 0, 6, 0, 5, 0, 0, 'The shadow sees. Bo''al lal arwi C''toth. The end comes, cloaked in silent fire.', '', 0, 0, 1, 0, 6, 0, 5, 0, 0, 'Mar''kowa tallol ye''tarin, it knows, it knows.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, 'Fear broils forth from the heart of the infinite. Don''t make me look! I''ve seen more than I can stand!', '', 0, 0, 1, 0, 1, 0, 274, 0, 0, 'We are nothing. Tulall par''okoth. Far''al, ka''kar. The void devours.', '', 0, 0, 1, 0, 274, 0, 1, 0, 0, '<The Twilight Servitor gurgles at you, white spittle foaming and bubbling from his mouth.>', '', 0, 0, 1, 0, 274, 0, 21, 0, 0, 'H''thon, the column of darkness stretching beyond sight. H''thon marwol qualar: the infinite grasp of night.', '', 0, 0, 1, 0, 430, 0, 5, 0, 0, 0), +(15712, '', '$N, the Twilight slaves you and others have been rescuing from Wolf''s Run are wandering into camp, but they can''t tell me who they are and they speak in riddles and gibberish.$B$BI thought Twilight''s Hammer kept the slaves in line the old fashioned way - you know, whips and chains - but it''s clear that there''s some brainwashing at work...\r\n\r\n', 0, 0, 1, 0, 1, 0, 6, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15714, '', 'Any luck out there? Just trying to hold a conversation with the freed slaves makes my head hurt.$B$BThey straddle the line in discord and rhyme.\r\n\r\n', 0, 0, 1, 0, 1, 0, 6, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15715, '', 'Thanks for your help, $N.\r\n\r\n', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15717, 'I don''t know if it''s good to have my mind back.$B$BKnowing what I know... Knowing what may happen to our world...$B$B<He shudders and falls silent.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15719, '', 'The forces of the Sentinel Army hold back the Horde across all of Kalimdor. While the war continues in Ashenvale and Stonetalon, our forces are also needed here, to protect these remaining wilds and prevent our enemies from gaining further footholds.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15725, 'Hello, $c. I imagine you have a lot of questions.$B$BSuffice it to say that Royce Duskwhisper sent me into the middle of an ogre cave for some "Eye of Twilight" jib-job, and it hasn''t gone well.$B$BIf I ever get my hands on that lanky, heartless, mealy-mouthed little night elf...$B$B<Kristoff wriggles helplessly as he dangles in the air, his face reddening.>', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15726, '', 'No, I cannot return to Orgrimmar. I grieve for my family, but they have made their choices and I have made mine. My future is here, among my chosen brethren.', 0, 0, 1, 0, 274, 0, 1, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15727, '', 'I will not leave. Tell my family that I am at peace here and that I wish them well.', 0, 0, 1, 0, 274, 0, 1, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15728, '', 'One day, I, too, will ascend.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15729, '', 'It amazes me that in a city full of people, only the small handful here heeded the warnings of the elements.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15730, 'Work hard, $c. We have little time to complete our tasks before the prophecies are fulfilled.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15732, 'Our world will end soon, but together we will ascend and inherit the power of the elements.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15733, 'You smell somethin''?', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, 'I''d lend a hand, but I''ve got... chain rash. I''ll just hang back a little.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, 'You''re one unusual $c, $N. I don''t mean that it a negative way. I''m just sayin'', you''re kinda funny.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, 'How long was I hanging back there? It felt like days.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, 'I don''t recommend hanging from a chain like that. But, to be honest, it did great things for my hair.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, 'Ogres.$B$BI hate ogres.', '', 0, 0, 1, 0, 274, 0, 0, 0, 0, 'Do you always talk so much when there''s stuff to kill?', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, 'Less yap flappin''. More ogre thwappin''. Deal?', '', 0, 0, 1, 0, 25, 0, 0, 0, 0, 0), +(15734, 'They had their chance to come with me, and instead they mocked my beliefs. They are nothing to me.', '', 0, 0, 1, 0, 1, 0, 274, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15735, 'Doesn''t she realize I wanted her to come with me? I''m young; I don''t want to die. We should have many good years ahead of us and this is the only way. Tell her these things. Make her understand.', '', 0, 0, 1, 0, 1, 0, 1, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15737, 'Hi. Yeah, I know. I got captured again.$B$BI don''t want to talk about it.$B$BYou ready?', '', 0, 0, 1, 1, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15738, 'Well? Are you going to help me down?', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15740, '$N, $N. Can I call you $N?$B$BI am hanging from a meathook in the back of an ogre cave.$B$BHow do you THINK my research is progressing, you pompous dirt-sucking ass-$c? C''mere! C''mere you son of a swineherd!$B$B<Kristoff flutters back and forth on his chain, trying desperately to kick you in the face.>', '', 0, 0, 1, 0, 5, 0, 15, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15741, '<Kristoff grunts.>', '', 0, 0, 1, 0, 388, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15742, 'Of all the ancients, Goldrinn is the most magnificent. His fury, his resolve... you would do well to emulate.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15745, '', 'I don''t recognize you. Are you new here?', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15747, '', 'You don''t belong here, outsider. Leave before you get yourself in trouble.', 0, 0, 1, 0, 25, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15749, 'There''s something going on in Orgrimmar, and I don''t like the look of it. These women complain that people have disappered. Others say the world will end. What does it mean?', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15750, 'The end of the world nears, $c. There is no need to despair. Hear what I say and what my brethren have to offer.', 'The end of the world nears, $c. There is no need to despair. Hear what I say and what my brethren have to offer.', 0, 0, 1, 0, 25, 0, 1, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15754, '', 'I''m here to study the ways of the muisek spirits, the wild magic. Witch Doctor Uzeri sent me here to start practicing with the lesser creatures of the forest.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15755, 'Greetings, $c.$B$BThe mountains have crumbled and the Cataclysm has caused the seas to rush in and drown Thousand Needles.$B$BWe need your help, now!', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15756, 'This was a good man, $r. We''d served together through many battles...$b$bThese beasts have a debt to pay!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15760, '', 'Our prayers to Aessina go unanswered. The burning minions of Ragnaros have driven us to the brink. If they are not stopped here, the World Tree will be little more than a stump amidst the conflagration!', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15761, '', 'The strands of life have been severed.$B$BThe dreamers must be avenged.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15769, 'Ugh...$b$bI don''t... feel so good...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15770, '', 'Thank you, $c.$b$bI nearly died out there.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15771, 'We are here to preserve these lands for our people.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15772, '$R. Have you been sent to speak with me? How long has it been since the master''s demise on these very slopes?', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15774, '', 'Welcome, $c.$B$BHyjal burns and the world I''ve spent my life protecting is on the brink of oblivion.$B$BTell me: Have you ever heard of Tyrus Blackhorn?', 0, 0, 1, 0, 1, 0, 6, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15776, '', 'A decade ago, a great battle took place here on the summit of Mount Hyjal. Archimonde the Defiler commanded a swarm of demons to march upon the World Tree and claim its power for his own.$B$BHis defeat signaled the end of the Legion''s invasion of Azeroth... But many of his corrupted supporters remained behind.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15777, '', 'Yes and no. He may be a demon now, but Tyrus Blackhorn was a night elf once. Like many of his brothers he was wooed and transformed by the promises of power the demonic army whispered in his ear.$B$BHe was captured after his master''s defeat and imprisoned here on the summit, his immortal form bound by sacred energies.$B$BBut perhaps the dimmest flicker of a soul still burns within him... We must at least reach out to know for sure.', 0, 0, 1, 0, 274, 0, 1, 0, 273, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15778, 'My help? Have things really grown so dire?$B$B<The distant flames flicker in Blackhorn''s cruel, dark eyes.>$B$BTell me why I shouldn''t let your world burn.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15780, 'Mortal? Yes I was once mortal. Weak.$B$BYou see my bonds now? These restraints are nothing compared to being shackled within a mortal coil.$B$BEven now the master''s gifts stir within me, ready to be unleashed.$B$BNo, $c, my mortal days have passed, and if any flame of my former life still flickers within I would wish it extinguished. You''ll have to do better than that, $r.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15781, 'Destroyed? Yes, that''s possible. At night I am haunted with visions of this world being torn asunder from within. I feel neither sorrow nor rage. Merely... curiousity.$B$BI served my master in exchange for power, $c. But those you fight... they strive for oblivion. A strange motivation.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15782, '<Blackhorn strains against his bonds, for the first time visibly upset.>$B$BRedemption! You act as if there''s an escape from the Burning Legion. So smug! As though your efforts a decade ago or in Outland have slowed the Legion a single iota! They will come, $r. They will return. And I will be here to welcome them.', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15783, '<Cough.>$b$bHave I... died?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15784, 'You have talent, $N. But mercy makes you weak.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15785, '...master?', '', 0, 0, 1, 0, 2, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15794, 'Great, ye found yer way here!$b$bNo time to waste. Ye ready?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15802, '', 'I''d imagined my first adventure into the ocean as more peaceful and enlightening. Becoming one with nature perhaps?$B$BThere is very little natural about this place. The elements all around us scream for vengeance.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15807, 'YOU!$B$BYou think you can just waltz in here and take my spot? Think again, $g boy : girl;!$B$BI''ve heard the whispering in the boardroom. The people you''ve surrounded yourself with at headquarters are all boot-licking sycophants who will do anything to get ahead. I should know... I hired all of them.$B$BYour meteoric rise to power is a fluke, and I''m fully prepared to knock you down a gear or two! Watch your step, $N. Who knows when you''re going to need me on your side?', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15808, 'Are you prepared for war, $r?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15815, 'Yep, destroy the four elementals, then the door will open. I''m sure of it. Just watch out for the Troggs. Nasty tempered, filthy creatures, even if they have not succumbed to the Curse of Flesh.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15816, '', 'All I need to prove myself here are my claws!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15818, 'I''m the bleeding edge, baby! Elemental infused technologies. Exploring the depths of Azeroth for lost knowledge and new resources.$B$BRemember the name.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15819, 'I don''t know about you, pal, but I can''t breathe water.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15820, 'And miss out on wearing my awesome custom-made helmet? Not a chance.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15821, '', 'A lot of work goes into training and caring for our animals, but it''s all worth it.$B$BI could always use a bit of extra help, though.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15827, 'I''m glad you are here, friend!$B$BThe fires have driven the wildlife to seek shelter in this grove. They can run no farther. We must protect the survivors!', '', 0, 0, 1, 0, 1, 0, 5, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15828, '', 'Lady Shandris is counting on me. I will not fail her.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15829, 'Heya, $g dude : toots;! The word is that you''re gunning for the Trade Prince''s job.$B$BThat true?', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, 'I''d like to punch that Chip right in the kisser! I''d also like to kiss that Candy right in the kisser, too!', '', 0, 0, 1, 15, 0, 0, 0, 0, 0, 'Did someone say, party?', '', 0, 0, 1, 6, 0, 0, 0, 0, 0, 'This Kaja''Cola thing''s got me thinking. Do we really want the competition to have ideas?', '', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15831, '', 'Hiya, $g babe : hon;! What''s this I hear about you and $g Candy : Chip;?', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', 'Nice day for digging up the last known deposits of kaja''mite in the world, wouldn''t you say, $N?', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', 'Isn''t it weird how kaja''mite made us smart thousands of years ago, but it doesn''t seem to be having any effect on our trolls?', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', 'Distilling Kaja''Cola out of kaja''mite was a stroke of pure genius on your part, $N. The Trade Prince has got to be worried that you''re going to take his title!', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15834, 'Hey, hey! Cease your hostilities! I''m one of those frequently encountered and completely harmless neutral goblins, not the Horde kind!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15835, '', 'I was once a priestess, but I''ve always been a scholar. The chance to learn from the Highborne seemed more valuable than practicing strict ignorance.$B$BWhat''s more most of the apprentices here are youths who came of age during the third war. They need guidance, wisdom...$B$BI only wish those who used to call me friend understood.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15838, '', 'Securing this area for the Sentinels will be the final part of our defense of Feralas.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15841, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15842, '', 'The Cataclysm has destroyed Thousand Needles, $c. Will you help us in our greatest time of need?', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15845, '$C, the cataclysm has crumbled the mountains and the South Sea has rushed in to drown Thousand Needles.$B$BWe need your help, now!', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15847, '', 'The Grimtotem attacked us by surprise. We''re barely hanging on here.', 0, 0, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15848, 'How could the Grimtotem do this to us in our greatest time of need?', '', 0, 0, 1, 0, 15, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15849, 'Look at this devastation, $c! Blood and ash, as far as the eye can see.$B$BBut nature is not so easily put down. With some effort, we may yet coax life from this scorched soil.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15850, '', 'I thought Runetotem reckless to set up camp right in the middle of this devastation, but I wasn''t about to let the Arch Druid travel here alone.$B$BHe''s planning something. Something big.', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15851, '', 'These Grimtotem beasts will soon be sent to their maker!', 0, 0, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15852, 'My raptor can take on ANYTHING and ANYONE!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15856, 'Please... help...\r\n\r\n\r\n\r\nThe Headless Horseman... must be stopped...\r\n\r\n\r\n\r\nHe has slain so many... and yet rides out for more victims with every rising moon!', '', 0, 0, 1, 0, 20, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15857, 'Someone''s got to stop the Crown Chemical Co. I''d bet my gold-plated Nether-Rocket they''re cooking up the next big plague on the chocolate-crazed citizenry''s coin...\r\n\r\n\r\n\r\nIf only I could find someone to serve their apothecaries with court papers! Then we could put an end to it... and maybe seize all their assets, while we''re at it!', '', 0, 0, 1, 0, 1, 3, 5, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15867, '', 'Fizzle & Pozzik''s Speedbarge my sweet patootie! I built this thing! Not them, not Razzeric!$B$BIt should be called Jinky''s Speedbarge!', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15874, 'Fizzle, Pozzik, Jinky... they all think that they saved us. But it was me! I built the ship!$B$BIt should be called, Razzeric''s Speedbarge!', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15878, 'These are definitely the ones that raided our boats, but I don''t see any of our missing people. Where did they take them?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15880, 'I''d appreciate if someone started to take my work seriously. Just because I''m not wrestling sharks or tying eels in knots doesn''t mean this isn''t important.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15881, '<The ancient''s eyes are vast and deep.>$B$B<The creature speaks slowly, in a language you do not understand. Chills run up your spine. You''re overwhelmed with feelings of terror and confusion.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15882, '<The ancient''s eyes open slowly, revealing deep pools of pain and fear.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15883, '', 'Hey, come on in out of the sun.$B$BCan I get you a drink? Not like I have anything else to do around here.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15886, '<The ancient''s enormous dark eyes peer at you distrustfully.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15887, 'If you ask me, I think my brother should do something about all of these goblins! It''s said that one of them set off the Cataclysm with a footbomb!$B$BWe need to get rid of all of them before it''s really too late!', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15890, 'We wouldn''t be in this mess if it weren''t for the gnomes!$B$BIt''s a well-known fact that they were the ones that caused the Cataclysm with all of their world-enlarging devices, and other such nonsense!', '', 0, 0, 1, 0, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15892, 'It''s all I can do to keep this ship from tearing itself apart and I still have to deal with puffed up baffoons like Fizzle here!', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15893, 'I tell ya this guy''s driving me nuts! Does anyone truly believe that a goblin could help run anything so magnificent as this speedbarge?$B$BAll they know how to do is blow stuff up and half of the time, they take themselves out doing even that!', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15896, 'Ah, $N! A little bird told me you would be coming.$B$BThat''s how Aviana sends messages around.', '', 0, 0, 1, 0, 3, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15897, 'Smoke and ash. If the heat doesn''t kill me, I may suffocate.', '', 0, 0, 1, 0, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15898, 'I owe you a debt that I can never repay, $N. Or, can''t I?$B$BHmm?', '', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15899, 'Listen, $N, I hate being indebted to anyone. So can you make sure to keep this on the down-low, just between the two of us?$B$BI''d hate for my creditors to find out.', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15901, 'Yeah? What''s the matter?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15904, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15908, 'You''ve done well, $c.$b$bMy men and I are now prepared to face the enemy.', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15909, 'We be meetin'' again so soon...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15911, 'You gotta help me! My poor, poor Chelsea...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15914, 'You''re going to put out the fires and stop those pirates from boarding us, right?', '', 0, 0, 1, 0, 25, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15915, 'Oh gosh! Oh golly! You''re gonna put out the fires and stop those pirates from getting on the Speedbarge, right?!!', '', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15918, 'Pirates and centaurs and Grimtotem, oh my!$B$BAnd I think I saw something big fly overhead last night. It was so big it blocked out the moon!', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15920, 'We may be surrounded by all sorts of nasties here, but at least we''re out over the open water.$B$BThat won''t protect us from whatever it was that I saw fly over last night, though. It was big... I mean, really big!', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15922, '', 'Hello, $c!$B$BThese poor creatures are giving everything they have to fight the minions of the Twilight''s Hammer in this dark place.$B$BI''ve done my best to revive those that have fallen.$B$BIf you need an additional mount, these birds are ready to take wing again. Treat them well!', 0, 0, 1, 1, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15931, 'Be wary, allies. There are bound to be traps to protect the Firelord from our incursion.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15932, '', 'Hi there, $g handsome : gorgeous;. Welcome to the Speedbarge Bar.$B$BWhat''ll it be?', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15933, '', 'Greetings, $c. I hope you find your accomodations suitable, even in this time of war.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15935, 'The forces we are up against here go beyond the Twilight''s Hammer, Ragnaros or even Deathwing. We must succeed here if our world is going to survive at all.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15937, '', 'The odds appear to be against us, but we cannot falter, $N. We are all that stands between the enemy''s hordes and Nordrassil.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15938, '', 'Please, $r.$b$bI don''t know how much longer I can make it here...', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15942, '', 'The Twilight''s Hammer is more than an organization to me. It''s a family.$B$BAs such, I take great care in making sure no unworthy candidates make it past the training phase.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15943, 'I need to find a safe place soon.$b$bOl'' Mack''s not doin'' so well.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15946, '', 'Your aid is required, $N. Help us stop the brutish Horde!', 0, 0, 1, 0, 1, 0, 5, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15951, '', 'This heat. This stifling heat.$B$BIt makes me want to hurt things.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15952, 'Someone else from beyond the portal! I hope you''re ready for a fight, $c.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15953, 'We''re behind enemy lines, $N. We''ve got to do as much damage as we can!', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15954, 'If we allow Twilight''s Hammer to open up portals like these all over Azeroth, no army in the world can save the planet. We''ve got to shut this tunnel network down!', '', 0, 0, 1, 0, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15955, 'We must perservere, $N. That is something I learned from our beloved wolf ancient.$B$BNever, never, never give up.', '', 0, 0, 1, 0, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15956, 'Pyrendius is slain! Our work here is done.$B$BJust step through the flamegate to return to Mount Hyjal, $c. I''ll make sure the gate is taken care of.', '', 0, 0, 1, 0, 273, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15962, 'Shhhh! Keep it down! You''ll blow our cover.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15963, 'Thank you for taking the time to help us test the Cataclysm content for World of Warcraft. \r\n\r\n\r\n\r\nWhere would you like to go?', 'Thank you for taking the time to help us test the Cataclysm content for World of Warcraft. \r\n\r\n\r\n\r\nWhere would you like to go?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15965, '', '<Though Ysera''s physical form stands in front of you, her consciousness appears to shift between this world and another.>', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15966, '', 'Have you been to Ashenvale lately? How are things?', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15970, 'Ryan''s the name, trading''s the game! What''ll ya have?', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15971, '', 'We Druids of the Talon aren''t cut out for front-line duty. We''re aerial spies, infiltrators...$B$BBut occasionally I like to get my talons dirty. ', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15972, 'Watch yerself down here, $c. These wendigos are savage fighters.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15973, 'I''ve seen enough of this cave for a lifetime. I can''t wait to get back to Kharanos.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15974, 'These wendigos are an annoyance, sure, but the real fight is with those Frostmane refugees.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15978, '', 'Careful, $N! Warlord Roktrog is near. He should be back any minute!', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15979, 'Stonetalon has always had its fill of problems, $N, but never has the land and its people suffered so badly. The Horde will destroy us all if left unchecked.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15981, 'You''ve got to save me here, $c! He''s gone mad... mad I telll you! His inability to stop the flooding of Thousand Needles has caused him to go completely bonkers!$B$BHe blames me for everything, including the Cataclysm. He probably thinks that I''m Deathwing in disguise, or something!$B$BHelp!', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15982, '', 'You''ll get nothing from me, $r!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '<Marion squaks loudly and glares at you.>', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'Your cities will fall, $r. You''ll perish in the darkness of the new regime!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'Do what you will. My new masters will carve my name into your flesh before they execute you.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15987, '', 'She asked for eggs. Eggs for her fiery hatchery in another realm.$B$BAnd one egg... a special egg... she sought more than any other.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15988, '', 'She of the skies, but also of darkness. Brood of the Earth-Warder. Invincible!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15989, '', 'Foolish $r! There is a new order. Aviana is dead. DEAD! And never coming back.$B$BTell that to the druids in the trees.$B$BSethria will soon be the master of the skies, and she has made sure Aviana will never be reborn. The egg is hers.$B$BYou are too late.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15991, 'Need some smithin''?', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15995, '', 'Ice cream!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15997, 'That vile beast has been driven off, but my precious waters have been tainted! I must cleanse them at once.$b$bIf you insist on lingering here, prepare to defend yourself.\r\n\r\n', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(15998, 'Welcome, $c! Welcome to the Shrine of Aviana, a haven for all creatures of the sky.$B$BAviana may no longer be with us, but her heart and her ferocity live on in all winged creatures.$B$BSpeak with Choluna down below if you are curious about Aviana''s story.', '', 0, 0, 1, 3, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16001, 'I don''t know what I''m doing here. I have no experience as a contract negotiatior.$B$BI used to serve drinks for a living, but Daisy put me out of business. Time for a new career, I guess.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16002, 'Choluna and Thisalee have both given me their reports. It''s all very clear to me now...$B$B$N, I believe Aviana may soon return to us, but only if we can stop the black dragon Sethria!', '', 0, 0, 1, 0, 1, 0, 5, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16003, '', 'Psst - over here! Stay out of sight for the moment...', 0, 0, 1, 0, 3, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16004, 'I used to be a simple ticket redeemer at the racetrack. Well, no more racetrack, so no more job.$B$BI''m trying my hand at negotiations now. Could you help me get things going here? They have oil!', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16007, '', 'Blood magic is shunned by many as a dark and forgotten art. In that and many other ways, it shares some distinct characteristics with demonic magic. Here, in the demon-scourged remains of the Black Morass, we believe that our blood studies will flourish.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16008, 'You can teach a soldier how to kill, but you can''t teach him to want to kill. That is one thing we don''t have to worry about down here. Every single one of my boys can''t wait to take a piece out of those naga for what they did to us, and I can''t say I feel much different.$B$BWe need to find a way to make contact with the surface, but before that, I want to make a bit of "contact" with these naga. We have some brothers to avenge.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16010, '', 'So help me, if I can get a single one of these lazy sods on his gorram feet, I''m puttin'' him to work beating the others black and blue!$B$BWe''ve got WORK to do here!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16014, 'Amazing materials down here. Amazing! Substitutes for everything. Substitutes for substitutes. Everything''s possible!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16015, 'Here, we are even more exposed than before, $r.$b$bWe must find safe shelter soon!', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, 'We must find your allies and discover the naga motives in this region.$b$bBut first, we must find a more secure location.', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, 'I feel that we are just scratching the surface of the naga presence here.$b$bI have never seen them so organized and disciplined before.', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16016, 'Village... gone. Family gone. Naga take... everything.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16018, 'It''s been hard on all of us, but we''re getting by.$B$BYou''ve just gotta roll up your sleeves and do what needs to be done.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16019, '<The injured soldier''s pained groans are somewhat distorted by the water.>', '<The injured soldier''s pained groans are somewhat distorted by the water.>', 0, 0, 1, 0, 0, 0, 0, 0, 0, '<The injured soldier appears to still be breathing. Thankfully, his bubble remains intact.>', '<The injured soldier appears to still be breathing. Thankfully, his bubble remains intact.>', 0, 0, 1, 0, 0, 0, 0, 0, 0, '<There is a a painful looking gash along the soldier''s side.>', '<There is a a painful looking gash along the soldier''s side.>', 0, 0, 1, 0, 0, 0, 0, 0, 0, '<It looks as if this solider might be feigning to throw off naga suspicion. It likely saved his life.>', '<It looks as if this solider might be feigning to throw off naga suspicion. It likely saved his life.>', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16022, 'The souls of the Third Fleet are cursed to roam this shore, for eternity, $r. The Eye of Paleth lay claim to our lives, and trapped us in the mire forevermore.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16024, 'Shh, mon! We be hidin'' here.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16025, 'Okrilla doesn''t like to let us non-orcs into town, but that doesn''t stop her from putting us to work. No matter... I prefer it out here anyway.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16027, '', 'You are in orc territory. What do you need, $r?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16031, 'I need you to do what I say, $r. If we falter, then we may be playing right into Razelikh''s hands. ', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16032, 'We appear to be dealing with something far bigger than any in the Earthen Ring had suspected.', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, 'There is a great concentration of naga just outside of this cavern.$b$bWe were fortunate to reach this place unnoticed.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16033, 'Our soldiers... they''re all captives now.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Many of us tried to escape the naga.$b$bI am the only one who succeeded...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'I don''t know why, but those monsters are going out of their way to keep our men alive...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16034, 'Fine! Amulet take, but $r help Rockpool.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16035, 'We lived under the same waves, breathed the same water, and worshipped the same god. Why, then, would the naga turn against us?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16037, '', 'Goldrinn is the wolf ancient, known as "Lo''Gosh" in the Horde tongue. His tenacity is legendary.$B$BA shrine dedicated to him is in a basin west of the World Tree, but its keepers have fallen silent in the wake of the attack. I fear the worst.$B$BBefore we can move on, you must save the shrine, discover the whereabouts of the wolf ancient, and beat back his foes.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16038, '', 'Aessina is the spirit of nature, my everlasting companion in both this world and the dream beyond. Her shrine in western Hyjal is at the forefront of the Twilight offensive, and may be ablaze this very moment.$B$B$N, we will never restore Mount Hyjal without Aessina''s help. Save her shrine from the fires, and save the nearby animals threatened by the blaze. We must do this or the entire mountain is lost.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16039, '', 'Aviana is the lost guardian of the skies, a bird goddess who perished fighting the demon hordes ten thousand years ago. A shrine is dedicated to her memory just southwest of Nordrassil, within the boughs of a great tree.$B$BThe Druids of the Talon are based within the shrine, and we will need their support. You must aid them. And aid Aviana, should she find her way back into this world...', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16040, '', 'I have dispatched Arch Druid Hamuul Runetotem to the burned out husk of the Shrine of Malorne. He is behind the front lines, on scorched terrain known as the Flamewake. He is looking into how we can undo the damage, and investigating the whereabouts of the turtle ancient Tortolla.$B$BBut before you can help him, you must first ensure that the Shrine of Aessina to the west is secure and the animals are saved from the flames. Otherwise all is lost! Concentrate on matters at the Grove of Aessina first, and they will send you to the Arch Druid in good time.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16046, 'It may not be quite comfy out here, but it''s still Khaz Modan, so it''s still our home.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16047, 'Our town''s under the blasted ocean, our keep''s full of Dark Iron traitors, and I''m laid up with such a wound I can''t do a single thing about any of it.$B$BSo welcome to Menethil Harbor!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16050, 'Ysera has sent me here to make contact with the wilderness spirit of Aessina.$B$BYet the ancient remains silent.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16051, 'We didn''t bring the war to the Horde, the Horde brought the war to us.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16053, 'Just when I thought we''d gotten a break by getting away from those raptors, things get even worse around here.$B$BNo use bellyaching though. We''re gonna face this like proper dwarves!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16054, 'Don''t even ask about the raptors. Just don''t.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16055, '', 'Welcome to our home away from home, $c. I wish we had a bit more hospitality to offer.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16056, '', 'Be careful in the vale, $N. Enemies abound!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16057, '', 'Need to do some shopping?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16058, 'Gear all banged up, eh?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16060, '<These baby Rockpool murlocs seem to have been abandoned here. You suspect that they are in trouble, and that Neptool would want you to bring them back to the ocean, where they stand a chance of escaping the naga.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16061, 'Private Reginald Pollard, 13th brigade, Stormwind infantry... $gsir:ma''am;.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16062, 'We had them in our sights... the Horde ships... then out of nowhere, tentacles reached up and seized our ship... broke it right in two!$b$bThe survivors... we were captured by naga as soon as we hit the water.$b$bThat was nearly a week ago.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16063, 'Strange... never thought the naga would go out of their way to keep us alive.$b$bThey create these pearly bubbles... one per man... made it so we could breathe.$b$bEvery day they send a bunch of the prisoners off... somewhere.$b$bNever see them again....', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16064, 'Another soldier somehow got free and broke a bunch of our pearls... freed us.$b$bSome swam up towards the surface... some saw this cave and swam for it.$b$bI''m the only one that made it....', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16065, 'Ack! Stay back, $r!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16066, 'No telling...$b$bThey brought new soldiers in every day. Horde and Alliance, both.$b$bSome would get hauled away the same day... others, like me, kept there for a week... maybe more.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16067, 'Don''t even try, $r.$b$bGet out of here while you can...$b$bThere are too many... certain death...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16069, 'The city has been routed. The Azsh''ir cry your name as a victory call. You''ve earned much respect this day.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16070, 'I''d not expected the city to be taken so quickly. It seems we''ll have much time to prepare for the invasion.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16071, '', 'The summoning incantations have been prepared, but we were depending on the Crucible of Nazsharin to draw power for our spell. The artifact must be recovered.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16072, '', 'Mathias Shaw himself appointed me to assist the night elves.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16074, 'The Catacylsm has created chaos in Dun Morogh. The troggs have come to the surface in numbers we haven''t seen before, driving our traditional enemies, the Frostmane trolls, ever closer to our settlements.$B$BIronforge has dispatched my mountaineer company to help deal with the problems.', '', 0, 0, 1, 0, 1, 0, 1, 0, 1, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16075, 'New life from the ashes of old... this is Aessina''s gift.$B$BWithout you, this miracle never would''ve happened.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16076, '<The ancient turns to gaze at you with eyes larger than your entire head. Peering into them is like falling into a deep blue ocean.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16077, 'When we''re done here, those Frostmanes will fear us more than the troggs. They''ll have no choice but to leave.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16078, 'Wha - Where am I? Are you one of them?', 'Wha - Where am I? Are you one of them?', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Is it all over yet?', 'Is it all over yet?', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Must ... return to ... Irontree!', 'Must ... return to ... Irontree!', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'You''re not from Twilight''s Hammer. What is happening out there?', 'You''re not from Twilight''s Hammer. What is happening out there?', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'I''m burned. Badly.', 'I''m burned. Badly.', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Twilight''s Hammer... I heard them screaming and running... are we making a counter-attack?', 'Twilight''s Hammer... I heard them screaming and running... are we making a counter-attack?', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'The town... demolished! We couldn''t stop them.', 'The town... demolished! We couldn''t stop them.', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'They''ve opened gateways to the Firelands... tell me there''s still hope!', 'They''ve opened gateways to the Firelands... tell me there''s still hope!', 0, 0, 1, 0, 0, 0, 0, 0, 0, 0), +(16084, 'This creature... she is quite old, and very wise. We stand to learn a great deal about Vashj''ir and the naga, if we can only speak with Nespirah.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16085, 'This old inn isn''t much to look at anymore, but it makes for a great stronghold.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16089, '', 'A dark force grips Stonetalon Peak.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16090, 'I cannot fathom the origin or purpose of this place.$B$BThese corridors are used for troop movements, yes, but they''re also littered with charred and tortured corpses, some partially devoured, most simply crushed and beaten.$B$BWe are in the Firelands, but I feel as though we''ve crossed the threshold into hell.', '', 0, 0, 1, 0, 274, 0, 1, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16094, 'I''ve tried explaining to Salsbury time and time again that there is no possible way that I could transform him into a worgen. He refuses to listen and has instead convinced himself that if he gains my trust I will let him in on the secret.$B$BGnomes are very strange.', '', 0, 0, 1, 1, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16095, 'Goldrinn''s tenacity is the stuff of legend.$B$BWarriors from all walks visit this shrine in hopes of tapping into that kind of battle prowess. ', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16097, 'In all my days, orc, I''ve never seen such a thing...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'We are poorly equipped to do battle here.$b$bPreparations must be made...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16099, 'Morale is growing higher, thanks to your efforts, $c.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'If we find a way to fight our way out of here, Hellscream will know of your deeds, $r.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'These orcs and I have served together through many battles.$b$bI do not envy any naga that enters this place.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16100, 'He never gave up - Captain Irontree - said he''d make them pay for every inch of ground they defile. He may still be alive down there!', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16101, 'Can''t complain about the materials down here. Substitutes for everything. Substitutes for substitutes. Gimme a few days and I''ll build a aquatic hotrod out of kelp and shells!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16105, 'This place isn''t quite as cool as the ruins, and the air in here is a bit humid if I do say so myself, but it does have a comfy, home feel to it.$B$BDon''t you think?', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16106, 'I don''t know about you, but I really miss the unlimited raw materials that were down in the ruins!$B$BI''m not even sure if I could make a dud grenade out of the little that can be scrounged in this cave!', '', 0, 0, 1, 0, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16107, 'Naga.$B$B<Vilethorn spits on the ground in disgust.>$B$BIt was foolish of them to think they could make an orc labor at their whip. We will make every last one of them regret not killing us when they had the chance.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16108, 'Welcome, friend.\r\n\r\n\r\n\r\nWe have little to offer by way of supplies, but I will assist you however I can.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16109, 'My rescue plan is brilliant. Infallible. Only a goblin could possible stop me from succeeding. A goblin with fins. Scary thought.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16111, 'Coming or going?', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16112, 'The tenacity of the wolf ancient is the stuff of legend.$B$BLearn from his example, $c, and victory is all but certain.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16113, 'From the moment the wild creatures first stirred on Azeroth, Goldrinn was there. His is the spirit of the hunter, the animal instinct that kicks in when wild things smell food or feel their children are in jeopardy. He appears as a great white wolf, ferocious and cunning.$B$BHe''s known across all cultures. The orcs even have their own name for him: "Lo''Gosh."$B$BTen thousand years ago, when demons first breached Azeroth, Goldrinn stood with the other ancients to mount a desperate defense.', '', 0, 0, 1, 0, 1, 0, 273, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16114, 'It was during those darkest of days that Goldrinn''s tenacity in war became legendary. While others quaked at the visage of those demon hordes, their multitudes only spurred the great wolf ancient to ever greater feats of strength. He would wade into their ranks, fangs bared and spattered with their vile ichor, his great claws thrashing them by the dozen...$B$BIt was said he stayed behind to cover the Night Elf retreat from Eldre''Thalas, the ancient city we know now as Dire Maul.$B$BDid he die? I''m not certain the spirit of animal ferocity can ever truly die, $N.', '', 0, 0, 1, 0, 5, 0, 1, 0, 274, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16115, 'Lo''Gosh is the spirit of the hunter, the animal instinct that kicks in when one smells food or sees one''s children in jeopardy. He has always been with us, a part of our Horde, in our instincts and in our blood.$B$BHe has appeared in many forms, both on our world and here. On Azeroth, he is seen as a great white wolf, ferocious and cunning. The night elves call him "Goldrinn."$B$BThey tell of a legendary battle ten thousand years ago, where Lo''Gosh fought off the demon hordes. Do you want to hear about it?', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16116, 'Ten thousand years ago demons first breached this world, just as they had the orc homeworld of Draenor. They flooded across the terrain in legion. The great ancients of Azeroth helped the mortal races to mount a desperate defense.$B$BThe tenacity of Lo''Gosh in these dark days became the stuff of legend. He feared no demon. He would wade into their ranks, fangs bared and spattered with their vile ichor, his great claws thrashing them by the dozen...$B$BHis stand against the demons inspires us all. We can all learn from his example.', '', 0, 0, 1, 0, 1, 0, 5, 0, 1, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16117, '', 'Welcome, $c!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16118, '', 'Fair Aviana, the Mistress of Birds! All winged creatures of Azeroth once owed her allegiance, especially we Druids of the Talon. It''s by her grace that we were granted the ability to shift forms and take to the skies.$B$BAviana was both beautiful and terrible, like the great birds of prey she counted among her children. She lived in the towering spirit realm of G''Hanir, the Mother Tree, but appeared on Azeroth in the form of a great winged goddess.', 0, 0, 1, 0, 1, 0, 273, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16119, '', '<Choluna''s face darkens.>$B$BTen thousand years ago demons flooded across Azeroth in the War of the Ancients. Aviana called her children to the skies and fought off the demon hordes from the front lines. Her wrath was inescapable.$B$BHundreds fell before the fury of her talons. But ultimately she was surrounded by Doomguards, their barbed lances piercing her sides...$B$BIt is said that her blood itself attacked the demons, searing their flesh, destroying them even as she herself fell from the sky.', 0, 0, 1, 0, 274, 0, 1, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16120, '', 'Aviana perished on the battlefield that day, but the mortal races and the remaining ancients ultimately triumphed. The first druids found her body among the carnage, and bore it up here, to the highest mountain.$B$BShe was laid to rest just outside this shrine, within a circle of sacred stones.$B$BA seed of G''Hanir was used to plant the World Tree, and it is all that remains of that sacred realm, which otherwise perished with her.', 0, 0, 1, 0, 274, 0, 1, 0, 274, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16121, '', 'We mortal races know so little of Aessina, the spirit of the wilderness who lurks in dense untamed woods. She is the soul of the forest, its beating heart, the source of life energy that breaks down stone, devours ancient ruins, and fills dense thickets with mystery and fear. Aessina is the center of the web of life.$B$BThe night elves have built shrines to her throughout Kalimdor. She is revered, yes... But not understood.$B$BWhat would it be like, do you think, to get even a glimpse of this reclusive, powerful ancient? ', 0, 0, 1, 0, 1, 0, 6, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16122, 'The Earthwatchers won''t allow faction squabbling to jeopardize the Earthen Ring''s work here.\r\n\r\n\r\n\r\nThose who break the peace will be dealt with... harshly.', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16123, 'Ah, Tortolla! Often misunderstood and always, always underestimated. Creatures who move effortlessly between land and sea look to Tortolla as their patron ancient.$B$BTen thousand years ago the Burning Legion invaded Azeroth, and Tortolla was among the ancients who took to the field of battle alongside Cenarius and the mortal races.$B$BAs the demon hordes crashed against the front lines of the beleaguered defenders, they didn''t know what to make of Tortolla. At first they tried to ignore him, but his terrible weight and crushing jaws laid waste to hundreds...', '', 0, 0, 1, 0, 274, 0, 1, 0, 5, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16124, 'Tortolla never fell. Eventually the greatest Doomguards of the legion surrounded him, but couldn''t pierce his stony skin and invulnerable shell. Oh, how they raged! Tortolla held his ground and covered a final retreat, before the mortal races regrouped and managed to seal the portal and end the invasion.$B$BIt was said that after the battle, Tortolla was found underneath a mountain of demon corpses. He shook the bodies free and his head emerged from the gore. Then, quietly, slowly... he asked if we had won.$B$B<Hamuul rests a hand on his stomach and bellows a deep, unselfconscious laugh.>', '', 0, 0, 1, 0, 5, 0, 1, 0, 11, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16125, 'The Wildhammers have always embraced shamanism, aye, but to find ourselves beneath the sea as part of the Earthen Ring?\r\n\r\n\r\n\r\nIt would''ve taken more than a few tankards for me to believe that one, a year ago.', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16126, 'Our warriors... they''re all captives now.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Many of us tried to escape the naga.$b$bI am the only one who succeeded...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'It makes no sense, but those vermin are going to great lengths to keep our troops alive...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16127, 'I am Gurrok, of Hellscream''s Vanguard.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16128, 'We had them!$b$bWretched Alliance ships... we could''ve cut a path to Stormwind and put an end to them!$b$b...But out of nowhere, gigantic tentacles reached up and seized our ship... broke it right in two!$b$bThe survivors... we were captured by naga as soon as we hit the water.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16129, 'Strange that the naga would go out of their way to keep us alive.$b$bThey create prisons from mystical pearls - cells that allowed us to breathe, but little else..$b$bThey ship the prisoners off... somewhere.$b$bNever see them again....', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16130, 'One of our warriors broke free and smashed many of the prisons... we were free - at least for a moment.$b$bSome swam up towards the surface... some saw this cave and swam for it.$b$bI''m the only one that lived....', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16131, 'I do not know what became of them.$b$bThere was a constant flow of captives. Horde and Alliance, both - all barely alive.$b$bThey must''ve been hauled away beyond the trench, or they have perished.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16132, 'Their numbers are too many to count. Their defenses look impenetrable.$b$bI saw no weaknesses to exploit, $r.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16138, 'Hellscream''s eyes are upon us all!', '', 0, 0, 1, 0, 66, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16140, '', 'These lands are the frontier of the Dark Lady''s conquest, $n. Look upon them; in time, it shall all be in the grasp of the Forsaken.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16142, 'The Dark Lady watch over you...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16143, 'How can I keep a clean inn with all of this going on? Are you going to take care of this pygmy problem?', '', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16144, 'Goblin zombies?! What''s next... the volcano exploding?', '', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16147, '', 'Yes, Battlemaiden?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16149, 'Battlemaiden, you honor me with your presence. Is it time for the ritual to commence?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16157, '', 'What you want?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16164, 'Ah! Umm... hello there. I was just inspecting this shell, here. Carry on! Nothing to see here!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16165, 'I seem to be having a... floating problem.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16166, 'I couldn''t tell ya. Maybe I''ve got a low bone density, or a larger-than average lung capacity. Maybe it''s all that cheese I had for lunch.$b$bEither way, this shell is the only thing that''s keeping me from rocketing to the surface.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16167, 'Aye, and it runs in the family. The Digsongs have always had buoyancy issues, I''m afraid.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16168, 'Hand over hand, $g lad: lass;... hand over aching hand. I can''t tell ya how many gallons of seawater went right up my nose.$b$bYou shoulda seen me fight off that pyreshell crab using my feet and my teeth, though! ''Twas a thing of glory, ''twas.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16169, 'I remember when I was just a wee little lad... the other boys would swim down to the bottom of Loch Modan to pick up sand dollars and seashells. Oskar and I were stuck on the lake''s surface, kicking our legs uselessly into the air, but we couldn''t join them.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16170, 'I can''t even remember how many times I''ve spotted a beautiful mining vein at the bottom of a lake or river, glimmering mockingly at me. I''m forced to float orelessly by, mining pick in hand, only to watch some blasted orc or blood elf swim down to the bottom and take it away from me.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16171, 'Ya have no idea what it''s like to be stuck here in Vashj''ir like this! Do ya know how many fish have confused me for a piece of seaweed, nibbling on my toes and hiding between pieces of my armor?$b$bThe tickling alone is enough to drive a dwarf mad!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16172, 'I can tell ya don''t want to hear my grumbling. That''s fine.$b$bJust don''t forget how lucky you are, with your "sea legs" and your "ability to swim in a direction other than up".', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16173, 'Goutgut very special. Goutgut am first to get to crush puny humans in new place.$B$BGoutgut so happy.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16174, '', 'Victory for Sylvanas! These lands will be ours.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16178, 'I''m not going anywhere until I find her!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16179, 'Thank you for returning Wolf.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16180, 'Someone is using these beakers and alchemy tools to perform experiments with various types of submarine fuel.', 'Someone is using these beakers and alchemy tools to perform experiments with various types of submarine fuel.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16181, 'Our people were held as prisoners, as slaves, in this very camp by the humans. I was locked in these cages; I saw my brothers held in these stocks, hung in these gallows.$B$BI saw Orgrim Doomhammer, leader of us all, stabbed in the back. His blood stained black the earth we stand on.$B$BAnd look at us now. This is our legacy: Hammerfall, where we lost everything, and then took it back with our own hands.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16182, 'Several small samples of oil sit in front of you, along with an empty beaker. The beaker looks like it can probably fit about five samples inside of it.$b$bWhat kind of oil will you take first?', 'Several small samples of oil sit in front of you, along with an empty beaker. The beaker looks like it can probably fit about five samples inside of it.$b$bWhat kind of oil will you take first?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16183, 'What type of oil will you select next?', 'What type of oil will you select next?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16184, 'You now have two samples of oil. Which sample will you select next?', 'You now have two samples of oil. Which sample will you select next?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16185, 'You now have three samples. Which sample will you select next?', 'You now have three samples. Which sample will you select next?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16186, 'You have four samples, and only have room to test one more. Which one will it be?', 'You have four samples, and only have room to test one more. Which one will it be?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16187, 'You have selected all five of your samples.', 'You have selected all five of your samples.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16188, 'You can use these beakers and alchemy tools to perform experiments with various types of submarine fuel.', 'You can use these beakers and alchemy tools to perform experiments with various types of submarine fuel.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16189, 'You have discovered a new type of bio-fuel! Bring it to Engineer Hexascrub for testing.', 'You have discovered a new type of bio-fuel! Bring it to Engineer Hexascrub for testing.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16190, 'You have discovered a new type of bio-fuel! Bring it to Fiasco Sizzlegrin for testing.', 'You have discovered a new type of bio-fuel! Bring it to Fiasco Sizzlegrin for testing.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16192, '<Furien groans.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16193, 'We''ve killed dozens of naga to get this far, but they still keep coming. What will it take to escape this wretched cavern?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16194, 'I don''t care if I die inside this husk, $n. I''ll pay these naga back for every one of my fellow soldiers they''ve killed or enslaved!$b$bThe others can worry about escape. I''ll worry about doling out punishment to these snakes.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16195, '', 'Why are they doing this? For pearls? For war? This ancient, Nespirah, is far more powerful than the naga understand. If they''re able to turn her towards their will... the damage they could cause would be tremendous.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16197, 'We need your help, $c. We''ve fought tooth and nail to get here, but the naga keep coming.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16198, '', 'I don''t like the feel of this place, $N. Naga sorceresses and slavedrivers aside... all I can sense inside this cavern is pain. The ancient one is trying to cry out, but it cannot speak.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16199, 'If you have naga blood on your hands, then you''re an ally of mine.$b$bA long time ago, I swore I''d never be anyone''s slave again, and I kept that bargain until Idra''kess captured us. Now I can barely contain my fury. All I want is blood... not food, not sleep, not even victory... only blood.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16200, 'My wounds are not healing, $r. I fear I may die inside this creature''s gut if we do not act soon.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16202, '<L''ghorek''s voice booms inside your mind.>$B$BI AM ALMOST... DEAD. YOU MUST HELP... STOP... THE TWILIGHT''S HAMMER.$B$BTHEY DRAIN... MY ENERGY TO... CREATE... THEIR ASCENDANTS. THEY ARE A... GRAVE THREAT IN... THE IMMINENT WAR... VERSUS... NEPTULON.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16203, 'Tha elements be crying out in rage. It ain''t no coincidence dat da naga are here. Dey be wantin'' someting.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16211, 'Ach, it''s hard enough keeping order around here without all these new troubles popping up! I hope you have good news, $N...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16214, 'To have seen the things I''ve seen, to have done the things I''ve done, and to still breathe... I am a lucky gnome.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16215, 'Operation: Gnomeregan was a success. Sure, that dastardly Thermaplugg had an unforseen trick up his sleeve, but we have him on the run! It''s only a matter of time before Gnomeregan is cleaned up and in our hands again!', '', 0, 0, 1, 0, 5, 0, 1, 0, 1, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16216, 'Cooking for the King is an honor, not a job. Do you have time to help me on some errands?', 'Cooking for the King is an honor, not a job. Do you have time to help me on some errands?', 0, 7, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16218, '', 'The end of Operaton: Gnomeregan meant a chance to rest for most people. However, my assistants and I have been caring for the wounded and for the survivors that the S.A.F.E. teams rescue from inside the city.', 0, 0, 1, 0, 1, 0, 1, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16219, '', 'Things can get a little stuffy here in Nethergarde. Sometimes a dwarf just needs a brew to take her mind off her duty for a bit.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16220, 'I was just taking a rest. Eternal watch is not as easy as it sounds, $r.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16221, '', 'Greetings, $N. I can offer you training in the way of the mage.', 0, 0, 1, 1, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16222, '', 'I''m sorry, $c, I cannot help you. You''ll have to find a $c trainer.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16230, '', 'I''m sorry, I can''t offer you training. You''ll have to find someone more familiar with your skills.', 0, 0, 1, 0, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16231, '<These baby Rockpool murlocs look toward the ocean.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16234, 'If we are to die, let it be with honor against our hated enemies!', '', 0, 0, 1, 0, 66, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16236, 'Before we can join the final battle, we must ensure that whatever''s happening inside of that Ancient across from us is put to an end. Otherwise, we will not stand a chance.$B$BLend Erunak your full assistance, $N.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16237, 'L''ghorek is the name of the Ancient god that sits across the chasm from us. It is being infested by something.$B$BWe must put an end to this or we will certainly all meet our doom!', '', 0, 0, 1, 25, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16238, 'In spite of our best efforts, the naga have attacked the breach!$B$BThe Plane of Water must be defended!', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16239, 'There is a battle brewing at the Abyssal Breach. I hope that the reinforcements that arrived with the Pincer X2 will be enough.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16241, 'Before we join the final battle at the Abyssal Breach, we must stop whatever''s happening inside of that Ancient across from us. Otherwise, we will fail.$B$BLend Erunak all of your might, $N.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16243, '', 'You ask me, I think we let the soup and gravy take care of this ready and write.$B$BIt''s bird lime to kick and prance ourselves out of here before we''re all brown bread.$B$BCatch my meaning, love?', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16244, '', 'Just between you and me, hon, I''m too short to pull this kind of duty. One more month and I''m out.$B$BI''ve already died once. No sense doing it a second time.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16245, '', 'Dealing with the first ancient, Nespirah, was hard enough. The one across from us, L''ghorek, is dying.$B$BI can sense its cries of agony. Something is stealing its life force. But to what end?', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16246, '', 'I wish that I was going to fight by your side in the upcoming battle, but Erunak wants me to remain here.$B$BGood luck, $N.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16247, '', 'These depths truly are a nightmare.$B$BAlthough, the battle that is about to be joined down in the breach below will make this look like kittens and rainbows.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16250, 'Whaddya want?', 'Whaddya want?', 0, 7, 1, 0, 6, 0, 0, 0, 0, 'I ain''t tellin'' you nothin''!', 'I ain''t tellin'' you nothin''!', 0, 7, 1, 0, 274, 0, 0, 0, 0, 'Get lost.', 'Get lost.', 0, 7, 1, 0, 274, 0, 0, 0, 0, 'Oh the big hero has arrived. I''m saved! Yea, right...', 'Oh the big hero has arrived. I''m saved! Yea, right...', 0, 7, 1, 0, 1, 0, 0, 0, 0, 'You wanna talk? Pay up.', 'You wanna talk? Pay up.', 0, 7, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16256, 'The land suffers... it cries for mercy, $r, it cries for mercy.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16258, 'Feeding a Horde army is no easy task. I have lots to do, do you have time to help?', 'Feeding a Horde army is no easy task. I have lots to do, do you have time to help?', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16259, '', 'We must do whatever it takes to recombine the fragments of the World Pillar.$B$BBut first, we must regain all of them.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16260, 'Been in Westfall all my life, $g brother:sister;. I can remember a day when Westfall was the lushest land this side of Stranglethorn Vale. Those days are long gone.$B$BWhile we no longer have Defias causing problems, the fallout from their reign of terror can still be felt. To make matters worse we''re in the worst economic downturn in history. All that gold we spent on fighting the Scourge left anyone not in a military related occupation jobless and eventually homeless.$B$BGuess where all those people ended up?', '', 0, 0, 1, 0, 1, 0, 1, 0, 6, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16262, 'Oh sure, she said, it''ll be a simple trip out into the wastes.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16264, 'Even here, among the surf and sun, I can feel the darkness that lurks in these lands.$B$BIt''s fascinating, don''t you think?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16265, 'We are proud to call ourselves the last tribe of Forest Trolls to serve the Horde.$B$BIn time, we will overcome the other tribes, and the dwarves, and the Hinterlands will be ours.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16269, '', 'The trolls here are quite accepting of my kind. After all, they spoke to the dead for centuries before the Forsaken even existed.$B$BIt''s good for business.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16270, '', 'In my youth, my family did not approve of my interest in shamanism. Brash and foolish as I was, I ran away from them and practiced on my own. Upon returning to my home one day, I found my parents gone. My home destroyed. They never found who did it.\r\n\r\n\r\n\r\nI''ve spent my life striving to extend my shamanistic visions to see into the past - to find out what happened to my family and who is responsible. I''ve come a great way. I''ve learned to focus in on impactful events in the recent past, but I have much further to go if I ever hope to glimpse something that occurred so long ago.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16271, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16272, 'Jintha''alor gonna be ours, mon. The vilebranch be weak, nasty traitors, undeservin'' of the favor of the loa.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16275, 'The war in Northrend took its toll on us as a people, $N. While we were victorious in the frozen wastes, our own land fell into disarray.\r\n\r\n', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16280, 'Make your preparations, $n, but do it quickly!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16284, 'What''s this, $c? You know my name?$B$BDo you know, then, of my reputation?$B$BI am Flametusk of the Dragonmaw clan. I commanded legions, flew on dragonback, witnessed the sundering of Grim Batol...$B$BCurse the Twilight''s Hammer, and curse their ogre lapdogs. Look at me now. All talk and cheap liquor.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16285, 'So, Twilight''s Hammer is trying to finish me off? Honorless filth!$B$BI will definitely help you, $c. You say you need a map?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16286, '', 'No matter what''s going on elsewhere, Ironforge hasn''t forgotten this land, nor any of Khaz Modan.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16288, 'What are you still doing here, $c?$B$BShouldn''t you be in Twilight Highlands laying waste to that wretched cult?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16293, 'Jessup McCree, of McCree''s Mountain Movers, at your service.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, 'If you need a mountain moved, I can do that. I can make ''em for you, too. ', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, 'This isn''t the biggest job I''ve done, not even close. This cataclysm may just be the best thing that ever happened to us!', '', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16297, 'Hey, $c!$B$BGot any leads on some lucrative contracts? I''ll cut you in on one tenth! Of a percent! ', '', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16298, 'What''s the deal, $c?$B$BWord on the docks is that you''ve been poking around my construction sites...', '', 0, 0, 1, 0, 6, 0, 25, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16303, 'Dere be nothin'' chaotic about dis attack. Da elementals and giants be organizin'' against us. It be seemin'' dat somehow we''ve earned da ire of Therazane, da Stonemother herself.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16304, '', 'Priestess knows much about Zul''Gurub.$b$bPriestess thinks you need her help.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16305, 'Crushcog''s defeat will send a powerful message to his master, Thermaplugg. The gnomes of Gnomeregan will not be stopped!', '', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16311, 'You are brave to try to escape, young Ohgan''aka.$b$bBefore you continue, let me teach you how to use your teeth to bite through the trolls'' nets.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16312, 'You are leaving the raptor dens? I was commanded to guard this post and prevent escapes, but... I think I understand why you want to leave.$b$bFine. You may pass, but first, I have a request.$b$bThe trolls often carry packs of raptor food, and I haven''t been fed in days. You don''t stand a chance in combat, but you''re small enough that you might be able to steal it from one of the sleeping trolls inside the tents...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16313, 'Quite impressive to have made it this far, Ohgan''aka. You are truly a talented young raptor... but the toughest test is yet to come.$b$bThe trolls patrol the bridges up ahead, and they will be difficult to distract. If you drop a skull in their path, however, you may be able to cause them to trip and fall...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16319, 'Throm''ka, friend!$B$BThe Warchief has ordered me to assemble his greatest veterans for an assault on the Twilight Highlands.$B$BYou look like one tough $c, but we need soldiers who are a bit more... battle-hardened. Perhaps someday you and I will fight side-by-side. Until then, continue your training! ', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16320, 'Throm''ka, friend! It is good to see a fellow veteran of the Northrend campaign.$B$BThe Warchief has ordered me to assemble his greatest warriors for an assault on the Twilight Highlands.$B$B<Warlord Krogg looks you up and down.>$B$BWe may need your help. Check in with the Warchief in Orgrimmar and see if he has a use for you yet.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16321, 'A soldier could get into a lot of trouble in a town like this.$B$BA lot of trouble.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16322, 'Thank you.$b$bIn return, I will teach you how to distract the trolls up ahead.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16324, 'You wish to escape? That is fine, but you must know some things first.$b$bStay away from the trolls. They will not kill you, but they will trap you and bring you back here.$b$bSpeak with every raptor you see. Not only can they teach you new abilities, but they will help you remember your progress and make your path out of Zul''Gurub much easier.$b$bYou already have a Dash ability - use it to get out of tight spots.$b$bOh... and stay out of the water.$b$bGood luck!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16330, 'Is there something you need?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16334, 'Welcome to Grom''gol, $c. Before we get off on the wrong foot, I''ll have you know that I won''t have slackers in my Base Camp. I expect a healthy $r like you to pull your own weight around here.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16335, 'Even in this remote corner of the world, know that Hellscream''s eyes are upon you.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16336, 'The trolls of Stranglethorn don''t take too kindly to us Darkspear. I''m not afraid of no Bloodscalp or Skullsplitter, but still... Grom''gol''s high walls make me feel safe.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16337, 'Maybe I wasn''t as safe as I thought I was here in Grom''gol.$b$bA troll''s gotta watch his neck wherever he goes.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16338, '<The cauldron bubbles.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16339, '<The troll sings to himself and stares into the cauldron. He appears to be injured.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16340, 'There''s a lot of money out there in that jungle, $r. Can you see it?$b$bNo, it doesn''t look like gold or copper. It looks like raptor hides, and mineral veins, and ancient troll artifacts.$b$bOK, maybe the mineral veins might look like gold or copper.$b$bBut still, you get my point, right?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16341, 'The great Rastakhan sends his greetings to you, member of the Horde.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16343, 'You must fly up to Stonehearth, aid my people against the stone troggs, and free my father.$B$BI will meet you there shortly after speaking with the Earthcaller.$B$BDon''t let him die, $N, or I will put you in the ground myself!', '', 0, 0, 1, 25, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16345, 'I don''t suppose you brought another squad with you, did you? We''ve got our hands full out here.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16348, 'Among the Twilight cult are magics that threaten us greatly.$B$BWe have every desire to wipe their existence from our home.$B$BWe are divided, and so we cannot.$B$BAnd so I watch...$B$BAnd wait...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16362, '', 'Prepare for war! We will no longer tolerate the Vilebranch!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16363, 'We must put an end to the corruption permeating Ashenvale.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16364, '', 'Ready for a tussle, $Glad:lass;?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16365, 'Deepholm was a slow, quiet place. Always alive. Steadily moving. Never rushed. In this time, I strived to become one with the earth, and to a large degree, I succeeded.$B$BLater, the Earthwarder returned, injured. He did not upset the balance at first. He''d stayed here before, and we knew of him. The shift did not truly begin until the Twilight cult joined him.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16366, 'When the Earthwarder began to recover, he became ill content with the quiet. With the peace. It was not long before he turned the stone dragons upon us.$B$BWith Deathwing gone, they are without purpose again. We can remind them of our strength. Bring them back to the Earthmother.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16372, 'Going ashore, $N?$B$BSay the word and I''ll lower a boat for you.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16373, 'How dare they take our king prisoner!$B$BWe will take back Stonehearth and then move through the front to crush the stone troggs in their home!', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16374, 'Let''s get out there and put those stone troggs back into the ground, $r!', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16375, 'I need you out on the front, $N.$B$BYou''re going to make the difference. We''ll crush the stone troggs once and for all.$B$BWe must rescue King Oremantle!', '', 0, 0, 1, 0, 396, 0, 396, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16376, '<Clay grumbles and sneers.>$B$BDamn kids these days.', '', 0, 0, 1, 1000, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16378, 'By the time the ritual is complete, Marnal will arrive, and my men will help carve up this grotesque creature.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16383, 'Deathwing''s entry into our world opened a rift between it and Deepholm.$B$BRebuilding the World Pillar is the only way to stabilize the rift.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16384, 'Negotiations aren''t going well, $N. The Dragonmaw are not yet free orcs.$B$BSomehow, we MUST get them to join the Horde!$B$BLet me know if you need transport back to the fleet.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16386, 'Where to, buddy?', 'Where to, buddy?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16387, 'We Dragonmaw have seen so much suffering... our defeat at Grim Batol... the loss of so many great warriors in Outland... and now incursions from Twilight''s Hammer.$B$BI sometimes wonder if we will ever be great again. But younglings like Zaela, they give this old heap of bones some hope.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16388, 'What is it you need, outsider? I shouldn''t be speaking with you...', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16390, 'I''m sick of sittin'' in this hole. I hope whatever sorry pencil-pusher is holdin'' up Danath''s return gets a punch in the jimmies.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16391, 'Hey, does this red shirt make me look expendable?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16393, 'Welcome to Aerie Peak, home of the Wildhammer Clan.$B$BWith High Thane Falstad off in Ironforge, you''ll be dealin'' with me.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16394, 'The spirits o'' this land won''t tolerate this dark magic and vicious sacrifice any longer.$B$BThe Vilebranch have got to go!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16396, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16399, 'Let''s not waste time! There''s undead afoot.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16402, 'Will you do whatever it takes to save your kingdom?', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16406, '', 'There''s more to this than we know, $N. I can guarantee you that much.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16412, 'So much senseless loss.', '', 0, 0, 1, 0, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16418, 'Here''s to you! Here''s to me! May we never disagree.$b$bBut if we do... BLAST YOU! Here''s to me.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16420, 'This must be the lifeboat that Captain Hecklebury Smotts spoke about.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16422, 'We''ve come to try to help, but it seems that their favor for you does not yet extend to us.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16424, '', 'World-famous Noggenfogger Elixir sold here!$B$BHome brewed from all-natural ingredients, bottled and sold locally right here in Gadgetzan. And it''s delicious, of course!', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16425, 'I can''t do business with you, $c. Warchief''s Orders.', 'I can''t do business with you, $c. Warchief''s Orders.', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'I have nothing I''m allowed to sell to you.', 'I have nothing I''m allowed to sell to you.', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Get lost, $c! I don''t want the enforcers to see me doing business with you...', 'Get lost, $c! I don''t want the enforcers to see me doing business with you...', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Go away, I don''t want the Warchief to find out I''ve been talking to the Horde.', 'Go away, I don''t want the Warchief to find out I''ve been talking to the Horde.', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'My goods aren''t for sale to the Horde. Don''t like it? Take it up with the Warchief!', 'My goods aren''t for sale to the Horde. Don''t like it? Take it up with the Warchief!', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Warchief Mor''ghor ordered us not to do business with the Horde.$B$B<The merchant spits on the ground, infuriated, but refuses to speak any more on the subject.>', 'Warchief Mor''ghor ordered us not to do business with the Horde.$B$B<The merchant spits on the ground, infuriated, but refuses to speak any more on the subject.>', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16426, 'I can''t help you, $c. Warchief Mor''ghor would have me executed if I allowed the Horde to use one of our wind riders.$B$BSome day he''ll get what''s coming to him...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16427, 'Not a bad place here, if you aren''t into the whole "sunshine" thing.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16429, 'The gorillas are fascinating creatures. Better than night elves, who do foolish things, like... gambling away all their money and getting put on Sea Wolf MacKinley''s hit list.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16430, 'Go ahead, $r. Give me an excuse.', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, 'Warchief Mor''ghor runs the show here. Don''t forget it.', '', 0, 0, 1, 0, 274, 0, 0, 0, 0, '<The enforcer''s eyes flash red.>$B$BI hope your pathetic Horde tries to attack us. I am itching to shed some blood, $c!', '', 0, 0, 1, 0, 25, 0, 0, 0, 0, 'The fury! The power! I have never felt so strong in all my life.$B$BSoon, ALL the Dragonmaw will feel as I do.', '', 0, 0, 1, 0, 15, 0, 0, 0, 0, 'Don''t try anything funny, $c.$B$B<The enforcer tenses his fingers near the hilt of his blade, eager for you to make a scene.>', '', 0, 0, 1, 0, 25, 0, 0, 0, 0, 'Warchief Mor''ghor will make the Dragonmaw great again!$B$BWe have no need for your pathetic Horde.', '', 0, 0, 1, 0, 11, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16432, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16433, '', 'This stone trogg is behind the growth in the Crimson Expanse.$B$BI sense a strange power in this place... be careful.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16435, 'Yarr.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16437, '<Bossy is busy trying to figure out how to get back downstairs.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16438, '<Bossy looks at you with large, liquid black eyes.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16439, '<Bossy lowers her head nobly, almost as if she understands the gravity and the meaning of your request.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16440, 'Care to purchase some piratey items?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16441, 'Welcome to Booty Bay, $r.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16442, 'This looks good, but I think it''ll look even better if we beat it up a little bit. You know, to sell the illusion of a fight. What do you think?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16443, 'My brothers are strong, but my brothers are passive.$B$BChange does not occur without movement, contention, and violence. Our enemies live this, whether they fully realize it or not. The passive nature of my brothers makes them weak and vulnerable to these new enemies.$B$BNot I. I have no fear of change. I will tear at the ground and move the mountains. I embrace change.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16451, 'Are you here to help the Dragonmaw reclaim our freedom?$B$BSpeak with Zaela - she''s coordinating our resistance!', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16455, 'Aye, what need ye?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16457, 'A barrel of grog. Pirates love this stuff.$b$bThe cork does not seem to fit too tightly in the bunghole.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16458, 'The grog leaks out of the barrel. A lot of pirates are going to be very unhappy about this.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16460, 'A barrel of gunpowder. There is a pitcher of water sitting nearby.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16461, 'The gunpowder is completely soaked. Nobody''s going to be using this to fire cannons anytime soon.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16463, 'An enormous crate, filled to the brim with cannonballs. There is a can of cooking grease sitting innocently nearby.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16464, 'You pour grease all over the heavy metal projectiles. Firallon''s crew is certainly going to have a hard time loading these.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16465, 'Ahoy!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Avast!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Arr!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Yarr!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Blow me down!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Gangway!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16469, 'These plans list the details on the upcoming attack!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16470, 'It is the day of reckoning, $c!', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, 'Have you come to help overthrow Mor''ghor?', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, 'Zaela told us the Horde would help! What can I do?', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, 'Don''t give me any armor. Just gimmie a blade and tell me who to kill.', '', 0, 0, 1, 0, 274, 0, 0, 0, 0, 'The Horde has come! It''s about time we got some real leadership around here.', '', 0, 0, 1, 0, 4, 0, 0, 0, 0, 'I''ll fight by your side, $c. You won''t regret helping us!', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16471, 'Looks like I picked the wrong day to stop killin'' fel orcs.', 'Looks like I picked the wrong day to stop killin'' fel orcs.', 0, 0, 1, 0, 11, 0, 0, 0, 0, 'It''s a day of reckoning, $c!', 'It''s a day of reckoning, $c!', 0, 0, 1, 0, 5, 0, 0, 0, 0, 'Put me in, coach! I''m ready to fight!', 'Put me in, coach! I''m ready to fight!', 0, 0, 1, 0, 5, 0, 0, 0, 0, 'Today Mor''ghor''s tyranny will end.', 'Today Mor''ghor''s tyranny will end.', 0, 0, 1, 0, 1, 0, 0, 0, 0, 'This is it, $c! The revolution has come.', 'This is it, $c! The revolution has come.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '$c! Zaela said the Horde would provide us with weapons. What do you have?', '$c! Zaela said the Horde would provide us with weapons. What do you have?', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16472, 'Ahoy there!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16473, 'What''re y'' looking at, $r?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16474, '', 'Can I help you?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16478, '<Baron Revilgaz''s private stock. Do not touch under any circumstances!>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16483, 'Bitsy help. Buy meat, rest in tent.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16486, 'You sure picked an interesting time to chat with Ol'' Kebok.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16488, 'What shall the Light teach you?', 'What shall the Light teach you?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16491, 'May the Sun''s light protect you, $c.', 'May the Sun''s light protect you, $c.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16498, 'I don''t care how low the success rate here is. If we save even one worgen from the madness and savagery of the woods, our struggles are not in vain.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16499, '', 'The dead cry for solace. Their anguish echoes on the wind.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16500, 'Back so soon?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16505, 'I''d rather be brewin'' than fightin''!$B$BBut with any luck, I can manage both, eh?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16506, '', 'The blessing of the land be with you.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16507, 'We have to keep those fungal terrors off of the front. They''re too powerful!', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16508, 'My father is close, I know it! We have to bust through their defenses and rescue him!', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16509, 'If you want to hire a gryphon, you''ve come to the right place.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16510, '', 'Welcome to Dolanaar, $c. Let me know if you need any recipes or basic cooking ingredients.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16511, '', 'I hope you weren''t looking for something to eat, $c.', 0, 7, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16519, 'The Battle for Gilneas', 'The Battle for Gilneas', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16520, 'You are not yet strong enough to enter The Battle for Gilneas. Return when you have gained more experience.', 'You are not yet strong enough to enter The Battle for Gilneas. Return when you have gained more experience.', 0, 0, 1, 1, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16521, 'Ahh, the jungle. It''s good to get out of town every once in a while, you know?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16522, 'You are not yet strong enough to do battle in Twin Peaks. Return when you have gained more experience.', 'You are not yet strong enough to do battle in Twin Peaks. Return when you have gained more experience.', 0, 0, 1, 274, 0, 0, 1, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16523, 'Twin Peaks', 'Twin Peaks', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16527, 'The great Rastakhan sends his greetings to you, member of the Alliance.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16528, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16536, 'Yes, $N?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16537, 'The Explorer''s League exists to uncover the hidden secrets within this world. While the cataclysm was devastating for most, for us, it provided access to untold troves of information and wealth.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16541, 'Are you ready to train, warrior?', 'Are you ready to train, warrior?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16542, 'It''s good to see you made it through, $N. ', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16543, 'Pie is far better than cake. Everyone knows that! Shouldn''t a $c of your standing be well-informed about such important matters?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16544, '', 'We will defeat the Twilight''s Hammer wherever they may hide. Not even the elemental planes will be a safe haven for their kind.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16545, 'When Deathwing destroyed the World Pillar, he broke open a rift between your world and ours. These spores and fungi are one consequence.$B$BLet''s see if we can deal with them together.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16547, '', 'Hello, $c. Care to purchase something?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16548, '', 'The Gurubashi are dead, and Hakkar with them. Most of my fellow Zandalar have returned to their homeland.$b$bIt falls on me, Chabal, and the Darkspears of Bambala to watch over Zul''Gurub now.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16549, 'This ancient totem is fashioned into the shape of a bat. It must be the totem that Maywiki spoke of.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16550, 'Oh, hey $N.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16552, 'The prince has run off. This is bad!', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16553, 'Zub zub.$B$BWhat? Go away.', '', 0, 0, 1, 0, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16554, 'Zub zub.$B$BWhat? Two zubs not good ''nuff for you, $c?', '', 0, 0, 1, 0, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16555, 'Why ask me? I know nothing of the Twilight''s Hammer.', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16556, '<The peon sweats and twitches.>$B$BI was ... what I meant ... um, bad!', '', 0, 0, 1, 0, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16557, '<The peon''s eyes widen in terror.>$B$BNo! You''ve discovered Sauranok is the new cult leader in Orgrimmar? He told me his secret is safe!\r\n\r\n', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16558, 'Zub zub!', '', 0, 0, 1, 0, 273, 0, 0, 0, 0, 'Orgrimmar is stronger than ever!', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, 'Can I help?', '', 0, 0, 1, 0, 273, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16559, 'Hello, $c!$B$BOrgrimmar''s skyway is the center of the world. The north zeppelin tower will take you to Stranglethorn or Undercity. The south tower wll take you to Thunderbluff or all the way to Northrend.$B$BFlight Master Doras can send you all over Kalimdor - at least, anyplace you''ve already explored.', '', 0, 0, 1, 0, 5, 0, 1, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16560, 'Cult? I don''t know. Seen some suspicious types lingering around the south zeppelin tower, though.', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, 'I don''t know nothing! Ask the others.', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, 'Secret cult? Is that who I see having meetings at the base of the south zeppelin tower?', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, 'Secret cult? You''re not with those creepy orcs who lurk around the south zeppelin tower, are you?', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, 'I''m too dumb to be in a cult. Been that way since I felled off the back of the zeppelin. And hit them propellors. Landed on a rock. They fixed my head up with a metal bowl to make it round and hard.$B$B<He thunks his fist against his skull.>$B$BThen the lightning done come.', '', 0, 0, 1, 0, 6, 0, 1, 0, 5, 'I hear strange orcs whispering all the time inside the south zeppelin tower. They always shut up whenever I get near.', '', 0, 0, 1, 0, 25, 0, 0, 0, 0, 'I don''t know.$B$BDon''t hit me!', '', 0, 0, 1, 0, 18, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16562, '', 'I''m sorry, but I can''t offer you training.', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16563, '', 'Choosing the path of a mage is to choose a path of great difficulty. Many do not understand us. Our own people struggle to accept our arts.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16564, '', 'Are you here to help Ironforge, or just gawk at me all day?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16565, 'Leaping Leper Gnomes! You''re a sight for sore eyes. I was worried the giant magma worm out front would deter visitors. Now that you''re here you can give me a hand.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16566, 'You have my undying gratitude and that of my people, $N.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16569, 'I cannot help you with your training. Seek out a $c trainer.', 'I cannot help you with your training. Seek out a $c trainer.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16570, 'Are you here to train, hunter?', 'Are you here to train, hunter?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16571, 'Lok''tar! We need your help!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16572, 'TRY NOT TO... LOSE... THAT ONE.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16573, 'Are you here to train in Archaeology?', 'Are you here to train in Archaeology?', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16574, '', 'Welcome to Nethergarde, $c. Call me "Mama," I''m here to take care of you.', 0, 7, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16575, '', 'In death, we are reborn.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16579, 'Return any time ya need trainin''.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16580, 'Zoram''gar will be a new bastion of power against our enemies under my watch.$B$BGlory to the Horde! ', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16581, '', 'It''s an honor to have a hero like you among us, $N.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16583, 'I must have lived a charmed life, $N. To return to the world as a member of the Forsaken and the Apothecary Society... I couldn''t have asked for a more suitable fate.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16585, '', 'The druids and sentinels prefer to keep separate company, but we have always worked well together.$B$BNever mistake privacy for aversion.', 0, 0, 1, 378, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16586, '', 'A beautiful city, is it not? As was Gilneas, in its time.$B$BBut such things pass, as shall we. Only the earth and her secrets will remain.$B$BAre you willing to learn, $N?', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16587, 'The Quilboar here are too dangerous to get riled up over outside conflicts, $r. My totem will not ward them off forever.$B$BWe must put a stop to their transgressions against nature.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16588, 'Looks like you brought the whole fleet with you, $N! And a pack of angry Brashtide to boot!$b$bI hope you''re battle-ready, because these guys sure came packin''.', '', 0, 0, 1, 0, 3, 0, 1, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16589, 'I''m getting too old for this! There''s too many of them!$b$b<Fleet Master Seahorn pauses to catch his breath.>$b$bWhat am I saying? There''s not enough of them! HAVE AT YOU, YOU MANGY CURS!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16590, '', 'Begone. I have neither the ability nor the inclination to instruct you.', 0, 0, 1, 274, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16592, 'They keep coming! Push them back! We must make sure we save as many Gilneans as possible!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16593, 'What? Of course not! I could easily escape this simple contraption, but I''m much too busy. See, a while back I spent a few months inside the belly of a beast...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16594, 'It wasn''t strictly voluntary, but I discovered something truly incredible. The beast seemed to be able to consume almost anything with no ill effects.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16595, 'Exactly. I ran some tests on the residual digestive fluid coating my suit and...\r\n\r\n\r\n\r\n<Finkle trails off>\r\n\r\n\r\n\r\nSay, you haven''t seen my skinning knife anywhere, have you? I seem to have misplaced it.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16596, 'Oh yes, the bile; it''s amazing stuff. With the proper catalysts it renders anything to which it''s applied practically immortal*. I''ve been harvesting it with my reprogrammed Bile-O-Tron 800 and I''m certain I''ve got the mixture right this time. I just need a few volunteers to test it out against a suitable creature. What do you say, friend?\r\n\r\n\r\n\r\n*Immortality subject to certain restrictions.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16597, 'Oops! That lever activates the Bile-O-Tron. Oh, and if you happen to come across a key...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16601, 'There are two: The Trader''s Hall in the Trade District, and the Stormwind Auction House in the Dwarven District.', 'There are two: The Trader''s Hall in the Trade District, and the Stormwind Auction House in the Dwarven District.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16602, 'You''ll find it in the northernmost part of the Dwarven District, near the Northern Landing.', 'You''ll find it in the northernmost part of the Dwarven District, near the Northern Landing.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16603, 'There are two banks in the city: The Stormwind Counting House in the Trade District, and the Royal Bank of Stormwind in the Dwarven District.', 'There are two banks in the city: The Stormwind Counting House in the Trade District, and the Royal Bank of Stormwind in the Dwarven District.', 0, 0, 60, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16604, 'Stormwind''s Royal Bank is in the northernmost corner of the Dwarven District, just inside the Northern Landing.', 'Stormwind''s Royal Bank is in the northernmost corner of the Dwarven District, just inside the Northern Landing.', 0, 7, 50, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16605, 'Stormwind''s two most popular inns are located in the Trade and Dwarven Districts: The Gilded Rose and The Golden Keg.', 'Stormwind''s two most popular inns are located in the Trade and Dwarven Districts: The Gilded Rose and The Golden Keg.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16606, 'The Golden Keg is in the northen part of the Dwarven District, right by the fountain.', 'The Golden Keg is in the northen part of the Dwarven District, right by the fountain.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16607, 'Stormwind has many points of interest, from the Deeprun Tram to Stormwind Keep.$B$BWhat were you looking for?', 'Stormwind has many points of interest, from the Deeprun Tram to Stormwind Keep.$B$BWhat were you looking for?', 0, 7, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16608, 'There are stable masters in both Old Town and the Dwarven District.', 'There are stable masters in both Old Town and the Dwarven District.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16609, 'Byron Oakhorn can be found in earternmost Stormwind, through the gates at the back of Old Town.', 'Byron Oakhorn can be found in earternmost Stormwind, through the gates at the back of Old Town.', 0, 7, 1, 0, 0, 0, 0, 0, 0, 'If you need to house your pet while you''re training another, then you should talk to Jenova Stoneshield over in the Dwarven District.', 'If you need to house your pet while you''re training another, then you should talk to Jenova Stoneshield over in the Dwarven District.', 0, 7, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16610, '', 'There were too many... our assault seems to have barely even scratched at their ranks. We lost so many men! Something must come of this...', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16612, 'We''re unda attack!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16613, 'Da naga won''t be givin'' up. We need to be findin'' our friends and takin'' the fight to dem.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16614, 'I''m going in after Erunak... alone if I have to!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16615, 'Remtravel has been a hero to the archaeology world for nearly 40 years. If he could only remember them, oh, the stories he would tell...', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16616, 'Well, I suppose I should go in there after him.$b$bCan''t be any worse than facing Hellscream after this...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16617, 'There are hunters training in Old Town''s Command Center as well as in the Dwarven District.', 'There are hunters training in Old Town''s Command Center as well as in the Dwarven District.', 0, 7, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16618, 'You can always find a handful of hunters just outside Old Town''s east gate.', 'You can always find a handful of hunters just outside Old Town''s east gate.', 0, 7, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16619, 'The Park...?$B$BIt''s in ruins. Haven''t you heard? The great dragon Deathwing soared over Stormwind and destroyed it in passing.$B$BNot sure why he didn''t level everything, honestly, but we all thank the Light he didn''t.', 'The Park...?$B$BIt''s in ruins. Haven''t you heard? The great dragon Deathwing soared over Stormwind and destroyed it in passing.$B$BNot sure why he didn''t level everything, honestly, but we all thank the Light he didn''t.', 0, 7, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16620, 'The keep is in northren Stormwind.$B$BJust follow the canals north and you''ll eventually come across a drawbridge... that leads into the keep''s courtyard.', 'The keep is in northren Stormwind.$B$BJust follow the canals north and you''ll eventually come across a drawbridge... that leads into the keep''s courtyard.', 0, 7, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16621, 'The prison? Why would you want to go there? It''s in the center of the city, just northeast of the Mage Quarter.$B$BIf you''re truly going there, be careful. I''ve heard news of riots.', 'The prison? Why would you want to go there? It''s in the center of the city, just northeast of the Mage Quarter.$B$BIf you''re truly going there, be careful. I''ve heard news of riots.', 0, 7, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16622, '', 'I''m sorry, I cannot train you.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16623, '', 'How can I help you, $c?', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16624, 'We''ve been hearing reports of elemental disturbances around Azeroth for some time now. Our sources indicate that the phenomenon is not entirely natural, but we haven''t quite been able to determine the source. We have some theories though, but nothing concrete.$B$BKeep your eye out for any suspicious elemental activity as you walk around. If you find anything worthwhile, please let an Earthen Ring Emissary know. You can find us in any capital city.$B$BBe careful out there. Trouble is brewing.', 'We''ve been hearing reports of elemental disturbances around Azeroth for some time now. Our sources indicate that the phenomenon is not entirely natural, but we haven''t quite been able to determine the source. We have some theories though, but nothing concrete.$B$BKeep your eye out for any suspicious elemental activity as you walk around. If you find anything worthwhile, please let an Earthen Ring Emissary know. You can find us in any capital city.$B$BBe careful out there. Trouble is brewing.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16625, 'The elements in Azeroth are becoming more disturbed each passing day. The key to this disturbance lies here, in Nagrand. When Draenor was torn apart, all of the elemental planes were thrown into great turmoil and have never recovered. The rifts here form naturally and are a sign of a severely damaged world.$B$BTo see this same kind of disruption on Azeroth is not just unnerving, it could be a precursor to a type of destruction the world has never seen before.$B$B$n, bring me any information you may find when walking around Outland.$B$BI must spend time with the elements here, researching a way to calm the elements again in Azeroth...before it''s too late.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16627, 'Denman Family Jewelers, between the northern Trade District and The Canals, should have everything you''re looking for.', 'Denman Family Jewelers, between the northern Trade District and The Canals, should have everything you''re looking for.', 0, 7, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16628, 'Harrison Jones teaches Archaeology in Stormwind Keep''s Royal Library when not out in the field.', 'Harrison Jones teaches Archaeology in Stormwind Keep''s Royal Library when not out in the field.', 0, 7, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16629, 'Profession vendors can always be found near their respective trainers. Other sorts of vendors are scattered throughout Stormwind.$B$BWhat were you looking for?', 'Profession vendors can always be found near their respective trainers. Other sorts of vendors are scattered throughout Stormwind.$B$BWhat were you looking for?', 0, 0, 60, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16630, 'The Champions'' Hall is located in the southeastern end of Old Town.$B$BThe Honor and Conquest quartermasters can be found there.', 'The Champions'' Hall is located in the southeastern end of Old Town.$B$BThe Honor and Conquest quartermasters can be found there.', 0, 7, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16631, 'In the Command Center, just outside of Old Town''s southeast gates, you''ll find the quartermasters.', 'In the Command Center, just outside of Old Town''s southeast gates, you''ll find the quartermasters.', 0, 7, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16632, 'There are stables just beyond Old Town''s southeast gates. You can find a riding trainer and a horse breeder there.', 'There are stables just beyond Old Town''s southeast gates. You can find a riding trainer and a horse breeder there.', 0, 7, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16633, 'If only I could get to the Launch Bay. Gimme one, just one, of those beautiful airborne machines and I could retake Gnomeregan and scare the goggles off of B.E Barechus at the same time!$B$BImagine what I could do with two...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16634, 'Do you know of the Gryphon Roost off the Trade District, where the Flight Master may be found?$B$BA pair of Wildhammer dwarves raises and sells gryphons there, and can even train you to ride the beasts.', 'Do you know of the Gryphon Roost off the Trade District, where the Flight Master may be found?$B$BA pair of Wildhammer dwarves raises and sells gryphons there, and can even train you to ride the beasts.', 0, 7, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16635, 'You look exhausted. Is something wrong?', 'You look exhausted. Is something wrong?', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Good to see you.', 'Good to see you.', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Yes?', 'Yes?', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Have you recovered the final piece?', 'Have you recovered the final piece?', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Any luck with Therazane?', 'Any luck with Therazane?', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'You look intent. Is there something I can help with?', 'You look intent. Is there something I can help with?', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Am I needed?', 'Am I needed?', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'And I thought I might get a bit of rest. Silly me.', 'And I thought I might get a bit of rest. Silly me.', 0, 0, 1, 0, 0, 0, 0, 0, 0, 0), +(16638, 'Twilight''s Hammer has infiltrated my city. Left unchecked, they''ll rot it to the core. Before we besiege their stronghold in the Highlands, I must be certain that Stormwind is safe from their machinations.$B$BI need more feet on the ground, reliable eyes and ears throughout the city. An experienced $c like yourself would be invaluable.$B$BAre you prepared to help Stormwind''s cause?', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16641, 'Welcome to Stormwind, $c.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16642, '<Anduin sizes you up.>$B$B$N, is it? A few of your triumphs have been the talk of the court.$B$BWhat was it like to serve in Northrend? Have you seen the World Tree? Are the stories about Vashj''ir true? I have so many questions!', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16644, '', 'Hey there, cutie! Mind rubbing some lotion on my exposed areas?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16651, 'I trust you and my son are getting along? Anduin is anything but shy.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16653, 'When Stormwind is secure, we will take this fight to the Highlands.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16659, '', 'Hi. Welcome to my salon.$B$BYou look great! But if you''re in the mood for a change, speak with my barber, Jelinek, or just sit right down in one of the chairs.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16660, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16661, '', 'We must take what is ours. Our survival depends on it.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16663, 'The Scarlet Crusade will return to its noble roots!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16665, 'If one such as I can be captured by that lumbering oaf, then you must be brave indeed to venture here.\r\n\r\n\r\n\r\nIf you can distract Halfus and break the chains binding me then I will fight alongside you.\r\n\r\n\r\n\r\nMy ability to slow the passage of time in an area will help you evade the Proto-Behemoth''s Fireball Barrage.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16667, '', 'You will speak when spoken to.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16669, '', 'We''re trying to find out what''s so important up at the Masters'' Gate.$B$BI just know that those Hammer jerks are up to no good. No fair! We came all this way following a clue and now we can''t even get close.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16670, '', 'I am the mistress of the skies, and they who threaten my children shall suffer.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16671, '', 'Call me Twin. That''s what Mowi calls me.$B$BNo, we don'' look alike. Are ye blind? She''s a gnome fer the Light''s sake! We act alike. ''specially when we''re fightin''.$B$BAs fer my name... have ya na heard o'' the storied Wildhammer Brewers? Care fer a pint?', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16672, '', 'The Twilight''s Hammer has most certainly uncovered something of interest up at the Masters'' Gate.$B$BPerhaps a $g skilled : lovely; $c such as yourself would help me with that?', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16673, 'As my lovely companion may have already enlightened you, we are in pursuit of something mysterious and powerful. All of our clues point to the Masters'' Gate.$B$BUnfortunately, the nihilistic cultists known as the Twilight''s Hammer have prevented our attempts to research the area. Surely a $c with your reputation can assist the Reliquary in its time of need?', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16682, 'There you are, $N! I thought you''d forgotten about me.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16683, 'What do you want? Can''t you see I have bat droppings to clean up?', '', 0, 0, 1, 0, 1, 0, 6, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16686, '', 'What brings you inside these cursed lands?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16687, 'With the death of the Lich King, all I have left is my duty. There is no family, there are no friends... there is only this.$b$bWar.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16688, 'MORE Ghaz''ridian? Why would you think I would want any MORE of those infernal things? I''m stuck with about nine thousand, and they''re not selling! Why did I ever think anyone would want a statue of an overgrown snake? Pah!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'I saw the Wastewander and their leader, Caliph Scorpidsting, heading south of here. Watch out, they look like they''ve toughened up some!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'I saw the biggest bug you''ve ever seen wandering around one of those Silithid hives. Or maybe it was both of them. I think the heat''s getting to me...do you see that sand kitten over there?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'I don''t know much about dragons, but a big, scary one showed up one day just over yonder, near the entrance to the Caverns of Time. He kept yelling something about...what was it...the end of time as we know it? I wasn''t really paying much attention.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'An old friend of mine named Frokle was supposed to be heading in to Gadgetzan, but him and the rest of the Bilgewater crew manning the ship never arrived. I''ve heard rumors of a crazy goblin that hangs out near a downed flying machine in the far south, could it be...?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'I found a broken-down cart amongst the dunes when I was checking out the potential profitibility of Centipaar Silithid Snacks (patent pending). I thought to myself, "hey, free cart!" That is, until the biggest basilisk you''ve ever seen showed up, and I had to leave the whole thing behind!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Have you seen those huge dirt mounds moving around beneath the dunes? They belong to a species of tunneling worm the likes of which Azeroth has never seen! I''m sure that battling one would be a great learning experience for a seasoned adventurer such as yourself.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'When the Cataclysm happened, the links bounding elementals across Azeroth weakened significantly. One such elemental, Aquementas, is no longer imprisoned. I hear he''s causing some major problems for the Southsea gang!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 0), +(16689, '<The outhouse is silent.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16691, '', 'How do you do, $N?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16694, '''Ey, mon! You come to help Zen''Kiki out?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16702, '', 'I''ll burn this place to the ground before I am shamed in the eyes of Hellscream!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16705, 'I can instruct you in blacksmithing as well as supply the necessary tools.$B$BHow may I help you?', 'I can instruct you in blacksmithing as well as supply the necessary tools.$B$BHow may I help you?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16706, 'I can instruct you in herbalism as well as offer helpful supplies.$B$BHow may I help you?', 'I can instruct you in herbalism as well as offer helpful supplies.$B$BHow may I help you?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16711, 'Thanks for helpin'' me out, mon! No more shapeshifts for me... I''m gonna work on my healing!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16712, 'Greetings, young one, it is good to see a noble soul again.$B$BDire Maul, formerly Eldre''thalas, is corrupt to its very core. I have watched my brethren fall to the forces of darkness and chaos. Many would have this place razed to the ground to end its horrors forever.$B$BBut Dire Maul is worth saving, mortal. Help me, and perhaps together we can unleash the vast power lost here for the forces of good, as they once were so long ago.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16714, 'How may I be helpin'' ya, Child of de Earth?', 'How may I be helpin'' ya, Child of de Earth?', 0, 1, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16716, 'Da Gordok no like Dagg''thol, so he kill them. Da stupid trees and goat men no like Dagg''thol, so he want kill them too.$B$BPuny $r like Dagg''thol and help him take dis place for Master? Or does Dagg''thol need kill you too?$B$BStupid tree keep staring at Ambassador Dagg''thol...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16717, 'I''m completely out of supplies and the road is blocked by orcs, just my luck!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16719, '<The Major nods curtly.>', '', 0, 0, 1, 0, 273, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16720, 'Back so soon, $N? Did you learn anything from the dockworkers?', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16727, 'May the light embrace you.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16728, '', 'Deathwing''s taint shall be wiped from Deepholm, and his Twilight cultists with it.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16729, 'I was in Ironforge during the takeover - it was chaos.$B$BNo wonder father gets so protective when I leave the keep. ', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16730, 'We''ve got to get out of here!', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16731, 'What WAS that thing?', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16732, 'Hm?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16733, 'How did you manage to get here on foot alive? You must be quite the hero to brave Dire Maul.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16736, '', 'The materials I offer are rare and powerful.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16737, 'You have proven capable. Resourceful. I think you will be the one to take the fight to the gyreworms where we cannot. You will be the one to make your way deep into the Crumbling Depths, the only place where we cannot pass.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16742, 'Weldon is nothing more than a damned coward. He fled from the scourge and now dares to come here as if he were some sort of hero?$B$BBah!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16743, 'Don''t listen to anything Alexi says. He was a fool to stay during the plague and now look at him - he''s no better than the other abominations in this place.$B$BDon''t fret, we will reclaim Scholomance and the surrounding lands for the last living son of Barov - the rightful heir.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16744, 'You''re not thinkin'' about stealing my explosives again, are ya?', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, 'Just look at this place!$b$bIt''s an archaeologist''s dream...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'How about you don''t go runnin'' off with my explosives this time, okay?', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16745, 'Just look at this place!$b$bIt''s an archaeologist''s dream...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16747, '', 'Keep starin'', I don''t get any prettier.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16748, 'They can drain the Loch until it''s little more than a drip of mud, and we''ll still fight to keep it ours.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16750, 'Who knows what dark an'' horrid tings be gibberin'' in de outer darkness... tings dat''d drive a soul mad ta see?$B$B-We- be knowin''. An'' you''ve come lookin'' ta know -more,- haven''t ya?', 'Who knows what dark an'' horrid tings be gibberin'' in de outer darkness... tings dat''d drive a soul mad ta see?$B$B-We- be knowin''. An'' you''ve come lookin'' ta know -more,- haven''t ya?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16751, 'Greetin''s, $N. Are ya here ta be learnin'' of de Hidden Arts?', 'Greetin''s, $N. Are ya here ta be learnin'' of de Hidden Arts?', 0, 1, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16754, 'Good day, $g brave: fair; $c. How can I be of service?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16755, 'Well, let''s see... I saw some drudges running away from that mine over there. Said something about a spider. New customers? Well, there''s Jeralee, the lovely young gnome, who bought an axe twice her size last week. Oh, and Magus Bisp came by asking for armor. Not sure why he''d need plate armor...', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16756, 'Can I help you?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16757, 'What is this, an interrogation? You''re not one of Fordring''s internal affairs guys, are you?$b$bWell, I''ve got nothing to hide. Let me look over my records. Last week I sold a ball gown to Lieutenant Myner, which struck me as odd. What else... Magus Bisp bought several dozen leather jerkins, which he couldn''t give a reason for. Oh, and Friar Burlingham came by to stock up on swimwear for his trip to Hardwrench Hideaway. That''s about it.$b$bNow if you don''t mind, I have customers!', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16758, '', 'Hello there, $c!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16759, '', 'Well, let''s see. I heard that Magus Bisp has been spending his time cooped up on top of his tower, working on some new spell, or something.$b$bI heard that Del Gahrron was planning on retiring and heading back to his farm. He may have already left, in fact.$b$bOh, and I heard that there''s some $r $c running around town, asking people all sorts of annoying questions!$b$bJust playing with you, love. Hope that information helped.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16760, 'May the Light watch over you, child. And how may I help you this fine day?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16761, 'Stolen supplies? Well, let me think about it...$b$bI know a certain priest named Daria who took all the extra wine after last week''s service, but didn''t throw it out as I asked. I believe she''ll be apologizing soon, though.$b$b<Alphus winks at you.>$b$bI''ve also heard an abnormal number of confessions this week from one of the mages... what was his name? Crisp? Lisp? Something along those lines.$b$bNow, be on your way.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16762, 'W-what are you doing up here, $r? Can''t you see you''re interfering with OFFICIAL ARGENT CRUSADE BUSINESS!?', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16763, '<Grunt>$b$bYou need something, $r?', '<Grunt>$b$bYou need something, $r?', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'What is it? I''m a little busy here.', 'What is it? I''m a little busy here.', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'I''m training right now. Can this wait?', 'I''m training right now. Can this wait?', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Yes?', 'Yes?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16766, 'The fleet was mostly intact as it limped into harbor after our engagement with the Horde. We weighed anchor in the shadow of Highbank here to regroup.$B$BThen the naga came.$B$BScaly, glistening hands clambering up the anchor chains... dragging men, screaming, into the depths...$B$BThese are cursed shores, $N. Cursed. ', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16767, 'Slaughter them, $c! Destroy as many naga as you can to honor those that fell.', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16768, 'We cannot fail, $N. The future of multiple worlds is at stake here.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16771, 'How may I assist you in the afterlife?', 'How may I assist you in the afterlife?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16772, 'How may I assist you in the afterlife?', 'How may I assist you in the afterlife?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16774, 'This crate looks like it was used to store weapons and armor.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16775, '', 'Glad to have a chance to catch my breath. Thanks for the help!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16776, 'Thought I couldn''t handle them? Don''t let my size be follin'' ya. Anyway, thanks for the hand.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16777, '', 'Good to see you again! Thanks for the hand. I''ll be back on my feet in just a moment.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16780, 'Gory always wanted to be a farmer.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Gory just happy to be in the sun.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Gory wants to help out on farm. Gory already has his own scythe!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Gory not very good at planting, but Gory VERY good at reaping.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16784, 'You be a LONG way from home, mon. Heh heh heh.\r\n\r\n\r\n\r\nWhat can I be helpin'' ya find?', 'You be a LONG way from home, mon. Heh heh heh.\r\n\r\n\r\n\r\nWhat can I be helpin'' ya find?', 0, 1, 1, 0, 153, 3, 396, 0, 0, 'Don''t see many a'' your kind ''round here, mon.\r\n\r\n\r\n\r\nWhat can I be helpin'' ya find?', 'Don''t see many a'' your kind ''round here, mon.\r\n\r\n\r\n\r\nWhat can I be helpin'' ya find?', 0, 1, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16786, 'I''ve been meaning to investigate this site.$b$bNo time like the present!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16787, 'I''ve heard much about you, $N. The world needs people like you now more than ever.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16790, 'Sorry, $c.$B$BI ain''t believin'' ya got de right mind for graspin'' de nature of portal magic.', 'Sorry, $c.$B$BI ain''t believin'' ya got de right mind for graspin'' de nature of portal magic.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16792, 'De auction house and bank be at de top of de tall building in de middle of de valley, mon.$B$BLook for Ziji and Makavu.', 'De auction house and bank be at de top of de tall building in de middle of de valley, mon.$B$BLook for Ziji and Makavu.', 0, 1, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16793, 'You be wantin'' Sijambi, mon.$B$BShe be in de tall building in de middle of de valley.', 'You be wantin'' Sijambi, mon.$B$BShe be in de tall building in de middle of de valley.', 0, 1, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16794, 'Right outside de valley''s inn, mon.$B$BIt be de tall building in de middle.', 'Right outside de valley''s inn, mon.$B$BIt be de tall building in de middle.', 0, 1, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16795, 'Which ya be lookin'' for?', 'Which ya be lookin'' for?', 0, 1, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16798, 'You be lookin'' for Sesebi, mon.$B$BShe most often be sleepin'' under de tree by old Umbehto, de fisherman, lookin'' like a big ol'' tiger.', 'You be lookin'' for Sesebi, mon.$B$BShe most often be sleepin'' under de tree by old Umbehto, de fisherman, lookin'' like a big ol'' tiger.', 0, 1, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16799, 'Kuzari and Zanga are trainin'' headhunters on one of de small islets towards de southeast end of de valley, mon.', 'Kuzari and Zanga are trainin'' headhunters on one of de small islets towards de southeast end of de valley, mon.', 0, 1, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16800, 'Dey be on top of de tall building in de southeast end of de valley.', 'Dey be on top of de tall building in de southeast end of de valley.', 0, 1, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16803, 'Shadow-Walker Zuru can help ya.$B$BYou''ll find him on de lowest floor of de taller building in de southeast.', 'Shadow-Walker Zuru can help ya.$B$BYou''ll find him on de lowest floor of de taller building in de southeast.', 0, 1, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16804, 'Ku''nanji, de Night-Stalker, is who yer lookin'' for.$B$BHe be just north of de valley''s central building.', 'Ku''nanji, de Night-Stalker, is who yer lookin'' for.$B$BHe be just north of de valley''s central building.', 0, 1, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16805, 'Witch Doctor Umbu spends his time walkin'' about de valley, tendin'' to de people and elemental spirits alike.$B$BLook for him around de central building.', 'Witch Doctor Umbu spends his time walkin'' about de valley, tendin'' to de people and elemental spirits alike.$B$BLook for him around de central building.', 0, 1, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16806, 'You be crazy, mon, meddlin'' with dat bad mojo. But I ain''t one ta stop ya.$B$BUnjari Feltongue is in de taller building in de southeast, past de shadow priest''s shrine.', 'You be crazy, mon, meddlin'' with dat bad mojo. But I ain''t one ta stop ya.$B$BUnjari Feltongue is in de taller building in de southeast, past de shadow priest''s shrine.', 0, 1, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16807, 'Zamja be de best cook in Orgrimmar, mon.$B$BYou can find her just south of de valley''s central building. Batamsi sells de food Zamja makes, too, if ya just be hungry.', 'Zamja be de best cook in Orgrimmar, mon.$B$BYou can find her just south of de valley''s central building. Batamsi sells de food Zamja makes, too, if ya just be hungry.', 0, 1, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16808, 'Jandi and Zeal''aya work from a hut just north of de valley''s central building.$B$BDey can help ya wit'' whatever ya need, mon.', 'Jandi and Zeal''aya work from a hut just north of de valley''s central building.$B$BDey can help ya wit'' whatever ya need, mon.', 0, 1, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16810, 'Old Umbehto be on a lil'' islet east of de valley''s central buildin''.', 'Old Umbehto be on a lil'' islet east of de valley''s central buildin''.', 0, 1, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16811, 'Huju and Xen''to can take care of ya.$B$BFind dem in de valley''s central building, mon.', 'Huju and Xen''to can take care of ya.$B$BFind dem in de valley''s central building, mon.', 0, 1, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16812, 'A small group of us, druids and sentinels, have come to aid the tauren of Freewind Post with our common enemy: the Grimtotem Clan.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16813, 'Xan''tish and his snakes are slitherin'' around de valley''s central building, mon.', 'Xan''tish and his snakes are slitherin'' around de valley''s central building, mon.', 0, 1, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16814, '', 'They attacked us when the waters rushed in! It was almost as if they knew what was going to happen.$B$BThey should all suffer for what they''ve done.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16815, 'If you should need reagents, I have a full selection available.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16816, '', 'I cannot offer ya trainin'', friend.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16817, '', 'Welcome ta Moonglade, $c. All be welcome ''ere, as long as ya be keepin'' the sacred peace.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16824, '<Quality you can depend upon until the explosive end!>$B$B<Insert moolah for profession training and vending services.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16825, 'You may rest here, if you like. The Temple of Earth is under our care, now.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16828, 'The Grimtotem have struck us for the last time. Since they cannot be taught the error of their ways, we will destroy them like beasts.$B$BEarth Mother forgive us.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16829, 'These are grave times for Azeroth, $n.', 'These are grave times for Azeroth, $n.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16830, '', '<The Stonemother stares down at you. Through you. As if she''s peering into your soul.>$B$BMy daughter, Theradras, sequestered herself deep within the Crystal Caverns of Terramok to grieve for her lost love, Zaetar. There, heartless, stoneless beings invaded and slaughtered her amidst her mourning.$B$BIf I had any reason to trust a creature afflicted by the curse of flesh, it was stripped from me that day. And yet in your arrogance, you persist.$B$BOne day, you will outlive your usefulness.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16831, 'Sorry, friend. You''ll have to seek training elsewhere.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16832, 'For a small donation, I can train you in the priestly arts.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16833, '', 'How can I help ye, $c?', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16834, '', 'Nay, but ye can talk ta Earthmender Doros over there... the big draenei, lookin'' over what''s left o'' the Twilight camp.', 0, 0, 1, 0, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16835, 'Little of their camp has been left intact. Still, there might be something we can make use of.$B$BDid you require something of me, $r?', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16836, 'I have nothing for you.$B$BHegrid, though, has been gathering Twilight supplies to replenish our own. You might speak with her.', '', 0, 0, 1, 0, 274, 3, 1, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16839, 'That which falls, I collect.$B$BOf late, there have been many things to gather.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16840, 'I cannot. I merely collect.$B$BIbdil may help you. His way is to mend.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16841, 'That which has broken, I mend.$B$BSo much has been broken in recent time. So very much.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16844, 'There is nothing I call my own that would be of use to you.$B$BPerhaps D''lom will have something of interest to you in his collection.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16845, '', 'How can I help you, $c?', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16846, 'Once you go shaman, you don''t go back.$B$BI completely underestimated the usefulness of fire elementals. Easy to discipline too: just add water.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16847, 'Da Twilight''s Hammer have been assaultin'' our rings all over da highlands, and dey''ve taken many for demselves in da process. Dis be our last and we have no intention of givin'' it up, no matter what kind of horrors dey be summonin'' from the earth to assault us.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16848, '', 'Where are those lunkheads?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16849, 'Why, yes... does Chromie need this? I suppose she would.$b$bYes, you may have it. Feel free to leaf through the pages. Inside you will find the history of Darrowshire, and the details of the events that led to the deaths of so very many men.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16851, 'I cannot promise that your rest will be peaceful, $c. These orcs do not know when to quit.', 'I cannot promise that your rest will be peaceful, $c. These orcs do not know when to quit.', 0, 1, 100, 0, 0, 0, 0, 0, 0, 'A drunk orc is a sight to see. An army of drunk orcs is a sight I wish to never see again.', 'A drunk orc is a sight to see. An army of drunk orcs is a sight I wish to never see again.', 0, 1, 1, 0, 0, 0, 0, 0, 0, 'If my mother had told me there would be days like this I would not have believed her.', 'If my mother had told me there would be days like this I would not have believed her.', 0, 1, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16858, 'I''ve spent far too long in that town. It''s a wonderful place, and I enjoyed my service there, but I think I''d prefer to stay here.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16859, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16862, 'Well, I am headed in that direction. I''ve only been dallying here at Crown''s Guard because of all the wildlife activity on the roads.$b$bI''ll make you a deal: help me clear the roads, and yes, I''ll join your group.', '', 0, 0, 1, 0, 2, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16864, 'Yes, traveler?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16865, 'Inside the caravan are boxes of vendor supplies, along with the personal belongings of Fiona and her companions.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16866, 'This place is an archaeologist''s dream!$b$bI wish there were time to conduct a proper excavation.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16867, 'This here terrain is terrible! Spongy ground, all lumpy-like with stumps and stones. Like angry oatmeal. The mud''ll practically swallow a steam tank whole.$B$BOur gear''s all mired in the muck, getting thumped by the Horde!', '', 0, 0, 1, 0, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16868, '', 'Do you need to return to Vashj''ir?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16869, 'Do not be alarmed. I am not as I appear.$B$BMy name is Acridostrasz, though you may call me Acride. My Queen sent me here to stop Nefarian, and I will not rest until my task is complete. However, there are other foes here guarding his lair that I cannot take on alone.$B$BHelp me dispose of them, and you will be in the favor of Alexstrasza. You may not know that name, but you will one day be thankful you do, of this I am certain. ', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16870, 'You and your coin are -always- welcome here.', 'You and your coin are -always- welcome here.', 0, 1, 100, 0, 2, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16871, 'You do not need to fight me, $r. I mean you no ill will.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16872, 'She''s hung up in the debris and I''ve lost steam pressure. This terrain is murder!$B$BCan you get us out of this?', 'She''s hung up in the debris and I''ve lost steam pressure. This terrain is murder!$B$BCan you get us out of this?', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16873, 'The cauldron bubbles violently.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16874, 'Nothing seems to happen. The plague cauldron may be ruined, but it certainly doesn''t look any different. What will you do?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16875, '<You may train in up to two primary professions. Please choose from the following selections:>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16876, '<You may train any of the secondary professions. Please choose from the following selections:>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16877, '<Error retrieving data.... Please see Doc Zapnozzle for further instruction.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16878, 'No offense, but you don''t look like you could shoot the broad side of a pack kodo.$B$BHow about we stop wastin'' each other''s time and you go find the right trainer.', 'No offense, but you don''t look like you could shoot the broad side of a pack kodo.$B$BHow about we stop wastin'' each other''s time and you go find the right trainer.', 0, 1, 1, 274, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16879, 'Yo. Up for a little target practice?', 'Yo. Up for a little target practice?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16880, 'Hey there, $N. Here for a lesson? I ain''t got all day...', 'Hey there, $N. Here for a lesson? I ain''t got all day...', 0, 1, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16881, 'Hey, it ain''t MY fault ya didn''t learn proper spellcraft.\r\n\r\n\r\n\r\nGo pester a $c trainer, yeah?', 'Hey, it ain''t MY fault ya didn''t learn proper spellcraft.\r\n\r\n\r\n\r\nGo pester a $c trainer, yeah?', 0, 1, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16883, 'I heard ya comin'' a league away, mon. Maybe ya need some more trainin''?', 'I heard ya comin'' a league away, mon. Maybe ya need some more trainin''?', 0, 1, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16884, 'What? I look like a $c to you?$B$BGet outta here, will ya?', 'What? I look like a $c to you?$B$BGet outta here, will ya?', 0, 1, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16886, 'You need somethin''?$B$BToo bad. I got nothin'' for ya, $c.', 'You need somethin''?$B$BToo bad. I got nothin'' for ya, $c.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16887, '"Controlling the Elements for Fun and Profit."$B$BThat''s what it''s all about, am I right? Let''s get ta work.', '"Controlling the Elements for Fun and Profit."$B$BThat''s what it''s all about, am I right? Let''s get ta work.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16888, 'Look. You don''t even WANNA know the sorta stuff I could teach ya.$B$BSeriously. It''d melt yer brain. Go play nice somewhere else.', 'Look. You don''t even WANNA know the sorta stuff I could teach ya.$B$BSeriously. It''d melt yer brain. Go play nice somewhere else.', 0, 1, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16889, 'You gotta love fel energy: Cheap, renewable, and guaranteed to blow things up.$B$BSure, you risk losin'' your eternal will to Unimaginable Horrors from Beyond Time and Space, but hey, risk versus reward!$B$BNow, what did you wanna see me about, hmmm?', 'You gotta love fel energy: Cheap, renewable, and guaranteed to blow things up.$B$BSure, you risk losin'' your eternal will to Unimaginable Horrors from Beyond Time and Space, but hey, risk versus reward!$B$BNow, what did you wanna see me about, hmmm?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16893, '<The dimensional portal hums.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16897, 'My bird! Lightning - they shot her! Those filthy beasts shot her from the sky!', '', 0, 0, 1, 0, 5, 0, 15, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16898, 'Poor Lightning. She''s gonna need some time to recouperate.', '', 0, 0, 1, 0, 274, 0, 1, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16899, 'Well then. Ready to fly?', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16901, '', 'You won''t find a finer firearm anywhere else in Orgrimmar.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16903, '', 'We have pledged to open an elemental gateway from Stormwind to the Highlands, but interference from the Bastion of Twilight hampers our efforts.$B$BWhat madness are they engaged in over there?', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16906, '', 'The portal has been opened! Thanks to your efforts, we can now quickly travel from Stormwind to Twilight Highlands.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16907, 'There''s nothing more exciting than to soar through the air.$B$BWell, maybe to fight while soaring through the air, and a good tankard of ale afterward!', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16908, 'Well, why didn''t you say so? Give those Twilight cultists a good one from me, will ya?', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16909, 'Don''t let anybody tell you that the Scourge is defeated. Look... do they not still roam the Plaguewood? They cling to their corrupted land like a child''s blanket.$b$bI have no choice but to fight. Until my last breath, I will fight them.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16914, 'You will own this peninsula, $c.$B$BYou will be a weapon.$B$BYou will be a minister of death, praying for war.', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16918, 'Report!', '', 0, 0, 1, 0, 25, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16920, 'After a quick assessment, you determine that this fellow has expired within the last several hours.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16923, 'We must stop Cho''gall from creating his ultimate weapon at all costs, even if that means sacrificing ourselves.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16928, 'Dere''s nothin'' bettah dan flyin'' ovah ya enemies an'' droppin'' dey boom-boom bombs on dem!$B$BDat, or droppin'' two-hundred, fifty pound orcs on dere heads. Right, mon?', '', 0, 0, 1, 0, 11, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16929, 'Hey, why not you say so? Give dem Twilight''s the ol'' one-two, den ya comin'' back here an'' we party!$B$BI gots me a sweet lil'' place down on dey beach with me lady. You comin'' by!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16930, '', 'Lady Windrunner herself sent me to serve as the Horde liaison to Zaela and the Dragonmaw clan. She and the new Warchief, Garrosh, are attempting to mend their broken fences, it would seem.$B$BIn any case, we must put an end to the Twilight threat once and for all. Most importantly, though, we must keep Cho''gall from creating his ultimate weapon.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16938, 'Deathwing has returned. He''s siezed Grim Batol and much of the highlands, and I feel near powerless to stop him.$B$BSoon, our queen shall arrive, and together we shall put the once Earthwarder in his place.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16939, '', 'I''ve been watching the Dark Iron for a long time...plotting, hoping, wishing for the chance to drive them away and take back my land.$B$BThey can keep Blackrock Mountain. I hope it erupts again and takes them all with it. I want what is now called the Burning Steppes, my part of the Redridge Mountains that their fiery overlord destroyed.$B$B$C, I''m going to show the world the potential left in my land. I''ll build a kingdom of peace and justice atop the death and trickery they leave behind them. My vigil is over. I''m here to fight for what''s rightfully mine.$B$BAnd I''m willing to die for it.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16941, 'It''s hard to explain to the Dragonmaw concepts like, "Fields of Fire" or "Suppressive Barrage."$B$BFortunately, they have a firm grasp of "Kill Zones" and ... uh, "Murder."', '', 0, 0, 1, 0, 6, 0, 1, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16942, 'I asked for reinforcements to help us hold the beach. And the Horde sent these tiny little men and their small metal tubes.$B$B<Gralok eyes the nearby goblins with disdain.>', '', 0, 0, 1, 0, 1, 0, 274, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16943, '', 'This stronghold is fortified, but our enemies close in from all sides. We would be wise to secure our position on the coast before advancing farther inland. ', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16944, 'We will always remember Kargath Bladefist for what he once was to the Horde. He was one of the finest warriors to ever live, even the Alliance recognizes this.$B$BThe Kargath Expeditionary force was named in his honor, and I plan to ensure we live up to his name. We will drive out the Dark Iron Dwarves and claim Blackrock Mountain, and all of the surrounding areas, for the Horde as they so rightfully belong.$B$BYou will be the Warchief''s blade against Thaurissan. Wear that honor proudly.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16945, '', 'Looks like they found their way back home. I''m relieved.$b$bYou came back, too! Are you interested in joining us?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16946, '', 'I''d like to set up shop in Light''s Hope Chapel someday. I''m not much of a fighter, but that doesn''t mean I can''t help the cause.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', 'The boys and I have only traveled together for a little while, but I already can''t imagine life without either one of them.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', 'I hope you''ve made yourself welcome to the items inside my caravan. If we''re not using them, you might as well borrow them.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16947, '', 'Why would he run off like that?!', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', 'Promise me you''ll find him, $N.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '<Fiona is rather upset. She doesn''t seem to be in the mood to talk.>', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16948, '', 'Good to see you again, $N!', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', 'Hey, $N! You here to visit, or did you want to buy something?', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', 'Well, well... look who''s here!', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16951, 'Gidwin is nearby... I know it. Paladin''s intuition.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16952, 'We must avenge our mother!\r\n\r\n\r\n\r\nDistract the monster who slew her, free us from this cage, and we will fight by your side.\r\n\r\n\r\n\r\nOur ability to reduce the damage an enemy inflicts will help you survive the Proto-Behemoth''s Scorching Breath.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16954, 'If one such as I can be captured by that lumbering oaf, then you must be brave indeed to venture here.\r\n\r\n\r\n\r\nIf you can distract Halfus and break the chains binding me then I will fight alongside you.\r\n\r\n\r\n\r\nMy ability to temporarily paralyze an enemy''s body will grant you respite from Halfus'' Malevolent Strikes.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16956, 'Oh, ahh... hello there, good traveler! What can this fine goblin do for you today?$b$bI''ll assure you that I''m here in Light''s Hope Chapel solely due to my hatred of the Scourge which I share with these Argent Crusaders, and definitely not because I''m running away from any sort of embarassing zeppelin crash!$b$bI''ll stop talking now, before I implicate myself any further!', '', 0, 0, 1, 0, 1, 0, 1, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16957, 'You present an interesting option, $r. I''ll take that into consideration.$b$bAlright, I''ve considered it. Sure, I''ll join you. I''ve probably stayed in Light''s Hope Chapel for too long anyhow. Like a gnome at a urinal, I''m gonna have to stay on my toes! Heh heh!', '', 0, 0, 1, 0, 1, 0, 1, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16958, 'Hey boss. You need someone to help drive the caravan, you just let ol'' Beezil know.', '', 0, 0, 1, 3, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16959, 'Good to see you again, $N. We snuck some more of us in here while you were prepping the Gates for the attack.$B$BI''ll show you where we''re to rendezvous with Master Shaw.$B$B<The squad leader produces a map of the Twilight Citadel and points to the spot.>$B$BLet me know when you''re ready, and we''ll all head up together.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16961, '', 'Don''t mind the mess, we''re still settin'' up.$B$BDon''t let that stop you from enjoying yourself, though! Relax, spend some coin... we''ve got everything from money changers and laundry services to exotic drinks and fishing trainers.$B$BAnd if anyone gives you any trouble? You just let ME know, and I''ll handle it.$B$BI''m Mida... the boss.', 0, 1, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16963, 'It''s good to have traveling companions. The road gets lonely out here.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16964, 'Greetings, $N.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16965, 'Not now, $gpal:lady;.$B$BI gotta re-tune the boss'' shredder.$B$BShe don''t like movin'' around the city on foot like any old chump, ESPECIALLY if she''s gotta go deal with the warchief.', '', 0, 1, 1, 0, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16966, 'I don''t get many visitors this deep in the Plaguewood. Abominations, mostly.$b$bCan I help you with something?', '', 0, 0, 1, 0, 2, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16967, 'The Admiral was killed during our last naval engagement. I''ve turned this ship into a fortress.$B$BWe''re improvising here, $c.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16968, 'The hieroglyphs on your tablets indicate that there''s a way to get this mechanism working again.$b$bWe just need to figure out how...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16969, 'It looks like your predecessor had time to set the flares up, but they have not yet been launched.$b$bThis is your time to shine, $N.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16970, 'The flare launcher has been emptied.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16973, 'The trees here in the Highlands are made of stout wood. And some of them... stone. I don''t pretend to understand.$B$BWe''ve got diamond-bladed shredders to harvest the stuff, but the Alliance keeps whacking them.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16974, 'Throm-Ka, $N. We snuck a few more while you were preparing the Gates for attack.$B$BI''ll show you where we''re to meet with Garona.$B$B<The squad leader produces a map of the Twilight Citadel and points to the spot.>$B$BLet me know when you''re ready, and we''ll go together.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16975, 'My people have enjoyed a good relationship with the Wildhammer for quite some time now.$B$BA few of us have settled here... those who have found this land to be a home worth defending.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16979, '', 'Even in these bright days after the reign of Kel''thuzad, after the fall of the Lich King: the Brotherhood lives on.', 0, 0, 1, 0, 1, 0, 273, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16980, 'Hakkar is known by many names. Some call him the Blood God, others simply refer to him as The Soulflayer. Titles aside, he is an entity of enormous power with malicious intentions for our world.$B$BMy flight discovered this temple early on and sank it beneath the Swamp of Sorrows. Unfortunately, we only seemed to aid the Atal''ai by ensuring their efforts to summon Hakkar went on undisturbed. Many of the dragons tasked with guarding the temple have been corrupted, and the Soulflayer''s presence grows with each passing day.$B$BI cannot stop them alone. Together, though, we might have enough time to stop this madness.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16981, 'With Stormwind''s park district destroyed by Deathwing''s pass over the city, we''re returning to Darnassus for a time.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16984, 'If you''re looking for an Arcane Reforger, there is a highborne mage inside the enchanting shop just outside the Mage District.', 'If you''re looking for an Arcane Reforger, there is a highborne mage inside the enchanting shop just outside the Mage District.', 0, 7, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16985, '', 'Let''s get something straight, $r. I''m here for just one thing: to kill Cho''gall!$B$BYour job is to keep him from finishing the creation of his ultimate weapon. It''s an artifact that''s supposedly being created with the power of an Old God.', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16986, 'There''s an artifact, a weapon, being forged with the power of an Old God. We don''t know exactly what it is, but we need to get to it before it''s completed by Cho''gall.$B$BEverything else is secondary. Everyone is expendable, including you and I.', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16987, 'Do you know my dad?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16988, 'Poor dear, you must be exhausted.$B$BThere''s food and drink, if you like, and it''s safe to rest here.', 'Poor dear, you must be exhausted.$B$BThere''s food and drink, if you like, and it''s safe to rest here.', 0, 7, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16989, 'Looking for something to eat, $c?$B$BOr just a place to rest your weary bones for a while?', 'Looking for something to eat, $c?$B$BOr just a place to rest your weary bones for a while?', 0, 1, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16990, 'Oh man, I''m glad someone is here! Things are CRAZY down here! Crazier than usual!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16991, 'On behalf of the illustrious and always-neutral Steamwheedle Cartel, welcome to Bogpaddle! We''re proud to be the only beachfront resort and military-grade weapons yard in the Eastern Kingdoms.$B$BYou guys may have that little war ragin'' just south of here, but inside these walls, it''s all fun and games. So take a load off, have some R&R and a drink or two, and keep out of trouble... or my bruisers will remind your skull what "neutral territory" means.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16995, 'Torben Zapblast, teleportation solutions engineer at your service!', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16996, 'Yo.$B$BYou here to stable your pets, or lookin'' for a lost companion?', 'Yo.$B$BYou here to stable your pets, or lookin'' for a lost companion?', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16997, 'Yo.$B$BYou lookin'' for a lost companion?', 'Yo.$B$BYou lookin'' for a lost companion?', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(16998, 'There will be more time to talk once we get back to the surface safely.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17000, 'Greetings, my name is Tae''thelan Bloodwatcher. I have spent the better part of a lifetime training in the art of sorcery and gathering like-minded blood elves to form The Reliquary.$B$BYou see, there are ancient, powerful relics spread throughout this world that I plan to use to free my people from their addiction and unify them again as the proud, indomitable race we once were.$B$BMagic is something to be embraced and, I assure you, a force that can be utilized free of corruption with proper teaching.$B$BAs it stands, the other races of the Alliance and even the Horde mock our kind for our half-destroyed capital, still-standing statues of Sunstrider and blunder after blunder across the world.$B$BNo more.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17002, '', 'I salvaged what I could from the nearby wreckage, but I can only stay down for so long...', 0, 0, 1, 0, 71, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17004, 'Your kind will be made to suffer for this, $r.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'You ally yourself with these fiends? You, too, shall someday burn!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '<The enormous black drake, covered with open wounds, stares you down with malice in his eyes. It does not blink.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '<The ferocious black drake strains at the chains that bind it. It''s best to keep your distance.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'The bonds that hold me are not so permanent, $c. Pray you are not near when I have my vengeance.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17005, 'Dragons are no mere beasts, like hogs or cattle. They are a force of nature. Powerful... Primal.$B$BTo bend them to your will is to harness the world.$B$BTo take up their reigns is to take destiny into your hands.', '', 0, 0, 1, 0, 1, 0, 274, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17006, '', 'I''ve been mixing potions since before the cartel wars, and I don''t plan to stop anytime soon.$B$BAs long as there''s a buyer to be had, Ol'' Baba will be ready with a sale!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17007, 'That was some real firepower. Maybe there''s more to these runty little goblins than meets the eye.', '', 0, 0, 1, 0, 1, 0, 273, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17009, 'If Keely sent ya to be ropin'' me back in, ya can just forget it. There''s Twilight that need bashin''.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17010, 'Ya see that pass ahead dere, $glad:lass;?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17011, 'That''s an ambush.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17012, 'Oh yeah, $glad:lass;! Been through 4 times already.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17013, 'Damn right!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17014, 'I''ll be headin'' back shortly, $glad:lass;. Just one more go, for good time''s sake.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17016, 'Weee! Shinies all over this place!$b$bTake a look at what I found diggin'' right here...$b$bIt''s a breathin'' hat!\r\n\r\n', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17019, 'Greetings, $r. I am Lord Itharius of the Green Dragonflight.$B$BI am here to free my kin from the evil within this temple, hopefully for good. Will you assist me?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17020, 'Have you checked out my breathin'' hat?$b$bNo more suckin'' on clams for Budd! No sirree...\r\n\r\n', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17024, 'Ramkahen will only wage war against Neferset if the High Council''s vote is unanimous.$B$BThe odds are against us, but my brother needs to understand there is no reasoning with Deathwing''s allies.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17026, 'Are you with the Neferset scum? Did they send you to do their dirty work? Speak!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17027, 'It ain''t all bad...$b$bI still got my breathin'' hat!\r\n\r\n', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17029, 'Ahoy!\r\n\r\n', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17030, 'The Horde war machine needs you!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17031, 'Are you here to help the cause? Mount Hyjal burns!', '', 0, 0, 1, 0, 6, 0, 5, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17032, 'That giant squid didn''t stand a chance. The Verne''s already rearmed and ready for another go... now we just wait.$B$BIt''ll be back.$B$BYou''ll see.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17033, '', 'Ah... I do not have many visitors here.$B$BPlease, sit a while.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17034, 'The Alliance needs you. Answer the hero''s call!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17035, '', 'Are you here to help the cause? Mount Hyjal burns!', 0, 0, 1, 0, 6, 0, 5, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17036, 'That heap o'' rubble yonder was me family''s homestead fer five generations.$B$BWe''re takin'' it back.$B$BWe''re outnumbered... But we''re Wildhammer! Are yeh with me?', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17038, 'You lookin'' for me?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17040, '', 'Dad lets me shoot things!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17042, 'What a mess! We come back from saving Deepholm and what do we find?$B$BThe Twilight''s Stinkin'' Hammer!$B$BGood thing you''re here to straighten this all out!', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17045, 'You''re gonna have to protect me, $N. Without my weapons and totems, I''m defenseless!', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17046, 'So... thirsty...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17051, 'This dwarf''s body is severely battered. The Twilight''s Hammer must take pleasure in their killing.', 'This dwarf''s body is severely battered. The Twilight''s Hammer must take pleasure in their killing.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17052, 'I have to give these Twilight a wee bit of credit... what they lack in skill, they make up for in numbers and tenacity. They got a few good licks in during our last bout.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17053, '', 'The Dunwald family is built tough, but they let it go to their heads. I worry that me brothers put their repuation to the test a wee bit too often.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17055, 'Hah! My brothers be itchin'' for a fight. It was all I could do ta hold them back this long.$B$BYou in?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17057, 'Your time is coming to an end.', 'Your time is coming to an end.', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Gloat all you want, but you''ll see we were right.', 'Gloat all you want, but you''ll see we were right.', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'I may be restrained now, but my master will set me free when his vengeance rains down upon this city.', 'I may be restrained now, but my master will set me free when his vengeance rains down upon this city.', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'I am on the path to ascension and no petty, aspiring hero is going to stop me.', 'I am on the path to ascension and no petty, aspiring hero is going to stop me.', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'It is your life that will end soon; mine is just beginning.', 'It is your life that will end soon; mine is just beginning.', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'By the time you realize the truth, it will be too late.', 'By the time you realize the truth, it will be too late.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17061, 'Like a Dunwald. I like you.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17068, '', '<The console whirrs and buzzes as you approach it.>', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17072, 'The hulking statue stands inert, untouched for centuries.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17073, 'While it is clearly quite old, this statue does not appear to have crumbled at all over the centuries.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17074, 'Judging by its color, this must be The Warden.$b$bYou see a small indentation where your pawn might fit.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17075, 'This red statue looks a lot like the Sentinel''s pawn that you hold.$b$bThe statue has a small indentation that matches the size of your pawn.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17078, '', 'Greetings.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17079, '', 'We''re glad to see you here again, $N. With so many of our brethren seized by the Warchief''s forces, we thought we''d never see you again.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17080, 'Hope you brought your mining pick, pilgrim. No place better than here for digging up ancient treasure.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17086, 'After the fall of the Burning Blade Clan, we blademasters swore to free ourselves and our people from demonic control.$B$BThis may be done, but my honor remains unsatisfied.$B$BI shall fight for the Horde - and train other warriors to do so - until I die gloriously in battle. This is the only path I may tread.$B$BSo. Are you ready to train?', 'After the fall of the Burning Blade Clan, we blademasters swore to free ourselves and our people from demonic control.$B$BThis may be done, but my honor remains unsatisfied.$B$BI shall fight for the Horde - and train other warriors to do so - until I die gloriously in battle. This is the only path I may tread.$B$BSo. Are you ready to train?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17087, 'Guarding the bank and treasures of the Horde is far more satisfying than dispensing coins and trade goods from inside a cage of iron.$B$BI would not exchange places with one of those quill-pushing goblins for a moment.', 'Guarding the bank and treasures of the Horde is far more satisfying than dispensing coins and trade goods from inside a cage of iron.$B$BI would not exchange places with one of those quill-pushing goblins for a moment.', 0, 1, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17089, '', 'The Twilight''s Hammer invaded these once-pristine waters, and the surrounding lands, a short time ago.$B$BThey have polluted my loch and I would have them gone so that I may purify it once more.', 0, 0, 1, 0, 33, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17091, '', 'This land is where orcs and humans first spilled each other''s blood. Not a mile south lurks Stonard, where the orcs first grouped to invade our lands.$B$BIt was here they amassed their armies before we even knew they existed. It was here that they started the first of three wars with their attack on a small Alliance town to the west.$B$BMy town. The town where my parents died to save me.$B$BBut I''m not here to settle a grudge... I''m here to win a war.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17095, '', 'Hi! You''re new. Did you lose your home too? You can sit with me if you want.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17097, 'Pleasure to meet ya, young $gman:lady;.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17098, 'They took us unaware... attacked all of the highlands all at once, burstin'' forth from the ground, swoopin'' from the air. Most of the gryphon wings were scattered, and far too many good dwarves lost their lives.$B$BThere''d be little hope at all if Keegan hadn''t rallied us together. I owe that man my life. At least now we have a chance.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17099, 'You''re certainly not local. Matters to me little though. I''ll put my life on the line for anyone here as long as they pull their weight.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17100, 'I came here long ago to study our cursed brothers, in search of a way to cure their affliction.$B$BMagtoor welcomed me with open arms. Living here, he became my closest friend.$B$BAnd now, before my eyes, he is dying...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17102, 'You look like you could make us some money. How about a spin inside the Crucible of Carnage, pal?', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17103, 'The gryphon appears to be injured. Perhaps healing or first aid could get it back on its feet.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17104, 'The gryphon looks at you intently, clearly smelling a familiar scent on your clothing.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17105, 'The gryphon appears to be trapped. It looks like it would be easily possible to break its bonds though.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17107, '', '<Ysera''s image flutters before your eyes, as if in a dream. Nobody else sees her here, yet the vision senses your presence.>', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17108, '', '<A dream-like vision of Ysera floats before you, her attention divided. After a moment, she addresses you.>$B$BFor many years, Aviana fluttered at the periphery of my dreams. I wondered if she should ever return to us. I fear her spirit has darkened with the passage of time...$B$BBut we have more immediate concerns if we hope to save this mountain.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17110, '', 'It''s lovely here, don''t you think?$b$bA bit hot, perhaps, but it''s a dry heat...', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17111, 'Dad always told me the big fellas hit hard, but that they''re slow...$b$bI''m pretty sure dad never met this guy!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17112, '<Blackhorn gazes out across the distant inferno, then turns his attention back to you.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17115, 'An inconspicuous marble slab.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17116, 'An inconspicuous stone slab.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17117, '<The enormous ancient remains wary of you, but speaks to you as an ally.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17118, '', 'I took Helgrum under my wing when I arrived in Stonard. Under my harsh glare, he became an even greater tracker than before... and my only companion.$B$BI thought myself strong. I thought no suffering could break my spirit. When I saw the humans sink their swords into Helgrum... into my mate... I found out how wrong I was.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17119, 'I am Prince Nadun of Ramkahen. The Neferset tribe has turned against the other tol''vir.$B$BHelp me escape so that I may lobby my brother, the king, to wage war against these traitors!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17126, 'Gathering professions allow you to acquire raw materials used by production professions: gathering herbs; mining ore, stone, and jewels; or skinning beasts for their hides.\r\n\r\n\r\n\r\nYou can either support a related production profession with gathering, or simply sell the raw materials on the auction house.', 'Gathering professions allow you to acquire raw materials used by production professions: gathering herbs; mining ore, stone, and jewels; or skinning beasts for their hides.\r\n\r\n\r\n\r\nYou can either support a related production profession with gathering, or simply sell the raw materials on the auction house.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17127, 'Production professions allow you to turn raw materials into items that you can use yourself, give to companions, or sell at an auction house.\r\n\r\n\r\n\r\nThey are often paired with a gathering profession so that you can gather your own raw materials, but it is possible to simply buy materials on the auction house.', 'Production professions allow you to turn raw materials into items that you can use yourself, give to companions, or sell at an auction house.\r\n\r\n\r\n\r\nThey are often paired with a gathering profession so that you can gather your own raw materials, but it is possible to simply buy materials on the auction house.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17128, 'Herbalism allows you to locate and gather herbs from the wild. These can be sold at the auction house or used to support the Alchemy or Inscription professions.\r\n\r\n\r\n\r\nSkilled herbalists can also use their knowledge of the earth to heal themselves.', 'Herbalism allows you to locate and gather herbs from the wild. These can be sold at the auction house or used to support the Alchemy or Inscription professions.\r\n\r\n\r\n\r\nSkilled herbalists can also use their knowledge of the earth to heal themselves.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17129, 'Mining allows you to locate and mine ore, minerals and stone from mining nodes in the wilderness and underground. These can be sold at the auction house or used to support the Blacksmithing, Engineering, or Jewelcrafting professions.\r\n\r\n\r\n\r\nSkilled miners also become tough and gain increased Stamina.\r\n\r\n\r\n\r\nYou''ll need a Mining Pick in order to mine; this can be purchased from trade or Mining vendors.', 'Mining allows you to locate and mine ore, minerals and stone from mining nodes in the wilderness and underground. These can be sold at the auction house or used to support the Blacksmithing, Engineering, or Jewelcrafting professions.\r\n\r\n\r\n\r\nSkilled miners also become tough and gain increased Stamina.\r\n\r\n\r\n\r\nYou''ll need a Mining Pick in order to mine; this can be purchased from trade or Mining vendors.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17130, 'Skinning allows you to remove and prepare the hides from slain creatures. These can be sold at the auction house or used to support the Leatherworking profession.\r\n\r\n\r\n\r\nSkilled Skinners also become masters of anatomy, increasing their chances to critically hit a target.\r\n\r\n\r\n\r\nYou''ll need a Skinning Knife in order to skin creatures; this can be purchased from trade or Leatherworking vendors.', 'Skinning allows you to remove and prepare the hides from slain creatures. These can be sold at the auction house or used to support the Leatherworking profession.\r\n\r\n\r\n\r\nSkilled Skinners also become masters of anatomy, increasing their chances to critically hit a target.\r\n\r\n\r\n\r\nYou''ll need a Skinning Knife in order to skin creatures; this can be purchased from trade or Leatherworking vendors.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17131, 'Alchemy allows you to use herbs and other materials to create a wide variety of useful elixirs, potions, oils, flasks and cauldrons. You''ll also gain greater, longer-lasting benefits when using your own elixirs and flasks.\r\n\r\n\r\n\r\nHighly skilled alchemists may also transmute elemental materials and certain minerals for use by other production professions.\r\n\r\n\r\n\r\nAlchemy pairs well with Herbalism as it allows you to gather your own herbs.', 'Alchemy allows you to use herbs and other materials to create a wide variety of useful elixirs, potions, oils, flasks and cauldrons. You''ll also gain greater, longer-lasting benefits when using your own elixirs and flasks.\r\n\r\n\r\n\r\nHighly skilled alchemists may also transmute elemental materials and certain minerals for use by other production professions.\r\n\r\n\r\n\r\nAlchemy pairs well with Herbalism as it allows you to gather your own herbs.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17132, 'Blacksmithing allows you to forge items from metals, minerals and stones: melee weapons, mail and plate heavy armor, raw materials used by other production professions, and upgrades to pieces of equipment such as sharpening stones and shield spikes.\r\n\r\n\r\n\r\nHighly skilled blacksmiths can add a gem slot to their own bracers and gloves, as well as to their own or other''s belts. These gem slots may then be filled with magical gems that make the gemmed item more powerful.\r\n\r\n\r\n\r\nBlacksmithing pairs well with Mining as it allows you to gather your own ore and minerals.', 'Blacksmithing allows you to forge items from metals, minerals and stones: melee weapons, mail and plate heavy armor, raw materials used by other production professions, and upgrades to pieces of equipment such as sharpening stones and shield spikes.\r\n\r\n\r\n\r\nHighly skilled blacksmiths can add a gem slot to their own bracers and gloves, as well as to their own or other''s belts. These gem slots may then be filled with magical gems that make the gemmed item more powerful.\r\n\r\n\r\n\r\nBlacksmithing pairs well with Mining as it allows you to gather your own ore and minerals.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17133, 'Enchanting allows you to enchant items with a wide variety of beneficial effects, as well as disenchant items and create magical wands and oils.\r\n\r\n\r\n\r\nHighly skilled enchanters can even enchant their own rings, which no one else may do.\r\n\r\n\r\n\r\nMost raw materials for Enchanting must be gathered via disenchanting, a process which destroys the disenchanted item. For this reason the profession pairs well with Tailoring, as you can disenchant the magical Tailoring items you create for raw materials.\r\n\r\n\r\n\r\nEnchanters may also place enchantments upon vellum, which allows the enchantment to be sold or saved for later use. Vellum and other useful Enchanting materials may be purchased from Enchanting vendors.', 'Enchanting allows you to enchant items with a wide variety of beneficial effects, as well as disenchant items and create magical wands and oils.\r\n\r\n\r\n\r\nHighly skilled enchanters can even enchant their own rings, which no one else may do.\r\n\r\n\r\n\r\nMost raw materials for Enchanting must be gathered via disenchanting, a process which destroys the disenchanted item. For this reason the profession pairs well with Tailoring, as you can disenchant the magical Tailoring items you create for raw materials.\r\n\r\n\r\n\r\nEnchanters may also place enchantments upon vellum, which allows the enchantment to be sold or saved for later use. Vellum and other useful Enchanting materials may be purchased from Enchanting vendors.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17134, 'Engineering allows you to construct a wide variety of useful, amazing, and just plain weird items like rifles and scopes, motorcycles, and mechanical squirrels. However, many of these are only usable by yourself or other engineers, such as special goggles, mechanical additions to belts, boots, gloves and cloaks, and flying machines.\r\n\r\n\r\n\r\nMost raw Engineering materials are metals gathered by Mining, so the two professions pair well.\r\n\r\n\r\n\r\nMany creations require the use of a Blacksmith Hammer; this and other necessary materials, such as gun stocks or flux, may be purchased from trade or Engineering vendors.', 'Engineering allows you to construct a wide variety of useful, amazing, and just plain weird items like rifles and scopes, motorcycles, and mechanical squirrels. However, many of these are only usable by yourself or other engineers, such as special goggles, mechanical additions to belts, boots, gloves and cloaks, and flying machines.\r\n\r\n\r\n\r\nMost raw Engineering materials are metals gathered by Mining, so the two professions pair well.\r\n\r\n\r\n\r\nMany creations require the use of a Blacksmith Hammer; this and other necessary materials, such as gun stocks or flux, may be purchased from trade or Engineering vendors.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17135, 'Inscription allows you to create magical scrolls, glyphs, off-hand tomes, Darkmoon cards, and even recipes for other professions.\r\n\r\n\r\n\r\nMany raw materials for Inscription come from milling herbs gathered by Herbalism, so the two professions pair well.\r\n\r\n\r\n\r\nYou''ll need to a Virtuoso Inking Set for inscribing things; this and other necessary materials, such as parchment, may be purchased from Inscription vendors.', 'Inscription allows you to create magical scrolls, glyphs, off-hand tomes, Darkmoon cards, and even recipes for other professions.\r\n\r\n\r\n\r\nMany raw materials for Inscription come from milling herbs gathered by Herbalism, so the two professions pair well.\r\n\r\n\r\n\r\nYou''ll need to a Virtuoso Inking Set for inscribing things; this and other necessary materials, such as parchment, may be purchased from Inscription vendors.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17136, 'Jewelcrafting allows you to fashion magical rings, amulets, and trinkets as well as cut gems.\r\n\r\n\r\n\r\nThe gems used in Jewelcrafting may be purchased or acquired via Prospecting from ore gathered by Mining; for this reason the two professions pair well.\r\n\r\n\r\n\r\nMost Jewelcrafting designs also require a Jeweler''s Kit while more advanced creations require a Simple Grinder; these may be purchased from Jewelcrafting vendors.', 'Jewelcrafting allows you to fashion magical rings, amulets, and trinkets as well as cut gems.\r\n\r\n\r\n\r\nThe gems used in Jewelcrafting may be purchased or acquired via Prospecting from ore gathered by Mining; for this reason the two professions pair well.\r\n\r\n\r\n\r\nMost Jewelcrafting designs also require a Jeweler''s Kit while more advanced creations require a Simple Grinder; these may be purchased from Jewelcrafting vendors.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17137, 'Leatherworking allows you to fashion armor, cloaks, armor-reinforcing kits, and other similar items from leather, hides, and scales. Other materials required for leatherworking can be purchased at trade and Leatherworking vendors.\r\n\r\n\r\n\r\nLeatherworking pairs well with Skinning as it allows you to gather your own raw materials; other necessary items, such as threads and dyes, can be purchased from trade or Leatherworking vendors.\r\n\r\n\r\n\r\nHighly skilled leatherworkers can also enforce their bracers and leg armor.', 'Leatherworking allows you to fashion armor, cloaks, armor-reinforcing kits, and other similar items from leather, hides, and scales. Other materials required for leatherworking can be purchased at trade and Leatherworking vendors.\r\n\r\n\r\n\r\nLeatherworking pairs well with Skinning as it allows you to gather your own raw materials; other necessary items, such as threads and dyes, can be purchased from trade or Leatherworking vendors.\r\n\r\n\r\n\r\nHighly skilled leatherworkers can also enforce their bracers and leg armor.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17138, 'Tailoring allows you to fashion armor, cloaks, clothing, bags, spellthread, and other similar items from various types of cloth, which can be purchased or taken from slain humanoid enemies. Additional necessary materials such as threads and dyes can be purchased from trade or Tailoring vendors.\r\n\r\n\r\n\r\nHighly skilled tailors can also upgrade their cloaks with magical embroidery.\r\n\r\n\r\n\r\nEnchanters are often tailors as well, since they can disenchant the magical items they create.', 'Tailoring allows you to fashion armor, cloaks, clothing, bags, spellthread, and other similar items from various types of cloth, which can be purchased or taken from slain humanoid enemies. Additional necessary materials such as threads and dyes can be purchased from trade or Tailoring vendors.\r\n\r\n\r\n\r\nHighly skilled tailors can also upgrade their cloaks with magical embroidery.\r\n\r\n\r\n\r\nEnchanters are often tailors as well, since they can disenchant the magical items they create.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17140, 'You''ve got to try some of this beer.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17142, 'If you''re not here to work, then please see yourself away from our excavation.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17143, 'Hey there, good lookin''.', 'Hey there, good lookin''.', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'You got room for one more, sugar?', 'You got room for one more, sugar?', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Going my way?', 'Going my way?', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Can a lady get a ride?', 'Can a lady get a ride?', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'You''re looking very handsome today, Martek.', 'You''re looking very handsome today, Martek.', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Ooh, Martek, can I ride with you?', 'Ooh, Martek, can I ride with you?', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Martek, you are the bravest orc I know.', 'Martek, you are the bravest orc I know.', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Save me, Martek! I need you!', 'Save me, Martek! I need you!', 0, 0, 1, 0, 0, 0, 0, 0, 0, 0), +(17148, 'This is quite an operation here, wouldn''t you say?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17150, 'I must admit, I am intrigued by this ambitious little upstart.$b$bI''m not rushing to judgement, mind you, but I''ve heard some unsettling rumors.$b$bTime will tell if his motives are just.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17151, 'What brings you to a bunch of old, washed-up desert dogs like us?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17152, 'I''m not surprised.$b$bSo many questions, I cannot ignore...$b$bWhy all these weapons for an archaeological dig? And what is being done with the unearthed relics? Under what authority is the excavation being conducted?$b$bThe answers don''t seem to be forthcoming. I''ll just have to find out for myself, I suppose.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17153, 'Eediot!$b$bAvay vizh you!$b$bCan''t you see zhat I am concentratink?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17155, 'I say! Raise a glass, my friend!$b$bTake in the sights here.$b$bThis entire region has been hidden away for ages, you know.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17156, 'Why, just look at the treasure he has accumulated!$b$bI''m not always comfortable with his methods, but there''s no denying the results...$b$bBest not to dwell upon unpleasant thoughts. It''s bad manners, you know.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17157, 'Speculation, my dear $gboy:girl;!$b$bOnce our eager little furrier has unearthed enough treasure, he''ll be one of Azeroth''s most influential figures.$b$bWe''ll all be properly positioned when that comes to pass.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17158, 'Now, isn''t this the place to be?$b$bTouring unexplored corners of the world with likeminded fellows?$b$bWhat could be better?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17159, 'He''s a bit animated for my tastes, but the world needs all kinds, I suppose.$b$bWhy do you ask?$B', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17160, 'I see what you mean, I suppose...$b$bYou know, I''m just here because I want to expand my horizons a bit, see the world and whatnot.$b$bI''m not terribly concerned with the goings on of others.$b$bNice to meet you, though.$B', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17161, '', 'Exquisite weather here, wouldn''t you say, $c?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17163, '', 'Oh, it''s been wonderful!$b$bThe commander is so confident, and that accent! I must admit, he''s quite captivating.$b$bDo you know if he''s married?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17164, '', 'Word has it that some of the relics in these parts hold mystical power!$b$bHe seems to be fascinated with such things...', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17165, '', 'I''m sorry, $c.$b$bI really don''t know enough to discuss such things. And honestly, I would prefer to keep it that way.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17166, 'So, zhis is zhe $r $c I''ve heard so much about, hmm?$b$bAs you know, zhere is vone obelisk zhat has yet to be activated....$b$bVhen zhe time comes to restore zhis ancient mechanism, vhill you be zhere? Vill history remember you?$b$bZhat depends on your villingness to cooperate!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17167, 'State your business, $r.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Ve''re vatchink you, $r...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '...alvays vatchink!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17168, '', 'Dragon''s Mouth was established to give the Alliance their first real foothold here in the Badlands. Despite its position between Stormwind and Dun Morogh, the Badlands have traditionally been Horde territory.$b$bIf that''s ever to change, we need to start asserting ourselves. Of course, the dragon attacks on New Kargath don''t hurt our cause either.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17169, 'I was as surprised as you to find the black dragonflight asserting its will against New Kargath. Gorn is stubborn, and refuses help from anyone.$b$bEven so, High Examiner Bloodwatcher has asked me to watch from a distance, to make sure things do not become... ugly.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17170, 'We must keep Therazane''s forces from attacking Stonehearth.$B$BIf they do, they will steal the middle fragment of the World Pillar.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17172, 'We fish, we sleep, and we explode things. What could be better than that?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17173, '', 'I travelled all this way to speak with the famed "Seer of the Dragonmaw." I wanted to see inside Cho''gall''s dark heart before I tear it out.$B$BBut she''s worthless to me. All riddles and rhyme. Maybe you can help.', 0, 0, 1, 0, 1, 0, 6, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17174, 'The coffer is just beyond these ruins.$b$bLet''s go!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17175, 'For too long we have ignored the secrets of the Arcane.$B$BAre you here to learn, as well?', 'For too long we have ignored the secrets of the Arcane.$B$BAre you here to learn, as well?', 0, 1, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17177, 'Thank you for rescuing the king... and the prince, $N.', '', 0, 0, 1, 2, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17178, 'You''ve taught me what it means to have friends, $N.', '', 0, 0, 1, 273, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17179, 'I see that you did it, $N. You''re a credit to your race.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17181, 'You too are a student of the arcane, yes?$B$BI can teach you about portal magic, if you wish to learn.', 'You too are a student of the arcane, yes?$B$BI can teach you about portal magic, if you wish to learn.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17187, 'I''m afraid I cannot help you, $r, but I am sure Khaelyn Steelwing can.', 'I''m afraid I cannot help you, $r, but I am sure Khaelyn Steelwing can.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17188, 'I''m afraid I cannot assist you, $r, but I am certain Georgia can.', 'I''m afraid I cannot assist you, $r, but I am certain Georgia can.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17189, 'Say, would you mind just blocking the sun with your shadow for a little while?$b$bThat''d be great...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Schnottz is making a fortune because of us... where''s ours?!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'It''s far too hot to work out here - especially in these uniforms.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'I was promised substantial wealth to come out here.$b$bWhat a joke!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'They''re working us like dogs and we''re getting nothing to show for it!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Schnottz is making a fortune because of us... where''s ours?!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17192, 'How do you zhink Gobbles vould feel about you if he vere here?$b$bHmm?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'After zhat ritual debacle, you owe me, $r.$b$bAnd I plan on collectink!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17193, 'Listen, I''ve been doin'' a little celebratory drinkin'' since our escape, and I''ve been thinkin''...$b$bThose little men that jumped us need to be brought to justice!$b$bIf somethin'' ain''t done, then every unsuspectin'' explorer who sets foot in this place is gunna get sold into slavery - or worse!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17194, 'Through this portal, Tol Barad awaits.', 'Through this portal, Tol Barad awaits.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17197, '', 'I am well aware that the demonic presence in this forest can be considered the fault of my kind.$B$BI am also not the first Highborne to attempt to make amends for this, and I thank the Emerald Circle for being pragmatic enough to allow my help.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17200, 'The Earthen Ring have set up portals to various regions of the world on a small lake islet northwest of Stormwind Keep.\r\n\r\nThere are representatives from the Baradin Wardens there as well, offering transport to Tol Barad.', 'The Earthen Ring have set up portals to various regions of the world on a small lake islet northwest of Stormwind Keep.\r\n\r\nThere are representatives from the Baradin Wardens there as well, offering transport to Tol Barad.', 0, 7, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17203, 'The Earthen Ring have set up portals to various regions of the world on the cliffs north of the zeppelin towers.\r\n\r\n\r\n\r\nThere are representatives from Hellscream''s Reach there as well, offering transport to Tol Barad.', 'The Earthen Ring have set up portals to various regions of the world on the cliffs north of the zeppelin towers.\r\n\r\n\r\n\r\nThere are representatives from Hellscream''s Reach there as well, offering transport to Tol Barad.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17204, 'If you''re looking for an Arcane Reforger, there is a blood elf mage inside the Drag''s enchanting shop, Godan''s Runeworks.', 'If you''re looking for an Arcane Reforger, there is a blood elf mage inside the Drag''s enchanting shop, Godan''s Runeworks.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17208, '<The Mullan Gryphon Rider stays still, eyes locked forward, not acknowledging your presence.>', '<The Mullan Gryphon Rider stays still, eyes locked forward, not acknowledging your presence.>', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17212, 'Duglas send you over to get roughed up?', 'Duglas send you over to get roughed up?', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Lookin'' to scrap?', 'Lookin'' to scrap?', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'You look like you want a piece of me...', 'You look like you want a piece of me...', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Lookin'' for some punishment?', 'Lookin'' for some punishment?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17213, '$N, you gonna save us from those pirates, or what?!', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17214, '', 'May I suggest that you save us from the pirates, my dear $N?!', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17216, 'You''ll want to find Adam Hossack. He''s got an office in the southern Mage Quarter along the inner ring.$B$BIf he''s not out exploring, he''ll likely be there.', 'You''ll want to find Adam Hossack. He''s got an office in the southern Mage Quarter along the inner ring.$B$BIf he''s not out exploring, he''ll likely be there.', 0, 1, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17217, 'There''s always something new to investigate.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17218, '', 'Be quick about it.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17219, 'Nothing can stop the wrath of the Banshee Queen.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17220, 'The Bloodfang will prevail.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17221, 'Time to expand my ice cream empire.$B$BTigule and Foror are going down!', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17222, 'Remain steady always.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17223, '', 'For Sylvanas!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17225, 'Places like Uldaman hold secrets as to the mysteries of my people'' past!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17226, 'Dedlow Wormwood''s the corpse you want. He''s usually around the south end of town.', 'Dedlow Wormwood''s the corpse you want. He''s usually around the south end of town.', 0, 1, 80, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17227, 'A little busy here, $c. What d''ye want?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Can I help ye with somethin''?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Aye.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17228, 'This orc is severely injured.', 'This orc is severely injured.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17229, 'Pardon me, friend, but I''m busier than it might appear.$b$bI''ve been commissioned to document the discoveries of the commander in this region, you see.$b$bThey''re certain to be most profound!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'I''m working on a biographical piece for Commander Schnottz, among other things.$b$bYou''ll have to excuse me.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17231, 'I supply the Krom''gar army with equipment.', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17232, '', 'I saw them loading a shipment of artifacts onto the boats the other day.$b$bIt was the most gold I''ve ever seen in one place!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17233, 'Years ago, I was trapped here while trying to study the wind riders. But once I made my way to freedom, I resolved to return and protect them.$B$BNow the Cataclysm has struck and the Twilight''s Hammer is capturing all of these sacred creatures, or worse, destroying them.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17235, 'Who are you?', 'Who are you?', 0, 0, 1, 0, 6, 0, 0, 0, 0, 'Get out of here, before the slavers see you!', 'Get out of here, before the slavers see you!', 0, 0, 1, 0, 5, 0, 0, 0, 0, 'Are you... here to save me?', 'Are you... here to save me?', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17239, 'HI! I''M NEW! BIG WHITE LIGHT CREATURE WITH WINGS MADE ME ALIVE! I SERVE THE BANSHEE QUEEN! YAY!$B$BHELP!$B$BHI!', '', 0, 0, 1, 3, 2, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17240, 'OK! THANKS! I''LL JUST WAIT HERE WITH YOU! THANKS! OK!', '', 0, 0, 1, 4, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17241, 'I have seen the fall of the Lich King. Creations of the titans have fallen before my mighty axe. When called upon, I alone spearheaded a victory for the Argent Crusade against the beasts of Northrend. Now, I come for the ultimate challenge. What does Hillsbrad Foothills have to offer Kingslayer Orkus???', '', 0, 0, 1, 1, 1, 6, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17242, 'Insurgents you say? Is there any risk of death or dismemberment to me?', '', 0, 0, 1, 1, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17243, 'Then Orkus WILL DO IT! YES!', '', 0, 0, 1, 15, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17244, 'Look at me, peasant. Heirlooms cover my body from head to toe, gifted to me by the greatest heroes Azeroth has ever known.$B$BNow look at yourself.$B$BQuickly, look back at me.$B$BYes, this horse IS made of STARS.$B$BWhat pointless series of tasks befitting a mentally deficient orc have you prepared for me?', '', 0, 0, 1, 25, 1, 6, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17245, 'Fine, fine, what else?', '', 0, 0, 1, 1, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17246, 'That''s all? One quest? Surely you jest. Are there not bear asses to collect? Perhaps a rare flower that I could pick from which you will make some mildly hallucinogenic tonic which you will then drink, resulting in visions of a great apocalypse? Perhaps the local populace of mildly annoying, ill-tempered gophers are acting up and need to be brought to justice? No? Nothing?', '', 0, 0, 1, 1, 1, 6, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17247, 'Ever heard of the Thorium Brotherhood? Sure, we might look a lot like those dwarves down in the gorge, or in Blackrock Depths, but trust me: we''re not anything like them.$b$bThose scoundrels dug too deep, and now they serve a darker force: Ragnaros, the Firelord. We''re happy to be more independent of will and purpose, although most of the time our purpose ends up being the prevention of whatever trouble they''re causing.', '', 0, 0, 1, 0, 1, 0, 1, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17248, 'The Dark Irons in Blackrock have got nothin'' on me. Neither do those boys up at Thorium Point.$b$bI''m independent as can be, and that''s the way I like it. Of course, for the right price, I''d listen to either side...', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17251, 'This Schnottz fellow is proving to be a wise investment.$b$bGood that I was insightful enough to get in on the ground floor.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Like father always said; it takes a shrewd mind, sharp instincts, and unfailing courage to become a successful investor.$b$bI must admit, I smelled this opportunity a mile away.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17252, 'Someone, or something, seems to have done in the Ambassador!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17253, 'Who knows?$b$bHe was becoming quite critical of this operation, but that''s not proof of anything.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17254, 'Who, me?$b$bWhy, I''d hardly consider myself qualified to, uh... No, I should think not.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17255, 'Wh-what?! Well, I...$b$bIn this midst of such an exciting excavation, I''m not certain it would be appropriate to focus on such a thing.$b$bIt would make for a most troubling story, you know.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17256, '', 'Don''t - don''t touch me...$b$bWhat''s happening?!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17257, '', 'No! Of course I''m not alright!$b$bI-I''ve never seen an actual corpse before...', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17258, '', 'He just came stumbing out of the barracks.$b$bI screamed for help, but the guards wouldn''t even look at me!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17259, '', 'Yes.$b$bThat sounds like a good idea.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17263, 'This cannon appears to be pointed directly at the shore, with a fresh charge of powder and fuse already set.$B$BHow convenient!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17266, 'Have you come for training, hunter?', 'Have you come for training, hunter?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17267, 'I can''t believe that we''re doing this. I know that Calcinder''s presence threatens us all, but really? Doesn''t this seem like the domain of the Earthen Ring, or something?$b$bWhy''s the Thorium Brotherhood gotta come save the day all the time?', '', 0, 0, 1, 0, 1, 0, 1, 0, 273, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17268, 'Welcome to Thorium Point. As Overseer, I''m responsible for all the activities of the Thorium Brotherhood. While that mainly involves mining, smithing, and some minor guard duty, we''ve lately become more of a martial organization... out of necessity.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17269, 'We''ve made it this far into the Slag Pit, $N. Now it''s time to finish the job.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17270, 'You''re welcome among us anytime, $N.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17275, '', 'I owe you a great deal for my freedom, $N.$B$BNow, let us see if we can free Magatha and put an end to the Twilight''s Hammer in Thousand Needles.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17276, 'These worgen are our prisoners. Their fate is in the hands of High Command.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17278, 'What do you want, scrub? Get out of my face before I knock that grin off of yours with my hammer!', '', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17279, 'How can I help you, $g handsome : gorgeous;?', '', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17280, 'What is it? I''m very busy, defender.', '', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17281, 'The dragons have bought us an opportunity to sieze the gates from the Twilight''s Hammer. We would do well not to waste it.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17291, 'What a pleasure, $c.$b$bWe get so few visitors these days.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17292, 'What a surprise!$b$bWe weren''t expecting anyone today...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17293, '', 'I am new to the burdens of leadership. I should''ve seen Narkrall''s insubordination coming. Instead I am cleaning up his mess.$B$BI don''t know how Garrosh Hellscream does it. He must possess great strength to hold together a force as diverse as the Horde... I should like to know him more.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17296, 'The dragons have bought us an opportunity to sieze the gates from the Twilight''s Hammer. We would do well not to waste it.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17299, 'The good Doktor Professor Ironpants may be found in the Hall of Explorers.', 'The good Doktor Professor Ironpants may be found in the Hall of Explorers.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17300, 'Ye''ll find an Arcane Reforger in Gimble''s shop, Thistlefuzz Arcanery, right by the Gryphon Master at The Great Forge.$B$BHe''s one o'' them long-lost Highborne elves, but he''ll do ye right.', 'Ye''ll find an Arcane Reforger in Gimble''s shop, Thistlefuzz Arcanery, right by the Gryphon Master at The Great Forge.$B$BHe''s one o'' them long-lost Highborne elves, but he''ll do ye right.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17302, 'There is a blood elf in the Valley of Strength''s central fortress, part of a delegation from Silvermoon: Belloc. He is who you want.', 'There is a blood elf in the Valley of Strength''s central fortress, part of a delegation from Silvermoon: Belloc. He is who you want.', 0, 1, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17303, 'The mages may be found in Cleft of Shadow. There are two entrances: One between the valleys of Strength and Wisdom, and the other in The Drag.', 'The mages may be found in Cleft of Shadow. There are two entrances: One between the valleys of Strength and Wisdom, and the other in The Drag.', 0, 1, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17304, 'Careful, $r.$b$bSchnottz is in a foul mood after the failed ritual incident.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17305, 'The ambassador lies dead in a pool of his own gore.$b$bThrough his rent clothing, you can make out a row of enormous, deep teethmarks.$b$bEven stranger, the wounds appear to be cauterized, even charred in places.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17306, 'My advice to you is simple, $r.$b$bDo not get in the way here.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17307, 'Move along, $r.$b$bYour presence is of no consequence to me.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '<The emissary sneers without looking at you.>$b$bGo about your business, $r.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '<The man barely acknowledges your presence. It is clear that he isn''t interested in speaking with you.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17308, 'Terrible business!$b$bThere was a horrific growling noise that seemed to echo throught the region.$b$bPoor fellow...$b$bYou''ll excuse me - I do believe I need a drink.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'I cannot be certain of what I saw.$b$bIt was over before I realized what was happening.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17309, 'How unfortunate!$b$bLet''s get this cleaned up, shall we?$b$bWouldn''t want to make any more of this than needs be...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17310, 'I''m curious, of course, but what''s done is done.$b$bWe wouldn''t want to stir up any unneccesary panic. That simply wouldn''t be prudent!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17311, 'Certainly not!$b$bI mean, I do have my entire fortune at risk here... and honestly, what good would a public crisis do anyone?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17312, 'What''s happening out here!?$b$bDid you see the man''s wounds?!$b$bWhat kind of monster DOES that?\r\n\r\n', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17313, 'No, but I don''t need to have seen it to know that we''re all going to DIE!$b$bDo you hear me?!\r\n\r\n', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17314, 'Easy for you to say.$b$bI''m not cut out for this! I need to find a way out of here!\r\n\r\n', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17315, '', '<The starlet stares at you blankly.>', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17318, 'There is a scholar, Arunel, who can assist you. You will find him in the Temple of the Moon, often conversing with one of the returned Highborne.', 'There is a scholar, Arunel, who can assist you. You will find him in the Temple of the Moon, often conversing with one of the returned Highborne.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17319, 'Do I know you? No? Welcome to the Twilight''s Hammer.', 'Do I know you? No? Welcome to the Twilight''s Hammer.', 0, 0, 1, 6, 0, 0, 0, 0, 0, 'The end days are nigh!', 'The end days are nigh!', 0, 0, 1, 1, 0, 0, 0, 0, 0, 'There''s a little blood on your armor there. Are you okay?', 'There''s a little blood on your armor there. Are you okay?', 0, 0, 1, 25, 0, 0, 0, 0, 0, 'New recruit? Have you reported to the commander yet?', 'New recruit? Have you reported to the commander yet?', 0, 0, 1, 6, 0, 0, 0, 0, 0, 'Hey, you haven''t seen Grom-Grom have you? Orc, about this tall. No?$B$BHmm. No one''s seen him for a while. Probably went a.w.o.l.', 'Hey, you haven''t seen Grom-Grom have you? Orc, about this tall. No?$B$BHmm. No one''s seen him for a while. Probably went a.w.o.l.', 0, 0, 1, 6, 0, 0, 0, 0, 0, 'Something big''s brewing at the Withering to the east.$B$BWhatever it is, I hope that it''ll be over soon and we get restationed somewhere nicer.', 'Something big''s brewing at the Withering to the east.$B$BWhatever it is, I hope that it''ll be over soon and we get restationed somewhere nicer.', 0, 0, 1, 1, 0, 0, 0, 0, 0, 'Keep your eyes peeled. They say that freak that was attacking people earlier might still be around.', 'Keep your eyes peeled. They say that freak that was attacking people earlier might still be around.', 0, 0, 1, 1, 0, 0, 0, 0, 0, 'Isn''t it weird that we''re keeping Magatha Grimtotem captive here? Good thing all of her totems were destroyed.$B$BI even heard that she poisoned Cairne Bloodhoof. Wish she were on our side.', 'Isn''t it weird that we''re keeping Magatha Grimtotem captive here? Good thing all of her totems were destroyed.$B$BI even heard that she poisoned Cairne Bloodhoof. Wish she were on our side.', 0, 0, 1, 6, 0, 0, 0, 0, 0, 0), +(17321, 'Warlord Krogg sent me here to keep this front locked down. But he hasn''t sent me any soldiers yet.$B$BLook at this place! I''ve got ogres. I''ve got Twilight''s Hammer. I''ve got... nothing.', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17323, 'Otoh Greyhide spends much of time in the Hall of Elders on the Elder Rise. Seek him out there, and he will help you.', 'Otoh Greyhide spends much of time in the Hall of Elders on the Elder Rise. Seek him out there, and he will help you.', 0, 1, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17324, 'You will find the Sunwalker''s Lodge on Hunter''s Rise.', 'You will find the Sunwalker''s Lodge on Hunter''s Rise.', 0, 1, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17327, 'The city''s Arcane Reforger, Enchantress Fira, will be able to help you. She is most often found with Sedana and her enchanter''s apprentices, off the Court of the Sun.', 'The city''s Arcane Reforger, Enchantress Fira, will be able to help you. She is most often found with Sedana and her enchanter''s apprentices, off the Court of the Sun.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17328, '', 'Perhaps you did not hear me. I said, get me free of these chains!', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17330, 'It''s all gone to hell, $c!', '', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17332, '', 'Dese caves be haunted, mon. Filled with the worst juju.$B$BIn days when de Twilight''s Hammer be settin'' up atop de mountain, the unworthy were tossed into dese caverns. Into de Gullet. Food for de black drakes dat once nested here.$B$BDem people, dey never come out. Not even de spirits.', 0, 0, 1, 0, 1, 0, 274, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17333, '', 'Greetings, $c!', 0, 0, 1, 3, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17334, 'Boduro the Seeker can often be found in the merchant''s bazaar within the Lower City. I would look for him there.', 'Boduro the Seeker can often be found in the merchant''s bazaar within the Lower City. I would look for him there.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17336, 'The high elf mage and scholar Dariness is the city''s most learned archaeologist... and the most sociable.$B$BShe can often be found in the Legerdemain Lounge, just north of the city''s center, enjoying the atmosphere or discussing her wild adventures with the proprieters and patrons both.', 'The high elf mage and scholar Dariness is the city''s most learned archaeologist... and the most sociable.$B$BShe can often be found in the Legerdemain Lounge, just north of the city''s center, enjoying the atmosphere or discussing her wild adventures with the proprieters and patrons both.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17338, 'These glorious fields weren''t always here, $c. Only through determination and the strength of will did we turn the decrepit human farms into Lordaeron''s largest and most productive sludge and mushroom plantation.$B$BNow all of that could be lost due to a simple accident!', '', 0, 0, 1, 396, 396, 5, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17342, 'Dis be it, mon! You got de light? You hold it tight, no matter what happens.$B$BSay de word and I put you in de spirit realm. De spirits, dey will come after you, try to drag you down into de darkness.$B$BShine dat light on de nasties!', '', 0, 0, 1, 0, 1, 0, 5, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17345, 'You lookin'' for trainin''? No can do. I ain''t your guy.', 'You lookin'' for trainin''? No can do. I ain''t your gal.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17346, 'You lookin'' to train up, bruiser?', 'You lookin'' to train up, bruiser?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17347, '', 'I don''t be hearin'' de whispers no more, $N. What happened in de cave?', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17348, '', 'Do you want to see the utter destruction of what''s left of Thousand Needles?$B$BNo?$B$BThen do exactly as I command.', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17349, '', 'This is where we gather the surivors to prepare them for decontamination. From there, it''s just a short trip to the surface!', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17350, 'I''m sure I don''t need to remind you to stay alert down here.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17354, 'Everything here is completely on the up and up!', '', 0, 0, 1, 273, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17356, 'The Wildhammer dwarves are our mortal enemy. It''s them or us.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17357, 'Leave me be.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17359, 'I vill discovah who vas behind zhis cowardly act!$b$bAnd vhen I do....', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17360, 'If ever there comes a time that I have something to say to you, you should run.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'You foolishly stumble about here, $r, oblivious to what forces surround you.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'There is fear in you, mortal.$b$bI can smell it.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17361, 'State your business. Be brief, if possible.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17362, 'The king is sending a stranger to gather information for him? I suppose you must be that... what''s the word? $R? Yes, that $r that rescued Prince Nadun.$B$BAt any rate, I haven''t seen any signs of the Neferset scum this far north. There are plenty of other nuisances to be dealt with, however.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17363, 'I''ve heard of you, $N. Are you here to help us?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17364, 'No. This was the work of common Wastewander bandits.$B$BIt is rumored they''re joining a more regimented group to the west. Their violence is barbaric.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17365, 'I heard you were in town. What a strange creature you are.$B$BYou wish to speak to me?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17366, 'No, no Neferset movement. But I just received word that the city of Orsis is being hit by the largest sandstorm anyone has ever witnessed.$B$BI was about to send word to the king myself, but perhaps you can relay the information.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17367, '', 'We''ve long held out hope of redeeming the Earthwarden and his children. At some point, we must have the wisdom to realize that no amount of redemption can atone for the destruction these dragons are unleashing upon the world.$B$BAt some point, we are forced to intervene.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17368, '', 'Oh... I wish I''d never come to this place!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17369, 'How did I ever get myself into this?!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17370, 'I was blinded by all of the excitement.$b$bI should have seen this coming from a mile away...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17371, 'My life''s fortune... gone.$b$bThere''s no hope left for me.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17372, '', 'This is all too much to bear.$b$bI wish I had the nerve to... <sob>.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17373, 'I thought he had all the right answers.$b$bI... hoped.$b$bHe''s nothing that he portrayed himself to be.$b$bI was a fool.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17374, 'The seahorse floats patiently.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17382, 'There is nothing of interest on the table.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17383, 'Several piles of supplies rest on the table. You decide to start with the worg hides.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17384, 'You see the stack of worg hides that you collected earlier. These will be used for the bulk of your costume.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17385, 'Looking over, you see the obsidian-flecked mud that you collected from the lava beds. This will be used to color your disguise.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17386, 'Finally, you see some thread, which will be used to hold the disguise together.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17387, 'You have gathered your supplies. Bring them to Thelaron Direneedle to assemble.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17394, 'Ye''ll not find a finer craftsman than I in all the Dark Irons!$b$bHammerin'', smithin'', and diggin'' be damned! A needle and a thimble''s all the metal I need!', '', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17395, 'What have ye brought me?', '', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17397, 'Curse the Dragonmaw!$B$BThey kill our birds, attack our families, take our land. Even as the world crashes down around us, still they assault our homes.$B$BIf your Alliance wants the help of the Wildhammer, there''s only one way to win us over: Stop. The. Dragonmaw.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17398, '<Blundy peers up from his cups.>$B$BAye, that''s right. The High Shaman is out in the field, fighting to retake the Thundermar Wreckage. I''m whatcha call the "Low Shaman."$B$BWhile he''s away, he left me here, to take care of all of Thundermar''s Shamanin''in... nin.', '', 0, 0, 1, 0, 273, 0, 1, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17399, '', 'Thundermar is the last holdout of the Wildhammer. My brother''s trying to keep up the fight while our little town fills up with refugees.', 0, 0, 1, 0, 1, 0, 5, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17400, 'I''m from the Highbank advance unit, trying to win over the Wildhammer here at Thundermar.$B$BI think I can help them out, but can you believe that they don''t have a single tri-cyclic alternating current re-polarization device? Not a one!$B$BHow do they even get by?', '', 0, 0, 1, 1, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17401, 'Greetings, $c! I''m from the Highbank advance scouting unit, trying to win over the Wildhammer here at Thundermar.$B$BTheir gryphon riders are having a tough time bringing down Dragonmaw drake riders. I''ve got a plan for a contraption that will help, but I''m going to need supplies. Lots of supplies.$B$BCan you help?', '', 0, 0, 1, 0, 1, 0, 25, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17405, 'Greetings, friend of the Brotherhood.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17406, 'You find a few salvageable parts in the ruined creature''s hull. It looks like you will only be able to salvage one part.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17407, 'Eh, wot?', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17408, 'Pack yer bags, $N! We''re off to the Twilight Highlands. You ready?', '', 0, 0, 1, 0, 4, 0, 6, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17409, 'I''ve been placed in command of Alliance joint operations in the Twilight Highlands.$B$BThe independant Wildhammer clans still dot this countryside. If we can unite them under the Alliance banner, nothing can stop us! But enemies close in on all sides. I hope you''re ready for a fight, $c.', '', 0, 0, 1, 0, 1, 0, 274, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17410, 'Woohoo!$b$bWe''ll have to do that again sometime!$b$bWell, I''m off to do some more research. I''ll catch up to you when I''m ready.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17416, 'I am thankful for all you''ve done, $N. But I am afraid I will be even further in your debt before this ordeal is through.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17417, 'Our enemies can bury entire cities under the sand. Our traditions have not prepared us for such a war.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17418, 'In time, we will rebuild this place and restore it to its former glory - minus all of the annoying humans.', '', 0, 0, 1, 1, 273, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17419, 'Now that we have captured this wretched isle, we need to do some work to get it into shape. Can you help us out $n?', 'Now that we have captured this wretched isle, we need to do some work to get it into shape. Can you help us out $n?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17420, 'I am not a fan of that d-block place everyone keeps talking about it. We do have some tasks that must be completed before we can use it though.', 'I am not a fan of that d-block place everyone keeps talking about it. We do have some tasks that must be completed before we can use it though.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17421, 'I assume you have heard of the hole by now, $r. If not, you are going to know a whole lot about it soon.', 'I assume you have heard of the hole by now, $r. If not, you are going to know a whole lot about it soon.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17422, 'Welcome to Tol Barad, $c. Time''s a wastin'' so let''s get to work.', 'Welcome to Tol Barad, $c. Time''s a wastin'' so let''s get to work.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17423, 'We do not choose to go to war, $N. War comes to us.$B$BWe must do what we must to be ready.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17425, 'It ain''t easy gettin'' a contract with the Blackrock orcs. I mean, come on! The Blackrock orcs! These guys have been through more battles than Aggramar, AND they''re sittin'' on a mountain made of dark iron to boot! Cha-ching!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17426, 'Yes, my child?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17427, 'It''s a good thing I showed up when I did!$b$bI''m guessing we haven''t seen the last of that Schnottz fellow.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17430, '<The seedling tilts its leaves up towards you, as if looking in your direction.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17431, 'Focus, $n.$b$bWe have to get to the Coffer of Promise before Schnottz does!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17432, 'Zhis vas clearly an inside job!$b$bNovone is above suspicion!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17433, 'Hello!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Wakey wakey!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'I''m a tree!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17434, 'Welcome, friend, to the Oasis of Vir''sar!$b$bA paradise on Azeroth!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17441, 'Heads up, $N! They''re here. Dragonmaw ... everywhere!', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17442, 'Some day I''ll be able to put my skills at the service of Ramkahen.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17443, 'This is it! They''re making their final assault. There''s no place to run. We hold Thundermar or die with hammer in hand.$B$BFor the Wildhammer!!', '', 0, 0, 1, 0, 5, 0, 15, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17445, 'Those of the Explorers'' League and The Reliquary are very much alike: Archaeology is our religion, yet we have both fallen from the pure faith.\r\n\r\n\r\n\r\nOur methods have not differed as much as they pretend. We are but a shadowy reflection of them.\r\n\r\n\r\n\r\nIt would take only a nudge to make them like us. To push them out of the light...', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17446, 'D''ye hear it, $N? The beating of great leathery wings over the treetops... Narkrall is closing in.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17450, 'The visions are clouded... like these waters.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17451, 'It looks like the cultists had their eye on the druids!$B$BYou can see Wildheart Point through the swirling portal. Stepping through it will take you on a one-way trip back to the camp.$B$BOnce your business here is finished, this would be a good way to make a quick exit.', 'It looks like the cultists had their eye on the druids!$B$BYou can see Wildheart Point through the swirling portal. Stepping through it will take you on a one-way trip back to the camp.$B$BOnce your business here is finished, this would be a good way to make a quick exit.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17452, 'I can feel my branches surging with life. I cannot wait to give it back to the land.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17455, 'What is it, underling? Can''t you see I''m busy?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17456, 'I can''t stand being cooped up in here with all these warlocks. This is Xi''lun''s job, not mine!$b$bI can''t wait for this battle to start. I need to be outside, with my dragons.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17457, 'Well look who it is! The cudgel-bearer $g himself: herself;!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17459, 'Alsudar the Bastion and the other warrior trainers may be found overlooking Farstriders'' Square, from near the foundry.', 'Alsudar the Bastion and the other warrior trainers may be found overlooking Farstriders'' Square, from near the foundry.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17461, 'Lot''s to be done around here, $r. Are you ready to help?', 'Lot''s to be done around here, $r. Are you ready to help?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17462, 'Welcome to baradin base camp. I know it does not look like much now, but with a little hard work we can whip this place into shape.', 'Welcome to baradin base camp. I know it does not look like much now, but with a little hard work we can whip this place into shape.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17463, 'Seems like we never run out of things to do around here. New orders arrive every day at 3am, it''s really strange.', 'Seems like we never run out of things to do around here. New orders arrive every day at 3am, it''s really strange.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17464, 'The horde have been relentless out here. Feels like we are fighting two battles at one time.', 'The horde have been relentless out here. Feels like we are fighting two battles at one time.\r\n\r\n', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17467, 'Since the fall of Grim Batol, we Wildhammers have never truly been united. Out here in the Highlands, forgotten by the rest of the world, the different clans have all gone their separate ways.$B$BTo join them all back together isn''t going to be easy. ', '', 0, 0, 1, 1, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17468, 'Yes $N, I heard the whole miserable thing from out here.$B$BI was hoping my old Wildhammer brothers could work things out among themselves, but it doesn''t look like it.$B$BYou and I are going to have to get creative. ', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17469, 'Together, we will make history!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Soon, our sideshow will be the talk of Azeroth!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'People will come from far and wide to witness the fruits of our labor, $n.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17472, 'These brutes think to raid MY town when my back is turned!? They''re going to get a taste of Wildhammer justice they will!', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17473, '', 'If we don''t increase production as much as possible, the Horde might lose this war. If the Horde loses the war, we''re out on our butts at best and dead at worst.$B$BI hate to break it to you, but the pretty things you might have heard at Whisperwind Grove won''t save us... but hard work might.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17477, 'I am here to bear witness to the memory of my master, and the truth of the past.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17482, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17483, 'Keep your voice low, and your scent downwind.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17484, '', 'A few of us here have lived in this land since the Scythe of Elune first passed through it. Most suffered through the fall of Gilneas.$B$BWe have settled in this forest to learn the ways of nature and uphold its balance. In this cursed land, our cursed people have found a new way of life.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17485, 'This all feels like a long shot. We''ve got a lot riding on this plan. Redridge''s freedom, for one.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17486, 'I won''t let those damned orcs invade Redridge again!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17487, 'Ye''ve made yer way to Chiselgrip, $g lad: lass;. Best make yerself useful.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17491, 'Stone troggs... the vermin of the deeps.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17494, 'I wish I could make you a deal, partner - I really do - but you''ll need to be exalted with the Bilgewater Cartel, first.', 'I wish I could make you a deal, partner - I really do - but you''ll need to be exalted with the Bilgewater Cartel, first.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17495, 'Yo! I''m Kall Worthaton, Bilgewater Trikes.$B$BGo ahead, look over the lot. Pick out the trike that you REALLY want!$B$BA trike that''s a blast to ride... a trike that''s dangerous and death-defying... a trike you can be PROUD of!$B$BYou let me know when you see it, and we''ll make a deal.', 'Yo! I''m Kall Worthaton, Bilgewater Trikes.$B$BGo ahead, look over the lot. Pick out the trike that you REALLY want!$B$BA trike that''s a blast to ride... a trike that''s dangerous and death-defying... a trike you can be PROUD of!$B$BYou let me know when you see it, and we''ll make a deal.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17496, 'Let''s keep moving. There''s a lot at stake here.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17498, 'Dey be on top of de tall building in de southeast end of de valley.', 'Dey be on top of de tall building in de southeast end of de valley.', 0, 1, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17500, 'Listen!$b$bTaking out those crystals should drain the construct.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17503, 'Hah!$b$bYou''ve really stirred up a sandstorm, $n.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17504, 'The Blackrock orcs are my kin. My father was a Blackrock, as was his father before him. My mother was a Blackrock. And I am a Blackrock.$b$bBut before anything else, I am an orc. And that means honor above all else.$b$bMy Highlord has granted me leave to complete my task here in the Burning Steppes. And I will not leave until the Blackrock orcs here learn the error of their ways.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17505, 'I serve my father and respect his plan... but I also serve my own sense of justice. I have seen enough treachery from my Blackrock brothers to fill a thousand books. And now they plan to invade Redridge, for no reason other than blind territorialism.$b$bThe treachery stops here. It''s time for the final chapter. And it''s not going to be a happy ending.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17511, 'Derak Nightfall, at your service!', '', 0, 0, 1, 0, 2, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17512, 'I had no idea Sullah had so many... acquaintances.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17513, 'Hallo, friend!$B$BRussell''s the name, and music is my business. All the great Wildhammer heroes from ages past are kept alive with song. Through the strings of my lute and the sound of my voice, our warriors gain immortality.$B$BStay a while, and listen!', '', 0, 0, 1, 0, 2, 0, 1, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17514, 'Speak your peace, $c.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17515, 'My lute is all tuned up. Are we ready to compose something?', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17516, 'Let''s get started! The first verse is all about dear Fanny, but I just can''t quite put it together.$B$BWhat rhymes with "Eyes?"', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17517, 'Ah, I see what kind of $c you are, $N! Now then, the second verse is all about Fanny and Firebeard getting together.$B$BWhat rhymes with "Professed?"', '', 0, 0, 1, 0, 11, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17518, '...Hmmm, okay, I think I can make that work. Last verse! A rousing celebration of love calling the Wildhammer to action!$B$BAll I need is a rhyme for "Unite..."', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17519, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17521, 'Careful there, $gladdie:lass;. Between the worg down below and the orcs lurking in the pass, a $c could get $ghisself:herself; killed up here.', '', 0, 0, 1, 0, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17532, '', 'Need a ride, $g sugar: scumbag;? Hop on. We''re headed down to Bogpaddle, and it''s a one way trip.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17533, 'Welcome, friend of the Wildhammer!$B$BKirthaven is the spiritual center of our people, the one place where the varied clans can come together in peace.$B$BIt''s here we honor our dead heroes, before burying them with their gryphons atop Mount Thunderstrike. There they spend eternity at one with the sky.', '', 0, 0, 1, 0, 2, 0, 1, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17534, 'A wedding, eh? If that doesn''t bring this bunch together, I''ll eat my hammer!$B$BWe need to make sure this wedding is spectacular, $N, and we''re going to need your help. There''s an old Wildhammer saying... let me think... how does it go?', '', 0, 0, 1, 0, 5, 0, 6, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17535, 'The wedding''s a go! I''m going to need a gift for the happy couple, of course. Something important.$B$BThe future of the Wildhammer really hinges on this one last chance to bring us all together!', '', 0, 0, 1, 1, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17536, 'Now that you''ve helped me to establish my ice cream empire, make sure to enjoy one of my many tasty concoctions!', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17537, '', 'Hey. How ya doing, boss? Hobart and I are working on some things that will ensure that you have phenomenal backup products for when the kaja''mite runs out.$B$BThere''s only so much of it left down there in the mines, and when it''s gone, all of the Kaja''Cola is going to go with it, I''m afraid.', 0, 0, 1, 0, 1, 0, 273, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17538, 'Good to see you, $N!$B$BI just wanted to make sure that you appreciate all of the products that my genius has brought to the Kajaro Trading Company?$B$BThese include, but are not limited to: Kaja''Cola, the Poultryizer, Town-In-A-Box, my Ingenious Cap of Mook Foolery, KTC Train-a-Tron Deluxe, the Amazing G-Ray, Never-Deflating Pool Ponies, the Big Ones, Warrior-Matic NX-01, and gilgoblins. No strike that last one. Under advice of counsel, I had nothing to do with them.$B$BAnyway, I''m working on a few more things here that I think you''ll find interesting, such as the Micro Mechachicken and a little something I like to call Subject Nine.', '', 0, 0, 1, 0, 3, 0, 1, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17540, 'Hey, $g man : lady;, are we gonna get through this okay?', '', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17541, '', 'It looks like this is the end, but I''ll be brave if you will, $N.', 0, 0, 1, 273, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17542, '<Gobber acts tough, but you can tell that deep down, he''s scared.>', '', 0, 0, 1, 11, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17549, '', 'Yeah? Whadya want?', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', 'I don''t talk to no $g scrub : trash;!', 0, 0, 1, 274, 0, 0, 0, 0, 0, '', 'You''re not quite in my league, honey.', 0, 0, 1, 25, 0, 0, 0, 0, 0, '', 'I didn''t talk to you back in school and I''m sure not going to start now.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', 'That''s an interesting... "outfit" you''re wearing.', 0, 0, 1, 11, 0, 0, 0, 0, 0, '', 'Yes. I''d love a refill. Fetch one and be quick about it.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', 'This is the Trade Prince''s party, sweetie. Invite only!', 0, 0, 1, 396, 0, 0, 0, 0, 0, '', '$N, right? Word of advice: don''t let the Trade Prince catch you around here. He knows you''re after his job.$B$BEveryone knows.', 0, 0, 1, 6, 0, 0, 0, 0, 0, 0), +(17550, '', 'A mook?! I don''t speak to brutes. How dare you!', 0, 0, 1, 0, 14, 0, 0, 0, 0, '', 'What are we calling you things these days? Brutes? Hobgoblins?$B$BI can''t keep it straight. Get out of here.', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', 'You''re big and strong. But you need a bath. Go jump in the pool.', 0, 0, 1, 0, 11, 0, 0, 0, 0, '', 'Oh no you did not just talk to me!', 0, 0, 1, 0, 274, 0, 0, 0, 0, '', 'What smells around here? Oh, that''d be you.$B$BBeat it!', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', 'What''s your name?$B$BI guess it''s a good thing you brutes can''t talk. Otherwise, I''d have to tell the Trade Prince how you annoyed me.$B$BNow scram!', 0, 0, 1, 0, 25, 0, 0, 0, 0, '', 'Touch me one more time and I''ll make sure that they send you to the Undermine!', 0, 0, 1, 0, 15, 0, 0, 0, 0, '', 'Oh, you''re just disgusting! Why is it always the ugly ones that try to pickup on me?!', 0, 0, 1, 0, 274, 0, 0, 0, 0, 0), +(17552, '<To your astonishment, the Raptor hatchling is able to communicate with you.>$B$B$G Papa : Mama;...?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '<To your astonishment, the Raptor hatchling is able to communicate with you.>$B$BI hunger... therefore, I am.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '<To your astonishment, the Raptor hatchling is able to communicate with you.>$B$BWhat does "$c" mean? Are you the goblin $g patriarch : matriarch;?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '<To your astonishment, the Raptor hatchling is able to communicate with you.>$B$BThey call you $N. Is this your unique signifier, or is it an honorary title?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '<To your astonishment, the Raptor hatchling is able to communicate with you.>$B$BGreetings. I recently emerged from an egg. You?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '<To your astonishment, the Raptor hatchling is able to communicate with you.>$B$BIs it true that you cook your meat? Curious.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '<To your astonishment, the Raptor hatchling is able to communicate with you.>$B$BYou lack a helmet. Does this diminish your intellectual capacities?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '<To your astonishment, the Raptor hatchling is able to communicate with you.>$B$BThe ends of your fingers are dull and round. Is this why you carry around other implements for use in combat?$B$BHow interesting.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 0), +(17554, '$N?! What are you still doing here?$B$BYou have to get off of the island, or better yet, into one of my Town-In-A-Boxes!$B$BDon''t wait too long, my $g boy : girl;! The Cataclysm is upon us!', '', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17556, '', 'Don''t worry about Hobart, boss. He''s just having a bit of a breakdown right now.$B$BThe Cataclysm couldn''t have come at a worse time for him. He was so close to being done with the Micro Mechachicken.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17557, 'My father has trained me since I was a wee lad to respect the elements. Earth and fire, wind and sea - they possess great power, $c.$B$B<Grundy gets a gleam in his eye.>$B$BMore than you realize.', '', 0, 0, 1, 0, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17558, 'I am a psylosopher. What that means is that I am smarter than you. Now move along before I diagnose you.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17559, 'Och!$b$b''Bout time ye showed up.$b$bI been expectin'' ye fer days now.$b$bLeavin'' an ol'' dwarf ta swelter... I trained junior better than that.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17564, '', 'Get away from me, you abomination!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17565, '', 'The undead are a taint upon Azeroth! Every one of you creatures deserves to be destroyed!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17566, 'Stand back, monster. You want to fight? Because I''ll fight you.$b$bI''ll fight any one of you creatures! Do you hear me?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17567, 'Oh really?$b$bFine. I don''t want to join you and your Forsaken. Maybe I''ll start my own Forsaken! Maybe I''ll invent Forsaken with elbows!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17569, 'What... what''s going on? Who are you? What happened to me?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17570, 'I... died?$b$bYes, you''re right. I died. It was an orc... he cut off my hands, and left me to die.$b$b<Valdred looks down at his hands.>$b$bThese aren''t my hands! THESE AREN''T MY HANDS!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17571, '<Valdred looks back down at his hands.>$b$bI suppose this is my fate then. Hah! Part of an undead army. Somehow I never considered that I might end up fighting for the Forsaken.$b$b<He looks back up at you.>$b$bWhat do I do now?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17572, '', 'It''s your big coming out party. We''ll make you a Trade $G Prince : Princess; yet, $N!$B$BGet out there and strut your stuff!', 0, 0, 1, 0, 273, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17573, '', 'Pirates?! Boss, you have to deal with this! They''re ruining the party!', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17574, '', 'This isn''t looking good, boss.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17575, '', 'Boss, we gotta get you a bazillion macaroons by any means possible!', 0, 0, 1, 0, 273, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17576, '', 'We gotta finish up here and get you to the dock before the Trade Prince leaves us all behind!', 0, 0, 1, 0, 25, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17578, 'Oh, heya, toots. Yeah... we need to talk.$B$BLater, okay?', '', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17582, 'I''m ready to start whenever you are! I''ll keep the bride and groom close in case the Twilight''s Hammer tries anything.$B$BAre you ready?', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17583, 'Think you have what it takes to face the challenges of Azeroth''s dungeons? Inquire within...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17585, '', 'I understand that Alexstrasza has pronounced judgement on Deathwing. Perhaps this whole ordeal will end, right here?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17586, 'Welcome to Starfall Village, traveler. Have you come to assist us?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17587, 'My family''s been clearing out swarms for years! Not that we''re above a bit of hired help...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17589, '', 'Congratulations, adventurer.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17590, '', 'You''ve managed to walk right into my trap!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17593, 'Dark Lady watch over you.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17594, 'I hear I have you to thank for helping to cure me. Thank you. Truly.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17595, 'All we had to do was deploy the Krazzworks airfield-in-a-box and begin a routine surveying mission.$B$BI''m surrounded by idiots!', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17598, 'I''ve been sent here by my superiors to investigate some strange occurrences here in Booty Bay. This goblin town withstood a tidal wave remarkably well, especially given the reputation of goblin engineering. I''m surprised the place didn''t explode on impact.$b$bI suspect there may be magical forces at play here. There may be more to Booty Bay than you''d expect, $c...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17599, 'Are you ready to leave Stranglethorn Vale?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17600, 'Och!$b$bWhy can''t it just be easy fer once?!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17606, 'Good work with them constructs, $glad:lass;.$b$bYou just bought us unfettered access to the repository.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17607, 'I bring greetings from King Wrynn, $c. Behind me is the Hero''s Call board, a collection of proclamations from the King of Stormwind directing adventurers to locations where their talents can best aid the Alliance.', '', 0, 0, 1, 0, 66, 0, 1, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17608, 'Lok''tar, $c. Behind me is the Warchief''s Command board containing our leader''s instructions to members of the Horde. It will tell you where your skills will best serve the Horde in battle against its foes.', '', 0, 0, 1, 0, 66, 0, 1, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17611, 'The sacrifices of my Argent Dawn brothers must never be forgotten. They believed in the Dawn, though none lived to see the return of the Light to these lands.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17615, 'Welcome, my $g brother : sister;. If you are here to train, then I would be delighted to train you.$B$BWe are the preservers of the balance, now and forever, with Malfurion watching over us. Never forget this.', 'Welcome, my $g brother : sister;. If you are here to train, then I would be delighted to train you.$B$BWe are the preservers of the balance, now and forever, with Malfurion watching over us. Never forget this.', 0, 0, 1, 0, 2, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17616, 'Our master Malfurion has returned from the Dreaming, $c. His is the light of a beacon that shows the way for us, and we must do everything in our power to preserve that light.', 'Our master Malfurion has returned from the Dreaming, $c. His is the light of a beacon that shows the way for us, and we must do everything in our power to preserve that light.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17619, 'Pebble bounces around and looks up at you hopefully. He definitely remembers you.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17620, 'Escaping from this place is proving harder than I thought.$B$BWhere do you go when there is nowhere to go in sight?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17627, 'This mole machine is a little rusty, but it still looks operational.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17629, 'Why are you talking to me? You don''t make nearly as much money as me.$B$BGo mingle with your own kind, pal.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17630, '', 'Ya, mon, for now. Dey not be too keen on teachin'' many more o'' our kind, but dey be helpin'' us ''long as we be keepin'' de life o'' de isles flourishin''. When Gonk left after de fall o'' Zalazane, he be tellin'' us how ta contact him if de other loa don''t keep dey end o'' de bargain.$B$BI be hopin'' it never come ta dat... but just in case, we be openin'' up channels wit dat Cenarion Circle group. $B$B<Zen''tabra cackles madly.>$B$BOh, ya shoulda seen de look on dat night elf''s face....', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17631, '', 'We been workin'' wit de spirits for many moons now, mon, but many o'' us already knew de forms o'' de loa we served before. It not be easy, but de Emerald Dream be a powerful teacher by itself-havin'' de spirits demselves also teachin'' ya... it hurries tings along.$B$BDat don''t mean ''twas easy keepin'' safe from Zalazane. Even wit our new tricks combined wit de loa givin'' what help dey could, we lost a few bruddas and sistas over de years ta his voodoo and mindless servants. But we kept de life o'' de isles alive, and when Vol''jin and de Darkspears returned, we knew just how ta take Zalazane down.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17632, '', '<Zen''tabra laughs.>$B$BDe other loa, ''specially Shirvallah, did not much care for dis plan. Dey still be wantin'' us ta work just for one o'' dem at a time, not wit all de spirits at once. But Gonk had forced dere hands, and dey knew it was de only way ta save de isles while Zalazane still ruled.$B$BI be tinkin'' dat Gonk did not care for de other loa much either. He be teasin'' de other loa all de time while we be learnin'' from dem.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17633, '', 'Zalazane''s mindless servants were killin'' all de beasts o'' de isles, burnin'' up de trees and plants too. Gonk needed us ta save de life on de isles. But since we not be able ta draw upon de power o'' de loa wit Zalazane in power, Gonk be showin'' us a new way ta connect wit ALL de spirits o'' nature, ta work WIT de spirits, not just be servin'' a single loa at a time. $B$BIt be difficult at first, ya, mon, but Gonk be showin'' us how ta also reach inta de Emerald Dream ta speak wit de spirits and learn from dem directly!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17634, '', '<Zen''tabra''s head snaps back to you, her eyes bright and her smile wide around her tusks.>$B$B''Twas a jungle bigger and wilder dan I ever seen! And before me, de ancient raptor loa only talked about in Zandalari tales-Gonk, de Great Hunter! $B$BDe raptor spirit spoke ta me, told me he had brought me spirit to a place called de Emerald Dream. De spirit had been trapped, like de other loa on de Echo Isles, by Zalazane''s magic. But Gonk, bein'' an ancient spirit, was able ta reach across and bring me spirit ta him, even through Zalazane''s voodoo. ', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17635, '', '<Zen''tabra closes her eyes and shakes her head.>$B$BWhen Vol''jin called for everyone ta flee, we... we couldn''t face de tribe after failing dem so badly. So, we fled south, ta de untamed jungle islands.$B$BDe wilds claimed a few o'' us dat first night. We found safety in a deep cave in de center o'' de isle, but me dreams dere were not peaceful: I be havin'' a vision!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17636, '', 'Some o'' us be loa priests, witch doctors before. Like Zalazane...$B$B<Zen''tabra''s face grows hard as her gaze drifts south.>$B$BWe thought de spirits be angry wit us; we did not suspect it be Zalazane slowly cuttin'' us off from dem. We knew he be strong, but not dat strong... and by de time his voodoo had reached de other isles, we was powerless ta stop ''im. ', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17637, '', '<Zen''tabra laughs.>$B$BWe spread dose rumors, mon. Keep''n Zalazane and others off our tails. Don''t be believin'' everyting ya hear.$B$BNo, we be new ta de craft, only learnin'' a few years ago. But in some ways, we spent our lives preparin'' ta answer de call....', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17638, 'Most of my men were killed while infiltrating the Neferset borders.$B$BIt is my duty to make that sacrifice count for something.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17639, 'This is the longest day of my life.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17659, 'I cannot help you, $c.', 'I cannot help you, $c.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17661, 'I''m in charge of this operation.$B$BI don''t want to hear any yammering about our transport exploding or our enemies being taller than we are. We''re professionals and we''re getting this job done without a hitch.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17662, '<The SI:7 agent is unconscious.>', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17665, 'Hey, make sure not to walk into that smoker! The last unfortunate $r to do that didn''t survive the heat.$b$bThat poor, delicious $r.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17666, 'Please, try and be sensitive to an orc''s condition. I''m having a rough couple of days, and I''d prefer if you kept your comments to yourself.', '', 0, 0, 1, 274, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17667, 'I''d love nothing more than to take down Naz''jar and her minions, but someone''s got to cover your back...', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17668, 'I''d love nothing more than to wring that witch''s neck myself, but someone''s got to keep these naga off of your back...$b$bDo not fail me, $n!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17669, 'Let''s clean this up and get these boys out. I''ve got another operation waiting.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17670, 'Press on, friend.$b$bI shall find my way out when strength returns to me.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17671, 'What can I do for you, $N?', '', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17675, 'Oh man, zombies?', '', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17678, 'Nice work deploying the Town-In-A-Box, $N.', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17680, 'Those zombies are so slow. It''s a turkey shoot out there!', '', 0, 0, 1, 273, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17681, 'A Town-In-A-Box. Nice!$B$BNeed any training, $N?', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17682, 'A Town-In-A-Box. Nice!', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17684, 'How dare they change our people into zombies and throw them at us!$B$BNeed some training before you go up there and kick their butts?', '', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17686, 'Keeping the fusion core stable is taxing nearly all my computational powers.$B$BLet us hope that floating-point error got worked out during my last maintenance cycle.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17687, 'A Town-In-A-Box. Are we not the greatest tinkers in the world?$B$BNeed any training, my young protege?', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17689, 'A Town-In-A-Box. Are we not the greatest tinkers in the world?', '', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17690, 'Goblin zombies? Goblin zombies! Wreck those pygmies, $N!$B$BNeed any training before you go?', '', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17691, 'Goblin zombies? Goblin zombies! Wreck those pygmies, $N!', '', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17692, '', 'Great work getting this place going, $N!', 0, 0, 1, 273, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17693, '', 'You gotta do something about these pygmies, $N!', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17696, '', 'How much did you charge to deploy this place?', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17698, '', 'Zombies, goblin or not, are an abomination in the eyes of the Light. Besides, there''s no profit in them.$B$BNot yet anyway.', 0, 0, 1, 274, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17700, '', 'Deploying an urban setting in the middle of the wild. I love it!', 0, 0, 1, 273, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17701, 'MISSING TEXT', '', 0, 0, 100, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17702, '', 'Can you sneak up on zombies? Don''t they smell your brains when you get close?$B$BHalf the people around here have nothing to worry about then.', 0, 0, 1, 11, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17704, 'Warrior-Matic NX-01 is offline.', '', 0, 0, 1, 33, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17707, 'Warrior-Matic NX-01 is offline.', '', 0, 0, 1, 33, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17710, 'That Schnottz is a madman! I ain''t never goin'' back!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17711, '', 'Greetings, $N.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17712, 'I specialize in two things: taking tiny things and making them blow up into huge things, and making huge things fit into itty-bitty places.$b$bWhich one do you need today?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17725, 'These dragons aren''t messin'' around. I''m not sure all of these scrubs know what they''re in for.$B$BWe''ll be fine though. My boys can lead the charge and get this job done. All we need is some space to work.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17726, 'Welcome to Fuselight-by-the-Sea, a picturesque seaside town founded by explosives enthusiasts for explosives enthusiasts.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17731, 'Welcome the the Shrine of Aviana, $c. Here we sit atop the world and touch the sky.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17733, '', 'That statue''s provin'' ta be quite the pain. I thought we could lift it up an'' outta the water with a crane an'' some well timed explosives. But Wick thought we''d be safer an'' do less damage by rolling it up this ramp.$B$BNow look at it... We''ve got it angled all wrong. An'' once we get it to the top, then what?$B$BI''ve gotta bad feeling we''re gonna to be here a long time. A real long time...', 0, 7, 1, 0, 1, 3, 5, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17734, '', 'I get a lot of mail, $N. Most of it is junk, but some of them might be helpful to a helpful $c like you. Here''s a couple letters sent to Everlook, looking for help in the far corners of the world.$b$bIt''s almost as if you have a choice for where you go next! Now, let''s see...', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17735, 'You think after doing such good work on Stormwind Harbor I''d get a bit of slack from this dwarf...$B$BI just want to get this statue up the ramp and back in place as fast as possible. But she''s got a complaint every step of the way. Her solution to every problem is to blow it up. It feels like I''m working with a gnome or a goblin. But at least they''d be sober.$B$BLook at our work crew, no discipline. You know why? Because she undermines me!$B$BA bad attitude, a lazy crew... This isn''t going to be a quick fix at all.', '', 0, 0, 1, 0, 1, 3, 5, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17736, 'The Cenarion Circle been around a long time, mon. We trolls are newcomers to this party.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17740, 'Greetings, $c. We Wildhammer reward our friends.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17741, '', 'This was one of the royal cities of the elves in the days when Azshara was queen. In this city lie the keys to lore long lost and artifacts of unimaginable historical value. ', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17742, '', 'The admiral and his forces pushed forward to take one of the bases you scouted for him earlier. You should go and meet them.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17743, '', 'The captain and his forces pushed forward to take one of the bases you scouted for him earlier. You should go and meet them.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17745, 'My apologies, $c, but the arcane secrets of the Highborne will forever remain secrets to you.', 'My apologies, $c, but the arcane secrets of the Highborne will forever remain secrets to you.', 0, 7, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17746, 'Serve the Dragonmaw and you will be handsomely rewarded, $c.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17747, 'The magic of today pales in comparison to that of millennia past. Still, we Highborne know much of the arcane. Are you ready to learn?', 'The magic of today pales in comparison to that of millennia past. Still, we Highborne know much of the arcane. Are you ready to learn?', 0, 7, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17748, 'Halbin Frosthammer, from the Wildhammer clan, can be found in Thunderbrew Distillery. He can help teach ya the ways of the shaman.', 'Halbin Frosthammer, from the Wildhammer clan, can be found in Thunderbrew Distillery. He can help teach ya the ways of the shaman.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17749, 'Greetings, $N.', 'Greetings, $N.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17753, 'Look for The Wyvern''s Tail, just outside the Hall of the Brave.', 'Look for The Wyvern''s Tail, just outside the Hall of the Brave.', 0, 1, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17754, 'It''s across the bridge from the gate to The Drag. Listen for the sound of shouting goblins.', 'It''s across the bridge from the gate to The Drag. Listen for the sound of shouting goblins.', 0, 1, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17758, 'The Valley of Honor''s bank is just before the gate to The Drag.', 'The Valley of Honor''s bank is just before the gate to The Drag.', 0, 1, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17759, 'To reach the Rut''theran Ferry, you will need to travel to Darnassus and take the portal to Rut''theran Village at the base of Teldrassil.', 'To reach the Rut''theran Ferry, you will need to travel to Darnassus and take the portal to Rut''theran Village at the base of Teldrassil.', 0, 0, 0, 0, 0, 0, 0, 0, 0, 'If you wish to use a hippogryph, speak with Fidelio.', 'If you wish to use a hippogryph, speak with Fidelio.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17763, 'Have you seen my latest invention? It''s going to be a hit... if it doesn''t explode.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17770, 'There is a Highborne archmage visiting the city''s Enchanting trainer. You can have your items reforged there.', 'There is a Highborne archmage visiting the city''s Enchanting trainer. You can have your items reforged there.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17772, 'We''re glad to have your help.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17774, 'Which one?', 'Which one?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17775, 'Neferset City will fall!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17789, 'This chest must have been resting here for millenia.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17791, 'Choose a destination.', 'Choose a destination.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17793, 'I will mark the location upon your map.', 'I will mark the location upon your map.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17799, '', 'When we returned from Deepholm, we found that the Twilight''s Hammer had established a base here and taken control of the elemental portals.$B$BPlease, $N, you must stop them before Cho''gall can complete whatever it is that he''s up to inside the Bastion of Twilight!', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17800, 'Well met, $c. My advice to you is this: As you travel the world, be wary of magic for it will burn the untrained.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17804, 'What?', 'What?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17805, 'What?', 'What?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17815, 'Go away! You shouldn''t be here!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17816, 'Weary of one of your demonic charges? Hoping for one with a more pleasing name?\r\n\r\n\r\n\r\nFor a price, I can assist you in the obliteration of a current minion so that you may summon an entirely new one...', 'Weary of one of your demonic charges? Hoping for one with a more pleasing name?\r\n\r\n\r\n\r\nFor a price, I can assist you in the obliteration of a current minion so that you may summon an entirely new one...', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17818, 'Hello, sucker!', '', 0, 0, 1, 0, 3, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17819, 'This is it, $N! This is where we make our stand!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17820, '', 'After all we''ve been through, we Gilneans have not given up hope.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17821, 'Arrite, $r.$b$bEverything looks ta be in its proper place.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17824, 'This teleportation device appears to have been used recently to teleport various goods deeper into the mine.', 'This teleportation device appears to have been used recently to teleport various goods deeper into the mine.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17830, '', 'This isn''t over, $N. Not by a long shot.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17833, '', 'Ahh... so it is, so it is. Carry on then. Carry on t''yer death.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17836, '', 'Welcome to the Wickerman Festival, $c!$B$BOn the observance of Hallow''s End, we burn a Wickerman to represent a cleansing of the self. As the woods sigh and shed their leaves, we too must undergo a catharsis. Fears, sorrows, regrets: by throwing a branch into the blaze, you can relieve yourself of any burden you would not bear into winter.$B$BPlease, grab a branch from the bonfire and join the celebration!', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17837, 'Can you feel the evil that taints the very ground, $c? It comes from deep down within the Shadow Hold. Unchecked, it will swallow everything in its path.$B$B<The night elf coughs, revealing a bloody wound at his side.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17838, 'Only the most valiant and honorable amongst the tribe can earn the honor of being laid to rest at Red Rocks.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17840, 'Though many flames are fought over, extinguished and re-lit, all are welcome to show honor to the flame, $c.$b$bHere among the Earthen Ring, we simply honor the flame, rather than engage in other frivolities.$b$bHere, we will honor the flame as tradition dictates. Will you join with us in honoring the flame, $n?', 'Though many flames are fought over, extinguished and re-lit, all are welcome to show honor to the flame, $c.$b$bHere among the Earthen Ring, we simply honor the flame, rather than engage in other frivolities.$b$bHere, we will honor the flame as tradition dictates. Will you join with us in honoring the flame, $n?', 0, 0, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17842, 'You''ve reached an Earthen Ring bonfire!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17843, 'One of those blasted Jaedenar demons saw me! Gave me a good slash in the side. The wound isn''t pretty, but I''ll live.$B$BThere are more urgent matters at hand, like stopping the Shadow Council from launching a full-scale attack on our friends at Wildheart Point. I''m in no shape to fight, so you''ll have to go in my place.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17849, '', 'Hallow''s End is upon us, $c. I hope you are enjoying the festivities.', 0, 7, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17855, '', 'Welcome to the Menders'' Stead, $c.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17856, 'What''re ye lookin'' at, ye tuskarr-faced bung?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Yarr!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Scuttle me skivvies!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17857, 'The tale of ol'' Duncan is a sad one, I''m afraid. I used to be captain of me own ship, ye know?$b$bOne more demotion and I''ll be a swabbie again. I don''t think I could take the humiliation.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17859, 'While I miss Gilneas greatly, there''s ancient ruins to explore!', 'While I miss Gilneas greatly, there''s ancient ruins to explore!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17861, 'A treasure hunter''s life is a treacherous one. Don''t be foolin'' yerself.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17866, 'Our brothers at Baradin Hold on Tol Barad are very busy and not always available when you need them. I have been stationed here around the clock to help you with tasks they might have given you.', 'Our brothers at Baradin Hold on Tol Barad are very busy and not always available when you need them. I have been stationed here around the clock to help you with tasks they might have given you.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17878, 'Do you have what it takes to stay in my kitchen?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17880, 'This teleporter will transport you to Grom''gol in Northern Stranglethorn.$B$BUsually.$B$BI mean, sometimes it''ll just disintegrate you, or reduce all your soft tissues into a greenish, foul-smelling mist, but mostly it''s safe!$B$B...mostly.', '', 0, 1, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17881, 'This teleporter will transport you to the irradiated ruins of Gnomeregan, deep beneath Dun Morogh.$B$BDon''t worry, there''s another one there that''ll send you back here... well, if it doesn''t turn you inside-out or transmogrify your organs into unstable organic explosives, that is!$B$BWell? What are you waiting for? Hop on in!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17888, '', 'Did you see that? Someone just fell out of the sky!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17890, '', 'How can Bwemba aid ya?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'Bwemba be watchin'' you, young one.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'My spirit be watchin'' over ya, $n.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'Spirit walkin'' be taxin'' work.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17891, 'You seek power, yes? But will you walk the cursed path I do for it?', 'You seek power, yes? But will you walk the cursed path I do for it?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17892, 'My path is a dark and cursed one, $c. You do not wish to walk with me.', 'My path is a dark and cursed one, $c. You do not wish to walk with me.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17896, '<The Arcane Guardian gestures towards the city''s center.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17901, '', 'All the supplies flowing north to Ashenvale stop here to rest and re-fuel. It''s important to keep our operations running smoothly.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17904, 'Welcome, my $g brother : sister;. If you are here to train, then I would be delighted to train you.', 'Welcome, my $g brother : sister;. If you are here to train, then I would be delighted to train you.', 0, 0, 1, 2, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17905, 'If you seek training in the Old Ways, I cannot help you.', 'If you seek training in the Old Ways, I cannot help you.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17906, 'There''s a worgen druid by the name of Dareth just outside the city gates; he might be able to help you.$B$BBig beast of a fellow, covered in white leather and furs. You can''t miss him.', 'There''s a worgen druid by the name of Dareth just outside the city gates; he might be able to help you.$B$BBig beast of a fellow, covered in white leather and furs. You can''t miss him.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17907, 'Good day! Need some screws tightened or some bolts loosened? You''ve come to the right place.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17941, 'Handmade toys from all over Azeroth!', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17946, '', 'Ahh! There you are, $n.$b$bI must speak with you at once.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17947, 'Welcome to the Cold of Cold, friend! Our unique ice cream is chilled to order by one of Stormwind''s finest apprentice mages!', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17949, 'Are you ready to face Nemesis? I hope you have your totem ready.$b$bLet me know when you want to summon him.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17950, 'Ye don'' want ta'' be goin up dis'' way, mon. Da spirits be restless.\r\n\r\n\r\n\r\nMebbe if ye'' know a ting or two about ancient artifacts, ye can fin'' a way to put dem to rest.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17951, '', 'You mustn''t tarry, $n.$b$bAnachronos awaits!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17952, 'Though this artifact seems to be in pristine condition, you sense nothing particularly special about it.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'This artifact appears to be intact, though it is so thoroughly coated in dirt and mud that it is difficult to tell for sure. There does not seem to be anything inherently magical about it.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'This artifact has weathered many storms, and shows significant signs of deterioration. It is doubtful that any powers it once held remain.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Several leaves and branches cling to this object, indicating that it may have been used as part of a nest for some creature. There is otherwise nothing of note.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Several strange carvings adorn this object, perhaps made by the trolls in an attempt to decipher its origins. They did not seem to meet with much success, as the object remains inert.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Mysterious runes adorn this artifact, though they appear to be unpowered at this time.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'This object is of low quality and is likely one of many fake artifacts that have been flooding the black market.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'Several spots of dried blood can be seen on this object, likely a result of the struggle to obtain the artifact by the trolls. The object is quite plain, however, and may not have been worth the struggle.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 0), +(17956, 'Be at ease, mortal. Our time together here must be productive, and unclouded by tension.$b$bMuch depends on your ability to think clearly and reason well.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17960, 'Greetings, $c. My name is Thork--I lead the defenses here in the name of the Warchief.$B$BI see you have had a chance to help out here at the Crossroads. Carry on for the Horde!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17961, 'Ye want Deepmountain Mining and Jewelcrafting, over on the northern side of The Great Forge.', 'Ye want Deepmountain Mining and Jewelcrafting, over on the northern side of The Great Forge.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17967, 'A blacksmith and his assistant can be found working in the Warrior''s Terrace, near the armor and weapon vendors there.', 'A blacksmith and his assistant can be found working in the Warrior''s Terrace, near the armor and weapon vendors there.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17972, 'There is no end to these trolls, $c.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17976, '', '$N, it is good to see you. Have you come to help push the front for us?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17977, '', 'The elemental forces are relentless. I fear we''ll not be able to hold this breach forever. Not without more help.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17980, 'It''s a difficult job keeping the steam tanks up and running by yourself, but someone has to do it.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17983, 'I should''ve broken those damn tablets the day you brought them to me, $N, but I didn''t. We might still have our king''s wisdom to guide us through these perilous times.', '', 0, 0, 1, 5, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17986, 'This is a child of Beth''tilac, the Red Widow. Her spawn will seek vengeance for their slain brethren.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'We stand in the heart of Beth''tilac''s breeding ground. Beyond those pillars to the north, her brood awaits. They will defend her young relentlessly.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17988, 'Da Zandalari must be stopped. Wit'' all da trolls of Azeroth at their command, dey would be a threat to all of us.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17989, 'Da Zandalari be a threat to both our peoples, $r. It will take da stength o'' both our forces to break them.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17990, '', 'Greetings, $c. The Fire Lord has twisted our former brothers and sisters into avatars of molten fury. Even now, the Druids of the Flame carry out his insane plan to destroy the World Tree. We will not let that happen.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17993, 'My heart is heavy with the burden of this war. I lead my people to their deaths. But if we cannot stand against Ragnaros now, how will we withstand Neltharion?$B$BWe must fight with everything we have, or witness the destruction of our world.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17996, 'Once da high priest is dead and da coast is clear, let me know and I be returnin'' to the blood guard wit'' my report.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17997, 'It''s good to be outta dat cage. Dey were goin'' to sacrifice me...', '', 0, 0, 1, 0, 5, 500, 1, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17998, 'Ok mon, this be what I saw....$b$bAll was quiet, til we be hearin'' a rustlin'' sound, like the wind through the trees. Before we know it, we be surrounded by these Amani and their pets! Next think I knew, I be wakin'' up here, stuck in a cage.$b$bDay an'' night, one by one, da captured scouts be gettin'' killed. Every time one be dyin'', that bear-troll be lookin'' stronger.$b$bThat be all I could learn from my place in dat cage.', '', 0, 0, 1, 0, 5, 500, 1, 1000, 1, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(17999, '', 'Are you here to aid da Darkspear, $c?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18000, '', 'I be an emissary from da Darkspear trolls. Da threat we face, also be a threat to da Alliance. You willin'' to help out da Darkspear, $r?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18001, 'Ya have my tanks, $c. I thought I''d be endin'' up just another sacrifice...', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18002, 'Ya be havin'' me gratitude, $c.$b$bIf there be anythin'' I can be doin'' for ya, just say so.', '', 0, 0, 1, 0, 5, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18004, '', 'This place be reekin'' of death and sacrifice.$b$bBest you leave before you become da next prisoner.\r\n\r\n', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18005, '', 'It be good to be outta dat cage. Norkani will have her revenge...', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18006, '', 'Where am I? You be here to help?', 0, 0, 1, 0, 21, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18012, '', 'These trolls have made a grave mistake, $c.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18015, '', 'Ya have my gratitude for gettin'' me outta dat cage. My wits are finally returnin'' an'' I''ll be able to tell Vol''jin what I learned.\r\n', 0, 0, 1, 1, 0, 0, 0, 1000, 500, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18022, 'The Gurubashi attackers just keep streaming in! We''ve been pinned down here and haven''t received word from the outlying outposts in days.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18024, 'I''m here to make sure the job gets done on time.$b$bBooty Bay is still trying to recover from the tidal wave!$b$bThe last thing we need is a horde of rampaging trolls, zombie trolls, poisonous serpents or crazed panthers attacking us.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, 'I''m here to represent Booty Bay''s interest in this expedition.$b$bIf things go bad, Booty Bay is in trouble.$b$bWe are still recovering from the events of the cataclysm.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18025, '', 'In the nature of all things is the will to survive.', 0, 0, 2, 0, 0, 0, 0, 0, 0, '', 'What is war, but the preservation of life? Just as the seed struggles to push out of the soil, so do we fight for our own existence.', 0, 0, 2, 0, 0, 0, 0, 0, 0, '', 'Hello there! You''re really growing on me.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'Will we win this war? Only thyme will tell.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'It''s sweltering down here. Did someone tell them to turnip the heat?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'I like you! Weed make anise pear.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'Some people say I''m corny, but I think I''m rather sage.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'Oh, it''s you again! Do you think we''ll be able to mustard up the forces we need?', 0, 0, 1, 0, 0, 0, 0, 0, 0, 0), +(18026, 'It''s hotter''n a kiln down here! Ah could fry an egg on me forehead.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18028, 'Tholo... is that you...?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18029, '', 'That Malfurion... fitting of him to send his $r underling to speak with me.$b$bHe has proven himself a coward, as always.', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18030, '', 'Never you mind, $r. The details of my past were burned away when I joined the Druids of the Flame. They are of no concern to you.$b$bBesides, I am here to discuss the future of this realm. And I do not plan to discuss it with you.$b$bNow answer me... where is Malfurion!?', 0, 0, 1, 0, 1, 0, 5, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18031, '', 'Very well. Malfurion shall press into the Firelands, and we will deal with him there. His judgment can wait for a few more brief days.$b$b<Leyara''s eyes light up.>$b$bThe tauren arch druid, however, will not be so lucky.', 0, 0, 1, 0, 1, 0, 5, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18032, 'Our assault on the Firelands cannot wait. We strike, at Ragnaros and at Fandral, as soon as we can.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18037, 'These trolls have just shown up demanding our help.', '', 0, 7, 1, 0, 1, 0, 0, 0, 0, 'I can barely understand what these trolls are trying to say.', '', 0, 7, 1, 0, 1, 0, 0, 0, 0, 'Why don''t these trolls just deal with their problems on their own?', '', 0, 7, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18038, '<The troll sings to himself as he observes the carnage around him.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18041, '', 'Glad you could make it, $N.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'Welcome to the Molten Flow, $N.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'The flamewakers up ahead mean business. Be careful in there.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'I fear there may be a lost druid in the back of the cave, $N. Be on the lookout.', 0, 0, 3, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18042, '', 'Glad you could make it, $N.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'Welcome to the Molten Flow, $N.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'The flamewakers up ahead mean business. Be careful in there.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'There are plenty of thermal vents up ahead, $N. Feel free to use them if you get into a jam.', 0, 0, 3, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18043, '', 'Your deeds shall live on forever in the memories of every blue dragon, $n.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18044, 'The grave is old, peaceful, and undisturbed.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18045, 'While this is certainly a grave marker, it is unclear who is buried here.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18046, 'I can teach the art of cooking.\r\n\r\nAre you looking to learn?', 'I can teach the art of cooking.\r\n\r\nAre you looking to learn?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18047, '', 'My, it sure is hot down here. I didn''t even need to bring my own forge.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18048, '', 'That island over there is full of Obsidium creatures! I''d go over there myself, but I can''t get across the bridge.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18050, 'Oh, aye. I took the wee rotter''s candle.\r\n\r\n\r\n\r\nNow, what did ye need?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18063, '', 'I consider it a great honor to assist the Lady Proudmoore in her research. She''s the most powerful human mage upon Azeroth, you know!\r\n\r\n\r\n\r\nNow, was there something I might help you with?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18064, 'Were this tower to boast TWICE as many tomes, it would still not be enough for me. My collecting and copying shall never be done.\r\n\r\n\r\n\r\nSo. You have need of my assistance?', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18067, '', 'You mean to say there is a warlock? Here, in goodly Theramore?!\r\n\r\n\r\n\r\nOh, my. Someone must inform Lady Proudmoore immediately!\r\n\r\n\r\n\r\n...heh.', 0, 7, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18070, 'With all the Siege Engines nearly complete, I''m getting a bit bored!\r\n\r\n\r\n\r\nYou''re not an engineer, are you? Care to compare blueprints...?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18072, 'I used ta be in the Explorers'' League, ye know.\r\n\r\nBut then I realized the only thing I really cared ta look for was GEMS.\r\n\r\nBig, sparklin'', colorful, valuable gems... oh, how I love ye!', '', 0, 0, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18075, '<The staff pulsates with arcane energies.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18076, 'Good leather in the marshes, if you''ve the guts for it. Lots of crocolisks. Thinkin'' my brother and I''ll stay a while.\r\n\r\nSomethin'' I can help you with?', '', 0, 0, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18086, 'Speak to Paymaster Lendry on the second floor of the barracks.\r\n\r\n\r\n\r\nHe can arrange to store your goods with Theramore''s treasury.', 'Speak to Paymaster Lendry on the second floor of the barracks.\r\n\r\n\r\n\r\nHe can arrange to store your goods with Theramore''s treasury.', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18087, 'Look for Jensen Farran near the archery range.', 'Look for Jensen Farran near the archery range.', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18088, 'You''ll find Horace Alder pacing about above the ground level of Lady Proudmoore''s tower.', 'You''ll find Horace Alder pacing about above the ground level of Lady Proudmoore''s tower.', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18089, 'Look for Brother Karman overseeing training at the combat dummies outside the barracks.', 'Look for Brother Karman overseeing training at the combat dummies outside the barracks.', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18090, 'Look for Allen Bright at the sparring ring near the barracks.\r\n\r\n\r\n\r\nHe and Doctor Gustaf VanHowzen oversee the training of the isle''s healers.', 'Look for Allen Bright at the sparring ring near the barracks.\r\n\r\n\r\n\r\nHe and Doctor Gustaf VanHowzen oversee the training of the isle''s healers.', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18091, 'I''m not certain. Try asking Calia Hastings, by the docks. I''m told she has connections to SI:7.', 'I''m not certain. Try asking Calia Hastings, by the docks. I''m told she has connections to SI:7.', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18092, 'A shaman...?\r\n\r\n\r\n\r\nThere''s a rather rough-looking dwarven lass staying in Theramore''s inn; I believe she came to visit an old friend of hers here.\r\n\r\n\r\n\r\nShe might be able to help you.', 'A shaman...?\r\n\r\n\r\n\r\nThere''s a rather rough-looking dwarven lass staying in Theramore''s inn; I believe she came to visit an old friend of hers here.\r\n\r\n\r\n\r\nShe might be able to help you.', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18093, 'Well... ah... don''t tell her I sent you, but look for a red-robed woman above the ground level of the central tower.\r\n\r\n\r\n\r\nRedia Vaunt is her name. But do not mention me!', 'Well... ah... don''t tell her I sent you, but look for a red-robed woman above the ground level of the central tower.\r\n\r\n\r\n\r\nRedia Vaunt is her name. But do not mention me!', 0, 0, 1, 0, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18094, 'Report to Captain Evencane on the second level of the barracks. He can see to your training.', 'Report to Captain Evencane on the second level of the barracks. He can see to your training.', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18095, 'Alchemist Narett and Brant Jasperbloom teach Alchemy and Herbalism out of a small shop here; they''ll be able to help you.', 'Alchemist Narett and Brant Jasperbloom teach Alchemy and Herbalism out of a small shop here; they''ll be able to help you.', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18096, 'I know that one of those visiting Woolybush dwarves is an archaeologist.\r\n\r\n\r\n\r\nI think it''s the wife, Faena. They''re both explorers of some sort. Look for them in the inn.', 'I know that one of those visiting Woolybush dwarves is an archaeologist.\r\n\r\n\r\n\r\nI think it''s the wife, Faena. They''re both explorers of some sort. Look for them in the inn.', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18097, 'Ask for Marie Holdston at the smithy.', 'Ask for Marie Holdston at the smithy.', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18098, 'Craig Nollward works the inn''s kitchen. He''ll be able to help you.', 'Craig Nollward works the inn''s kitchen. He''ll be able to help you.', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18099, 'Lissah Spellwick, at the top of mage tower, is the mistress of Lady Jaina''s enchanters.', 'Lissah Spellwick, at the top of mage tower, is the mistress of Lady Jaina''s enchanters.', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18100, 'Look for Caz Twosprocket at the smithy.', 'Look for Caz Twosprocket at the smithy.', 0, 0, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18101, 'Doctor Gustaf VanHowzen works on the ground level of the barracks.', 'Doctor Gustaf VanHowzen works on the ground level of the barracks.', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18102, 'Michael Crowe, down by the docks, can teach you anything you need to know about catching and gutting fish.', 'Michael Crowe, down by the docks, can teach you anything you need to know about catching and gutting fish.', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18103, 'Look for Theoden Manners at the top of Lady Proudmoore''s tower.', 'Look for Theoden Manners at the top of Lady Proudmoore''s tower.', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18104, 'I''m certain that one of the visiting Woolybush dwarves is a jewelcrafter.\r\n\r\n\r\n\r\nI believe it''s the husband, Ingo. They''re both explorers of some sort. Look for them in the inn.', 'I''m certain that one of the visiting Woolybush dwarves is a jewelcrafter.\r\n\r\n\r\n\r\nI believe it''s the husband, Ingo. They''re both explorers of some sort. Look for them in the inn.', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18105, 'Seek out the Tanwell brothers in Theramore''s inn. One of them will be able to help you.', 'Seek out the Tanwell brothers in Theramore''s inn. One of them will be able to help you.', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18106, 'Look out for the dwarf, Kerik, outside Theramore''s smithy.\r\n\r\n\r\n\r\nHe''s a drunkard and a bit free with the explosives, but he''s friendly enough and knows his way around a mine.', 'Look out for the dwarf, Kerik, outside Theramore''s smithy.\r\n\r\n\r\n\r\nHe''s a drunkard and a bit free with the explosives, but he''s friendly enough and knows his way around a mine.', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18107, 'You''ll want to find Sansha MacVince, just outside Theramore''s stables.', 'You''ll want to find Sansha MacVince, just outside Theramore''s stables.', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18108, 'Timothy Worthington works out of the second floor of one of Theramore''s larger buildings. He''ll do you right.', 'Timothy Worthington works out of the second floor of one of Theramore''s larger buildings. He''ll do you right.', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18113, 'The winds are strange today. Strange indeed.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18116, 'The Gurubashi attackers just keep streaming in! We''ve been pinned down here and haven''t received word from the outlying outposts in days.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18124, '', 'Do not worry. I will keep the Crimson Lasher safe with me. Until we learn more about its behavior, I''m afraid it must stay here in the Firelands.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'Such a unique specimen! So many possibilities! I must devote myself harder to the study of the local flora and fauna.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'While I am buried in research, it will be up to you to teach the Lasher the ways of the world.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18130, 'Yes, mortal?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18131, 'Kalecgos has been chosen as the new aspect for the blue dragonflight.$b$bOne among you was instrumental in thwarting Arygos''s betrayal to Deathwing, thereby averting a terrible crisis.$b$bWe are here to partake in the celebration of their heroic deeds.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18135, '', '<The Shadow Warden looks at you silently.>', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18137, 'The earth beneath our feet groans and shudders. Fire rains down from the sky. The air chokes away all life. This is truly the realm of the Fire Lord.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18138, '', 'We cannot rest yet, my child. Hyjal still stands, but if we falter on the Fire Lord''s doorstep, all may still be lost. Let the strength of the ancients be with us.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18139, '', 'Our Storm Crows struggle to fly in this high density air, but the fire hawks on that ridge seem to soar with ease.$B$BThey are as wild as any of the creatures in the Plane of Fire, yet there is beauty in their form.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18140, 'With time, we may be able to restore this land.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18141, 'We are just barely holding our ground. We need every able-bodied soldier to report for duty.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18142, 'Never have I seen such a barren wasteland.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18143, '', 'Any questions you have about the Wardens can be answered on the field of battle.', 0, 0, 3, 0, 0, 0, 0, 0, 0, '', 'What are the Wardens? We are the precision slice of a killing blow.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'What are the Wardens? We are the hum of a spinning blade in the moment before death.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'What are the Wardens? We are the silence in the shadows.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18144, 'We gave up much to attain this foothold, and we must continue fighting to keep it. Although our defenses are weak, continued efforts to push forward will help us recruit stronger allies in the future.$B$BThe time for courage is now, champion.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18145, 'We have managed to defend this point, and much of it is thanks to you.$B$BYou have managed to recruit a valuable ally to our ranks, however, the enemy continues to assail us without relent.$B$BWe must hold our ground or lose what we have fought so hard to gain.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18146, 'Through your efforts, you have brought both the Shadow Wardens and the Druids of the Talon to our side.$B$BExcellent work, $c.$B$BWe are gaining ground, but much work still remains.$B$BAs the enemy assails us, we must continue to build up our defenses. We require three things, $N.$B$BElderlimb and the Ancient Protectors watch over Hyjal, but their strength would be invaluable here.$B$BAs stalwart as our courage, our armory needs additional military supplies.$B$BFinally, the strength of Elune''s calming waters will heal and rejuvenate our tired soldiers.$B$BWe need these things before our work here is complete.$B$BGo, $N. Your efforts are crucial to our victory.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18148, '', 'Look with your eyes. What do you see? What do you feel?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18149, 'Winds of Aviana, grant me the strength to keep the flames at bay.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18150, '', 'Welcome, $N. Have you come to join the invasion of the Firelands?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18151, '', 'While we prepare to invade the Firelands, the Firelord sends his minions to repel our attack. Our position here cannot fall. We are all that stands between them and the World Tree.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18152, '', 'We do not yet have the strength to push forward into the Firelands. First, we must rebuild our forces and supplies. Will you lend yourself to our efforts?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18153, '', 'What happens now will affect us all. Everyone''s aid is needed. We must work together to fight against the invasion.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18154, '', 'Are there any teeny tiny animals in need of my aid?$B$B<Mylune''s eyes glisten at the thought.>$B$BI need to hug a bunny right now!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18155, '', 'How are the preparations going?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18156, 'Yes? The Arch Druid is resting.$B$BI am sure he appreciates your visit, but it is best not to disturb him.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18157, 'It is difficult to say. His injuries are grievous. Even though he is a powerful druid, it will take time and patience to restore him back to full health.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18158, '', 'Hello, $N. Are you helping with the invasion? A skilled $c such as yourself will be a valuable addition to our force.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18159, 'I need someone who can get the job done. Can I count on you, $c?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18160, 'Greetings, mage. Shall I provide you with further insight into the world of magic?', 'Greetings, mage. Shall I provide you with further insight into the world of magic?', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18162, 'I have no time for a sermon now, $c. Seek your knowledge elsewhere.', 'I have no time for a sermon now, $c. Seek your knowledge elsewhere.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18163, 'The Light gives us the strength and magic to triumph.', 'The Light gives us the strength and magic to triumph.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18165, '', 'In the nature of all things is the will to survive.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'What is war, but the preservation of life? Just as the seed struggles to push out of the soil, so do we fight for our own existence.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', 'Hello there! Plants are my speciality. Do you have an inquiry about the local flora?', 0, 0, 2, 0, 0, 0, 0, 0, 0, '', 'There''s nothing more inspiring than a flower in bloom!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18166, 'I apologize, $c. I mistook you for someone with a spine. Begone; our secrets are not for untrained ears.', 'I apologize, $c. I mistook you for someone with a spine. Begone; our secrets are not for untrained ears.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18167, 'We can run no longer. It is time to stand and fight.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18168, 'We have little to discuss, $c. Perhaps you should seek other, more like-minded individuals.', 'We have little to discuss, $c. Perhaps you should seek other, more like-minded individuals.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18169, 'Do you prefer guns or bows?', 'Do you prefer guns or bows?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18170, 'I train only warriors, $c. You''ll have to look elsewhere.', 'I train only warriors, $c. You''ll have to look elsewhere.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18172, 'Ours is a path for those with an iron will and unfaltering resolve. You seem to possess none of these traits, $c.', 'Ours is a path for those with an iron will and unfaltering resolve. You seem to possess none of these traits, $c.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18174, '$N, how may I further your training?', '$N, how may I further your training?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18175, 'If you seek training, I cannot help you.', 'If you seek training, I cannot help you.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18176, 'It appears you took a wrong turn, $c.', 'It appears you took a wrong turn, $c.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18185, '', 'My Go''el... consumed by the sea. Tormented by his own desires!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18186, '', 'The cycle begins again! Go''el has become living stone! We must pursue him within the caverns of Deepholm.$b$bSeeing as how the Earthen Ring just saved her kingdom, Therazane should be more than willing to help us in saving him. If not, the Stonemother will answer to me!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18189, '', 'Can you feel the magic in the air, $c?', 0, 7, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18195, 'You come to join the fight, $c?', 'You come to join the fight, $c?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18197, '', '$N, I am not surprised to see you here. I always thought you were my brightest pupil. I am honored to fight alongside you, my friend.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18200, '', 'The children love this holiday. Some children have gone out trick-or-treating, some have stayed behind, and some, like these, have decided to try to run a small business.$b$bTheir goal is to amass as much candy as possible, and they felt the best way was to offer treats for the hard work of others. I laughed when I first heard of their plan, $c. But now that I see how many adventurers are giving them candy for their wares, I am worried.$b$bThat is a lot of sugar. I don''t think the children will ever be able to fall asleep again.', 0, 0, 1, 1, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18201, '', 'No matter how far it takes me - I refuse to give up on him.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18202, '', 'I can only teleport us once. Make sure you are ready. Go''el waits for us at the bottom of the ocean...', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18203, 'We''ve delayed long enough. Let us take the battle to this servant of Ragnaros immediately.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18204, '', 'The sooner we can get away from the Stonemother, the better. I do not trust her.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18205, 'Please feel free to browse the items up for bid, or if you would like to list an item, I can help.', '', 0, 0, 1, 0, 1, 0, 273, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18207, '', 'How can he just STAND there, while we fight off the attackers at his feet?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18208, '', 'Brace yourself. The Firelands are a dangerous place... even for a formidable $r such as yourself.$b$bLet me know when you are ready.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18212, '', 'Of course, I will share my knowledge with you.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18217, 'Feel free to browse the items up for bid. I can help you place an item up for auction too.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18220, '', 'We will need the help of ALL the elements to save Thrall from this place. The lieutenants of Ragnaros will not be nearly as compromising as Cyclonas, Hydrius, or even Therazane.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18221, '', 'I can''t believe that it''s... over...$b$bGo''el is free, thanks in no small part to you, $N.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18222, '', 'You are right. I will see you in Mount Hyjal, friend.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18224, 'Welcome to the Shady Lady, home of fine wines and exotic merchandise you won''t find anywhere else!', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18238, 'If there''s one thing I know, it''s that you can always count on a good friend. If you have such a person in your life, cherish them well.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18239, 'Anren is my best friend. I don''t know what I would do without him.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18240, 'Tholo and I have been through so much together. I always know he''s watching out for me.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18242, 'Do you know how many supplies it takes to support an army, $N? We need weapons, food, shelter, bandages...and that''s just to start.$B$BThe supplies will not stock themselves. Ask Matoclaw if you''re looking for ways to help. She will put you to use.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18243, '', 'I am gathering my strength before I return to the battle. You would be wise to do the same.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18244, '', 'The spiders here are as big as... me! Do you know how to get rid of a spider infestation?$B$BYeah, that''s right. Dynamite. Lots and lots of dynamite.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18247, '', 'Legends of the great white stag have persisted in my culture for as long as we tauren can remember. Malorne likely stood guard over the primal forests at the very dawn of the world. He was an ancient spirit, the very embodiment of nature''s power and purity!$B$BLong ago, the greatest tauren hunters would track the white stag when the moon was full. To catch even a glimpse of his shimmering hide through the trees was said to bring great fortune to the tribe for a generation.$B$BDid you know that Malorne was the consort of the moon goddess?', 0, 0, 1, 0, 1, 0, 5, 0, 6, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18248, '', 'Yes, Malorne was consort to the moon goddess herself, the one the night elves call "Elune." From their union was born Cenarius, the patron god of all druids and one of the most powerful creatures ever to walk upon Azeroth.$B$BBut listen to me, I ramble on.$B$BMalorne is an incredible force of nature, but he only interacts with the mortal races in times of dire trouble. Have you heard about his deeds during the War of the Ancients? ', 0, 0, 1, 0, 1, 0, 274, 0, 6, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18249, 'Fight well, soldier. I need you to stay alive out there.', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18250, 'They are tokens of respect, purchased only with blood on the battlefield. Earning enough of these marks will be critical if we plan on winning this war.', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18251, 'To stand a chance in this battle against Ragnaros, we must gather allies who will gladly brave the scorched plains of the Firelands. And before we can recruit such allies to our cause - be they druid, soldier, or simple provisioner - we will need to give them reason to join us.$b$bCarrying even a handful of these marks signifies you as a hero of our cause. Gather them in the hundreds... and you will lead armies.$b$bAre you beginning to see the plan yet?', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18252, '', 'Back behind me, where you first came in, there is a large thermal vent, blowing hot air up and out of this place. Stand on top of the vent, and then... jump! The momentum from your leap should be enough to propel you up to the top.$b$bOh, one more thing - based on some reports I''m hearing from fellow druids, make sure you watch your head on the way out.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18253, '', 'Of course. By the way: you''ll find several smaller vents which behave the same way, deeper in the cavern. With time, you may learn to use them to travel more efficiently within the cavern - or simply as a way to torment those gutless flamewakers.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18254, '', 'Well, my master Morthis is really the expert, but I can share with you what I know.$b$bThey are not birds. Certainly, they fly, their wings have the appearance of feathers, and we even call them hawks, but that is where the comparisons to birds stop. In fact, it would appear that they have more in common with dragons: an affinity for fire, a solitary nature, and - based on what we''ve seen - some indications of intelligence.', 0, 0, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18255, '', 'Isn''t it? However, they do differ from dragons when it comes to their lifespan. Whereas the dragons of our world can live for millenia on end, these fire hawks live brief lives, passing quickly from egg to adulthood to death.$b$bThough my master warns against making emotional connections to our studies, sometimes I can''t help but feel sorry for them. They burn so brightly in life... but in death, they''re quickly replaced and forgotten.', 0, 0, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18256, 'What is there to tell? They''re spiders. Just slightly more... flame-oriented than the spiders you and I are used to.$b$bThey bite, they spin webs, they spit burning venom, and they capture some of my best friends in cocoons of searing silk. Horrible little things.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18257, 'No matter. These are not the spiders we need to worry about, however. Their queen, Beth''tilac, is the true danger. Her webbed fortress lies to the east, beyond our reach. There, she is protected by an army of arachnids, all prepared to give their life for the queen.$b$bAnd they''re huge, too! Believe it or not, the 12-foot-long spiders you see here are the small ones. That being said, while they may not be minions of Ragnaros in the literal sense, they are a danger to our cause and should be treated as such.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18258, '', 'Not much, I''m afraid. I''m no druid, I''m here to lead troops. Seems odd to me that Malfurion tried to plant a tree in the middle of a warzone, but... like I said, I''m no druid.$b$bHowever, I can tell you this. NOTHING makes those fire elementals angrier than the idea of a big, leafy tree growing right in the middle of their homeland. If nothing else, when this tree grows to its full size, it will be a beacon of hope for our forces... and a thorn in the side of our enemy.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18259, '', 'Ten thousand years ago, when the demons of the Burning Legion invaded Azeroth, the ancients fought side-by-side with the mortal races. Many of the ancients met their end by the Legion''s hand. Cenarius would''ve been killed as well, were it not for the actions of his father, Malorne.$B$BThe mighty stag leapt into battle, his hooves crashing down on demon skulls and his antlers piercing their fiery flesh.$B$BThen Archimonde the Defiler took to the field of battle. After a fierce fight, he seized Malorne by his antlers and... and snapped the ancient''s neck.$B$BBut as long as there''s life in the world, can a force of nature like Malorne ever truly die?', 0, 0, 1, 0, 1, 0, 274, 0, 6, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18260, '', 'Go''el - the one you call Thrall - his spirit has been scattered across the elemental planes.$b$bThe Twilight''s Hammer thinks to shake our will... but we shall not weaken. We will not forsake Go''el.$b$bHe has risked everything to save this world, and we''ll do no less for him!', 0, 0, 1, 0, 396, 0, 5, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18261, '', 'Let me know when you are ready to travel to Uldum. We will ask Cyclonas what he knows.', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18262, '', 'Fandral Staghelm has returned as a ... "Druid of the Flame?"$B$BI fear one of my own may be implicated in this betrayal!', 0, 0, 1, 1, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18263, 'Yes, $c, things appear bleak. But know that even as things appear to unravel, they do so with a greater purpose.$B$B<Despite his comforting words, Nozdormu looks stricken, if not ill.>', '', 0, 0, 1, 1, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18264, 'I wish I could aid you in your plight, mortal. But the blue dragonflight is in disarray, and there are other urgent matters here at the World Tree that I''ve been sent to investigate...', '', 0, 0, 1, 6, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18265, '', 'The world-shaman - shattered by the hand of Fandral Staghelm?$B$BGreater powers are at work here. Ragnaros has pushed his strength farther into this realm than I would have imagined.$B$BThe Firelord must be stopped!', 0, 0, 1, 5, 1, 274, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18266, 'It is you again, $c.$B$BIs something wrong?$B$B<Alysra''s tail flinches, and her eyes dart back and forth under their lids.>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18267, 'Has the Earthen Ring sent you?$B$BOur efforts to heal the land must begin here, at the World Tree. I''m glad you are here to witness this.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18268, 'I believe Aggra is almost here, and the other aspects have assembled.$B$BAre you ready to begin, $N?', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18269, 'The Darkmoon Faire is now open!$b$bFor a small fee, I can teleport you to the fairground staging area.$b$bWould you like to go?', 'The Darkmoon Faire is now open!$b$bFor a small fee, I can teleport you to the fairground staging area.$b$bWould you like to go?', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18276, 'We are building a permanent outpost here in the Firelands, $N. Even if Ragnaros is defeated, another may someday take his place. We cannot allow what happened in the Burning Steppes and Mount Hyjal to threaten our world again.$B$BTo that end, we will grow the "Sentinel Tree." A tree with roots in Azeroth, but a protective canopy growing here in this terrible realm. Under its shelter, we will permanently station a group of druids to maintain an eternal vigil over this desolate world.', '', 0, 0, 1, 0, 1, 0, 274, 0, 25, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18280, 'Our ethereal technomancy has the ability to modify an item''s arcane essence in ways previously unimaginable. We can also house items in a pocket dimension... for a small fee. See my associates for details.$B$BUnless you have something for me to examine?', 'Our ethereal technomancy has the ability to modify an item''s arcane essence in ways previously unimaginable. We can also house items in a pocket dimension... for a small fee. See my associates for details.$B$BUnless you have something for me to examine?', 0, 0, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18284, 'Hey, hey!$B$BI''m sure you can land a ring on a slow-moving turtle.$b$bWhat do you say?', 'Hey, hey!$B$BI''m sure you can land a ring on a slow-moving turtle.$b$bWhat do you say?', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18286, 'You give me a game token, and I''ll give you ten rings. $B$BThrow the rings onto the Dubenko the Darkmoon Turtle over there... see the pole he''s carrying on his shell?$b$bIf you don''t land enough rings to win in one go, try again! Your points carry over into your next game.', 'You give me a game token, and I''ll give you ten rings. $B$BThrow the rings onto the Dubenko the Darkmoon Turtle over there... see the pole he''s carrying on his shell?$b$bIf you don''t land enough rings to win in one go, try again! Your points carry over into your next game.', 0, 0, 1, 378, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18287, 'We have to reach the Aspects, are you ready?', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18288, 'Setting up and maintaining the grounds is tough work...', 'Setting up and maintaining the grounds is tough work...', 0, 0, 1, 0, 1, 0, 0, 0, 0, 'It hurts when I move my arm.', 'It hurts when I move my arm.', 0, 0, 1, 0, 1, 0, 0, 0, 0, 'This gash just doesn''t seem to be healing.', 'This gash just doesn''t seem to be healing.', 0, 0, 1, 0, 1, 0, 0, 0, 0, 'That''s the last time I try to set up the cannon alone...', 'That''s the last time I try to set up the cannon alone...', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18289, 'We''ve got hammers, we''ve got gnolls.$b$bIf you''ve got a token, you can use the hammer to whack some gnolls.', 'We''ve got hammers, we''ve got gnolls.$b$bIf you''ve got a token, you can use the hammer to whack some gnolls.', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18290, 'Looking for the old steam tonks?$b$bWell, we''ve got some new ones for you to enjoy.$b$bNormally, it would cost two tokens to use a tonk remote. But because of your military service, you get a discounted rate of one token.$b$bWe at the Darkmoon Faire thank you for your service.', 'Looking for the old steam tonks?$b$bWell, we''ve got some new ones for you to enjoy.$b$bNormally, it would cost two tokens to use a tonk remote. But because of your military service, you get a discounted rate of one token.$b$bWe at the Darkmoon Faire thank you for your service.', 0, 0, 1, 0, 66, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18291, 'We''re going to bring down the Hellfire Citadel, and it all starts with these ramparts.', '', 0, 0, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18292, 'The Warchief has ordered an invasion of the Hellfire Citadel, and we''re starting with these exposed ramparts.', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18293, 'Whew that was close! Deathwing just blew us out of the sky! We''re almost there though, are you ready for the last leg of our journey to Wyrmrest Temple?', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18294, 'The Blood Furnace is a testament to the dark past of my people.', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18295, 'If ye love killing orcs and ye don''t talk much, glad to have ye!$B$BIf not, there''s a lovely portal east of here that I heard is just lovely this time of year.', '', 0, 0, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18297, '', 'The naga are pumping all of the water away for their own use, and entire species are dying out as a result.$B$BIf we don''t do something soon, what life is left on this dying world will disappear forever.', 0, 0, 1, 1, 396, 1, 396, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18298, 'I joined this expedition for one reason, $r: revenge.', '', 0, 0, 1, 0, 396, 0, 396, 0, 396, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18299, 'These mushrooms are unlike anything on the surface. They''re said to bring great wisdom and clarity to those who eat them.$B$BI''m going to bring some back with me to Sporeggar.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18300, 'Being able to study and learn from the Underbog is a once in a lifetime opportunity.$B$BTo think I was practically dead not long ago sitting in a crate in the Slave Pens...', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18301, 'A trio of ethereal technomancers has set up shop in Stormwind, along the canal south of Cathedral Square.\r\n\r\n\r\n\r\n"The Three Winds," it''s called. Look for the weird machinery and purple lights... you can''t miss it.\r\n\r\n\r\n\r\nThey offer just the sort of services you''re looking for.', 'A trio of ethereal technomancers has set up shop in Stormwind, along the canal south of Cathedral Square.\r\n\r\n\r\n\r\n"The Three Winds," it''s called. Look for the weird machinery and purple lights... you can''t miss it.\r\n\r\n\r\n\r\nThey offer just the sort of services you''re looking for.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18302, 'Nexus-Prince Haramad kept telling me that if we didn''t find a way through Shaffar''s ward soon that I''d be the next test subject.$B$BHe wasn''t bluffing.', '', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18303, 'What is an "Ologist", you ask? Why, it means I study everything! I''m more knowledgable about any subject you can think of than anyone you know or anyone you''ll ever know.$B$BGetting through Shaffar''s ward was nothing. Morphalius wouldn''t have a scratch on him if he had just listened to me. Always doing things his way, that one.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18304, '', 'The dead do not belong in this realm.$B$BWhy, then, do we continually seek them out after putting them to rest?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18307, 'You don''t have the slightest idea how to operate the various mechanisms on this device, yet you are filled with a feeling of familiarity that you can''t seem to shake off.$B$BIt''s probably best to just leave it alone.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18308, '', 'The spirits here have been tormented for a long time. We only want to rest.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18312, 'It''s good to see you again.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18313, 'Lower your voice, $r. I am no longer welcome in Sethekk.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18314, 'Not to worry, $c. With this barrier in place, the arakkoa cannot see me.$B$BI''m here on business.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18316, '', 'Warlord Kalithresh will fall!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18317, 'No more games for you.', 'No more games for you.', 0, 0, 1, 274, 0, 0, 0, 0, 0, 'Whaddya want now?', 'Whaddya want now?', 0, 0, 1, 6, 0, 0, 0, 0, 0, 'Step aside and let some others have a chance to play.', 'Step aside and let some others have a chance to play.', 0, 0, 1, 397, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18318, 'We must contain the disease the naga have unleashed here before it is too late!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18320, '', 'How can I help you?', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18321, 'How may I help you?', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18322, 'How may I help you?', '', 0, 0, 1, 6, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18324, '', 'How can I help you?', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18325, 'If you''re going to get to Warlord Kalithresh, you''ll need to defeat Mekgineer Steamrigger and Hydromancer Thespia so that you can get to the Main Chambers Access Panels.$B$BYou mash a few buttons on those, and the door to the main chamber will open right up!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18329, '', 'We people of the Lower City had a rather extensive spy network set up in the Shadow Labyrinth until recently.$B$BNow they''re all dead except me and To''gun.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18330, 'The leadership of Shattrath is too slow to act, so the great people of the Lower City have taken matters in the Shadow Labyrinth into our own hands.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18331, 'What lies before you is the aftermath of Deathwing''s reign. What was once the Ruby Dragonshrine now lays in waste, its charred husk and scorched earth the only testament to its existence.\r\n\r\n$b It is said that, long ago, a single drop of Alexstrasza''s blood melted away the snows of and gave life to the great Crimson Oak that stands before you. Its branches raised triumphantly into the sky and radiated the warmth and life of the Red Dragonflight.\r\n\r\n$bBut now, its twisted, rotting limbs can no longer harness the power of life and vitality - instead only death and destruction. As flame and corruption extinguished the life force of these lands, the great tree captured an image...an echo of the warriors who fell on its hallowed grounds.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18342, 'We came here for war.$B$BThey gave it to us.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18347, 'Alexstrasza''s Drakes will pick us up on the other side of this abandoned excavation site. Check your weapons, this place stinks of an ambush.\r\n\r\n\r\n\r\nLet me know when you''re ready to move out.', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18348, 'You need Darkmoon Game Tokens to play.$b$bBuy them from any of the faire''s Game Token vendors.$b$bI''ll mark one on your map for you.', 'You need Darkmoon Game Tokens to play.$b$bBuy them from any of the faire''s Game Token vendors.$b$bI''ll mark one on your map for you.', 0, 0, 1, 274, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18350, 'First, you give me a game token. Next, I give you a mallet. Then you''ll see gnolls pop from the barrels in the play area.$B$BHit the gnolls with your mallet to score points.$b$BHere''s where it gets tricky. There are three different targets: regular gnolls, Hogger gnolls, and BABIES.$b$bRegular gnolls grant one point, while Hoggers count for three. But babies? Hitting a baby will knock you down and stun you... SO DON''T HIT THE BABIES!$b$bIf you don''t whack enough gnolls in one go, just spend another token! The points you''ve earned will carry over into your next game.', 'First, you give me a game token. Next, I give you a mallet. Then you''ll see gnolls pop from the barrels in the play area.$B$BHit the gnolls with your mallet to score points.$b$BHere''s where it gets tricky. There are three different targets: regular gnolls, Hogger gnolls, and BABIES.$b$bRegular gnolls grant one point, while Hoggers count for three. But babies? Hitting a baby will knock you down and stun you... SO DON''T HIT THE BABIES!$b$bIf you don''t whack enough gnolls in one go, just spend another token! The points you''ve earned will carry over into your next game.', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18352, 'First, you give me one game token. Then you find yourself in control of a steam tonk!$b$bYou have a limited amount of time to blast targets in the battlefield. Each target you destroy earns you one point.$b$bBut watch out: The battlefield is also home to enemy tonks and zeppelins. Getting hit by one of their shots damages your tonk.$b$bYour score will carry over from one tonk to the next, so don''t worry if you explode.', 'First, you give me one game token. Then you find yourself in control of a steam tonk!$b$bYou have a limited amount of time to blast targets in the battlefield. Each target you destroy earns you one point.$b$bBut watch out: The battlefield is also home to enemy tonks and zeppelins. Getting hit by one of their shots damages your tonk.$b$bYour score will carry over from one tonk to the next, so don''t worry if you explode.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18353, 'First, I give you a pellet rifle in exchange for one Darkmoon Game Token.$B$BThen you shoot the targets that light up.$b$bIf you''re fast enough to hit a target just after it''s lit up, you get an extra point.$b$bIf you don''t reach the score limit before your time''s up, or you move away from the booth, don''t worry: Your score carries over to the next game.', 'First, I give you a pellet rifle in exchange for one Darkmoon Game Token.$B$BThen you shoot the targets that light up.$b$bIf you''re fast enough to hit a target just after it''s lit up, you get an extra point.$b$bIf you don''t reach the score limit before your time''s up, or you move away from the booth, don''t worry: Your score carries over to the next game.', 0, 0, 1, 3, 1, 0, 5, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18354, 'Keep your wits about you. There are demons nearby.', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18362, 'Hello and welcome to the Darkmoon Faire Staging Area.$b$bThe portal here will take you to the Darkmoon Faire.$b$bBut if you have any questions before you go, I can answer them.', 'Hello and welcome to the Darkmoon Faire Staging Area.$b$bThe portal here will take you to the Darkmoon Faire.$b$bBut if you have any questions before you go, I can answer them.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18363, 'The Darkmoon Faire is filled with all sorts of amazing attractions. We have a fortune teller, a concert, a fishing contest and a lot of games.$b$bWe are constantly expanding the faire with all manner of new attractions!$b$bAre there any attractions you''d like more information on?', 'The Darkmoon Faire is filled with all sorts of amazing attractions. We have a fortune teller, a concert, a fishing contest and a lot of games.$b$bWe are constantly expanding the faire with all manner of new attractions!$b$bAre there any attractions you''d like more information on?', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18364, 'Miniature tanks, or Tonks as we''ve cleverly named them, have been a faire favorite for as long as I can remember.$b$bWe have two arenas dedicated for tonk battles.$b$bOne arena pits you against the clock as you race to destroy targets, and avoid the enemy tonks. You just need a game token to play!$b$bThe other arena is a place where you can use your own tonks or MiniZeps to battle your friends.', 'Miniature tanks, or Tonks as we''ve cleverly named them, have been a faire favorite for as long as I can remember.$b$bWe have two arenas dedicated for tonk battles.$b$bOne arena pits you against the clock as you race to destroy targets, and avoid the enemy tonks. You just need a game token to play!$b$bThe other arena is a place where you can use your own tonks or MiniZeps to battle your friends.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18365, 'The Blastenheimer 5000 Ultra Cannon is a state-of-the-art single person projectile device.$b$bDelivering its payload at near the speed of a dragon, the cannon is the pride and joy of the Blastenheimer family, world renowned for their aeronautical and combustible feats!$B$BIf you''d like to be launched through the skies to fly free as a bird, seek out Maxima Blastenheimer.', 'The Blastenheimer 5000 Ultra Cannon is a state-of-the-art single person projectile device.$b$bDelivering its payload at near the speed of a dragon, the cannon is the pride and joy of the Blastenheimer family, world renowned for their aeronautical and combustible feats!$B$BIf you''d like to be launched through the skies to fly free as a bird, seek out Maxima Blastenheimer.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18366, 'Whack-a-Gnoll is a fun-filled game of whacking... gnolls.$b$bIt''s a new attraction, and quite popular among us... Well, Sayge isn''t too fond of it.', 'Whack-a-Gnoll is a fun-filled game of whacking... gnolls.$b$bIt''s a new attraction, and quite popular among us... Well, Sayge isn''t too fond of it.', 0, 0, 1, 1, 1, 1, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18369, 'We like to make sure that faire goers of all ages can enjoy the games.$b$bRing Toss is a simple game where you try to land a ring on the back of a moving turtle.$b$bIt''s one of my favorite games to play.', 'We like to make sure that faire goers of all ages can enjoy the games.$b$bRing Toss is a simple game where you try to land a ring on the back of a moving turtle.$b$bIt''s one of my favorite games to play.', 0, 0, 1, 1, 1, 1, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18370, 'Rinling runs the shooting gallery.$b$bThere are only three targets to hit, and the faster you are, the better you do.$b$bPersonally, it''s one of my favorite games.', 'Rinling runs the shooting gallery.$b$bThere are only three targets to hit, and the faster you are, the better you do.$b$bPersonally, it''s one of my favorite games.', 0, 0, 1, 1, 1, 1, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18371, 'I highly recommend that you visit Sayge to get your fortune told.$b$bI know, I know... he''s a gnoll. But he''s a very special gnoll with the power to divine your future!', 'I highly recommend that you visit Sayge to get your fortune told.$b$bI know, I know... he''s a gnoll. But he''s a very special gnoll with the power to divine your future!', 0, 0, 1, 1, 1, 1, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18372, 'Hello $c, and welcome to the Darkmoon Faire.$b$bThere is so much to do here at the faire that it can be a little overwhelming for our first time visitors. That''s why I''m here to help.$b$bDo you have any questions?', 'Hello $c, and welcome to the Darkmoon Faire.$b$bThere is so much to do here at the faire that it can be a little overwhelming for our first time visitors. That''s why I''m here to help.$b$bDo you have any questions?', 0, 0, 1, 0, 1, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18376, 'Caza''rez was not as lucky as I was, $N. He rests with the spirits now.', '', 0, 0, 1, 0, 18, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18390, 'This set up sure is hard work.', 'This set up sure is hard work.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18429, 'I''m sorry, but Lorna''d be real mad if I let you take a horse.\r\n\r\nThey''re only for those who are exalted with Gilneas!', 'I''m sorry, but Lorna''d be real mad if I let you take a horse.\r\n\r\nThey''re only for those who are exalted with Gilneas!', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18430, 'Lorna said a truly brave adventurer helped rescue many of the horses near her family''s orchard.\r\n\r\nI offered to take care of those that made it across the sea with us. I learned how from my mother and father, Light bless them!\r\n\r\nWere you interested in a fine Gilnean steed...?', 'Lorna said a truly brave adventurer helped rescue many of the horses near her family''s orchard.\r\n\r\nI offered to take care of those that made it across the sea with us. I learned how from my mother and father, Light bless them!\r\n\r\nWere you interested in a fine Gilnean steed...?', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18444, 'Mysteries and wonders surround us every day, not just at the faire. We''ve compiled a list of some of the wonders you may encounter in your every day business. The Darkmoon Adventurer''s Guide will help you navigate the wonders of the world.$b$bWith the guide in your possession, you may come across items you never knew existed. Items you may have taken for granted in the past are now treasures that others long for.$b$bKeep the guide with you, and keep your eyes open for mystery.$b$bIf you happen to lose your guide, seek us out and we will replace it for free.', 'Mysteries and wonders surround us every day, not just at the faire. We''ve compiled a list of some of the wonders you may encounter in your every day business. The Darkmoon Adventurer''s Guide will help you navigate the wonders of the world.$b$bWith the guide in your possession, you may come across items you never knew existed. Items you may have taken for granted in the past are now treasures that others long for.$b$bKeep the guide with you, and keep your eyes open for mystery.$b$bIf you happen to lose your guide, seek us out and we will replace it for free.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18452, 'At the dawn of the year, we elders visit briefly to offer counsel to the living and welcome those who have joined the ancestors.', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18463, 'The Darkmoon Faire is now open!$b$bFor a small fee, I can teleport you to the fairground staging area.$b$bWould you like to go?', 'The Darkmoon Faire is now open!$b$bFor a small fee, I can teleport you to the fairground staging area.$b$bWould you like to go?', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18472, 'Here you see the Darkmoon Deathmatch pit. Do you possess the power and will to best all comers and take the pit fighter''s prize?\r\n\r\n\r\n\r\nBouts begin at midnight and every three hours thereafter.', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18508, 'Nnn... nn nnnn... n-nl nnnr nnn... nn n nnnt...\r\n\r\n<I''ll... be fine... it''ll wear off... in a bit...>', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18510, '', 'This is a very unusual place.$B$BThe magic I''m channeling to try to repair the ley lines should be tearing my body apart, but I feel incredible!', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18512, 'I envy you in a way, little $r.$B$BYou are so fortunate as to bear witness to the first steps of the rebirth of the mighty Empire of Azjol-Nerub.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18514, 'I see you''ve arrived. \r\n\r\n$bThis is the eve of the sundering, when the collapse of the Well of Eternity fractured the continents of the world.\r\n\r\n$bHere, we will snatch up the Dragon Soul before it is lost to the mists of time.\r\n\r\n$bBut first, you must bring down the protective wards of Azshara''s lackeys. You will find them within the palace. I will scout on ahead.\r\n\r\n$bGood luck, heroes!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18521, 'Our enemies believe us vanquished from the frozen wastes.$B$BWe will show them the consequence of their ignorance.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18532, '', 'The Scourge spread so rapidly, I often find myself wondering why they haven''t already won this war.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18544, '', '<Corastrasza steps between you and the nearby corpse, her face wrinkled with concern.>$B$BI''m sorry, $N. This is a private matter for the red flight to resolve.$B$BPlease see if you can help the others outside.', 0, 0, 1, 274, 25, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18550, 'The shadows will hide us well.\r\n\r\n$bI am concealed by this shadowcloak, and can imbue its magics onto you.\r\n\r\n$bIt will not make us invisible, but as long as we keep our distance from our foes we will remain hidden.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18551, 'Anything outside of that circle around you will not be able to see you, but the illusion will fade if you attack or take damage.\r\n\r\n$bI suggest you remain hidden until I say otherwise, these demons are too powerful to face head on and in full force.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18555, 'We have to keep moving; are you ready?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18559, 'We waiting for tour guide.', 'We waiting for tour guide.', 0, 0, 1, 1, 0, 0, 0, 0, 0, 'Tour guide taking forever...', 'Tour guide taking forever...', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18560, 'We just wait for guide.', 'We just wait for guide.', 0, 0, 1, 396, 0, 0, 0, 0, 0, 'We hope guide gets here soon.', 'We hope guide gets here soon.', 0, 0, 1, 1, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18562, 'Are you here to lead the tour?', 'Are you here to lead the tour?', 0, 0, 1, 396, 0, 0, 0, 0, 0, 'Are you my tour guide?', 'Are you my tour guide?', 0, 0, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18563, 'If you are not here to lead a tour, leave us.', 'If you are not here to lead a tour, leave us.', 0, 0, 1, 396, 0, 0, 0, 0, 0, 'Are you here to lead a tour or gawk at us? Be gone.', 'Are you here to lead a tour or gawk at us? Be gone.', 0, 0, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18583, 'Are you ready?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18593, 'Enough hiding. It''s time to take the fight to the iron dwarves.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18613, 'My people will stand idle no longer. The halls of Ulduar shall be cleansed!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18698, 'Little hand says it''s time to rock and roll. Everyone into the hold: We''ve got a dragon to kill.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18740, 'We''re catching up to the dragon! I think I can make him out through the cloud cover!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18799, 'You have done it!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18800, 'Do you hear that? What is that noise!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18848, 'Select your destination.', 'Select your destination.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18851, 'We must not waste time, traveler.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18867, 'Heroes, we must place this burden on your shoulders once again. You must protect us from Deathwing''s forces while we imbue the Soul with the powers of the great Aspects of Azeroth.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18877, 'Select your destination.', 'Select your destination.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18879, 'Were you looking to Reforge an item? I no longer provide such services.\r\n\r\n\r\n\r\nThe ethereals of "Three Winds" in Stormwind''s Cathedral District will help you, though.\r\n\r\n\r\n\r\nAny of the city''s guards can provide directions.', 'Were you looking to Reforge an item? I no longer provide such services.\r\n\r\n\r\n\r\nThe ethereals of "Three Winds" in Stormwind''s Cathedral District will help you, though.\r\n\r\n\r\n\r\nAny of the city''s guards can provide directions.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18880, 'Were you looking to Reforge an item? I no longer provide such services.\r\n\r\n\r\n\r\nThe ethereals of Orgrimmar''s Drag will help you, though.\r\n\r\n\r\n\r\nAny of the city''s guards can provide directions.', 'Were you looking to Reforge an item? I no longer provide such services.\r\n\r\n\r\n\r\nThe ethereals of Orgrimmar''s Drag will help you, though.\r\n\r\n\r\n\r\nAny of the city''s guards can provide directions.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18904, 'Welcome aboard the Skyfire. You ready to chase down the end of the world?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18941, 'Hi there! Say, you weren''t looking for a quick teleport to the big cannon, were you?$B$BBecause I can do that!$B$BFor a small fee, of course...', '', 0, 0, 1, 396, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18942, 'Say, nice shot!$B$BScared the fish, though.$B$BNeed a quick teleport back to the cannon?$B$BFor a small fee, of course...', '', 0, 0, 1, 0, 396, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18951, 'We need to move quickly! Tyrygosa and her guard have fallen, leaving the temple defenseless. Deathwing''s forces must never reach the Dragon Soul or all is lost. The Wyrmrest Accord will aid you in the assault; the siege must be broken!', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18953, 'You are either mad, foolhardy, or a hero worthy of being called legend. Which one are you?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18954, 'We shall see, $C.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18958, 'Such a foolish creature, trying to challenge us. His rancid corpse will serve as a reminder to the Legion of the power of Illidan Stormrage.\r\n\r\n$bThe shadowcloak''s magic is fading, concealing us no longer. It was fun while it lasted, but I prefer a more direct approach to bringing death to my enemy.\r\n\r\n$bYou fought well, but where I''m heading I need to go alone.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18959, 'Yes, $N?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18960, '', 'Greetings, $N.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18961, '', 'How can I be of aid, stranger?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18962, 'Stay by my side, $N. We may have need of one another.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18963, 'It is done. The Dragon Soul is safely within the clutch of the dragonflights.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18965, 'Have you come to supplicate yourself before the Light? Or perhaps you have come here to train in the holy arts?$b$bIf you are here to speak with Archbishop Benedictus, I am sorry to inform you that he has left on a mission.', '', 0, 0, 1, 0, 6, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18966, 'Yes. He has been called upon to help the aspects with their efforts at Wyrmrest. He wishes to aid them in cleansing Azeroth of Deathwing''s menace.$b$bMay the Light guide his path.', '', 0, 0, 1, 273, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18978, 'Heroes, have you succeeded in acquiring the Focusing Iris?', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18986, '', 'Yes, hero?', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(18991, 'Don''t stop now.$B$BYou still have time left to play!', 'Don''t stop now.$B$BYou still have time left to play!', 0, 0, 1, 0, 274, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(19016, 'I can feel the elements awakening... rejoicing... the Cataclysm... is over.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(19017, '', 'I can show you the aftermath of Deathwing''s destruction at the Maelstrom, if you wish.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(19019, 'I can show you the aftermath of Deathwing''s destruction at the Maelstrom, if you wish.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(19020, 'With the loss of my power, the Dragon Soul has returned to its original place in time.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(19021, 'This cannot be, is it finally over? I must be dreaming again.', 'This cannot be, is it finally over? I must be dreaming again.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(19022, 'Together we have achieved the impossible.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(19023, 'Now you must usher in a new age... The age of mortals.', 'Now you must usher in a new age... The age of mortals.', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(19024, 'This wall of shadow will hold back the demons long enough for us to cross.\r\n\r\n$bWhen you and the other elves have crossed I will follow.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(19058, 'Defend the temple at all costs.', '', 0, 0, 1, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= `gossip_menu_id`= 11651 WHERE `entry`=234; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 6466 WHERE `entry`=347; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 10893 WHERE `entry`=786; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 6472 WHERE `entry`=907; +UPDATE `creature_template` SET `npcflag`= 81, `gossip_menu_id`= 4110 WHERE `entry`=1215; +UPDATE `creature_template` SET `npcflag`= 81, `gossip_menu_id`= 2741 WHERE `entry`=1241; +UPDATE `creature_template` SET `npcflag`= 81, `gossip_menu_id`= 4208 WHERE `entry`=1385; +UPDATE `creature_template` SET `npcflag`= 81, `gossip_menu_id`= 4134 WHERE `entry`=1386; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 11145 WHERE `entry`=1519; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 11874 WHERE `entry`=1747; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 4046 WHERE `entry`=2079; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 11499 WHERE `entry`=2104; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 11788 WHERE `entry`=2153; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 11886 WHERE `entry`=2215; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 6282 WHERE `entry`=2302; +UPDATE `creature_template` SET `npcflag`= 83, `gossip_menu_id`= 4129 WHERE `entry`=2391; +UPDATE `creature_template` SET `npcflag`= 131, `gossip_menu_id`= 5542 WHERE `entry`=2393; +UPDATE `creature_template` SET `npcflag`= 129, `gossip_menu_id`= 12449 WHERE `entry`=2397; +UPDATE `creature_template` SET `npcflag`= 81, `gossip_menu_id`= 4356 WHERE `entry`=2399; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 11909 WHERE `entry`=2439; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 11673 WHERE `entry`=2464; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 11674 WHERE `entry`=2465; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 11744 WHERE `entry`=2487; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 11727 WHERE `entry`=2491; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 11675 WHERE `entry`=2497; +UPDATE `creature_template` SET `npcflag`= 129, `gossip_menu_id`= 11743 WHERE `entry`=2663; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 11881 WHERE `entry`=2700; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 12636 WHERE `entry`=2771; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 12131 WHERE `entry`=2785; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 11712 WHERE `entry`=2789; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 6462 WHERE `entry`=2804; +UPDATE `creature_template` SET `npcflag`= 81, `gossip_menu_id`= 2784 WHERE `entry`=2836; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 12202 WHERE `entry`=2920; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 11006 WHERE `entry`=2981; +UPDATE `creature_template` SET `npcflag`= 81, `gossip_menu_id`= 4351 WHERE `entry`=3004; +UPDATE `creature_template` SET `npcflag`= 83, `gossip_menu_id`= 4242 WHERE `entry`=3007; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 4187 WHERE `entry`=3008; +UPDATE `creature_template` SET `npcflag`= 83, `gossip_menu_id`= 4128 WHERE `entry`=3009; +UPDATE `creature_template` SET `npcflag`= 81, `gossip_menu_id`= 4165 WHERE `entry`=3011; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 12707 WHERE `entry`=3233; +UPDATE `creature_template` SET `npcflag`= 81, `gossip_menu_id`= 4136 WHERE `entry`=3290; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 11241 WHERE `entry`=3293; +UPDATE `creature_template` SET `npcflag`= 8195, `gossip_menu_id`= 5968 WHERE `entry`=3305; +UPDATE `creature_template` SET `npcflag`= 4481, `gossip_menu_id`= 12056 WHERE `entry`=3322; +UPDATE `creature_template` SET `npcflag`= 786433, `gossip_menu_id`= 1626 WHERE `entry`=3370; +UPDATE `creature_template` SET `npcflag`= 641, `gossip_menu_id`= 11573 WHERE `entry`=3411; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 11004 WHERE `entry`=3418; +UPDATE `creature_template` SET `npcflag`= 131, `gossip_menu_id`= 10311 WHERE `entry`=3443; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 10567 WHERE `entry`=3467; +UPDATE `creature_template` SET `npcflag`= 81, `gossip_menu_id`= 4184 WHERE `entry`=3549; +UPDATE `creature_template` SET `npcflag`= 83, `gossip_menu_id`= 2749 WHERE `entry`=3557; +UPDATE `creature_template` SET `npcflag`= 83, `gossip_menu_id`= 4111 WHERE `entry`=3603; +UPDATE `creature_template` SET `npcflag`= 83, `gossip_menu_id`= 4156 WHERE `entry`=3606; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 10268 WHERE `entry`=3694; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 1201 WHERE `entry`=3836; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 10313 WHERE `entry`=3845; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 10312 WHERE `entry`=3846; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 2561 WHERE `entry`=3885; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 6459 WHERE `entry`=3890; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 11284 WHERE `entry`=3936; +UPDATE `creature_template` SET `npcflag`= 83, `gossip_menu_id`= 4117 WHERE `entry`=3964; +UPDATE `creature_template` SET `npcflag`= 83, `gossip_menu_id`= 4211 WHERE `entry`=3967; +UPDATE `creature_template` SET `npcflag`= 786433, `gossip_menu_id`= 7487 WHERE `entry`=4161; +UPDATE `creature_template` SET `npcflag`= 81, `gossip_menu_id`= 4263 WHERE `entry`=4193; +UPDATE `creature_template` SET `npcflag`= 83, `gossip_menu_id`= 4241 WHERE `entry`=4212; +UPDATE `creature_template` SET `npcflag`= 131, `gossip_menu_id`= 11778 WHERE `entry`=4265; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 4764 WHERE `entry`=4488; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 4763 WHERE `entry`=4489; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 12209 WHERE `entry`=4618; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 12846 WHERE `entry`=4941; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 12093 WHERE `entry`=4984; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 6464 WHERE `entry`=5118; +UPDATE `creature_template` SET `npcflag`= 786433, `gossip_menu_id`= 5462 WHERE `entry`=5130; +UPDATE `creature_template` SET `npcflag`= 81, `gossip_menu_id`= 4160 WHERE `entry`=5157; +UPDATE `creature_template` SET `npcflag`= 83, `gossip_menu_id`= 4748 WHERE `entry`=5159; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 10771 WHERE `entry`=5395; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 11714 WHERE `entry`=5636; +UPDATE `creature_template` SET `npcflag`= 83, `gossip_menu_id`= 4186 WHERE `entry`=5784; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 12271 WHERE `entry`=5843; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 1281 WHERE `entry`=5901; +UPDATE `creature_template` SET `npcflag`= 643, `gossip_menu_id`= 10526 WHERE `entry`=6091; +UPDATE `creature_template` SET `npcflag`= 83, `gossip_menu_id`= 2743 WHERE `entry`=6299; +UPDATE `creature_template` SET `npcflag`= 131, `gossip_menu_id`= 12726 WHERE `entry`=6301; +UPDATE `creature_template` SET `npcflag`= 131, `gossip_menu_id`= 1301 WHERE `entry`=6568; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 4861 WHERE `entry`=6766; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 10900 WHERE `entry`=6782; +UPDATE `creature_template` SET `npcflag`= 81, `gossip_menu_id`= 1043 WHERE `entry`=7230; +UPDATE `creature_template` SET `npcflag`= 211, `gossip_menu_id`= 1042 WHERE `entry`=7231; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 6469 WHERE `entry`=7410; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 6468 WHERE `entry`=7427; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 11876 WHERE `entry`=7770; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 2851 WHERE `entry`=7776; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 11487 WHERE `entry`=7783; +UPDATE `creature_template` SET `npcflag`= 4227, `gossip_menu_id`= 1965 WHERE `entry`=7852; +UPDATE `creature_template` SET `npcflag`= 131, `gossip_menu_id`= 1964 WHERE `entry`=7854; +UPDATE `creature_template` SET `npcflag`= 83, `gossip_menu_id`= 3072 WHERE `entry`=7870; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6228 WHERE `entry`=7875; +UPDATE `creature_template` SET `npcflag`= 81, `gossip_menu_id`= 4164 WHERE `entry`=7949; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 1141 WHERE `entry`=8115; +UPDATE `creature_template` SET `npcflag`= 83, `gossip_menu_id`= 1469 WHERE `entry`=8126; +UPDATE `creature_template` SET `npcflag`= 83, `gossip_menu_id`= 4842 WHERE `entry`=8153; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 12741 WHERE `entry`=8320; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 1362 WHERE `entry`=8399; +UPDATE `creature_template` SET `npcflag`= 131, `gossip_menu_id`= 2952 WHERE `entry`=8403; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 10898 WHERE `entry`=8416; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 1401 WHERE `entry`=8576; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 1470 WHERE `entry`=8579; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 10331 WHERE `entry`=8582; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 10832 WHERE `entry`=8586; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 11767 WHERE `entry`=8664; +UPDATE `creature_template` SET `npcflag`= 83, `gossip_menu_id`= 4152 WHERE `entry`=8736; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 1961 WHERE `entry`=8737; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 1822 WHERE `entry`=9021; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 3142 WHERE `entry`=9116; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 5630 WHERE `entry`=9118; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 12662 WHERE `entry`=9177; +UPDATE `creature_template` SET `npcflag`= 32771, `gossip_menu_id`= 1914 WHERE `entry`=9299; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 7956 WHERE `entry`=9460; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 12128 WHERE `entry`=9503; +UPDATE `creature_template` SET `npcflag`= 4227, `gossip_menu_id`= 5541 WHERE `entry`=9544; +UPDATE `creature_template` SET `npcflag`= 81, `gossip_menu_id`= 4844 WHERE `entry`=9584; +UPDATE `creature_template` SET `npcflag`= 129, `gossip_menu_id`= 2464 WHERE `entry`=9676; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 2362 WHERE `entry`=9990; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 5481 WHERE `entry`=10182; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 12663 WHERE `entry`=10260; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 12039 WHERE `entry`=10299; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 3648 WHERE `entry`=10432; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 3649 WHERE `entry`=10433; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 3647 WHERE `entry`=10475; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 11827 WHERE `entry`=10665; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 11159 WHERE `entry`=10666; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 2921 WHERE `entry`=10739; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 3063 WHERE `entry`=10740; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 2951 WHERE `entry`=10776; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 2961 WHERE `entry`=10778; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 3041 WHERE `entry`=10837; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 3382 WHERE `entry`=10839; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 3043 WHERE `entry`=10917; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 5482 WHERE `entry`=10929; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 3129 WHERE `entry`=11016; +UPDATE `creature_template` SET `npcflag`= 83, `gossip_menu_id`= 4138 WHERE `entry`=11037; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 3183 WHERE `entry`=11055; +UPDATE `creature_template` SET `npcflag`= 131, `gossip_menu_id`= 3223 WHERE `entry`=11057; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 3141 WHERE `entry`=11064; +UPDATE `creature_template` SET `npcflag`= 81, `gossip_menu_id`= 4169 WHERE `entry`=11072; +UPDATE `creature_template` SET `npcflag`= 81, `gossip_menu_id`= 4171 WHERE `entry`=11073; +UPDATE `creature_template` SET `npcflag`= 83, `gossip_menu_id`= 4170 WHERE `entry`=11074; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 12502 WHERE `entry`=11079; +UPDATE `creature_template` SET `npcflag`= 83, `gossip_menu_id`= 4244 WHERE `entry`=11098; +UPDATE `creature_template` SET `npcflag`= 83, `gossip_menu_id`= 3202 WHERE `entry`=11178; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 3362 WHERE `entry`=11277; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 3363 WHERE `entry`=11279; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 3363 WHERE `entry`=11281; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 3372 WHERE `entry`=11286; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 3381 WHERE `entry`=11316; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 4025 WHERE `entry`=11317; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 11393 WHERE `entry`=11390; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 5736 WHERE `entry`=11486; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 5602 WHERE `entry`=11491; +UPDATE `creature_template` SET `npcflag`= 131, `gossip_menu_id`= 3625 WHERE `entry`=11555; +UPDATE `creature_template` SET `npcflag`= 211, `gossip_menu_id`= 3626 WHERE `entry`=11557; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6801 WHERE `entry`=11558; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 3601 WHERE `entry`=11608; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 3604 WHERE `entry`=11615; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 3961 WHERE `entry`=11625; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 10438 WHERE `entry`=11701; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 4084 WHERE `entry`=11799; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 4041 WHERE `entry`=11800; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 3901 WHERE `entry`=11802; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 3962 WHERE `entry`=11878; +UPDATE `creature_template` SET `npcflag`= 131, `gossip_menu_id`= 4066 WHERE `entry`=12031; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 3862 WHERE `entry`=12144; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 6474 WHERE `entry`=12198; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 5304 WHERE `entry`=12238; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 4162 WHERE `entry`=12340; +UPDATE `creature_template` SET `npcflag`= 8195, `gossip_menu_id`= 10434 WHERE `entry`=12616; +UPDATE `creature_template` SET `npcflag`= 8195, `gossip_menu_id`= 12237 WHERE `entry`=12636; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 5161 WHERE `entry`=12724; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 4442 WHERE `entry`=12736; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 4441 WHERE `entry`=12737; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 4401 WHERE `entry`=12757; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 4981 WHERE `entry`=12863; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 4601 WHERE `entry`=12866; +UPDATE `creature_template` SET `npcflag`= 131, `gossip_menu_id`= 6445 WHERE `entry`=12919; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 5065 WHERE `entry`=13278; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 5109 WHERE `entry`=13322; +UPDATE `creature_template` SET `npcflag`= 131, `gossip_menu_id`= 5181 WHERE `entry`=13420; +UPDATE `creature_template` SET `npcflag`= 131, `gossip_menu_id`= 6769 WHERE `entry`=13433; +UPDATE `creature_template` SET `npcflag`= 131, `gossip_menu_id`= 5181 WHERE `entry`=13434; +UPDATE `creature_template` SET `npcflag`= 131, `gossip_menu_id`= 5181 WHERE `entry`=13435; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 5521 WHERE `entry`=13697; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 5303 WHERE `entry`=13699; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 5349 WHERE `entry`=13716; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 5321 WHERE `entry`=13717; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6261 WHERE `entry`=13776; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6262 WHERE `entry`=13777; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 5441 WHERE `entry`=13840; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 5602 WHERE `entry`=14241; +UPDATE `creature_template` SET `npcflag`= 131, `gossip_menu_id`= 5721 WHERE `entry`=14322; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 5742 WHERE `entry`=14324; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 5667 WHERE `entry`=14338; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 5710 WHERE `entry`=14354; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 11738 WHERE `entry`=14395; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 5845 WHERE `entry`=14469; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 5868 WHERE `entry`=14527; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 5869 WHERE `entry`=14528; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 12293 WHERE `entry`=14625; +UPDATE `creature_template` SET `npcflag`= 131, `gossip_menu_id`= 11361 WHERE `entry`=14637; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6041 WHERE `entry`=14722; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6037 WHERE `entry`=14728; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6523 WHERE `entry`=14733; +UPDATE `creature_template` SET `npcflag`= 4227, `gossip_menu_id`= 6085 WHERE `entry`=14737; +UPDATE `creature_template` SET `npcflag`= 131, `gossip_menu_id`= 6083 WHERE `entry`=14738; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6524 WHERE `entry`=14781; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6213 WHERE `entry`=14842; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 6467 WHERE `entry`=14942; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 6460 WHERE `entry`=14981; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 6463 WHERE `entry`=14982; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6323 WHERE `entry`=14983; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6324 WHERE `entry`=14984; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 6470 WHERE `entry`=15006; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 6473 WHERE `entry`=15008; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6361 WHERE `entry`=15021; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6362 WHERE `entry`=15022; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 6484 WHERE `entry`=15106; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6476 WHERE `entry`=15116; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6534 WHERE `entry`=15170; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6533 WHERE `entry`=15171; +UPDATE `creature_template` SET `npcflag`= 4227, `gossip_menu_id`= 6527 WHERE `entry`=15176; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 12129 WHERE `entry`=15187; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 12125 WHERE `entry`=15188; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6544 WHERE `entry`=15190; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6539 WHERE `entry`=15192; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6596 WHERE `entry`=15194; +UPDATE `creature_template` SET `npcflag`= 129, `gossip_menu_id`= 6568 WHERE `entry`=15293; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6795 WHERE `entry`=15378; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6794 WHERE `entry`=15379; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6793 WHERE `entry`=15380; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7196 WHERE `entry`=15404; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7234 WHERE `entry`=15405; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6623 WHERE `entry`=15443; +UPDATE `creature_template` SET `npcflag`= 129, `gossip_menu_id`= 7048 WHERE `entry`=15471; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6925 WHERE `entry`=15499; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6644 WHERE `entry`=15502; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6645 WHERE `entry`=15503; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6655 WHERE `entry`=15504; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6687 WHERE `entry`=15612; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6926 WHERE `entry`=15613; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 6931 WHERE `entry`=15694; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 6933 WHERE `entry`=15719; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6802 WHERE `entry`=15732; +UPDATE `creature_template` SET `npcflag`= 131, `gossip_menu_id`= 6917 WHERE `entry`=15864; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 6923 WHERE `entry`=15903; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 6930 WHERE `entry`=15905; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 6929 WHERE `entry`=15906; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 6934 WHERE `entry`=15907; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 6932 WHERE `entry`=15908; +UPDATE `creature_template` SET `npcflag`= 4227, `gossip_menu_id`= 6924 WHERE `entry`=15909; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6937 WHERE `entry`=15920; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6938 WHERE `entry`=15921; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7140 WHERE `entry`=15939; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6943 WHERE `entry`=15969; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7479 WHERE `entry`=15970; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6981 WHERE `entry`=16002; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7083 WHERE `entry`=16014; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7091 WHERE `entry`=16031; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7054 WHERE `entry`=16075; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7097 WHERE `entry`=16115; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 7143 WHERE `entry`=16169; +UPDATE `creature_template` SET `npcflag`= 8195, `gossip_menu_id`= 7147 WHERE `entry`=16189; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7220 WHERE `entry`=16199; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7183 WHERE `entry`=16288; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 7215 WHERE `entry`=16365; +UPDATE `creature_template` SET `npcflag`= 4227, `gossip_menu_id`= 7435 WHERE `entry`=16388; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7236 WHERE `entry`=16399; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7239 WHERE `entry`=16417; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7237 WHERE `entry`=16418; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7304 WHERE `entry`=16514; +UPDATE `creature_template` SET `npcflag`= 4307, `gossip_menu_id`= 8760 WHERE `entry`=16583; +UPDATE `creature_template` SET `npcflag`= 66433, `gossip_menu_id`= 7290 WHERE `entry`=16602; +UPDATE `creature_template` SET `npcflag`= 131073, `gossip_menu_id`= 7811 WHERE `entry`=16615; +UPDATE `creature_template` SET `npcflag`= 131073, `gossip_menu_id`= 7811 WHERE `entry`=16616; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 8250 WHERE `entry`=16695; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 8256 WHERE `entry`=16696; +UPDATE `creature_template` SET `npcflag`= 81, `gossip_menu_id`= 8863 WHERE `entry`=16723; +UPDATE `creature_template` SET `npcflag`= 641, `gossip_menu_id`= 7396 WHERE `entry`=16798; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 8174 WHERE `entry`=16811; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 7421 WHERE `entry`=16812; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8178 WHERE `entry`=16813; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8177 WHERE `entry`=16815; +UPDATE `creature_template` SET `npcflag`= 3203, `gossip_menu_id`= 8002 WHERE `entry`=16829; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7351 WHERE `entry`=16830; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7328 WHERE `entry`=16832; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7392 WHERE `entry`=16833; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7390 WHERE `entry`=16834; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 7309 WHERE `entry`=16856; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8686 WHERE `entry`=17002; +UPDATE `creature_template` SET `npcflag`= 81, `gossip_menu_id`= 7337 WHERE `entry`=17005; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7358 WHERE `entry`=17092; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7381 WHERE `entry`=17099; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7362 WHERE `entry`=17100; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7367 WHERE `entry`=17106; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 7379 WHERE `entry`=17209; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7417 WHERE `entry`=17275; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7408 WHERE `entry`=17355; +UPDATE `creature_template` SET `npcflag`= 4225, `gossip_menu_id`= 7410 WHERE `entry`=17412; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7416 WHERE `entry`=17431; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7415 WHERE `entry`=17435; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7432 WHERE `entry`=17443; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7433 WHERE `entry`=17445; +UPDATE `creature_template` SET `npcflag`= 385, `gossip_menu_id`= 7431 WHERE `entry`=17446; +UPDATE `creature_template` SET `npcflag`= 129, `gossip_menu_id`= 7428 WHERE `entry`=17490; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 7441 WHERE `entry`=17603; +UPDATE `creature_template` SET `npcflag`= 131073, `gossip_menu_id`= 7812 WHERE `entry`=17631; +UPDATE `creature_template` SET `npcflag`= 131073, `gossip_menu_id`= 7812 WHERE `entry`=17632; +UPDATE `creature_template` SET `npcflag`= 83, `gossip_menu_id`= 7512 WHERE `entry`=17634; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7466 WHERE `entry`=17686; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 7552 WHERE `entry`=17772; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 7581 WHERE `entry`=17852; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 7706 WHERE `entry`=17948; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7613 WHERE `entry`=18007; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8019 WHERE `entry`=18063; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7619 WHERE `entry`=18066; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7622 WHERE `entry`=18067; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7623 WHERE `entry`=18068; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8236 WHERE `entry`=18098; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7627 WHERE `entry`=18106; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 7582 WHERE `entry`=18197; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7621 WHERE `entry`=18229; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8441 WHERE `entry`=18253; +UPDATE `creature_template` SET `npcflag`= 4225, `gossip_menu_id`= 7628 WHERE `entry`=18278; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7629 WHERE `entry`=18294; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7683 WHERE `entry`=18295; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7674 WHERE `entry`=18369; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7739 WHERE `entry`=18383; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7750 WHERE `entry`=18384; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 5181 WHERE `entry`=18385; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7749 WHERE `entry`=18386; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7686 WHERE `entry`=18407; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7687 WHERE `entry`=18414; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7688 WHERE `entry`=18415; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7697 WHERE `entry`=18447; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 7703 WHERE `entry`=18480; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7751 WHERE `entry`=18565; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7754 WHERE `entry`=18566; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 7730 WHERE `entry`=18586; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 7732 WHERE `entry`=18588; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7741 WHERE `entry`=18675; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7746 WHERE `entry`=18705; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7821 WHERE `entry`=18760; +UPDATE `creature_template` SET `npcflag`= 209, `gossip_menu_id`= 7820 WHERE `entry`=18775; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7838 WHERE `entry`=18816; +UPDATE `creature_template` SET `npcflag`= 145, `gossip_menu_id`= 10437 WHERE `entry`=18911; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 7859 WHERE `entry`=18985; +UPDATE `creature_template` SET `npcflag`= 4225, `gossip_menu_id`= 7883 WHERE `entry`=19001; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7891 WHERE `entry`=19035; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7936 WHERE `entry`=19133; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 7943 WHERE `entry`=19156; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 7944 WHERE `entry`=19158; +UPDATE `creature_template` SET `npcflag`= 81, `gossip_menu_id`= 8522 WHERE `entry`=19184; +UPDATE `creature_template` SET `npcflag`= 81, `gossip_menu_id`= 8460 WHERE `entry`=19185; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 7958 WHERE `entry`=19332; +UPDATE `creature_template` SET `npcflag`= 4227, `gossip_menu_id`= 8386 WHERE `entry`=19333; +UPDATE `creature_template` SET `npcflag`= 81, `gossip_menu_id`= 7809 WHERE `entry`=19341; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8029 WHERE `entry`=19417; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8112 WHERE `entry`=19467; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 8020 WHERE `entry`=19669; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8022 WHERE `entry`=19676; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8027 WHERE `entry`=19690; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 8028 WHERE `entry`=19693; +UPDATE `creature_template` SET `npcflag`= 129, `gossip_menu_id`= 8031 WHERE `entry`=19718; +UPDATE `creature_template` SET `npcflag`= 129, `gossip_menu_id`= 8035 WHERE `entry`=19772; +UPDATE `creature_template` SET `npcflag`= 129, `gossip_menu_id`= 8034 WHERE `entry`=19773; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8037 WHERE `entry`=19832; +UPDATE `creature_template` SET `npcflag`= 4225, `gossip_menu_id`= 8047 WHERE `entry`=19879; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 8075 WHERE `entry`=19905; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 8078 WHERE `entry`=19907; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 8077 WHERE `entry`=19908; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 8076 WHERE `entry`=19910; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8234 WHERE `entry`=19935; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 8258 WHERE `entry`=20118; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 8253 WHERE `entry`=20119; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 8257 WHERE `entry`=20120; +UPDATE `creature_template` SET `npcflag`= 81, `gossip_menu_id`= 9131 WHERE `entry`=20124; +UPDATE `creature_template` SET `npcflag`= 81, `gossip_menu_id`= 9132 WHERE `entry`=20125; +UPDATE `creature_template` SET `npcflag`= 4225, `gossip_menu_id`= 8094 WHERE `entry`=20231; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 8100 WHERE `entry`=20236; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 8261 WHERE `entry`=20269; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 8263 WHERE `entry`=20271; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 8264 WHERE `entry`=20272; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 8265 WHERE `entry`=20273; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 8262 WHERE `entry`=20274; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 8260 WHERE `entry`=20276; +UPDATE `creature_template` SET `npcflag`= 129, `gossip_menu_id`= 8124 WHERE `entry`=20278; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 8266 WHERE `entry`=20339; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 8267 WHERE `entry`=20395; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8127 WHERE `entry`=20518; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8214 WHERE `entry`=20780; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 7674 WHERE `entry`=20812; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8232 WHERE `entry`=21006; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8233 WHERE `entry`=21007; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8238 WHERE `entry`=21024; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8235 WHERE `entry`=21066; +UPDATE `creature_template` SET `npcflag`= 641, `gossip_menu_id`= 8243 WHERE `entry`=21145; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8271 WHERE `entry`=21277; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 8446 WHERE `entry`=21382; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 8446 WHERE `entry`=21383; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 8446 WHERE `entry`=21637; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 8349 WHERE `entry`=21684; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 8371 WHERE `entry`=21725; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 8356 WHERE `entry`=21727; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8383 WHERE `entry`=21772; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8449 WHERE `entry`=22024; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8500 WHERE `entry`=22211; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8555 WHERE `entry`=22278; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8559 WHERE `entry`=22364; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8526 WHERE `entry`=22370; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8535 WHERE `entry`=22420; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8536 WHERE `entry`=22423; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8554 WHERE `entry`=22432; +UPDATE `creature_template` SET `npcflag`= 81, `gossip_menu_id`= 8522 WHERE `entry`=22477; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 6484 WHERE `entry`=22647; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6261 WHERE `entry`=22736; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6262 WHERE `entry`=22759; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8567 WHERE `entry`=22836; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8614 WHERE `entry`=22919; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 8725 WHERE `entry`=23093; +UPDATE `creature_template` SET `npcflag`= 4225, `gossip_menu_id`= 8692 WHERE `entry`=23373; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 8749 WHERE `entry`=23410; +UPDATE `creature_template` SET `npcflag`= 129, `gossip_menu_id`= 8751 WHERE `entry`=23484; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 12517 WHERE `entry`=23566; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 8786 WHERE `entry`=23713; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 8799 WHERE `entry`=23790; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 9044 WHERE `entry`=23804; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 11387 WHERE `entry`=23872; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8853 WHERE `entry`=23888; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 8874 WHERE `entry`=23999; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 8927 WHERE `entry`=24001; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 8881 WHERE `entry`=24024; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8885 WHERE `entry`=24038; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8886 WHERE `entry`=24060; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8899 WHERE `entry`=24130; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8913 WHERE `entry`=24209; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 8763 WHERE `entry`=24519; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 9335 WHERE `entry`=24713; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 9004 WHERE `entry`=24727; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 9030 WHERE `entry`=24866; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 9035 WHERE `entry`=24881; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 9051 WHERE `entry`=24937; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 9088 WHERE `entry`=25088; +UPDATE `creature_template` SET `npcflag`= 81, `gossip_menu_id`= 9084 WHERE `entry`=25099; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 9111 WHERE `entry`=25108; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 9419 WHERE `entry`=25319; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 9517 WHERE `entry`=27398; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 10012 WHERE `entry`=28070; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 9744 WHERE `entry`=28107; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 12600 WHERE `entry`=28571; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 12598 WHERE `entry`=28572; +UPDATE `creature_template` SET `npcflag`= 4225, `gossip_menu_id`= 9755 WHERE `entry`=28943; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 9778 WHERE `entry`=29006; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 9774 WHERE `entry`=29146; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 9775 WHERE `entry`=29149; +UPDATE `creature_template` SET `npcflag`= 16385, `gossip_menu_id`= 9800 WHERE `entry`=29259; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9830 WHERE `entry`=29667; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9827 WHERE `entry`=29668; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9828 WHERE `entry`=29669; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9829 WHERE `entry`=29670; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9981 WHERE `entry`=29671; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9830 WHERE `entry`=29672; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9827 WHERE `entry`=29673; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9828 WHERE `entry`=29674; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9829 WHERE `entry`=29675; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9983 WHERE `entry`=29676; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 9854 WHERE `entry`=29937; +UPDATE `creature_template` SET `npcflag`= 129, `gossip_menu_id`= 1582 WHERE `entry`=29944; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 9883 WHERE `entry`=30217; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 8073 WHERE `entry`=30231; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 10193 WHERE `entry`=30247; +UPDATE `creature_template` SET `npcflag`= 131, `gossip_menu_id`= 10255 WHERE `entry`=30472; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 9915 WHERE `entry`=30481; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9981 WHERE `entry`=30566; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9983 WHERE `entry`=30567; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9981 WHERE `entry`=30578; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9981 WHERE `entry`=30579; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9981 WHERE `entry`=30580; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9981 WHERE `entry`=30581; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9983 WHERE `entry`=30582; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9983 WHERE `entry`=30583; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9983 WHERE `entry`=30584; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9983 WHERE `entry`=30586; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9981 WHERE `entry`=30587; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9983 WHERE `entry`=30590; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 10042 WHERE `entry`=30997; +UPDATE `creature_template` SET `npcflag`= 4227, `gossip_menu_id`= 10123 WHERE `entry`=31781; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6261 WHERE `entry`=31961; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 6484 WHERE `entry`=31979; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6262 WHERE `entry`=32076; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 10189 WHERE `entry`=32346; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 10194 WHERE `entry`=32401; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 10204 WHERE `entry`=32548; +UPDATE `creature_template` SET `npcflag`= 4227, `gossip_menu_id`= 10209 WHERE `entry`=32594; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9828 WHERE `entry`=32616; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9828 WHERE `entry`=32617; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9827 WHERE `entry`=32618; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9827 WHERE `entry`=32619; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9829 WHERE `entry`=32620; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9829 WHERE `entry`=32621; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9981 WHERE `entry`=32622; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9983 WHERE `entry`=32623; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9830 WHERE `entry`=32624; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 9830 WHERE `entry`=32625; +UPDATE `creature_template` SET `npcflag`= 131, `gossip_menu_id`= 10257 WHERE `entry`=32836; +UPDATE `creature_template` SET `npcflag`= 131, `gossip_menu_id`= 10257 WHERE `entry`=32837; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 10276 WHERE `entry`=33031; +UPDATE `creature_template` SET `npcflag`= 130, `gossip_menu_id`= 10318 WHERE `entry`=33238; +UPDATE `creature_template` SET `npcflag`= 130, `gossip_menu_id`= 10358 WHERE `entry`=33239; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 10380 WHERE `entry`=33361; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 10382 WHERE `entry`=33372; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 10379 WHERE `entry`=33373; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 10372 WHERE `entry`=33379; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 10381 WHERE `entry`=33403; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 10378 WHERE `entry`=33542; +UPDATE `creature_template` SET `npcflag`= 209, `gossip_menu_id`= 10363 WHERE `entry`=33634; +UPDATE `creature_template` SET `npcflag`= 209, `gossip_menu_id`= 10363 WHERE `entry`=33677; +UPDATE `creature_template` SET `npcflag`= 209, `gossip_menu_id`= 10408 WHERE `entry`=33996; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 34435 WHERE `entry`=34435; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 34435 WHERE `entry`=34476; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 34435 WHERE `entry`=34477; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 34435 WHERE `entry`=34478; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 34435 WHERE `entry`=34479; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 34435 WHERE `entry`=34480; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 34435 WHERE `entry`=34481; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 34435 WHERE `entry`=34482; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 34435 WHERE `entry`=34483; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 34435 WHERE `entry`=34484; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 10524 WHERE `entry`=34528; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 10601 WHERE `entry`=34948; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 10602 WHERE `entry`=34949; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 10601 WHERE `entry`=34950; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 10602 WHERE `entry`=34951; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 10601 WHERE `entry`=34952; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 10602 WHERE `entry`=34953; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 10602 WHERE `entry`=35017; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 10602 WHERE `entry`=35019; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 10602 WHERE `entry`=35020; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 10602 WHERE `entry`=35021; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 10602 WHERE `entry`=35022; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 10601 WHERE `entry`=35023; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 10601 WHERE `entry`=35024; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 10601 WHERE `entry`=35025; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 10601 WHERE `entry`=35026; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 10601 WHERE `entry`=35027; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 10641 WHERE `entry`=35087; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 10640 WHERE `entry`=35091; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 34435 WHERE `entry`=35243; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 34435 WHERE `entry`=35244; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 34435 WHERE `entry`=35246; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 34435 WHERE `entry`=35247; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 34435 WHERE `entry`=35248; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 34435 WHERE `entry`=35249; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 34435 WHERE `entry`=35250; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 34435 WHERE `entry`=35251; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 34435 WHERE `entry`=35252; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 34435 WHERE `entry`=35253; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 34435 WHERE `entry`=35254; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 34435 WHERE `entry`=35256; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 34435 WHERE `entry`=35258; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 34435 WHERE `entry`=35259; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 34435 WHERE `entry`=35260; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 34435 WHERE `entry`=35261; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 10660 WHERE `entry`=35462; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 10649 WHERE `entry`=35477; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 10668 WHERE `entry`=35646; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 10709 WHERE `entry`=36095; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 10710 WHERE `entry`=36097; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 10847 WHERE `entry`=36296; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 10932 WHERE `entry`=36990; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 10906 WHERE `entry`=36993; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 10933 WHERE `entry`=37200; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6261 WHERE `entry`=37279; +UPDATE `creature_template` SET `npcflag`= 1048577, `gossip_menu_id`= 6484 WHERE `entry`=37298; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 6262 WHERE `entry`=37397; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 37523 WHERE `entry`=37523; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 37552 WHERE `entry`=37552; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 10925 WHERE `entry`=37580; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 10925 WHERE `entry`=37581; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 10923 WHERE `entry`=37591; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 10971 WHERE `entry`=37596; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 10923 WHERE `entry`=37606; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 10925 WHERE `entry`=37614; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 10971 WHERE `entry`=37633; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 10992 WHERE `entry`=37742; +UPDATE `creature_template` SET `npcflag`= 8193, `gossip_menu_id`= 11152 WHERE `entry`=37915; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 11064 WHERE `entry`=38017; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 11007 WHERE `entry`=38208; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 11032 WHERE `entry`=38501; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 11032 WHERE `entry`=38717; +UPDATE `creature_template` SET `npcflag`= 3, `gossip_menu_id`= 11192 WHERE `entry`=39271; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 11206 WHERE `entry`=39372; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 11384 WHERE `entry`=40436; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 11386 WHERE `entry`=40438; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 11384 WHERE `entry`=40443; +UPDATE `creature_template` SET `npcflag`= 1, `gossip_menu_id`= 11393 WHERE `entry`=40478; + +DELETE FROM `battlemaster_entry` WHERE `entry` IN (32616, 32618, 32621, 32624); +INSERT INTO `battlemaster_entry` (`entry`, `bg_template`) VALUES (32616,1), (32618,3), (32621,7), (32624,2); diff --git a/sql/updates/world/2015_05_30_02_world.sql b/sql/updates/world/2015_05_30_02_world.sql new file mode 100644 index 00000000000..0dd7eb3bcab --- /dev/null +++ b/sql/updates/world/2015_05_30_02_world.sql @@ -0,0 +1,2186 @@ +-- +UPDATE `npc_text` SET `BroadcastTextID0`= 1338 WHERE `ID`= 17805; +UPDATE `npc_text` SET `BroadcastTextID0`= 1338 WHERE `ID`= 17804; +UPDATE `npc_text` SET `BroadcastTextID0`= 2503 WHERE `ID`= 17800; +UPDATE `npc_text` SET `BroadcastTextID0`= 2524 WHERE `ID`= 17800; +UPDATE `npc_text` SET `BroadcastTextID0`= 2528 WHERE `ID`= 17800; +UPDATE `npc_text` SET `BroadcastTextID0`= 7070 WHERE `ID`= 17759; +UPDATE `npc_text` SET `BroadcastTextID0`= 7456 WHERE `ID`= 17615; +UPDATE `npc_text` SET `BroadcastTextID0`= 7457 WHERE `ID`= 17616; +UPDATE `npc_text` SET `BroadcastTextID0`= 7647 WHERE `ID`= 18169; +UPDATE `npc_text` SET `BroadcastTextID0`= 7652 WHERE `ID`= 17805; +UPDATE `npc_text` SET `BroadcastTextID0`= 7652 WHERE `ID`= 17804; +UPDATE `npc_text` SET `BroadcastTextID0`= 9531 WHERE `ID`= 16756; +UPDATE `npc_text` SET `BroadcastTextID0`= 10783 WHERE `ID`= 17749; +UPDATE `npc_text` SET `BroadcastTextID0`= 10783 WHERE `ID`= 16964; +UPDATE `npc_text` SET `BroadcastTextID0`= 12033 WHERE `ID`= 17805; +UPDATE `npc_text` SET `BroadcastTextID0`= 12033 WHERE `ID`= 17804; +UPDATE `npc_text` SET `BroadcastTextID0`= 13089 WHERE `ID`= 15672; +UPDATE `npc_text` SET `BroadcastTextID0`= 14192 WHERE `ID`= 18163; +UPDATE `npc_text` SET `BroadcastTextID0`= 14763 WHERE `ID`= 18166; +UPDATE `npc_text` SET `BroadcastTextID0`= 14765 WHERE `ID`= 18162; +UPDATE `npc_text` SET `BroadcastTextID0`= 14766 WHERE `ID`= 18176; +UPDATE `npc_text` SET `BroadcastTextID0`= 14768 WHERE `ID`= 18168; +UPDATE `npc_text` SET `BroadcastTextID0`= 14773 WHERE `ID`= 18172; +UPDATE `npc_text` SET `BroadcastTextID0`= 17969 WHERE `ID`= 17774; +UPDATE `npc_text` SET `BroadcastTextID0`= 20788 WHERE `ID`= 17805; +UPDATE `npc_text` SET `BroadcastTextID0`= 20788 WHERE `ID`= 17804; +UPDATE `npc_text` SET `BroadcastTextID0`= 25092 WHERE `ID`= 17235; +UPDATE `npc_text` SET `BroadcastTextID0`= 25383 WHERE `ID`= 17805; +UPDATE `npc_text` SET `BroadcastTextID0`= 25383 WHERE `ID`= 17804; +UPDATE `npc_text` SET `BroadcastTextID0`= 26965 WHERE `ID`= 19058; +UPDATE `npc_text` SET `BroadcastTextID0`= 27318 WHERE `ID`= 17805; +UPDATE `npc_text` SET `BroadcastTextID0`= 27318 WHERE `ID`= 17804; +UPDATE `npc_text` SET `BroadcastTextID0`= 27770 WHERE `ID`= 17805; +UPDATE `npc_text` SET `BroadcastTextID0`= 27770 WHERE `ID`= 17804; +UPDATE `npc_text` SET `BroadcastTextID0`= 30147 WHERE `ID`= 17749; +UPDATE `npc_text` SET `BroadcastTextID0`= 30147 WHERE `ID`= 16964; +UPDATE `npc_text` SET `BroadcastTextID0`= 30864 WHERE `ID`= 18321; +UPDATE `npc_text` SET `BroadcastTextID0`= 30864 WHERE `ID`= 18322; +UPDATE `npc_text` SET `BroadcastTextID0`= 31370 WHERE `ID`= 18160; +UPDATE `npc_text` SET `BroadcastTextID0`= 31371 WHERE `ID`= 17800; +UPDATE `npc_text` SET `BroadcastTextID0`= 32778 WHERE `ID`= 18321; +UPDATE `npc_text` SET `BroadcastTextID0`= 32778 WHERE `ID`= 18322; +UPDATE `npc_text` SET `BroadcastTextID0`= 32779 WHERE `ID`= 18321; +UPDATE `npc_text` SET `BroadcastTextID0`= 32779 WHERE `ID`= 18322; +UPDATE `npc_text` SET `BroadcastTextID0`= 32780 WHERE `ID`= 18321; +UPDATE `npc_text` SET `BroadcastTextID0`= 32780 WHERE `ID`= 18322; +UPDATE `npc_text` SET `BroadcastTextID0`= 35133 WHERE `ID`= 15599; +UPDATE `npc_text` SET `BroadcastTextID0`= 38398 WHERE `ID`= 18959; +UPDATE `npc_text` SET `BroadcastTextID0`= 38398 WHERE `ID`= 16536; +UPDATE `npc_text` SET `BroadcastTextID0`= 38470 WHERE `ID`= 17235; +UPDATE `npc_text` SET `BroadcastTextID0`= 38871 WHERE `ID`= 17805; +UPDATE `npc_text` SET `BroadcastTextID0`= 38871 WHERE `ID`= 17804; +UPDATE `npc_text` SET `BroadcastTextID0`= 39206 WHERE `ID`= 15544; +UPDATE `npc_text` SET `BroadcastTextID0`= 39207 WHERE `ID`= 15545; +UPDATE `npc_text` SET `BroadcastTextID0`= 39271 WHERE `ID`= 15569; +UPDATE `npc_text` SET `BroadcastTextID0`= 39307 WHERE `ID`= 15575; +UPDATE `npc_text` SET `BroadcastTextID0`= 39342 WHERE `ID`= 15585; +UPDATE `npc_text` SET `BroadcastTextID0`= 39343 WHERE `ID`= 15586; +UPDATE `npc_text` SET `BroadcastTextID0`= 39345 WHERE `ID`= 15588; +UPDATE `npc_text` SET `BroadcastTextID0`= 39346 WHERE `ID`= 15589; +UPDATE `npc_text` SET `BroadcastTextID0`= 39347 WHERE `ID`= 15590; +UPDATE `npc_text` SET `BroadcastTextID0`= 39376 WHERE `ID`= 15597; +UPDATE `npc_text` SET `BroadcastTextID0`= 39377 WHERE `ID`= 15598; +UPDATE `npc_text` SET `BroadcastTextID0`= 39378 WHERE `ID`= 15599; +UPDATE `npc_text` SET `BroadcastTextID0`= 39442 WHERE `ID`= 15612; +UPDATE `npc_text` SET `BroadcastTextID0`= 39478 WHERE `ID`= 15620; +UPDATE `npc_text` SET `BroadcastTextID0`= 39482 WHERE `ID`= 15623; +UPDATE `npc_text` SET `BroadcastTextID0`= 39485 WHERE `ID`= 15626; +UPDATE `npc_text` SET `BroadcastTextID0`= 39486 WHERE `ID`= 15627; +UPDATE `npc_text` SET `BroadcastTextID0`= 39487 WHERE `ID`= 15628; +UPDATE `npc_text` SET `BroadcastTextID0`= 39489 WHERE `ID`= 15629; +UPDATE `npc_text` SET `BroadcastTextID0`= 39490 WHERE `ID`= 15630; +UPDATE `npc_text` SET `BroadcastTextID0`= 39491 WHERE `ID`= 15631; +UPDATE `npc_text` SET `BroadcastTextID0`= 39492 WHERE `ID`= 15632; +UPDATE `npc_text` SET `BroadcastTextID0`= 39510 WHERE `ID`= 15639; +UPDATE `npc_text` SET `BroadcastTextID0`= 39520 WHERE `ID`= 15642; +UPDATE `npc_text` SET `BroadcastTextID0`= 39521 WHERE `ID`= 15643; +UPDATE `npc_text` SET `BroadcastTextID0`= 39531 WHERE `ID`= 15648; +UPDATE `npc_text` SET `BroadcastTextID0`= 39532 WHERE `ID`= 15649; +UPDATE `npc_text` SET `BroadcastTextID0`= 39534 WHERE `ID`= 15651; +UPDATE `npc_text` SET `BroadcastTextID0`= 39580 WHERE `ID`= 15661; +UPDATE `npc_text` SET `BroadcastTextID0`= 39582 WHERE `ID`= 15662; +UPDATE `npc_text` SET `BroadcastTextID0`= 39590 WHERE `ID`= 15664; +UPDATE `npc_text` SET `BroadcastTextID0`= 39591 WHERE `ID`= 15665; +UPDATE `npc_text` SET `BroadcastTextID0`= 39593 WHERE `ID`= 15667; +UPDATE `npc_text` SET `BroadcastTextID0`= 39597 WHERE `ID`= 15669; +UPDATE `npc_text` SET `BroadcastTextID0`= 39599 WHERE `ID`= 15670; +UPDATE `npc_text` SET `BroadcastTextID0`= 39601 WHERE `ID`= 15672; +UPDATE `npc_text` SET `BroadcastTextID0`= 39606 WHERE `ID`= 15677; +UPDATE `npc_text` SET `BroadcastTextID0`= 39608 WHERE `ID`= 15679; +UPDATE `npc_text` SET `BroadcastTextID0`= 39609 WHERE `ID`= 15680; +UPDATE `npc_text` SET `BroadcastTextID0`= 39610 WHERE `ID`= 15681; +UPDATE `npc_text` SET `BroadcastTextID0`= 39612 WHERE `ID`= 15683; +UPDATE `npc_text` SET `BroadcastTextID0`= 39613 WHERE `ID`= 15684; +UPDATE `npc_text` SET `BroadcastTextID0`= 39614 WHERE `ID`= 15685; +UPDATE `npc_text` SET `BroadcastTextID0`= 39615 WHERE `ID`= 15686; +UPDATE `npc_text` SET `BroadcastTextID0`= 39616 WHERE `ID`= 15687; +UPDATE `npc_text` SET `BroadcastTextID0`= 39617 WHERE `ID`= 15688; +UPDATE `npc_text` SET `BroadcastTextID0`= 39618 WHERE `ID`= 15689; +UPDATE `npc_text` SET `BroadcastTextID0`= 39619 WHERE `ID`= 15690; +UPDATE `npc_text` SET `BroadcastTextID0`= 39620 WHERE `ID`= 15691; +UPDATE `npc_text` SET `BroadcastTextID0`= 39621 WHERE `ID`= 15692; +UPDATE `npc_text` SET `BroadcastTextID0`= 39624 WHERE `ID`= 15695; +UPDATE `npc_text` SET `BroadcastTextID0`= 39625 WHERE `ID`= 15696; +UPDATE `npc_text` SET `BroadcastTextID0`= 39634 WHERE `ID`= 15698; +UPDATE `npc_text` SET `BroadcastTextID0`= 39635 WHERE `ID`= 15699; +UPDATE `npc_text` SET `BroadcastTextID0`= 39636 WHERE `ID`= 15700; +UPDATE `npc_text` SET `BroadcastTextID0`= 39642 WHERE `ID`= 16465; +UPDATE `npc_text` SET `BroadcastTextID0`= 39714 WHERE `ID`= 15711; +UPDATE `npc_text` SET `BroadcastTextID0`= 39738 WHERE `ID`= 15717; +UPDATE `npc_text` SET `BroadcastTextID0`= 39758 WHERE `ID`= 15725; +UPDATE `npc_text` SET `BroadcastTextID0`= 39765 WHERE `ID`= 15730; +UPDATE `npc_text` SET `BroadcastTextID0`= 39766 WHERE `ID`= 15732; +UPDATE `npc_text` SET `BroadcastTextID0`= 39768 WHERE `ID`= 15733; +UPDATE `npc_text` SET `BroadcastTextID0`= 39776 WHERE `ID`= 15734; +UPDATE `npc_text` SET `BroadcastTextID0`= 39778 WHERE `ID`= 15735; +UPDATE `npc_text` SET `BroadcastTextID0`= 39805 WHERE `ID`= 15737; +UPDATE `npc_text` SET `BroadcastTextID0`= 39806 WHERE `ID`= 15738; +UPDATE `npc_text` SET `BroadcastTextID0`= 39811 WHERE `ID`= 15740; +UPDATE `npc_text` SET `BroadcastTextID0`= 39812 WHERE `ID`= 15741; +UPDATE `npc_text` SET `BroadcastTextID0`= 39814 WHERE `ID`= 15742; +UPDATE `npc_text` SET `BroadcastTextID0`= 39838 WHERE `ID`= 15749; +UPDATE `npc_text` SET `BroadcastTextID0`= 39840 WHERE `ID`= 15750; +UPDATE `npc_text` SET `BroadcastTextID0`= 39921 WHERE `ID`= 15755; +UPDATE `npc_text` SET `BroadcastTextID0`= 39927 WHERE `ID`= 15756; +UPDATE `npc_text` SET `BroadcastTextID0`= 39983 WHERE `ID`= 15769; +UPDATE `npc_text` SET `BroadcastTextID0`= 39989 WHERE `ID`= 15771; +UPDATE `npc_text` SET `BroadcastTextID0`= 39995 WHERE `ID`= 15772; +UPDATE `npc_text` SET `BroadcastTextID0`= 40011 WHERE `ID`= 15778; +UPDATE `npc_text` SET `BroadcastTextID0`= 40014 WHERE `ID`= 15780; +UPDATE `npc_text` SET `BroadcastTextID0`= 40018 WHERE `ID`= 15782; +UPDATE `npc_text` SET `BroadcastTextID0`= 40023 WHERE `ID`= 15783; +UPDATE `npc_text` SET `BroadcastTextID0`= 40024 WHERE `ID`= 15784; +UPDATE `npc_text` SET `BroadcastTextID0`= 40029 WHERE `ID`= 15785; +UPDATE `npc_text` SET `BroadcastTextID0`= 40129 WHERE `ID`= 15794; +UPDATE `npc_text` SET `BroadcastTextID0`= 40209 WHERE `ID`= 15807; +UPDATE `npc_text` SET `BroadcastTextID0`= 40211 WHERE `ID`= 15808; +UPDATE `npc_text` SET `BroadcastTextID0`= 40237 WHERE `ID`= 15815; +UPDATE `npc_text` SET `BroadcastTextID0`= 40238 WHERE `ID`= 15819; +UPDATE `npc_text` SET `BroadcastTextID0`= 40245 WHERE `ID`= 15820; +UPDATE `npc_text` SET `BroadcastTextID0`= 40255 WHERE `ID`= 15818; +UPDATE `npc_text` SET `BroadcastTextID0`= 40284 WHERE `ID`= 15827; +UPDATE `npc_text` SET `BroadcastTextID0`= 40289 WHERE `ID`= 15829; +UPDATE `npc_text` SET `BroadcastTextID0`= 40306 WHERE `ID`= 15834; +UPDATE `npc_text` SET `BroadcastTextID0`= 40383 WHERE `ID`= 15845; +UPDATE `npc_text` SET `BroadcastTextID0`= 40398 WHERE `ID`= 15848; +UPDATE `npc_text` SET `BroadcastTextID0`= 40400 WHERE `ID`= 15849; +UPDATE `npc_text` SET `BroadcastTextID0`= 40414 WHERE `ID`= 15852; +UPDATE `npc_text` SET `BroadcastTextID0`= 40469 WHERE `ID`= 15874; +UPDATE `npc_text` SET `BroadcastTextID0`= 40485 WHERE `ID`= 15878; +UPDATE `npc_text` SET `BroadcastTextID0`= 40496 WHERE `ID`= 15880; +UPDATE `npc_text` SET `BroadcastTextID0`= 40500 WHERE `ID`= 15881; +UPDATE `npc_text` SET `BroadcastTextID0`= 40501 WHERE `ID`= 15882; +UPDATE `npc_text` SET `BroadcastTextID0`= 40515 WHERE `ID`= 15886; +UPDATE `npc_text` SET `BroadcastTextID0`= 40516 WHERE `ID`= 15887; +UPDATE `npc_text` SET `BroadcastTextID0`= 40521 WHERE `ID`= 15890; +UPDATE `npc_text` SET `BroadcastTextID0`= 40523 WHERE `ID`= 15892; +UPDATE `npc_text` SET `BroadcastTextID0`= 40524 WHERE `ID`= 15893; +UPDATE `npc_text` SET `BroadcastTextID0`= 40543 WHERE `ID`= 15896; +UPDATE `npc_text` SET `BroadcastTextID0`= 40544 WHERE `ID`= 15897; +UPDATE `npc_text` SET `BroadcastTextID0`= 40547 WHERE `ID`= 15898; +UPDATE `npc_text` SET `BroadcastTextID0`= 40548 WHERE `ID`= 15899; +UPDATE `npc_text` SET `BroadcastTextID0`= 40553 WHERE `ID`= 15901; +UPDATE `npc_text` SET `BroadcastTextID0`= 40596 WHERE `ID`= 15908; +UPDATE `npc_text` SET `BroadcastTextID0`= 40617 WHERE `ID`= 15909; +UPDATE `npc_text` SET `BroadcastTextID0`= 40622 WHERE `ID`= 15911; +UPDATE `npc_text` SET `BroadcastTextID0`= 40644 WHERE `ID`= 15914; +UPDATE `npc_text` SET `BroadcastTextID0`= 40646 WHERE `ID`= 15915; +UPDATE `npc_text` SET `BroadcastTextID0`= 40650 WHERE `ID`= 15918; +UPDATE `npc_text` SET `BroadcastTextID0`= 40656 WHERE `ID`= 15920; +UPDATE `npc_text` SET `BroadcastTextID0`= 40729 WHERE `ID`= 15931; +UPDATE `npc_text` SET `BroadcastTextID0`= 40749 WHERE `ID`= 15935; +UPDATE `npc_text` SET `BroadcastTextID0`= 40803 WHERE `ID`= 15943; +UPDATE `npc_text` SET `BroadcastTextID0`= 40897 WHERE `ID`= 15952; +UPDATE `npc_text` SET `BroadcastTextID0`= 40898 WHERE `ID`= 15953; +UPDATE `npc_text` SET `BroadcastTextID0`= 40899 WHERE `ID`= 15954; +UPDATE `npc_text` SET `BroadcastTextID0`= 40900 WHERE `ID`= 15955; +UPDATE `npc_text` SET `BroadcastTextID0`= 40901 WHERE `ID`= 15956; +UPDATE `npc_text` SET `BroadcastTextID0`= 40939 WHERE `ID`= 15962; +UPDATE `npc_text` SET `BroadcastTextID0`= 40982 WHERE `ID`= 15970; +UPDATE `npc_text` SET `BroadcastTextID0`= 40985 WHERE `ID`= 15972; +UPDATE `npc_text` SET `BroadcastTextID0`= 40989 WHERE `ID`= 15973; +UPDATE `npc_text` SET `BroadcastTextID0`= 40994 WHERE `ID`= 15974; +UPDATE `npc_text` SET `BroadcastTextID0`= 41042 WHERE `ID`= 15979; +UPDATE `npc_text` SET `BroadcastTextID0`= 41054 WHERE `ID`= 15981; +UPDATE `npc_text` SET `BroadcastTextID0`= 41109 WHERE `ID`= 15991; +UPDATE `npc_text` SET `BroadcastTextID0`= 41134 WHERE `ID`= 15998; +UPDATE `npc_text` SET `BroadcastTextID0`= 41137 WHERE `ID`= 16001; +UPDATE `npc_text` SET `BroadcastTextID0`= 41138 WHERE `ID`= 16002; +UPDATE `npc_text` SET `BroadcastTextID0`= 41140 WHERE `ID`= 16004; +UPDATE `npc_text` SET `BroadcastTextID0`= 41151 WHERE `ID`= 16008; +UPDATE `npc_text` SET `BroadcastTextID0`= 41192 WHERE `ID`= 16014; +UPDATE `npc_text` SET `BroadcastTextID0`= 41196 WHERE `ID`= 16015; +UPDATE `npc_text` SET `BroadcastTextID0`= 41199 WHERE `ID`= 16016; +UPDATE `npc_text` SET `BroadcastTextID0`= 41212 WHERE `ID`= 16018; +UPDATE `npc_text` SET `BroadcastTextID0`= 41214 WHERE `ID`= 16019; +UPDATE `npc_text` SET `BroadcastTextID0`= 41231 WHERE `ID`= 16022; +UPDATE `npc_text` SET `BroadcastTextID0`= 41254 WHERE `ID`= 16024; +UPDATE `npc_text` SET `BroadcastTextID0`= 41255 WHERE `ID`= 16025; +UPDATE `npc_text` SET `BroadcastTextID0`= 41296 WHERE `ID`= 16031; +UPDATE `npc_text` SET `BroadcastTextID0`= 41297 WHERE `ID`= 16032; +UPDATE `npc_text` SET `BroadcastTextID0`= 41298 WHERE `ID`= 16032; +UPDATE `npc_text` SET `BroadcastTextID0`= 41300 WHERE `ID`= 16033; +UPDATE `npc_text` SET `BroadcastTextID0`= 41303 WHERE `ID`= 16034; +UPDATE `npc_text` SET `BroadcastTextID0`= 41304 WHERE `ID`= 16035; +UPDATE `npc_text` SET `BroadcastTextID0`= 41332 WHERE `ID`= 16046; +UPDATE `npc_text` SET `BroadcastTextID0`= 41333 WHERE `ID`= 16047; +UPDATE `npc_text` SET `BroadcastTextID0`= 41341 WHERE `ID`= 16050; +UPDATE `npc_text` SET `BroadcastTextID0`= 41342 WHERE `ID`= 16051; +UPDATE `npc_text` SET `BroadcastTextID0`= 41354 WHERE `ID`= 16053; +UPDATE `npc_text` SET `BroadcastTextID0`= 41355 WHERE `ID`= 16054; +UPDATE `npc_text` SET `BroadcastTextID0`= 41361 WHERE `ID`= 16058; +UPDATE `npc_text` SET `BroadcastTextID0`= 41364 WHERE `ID`= 16060; +UPDATE `npc_text` SET `BroadcastTextID0`= 41367 WHERE `ID`= 16061; +UPDATE `npc_text` SET `BroadcastTextID0`= 41369 WHERE `ID`= 16062; +UPDATE `npc_text` SET `BroadcastTextID0`= 41371 WHERE `ID`= 16063; +UPDATE `npc_text` SET `BroadcastTextID0`= 41374 WHERE `ID`= 16064; +UPDATE `npc_text` SET `BroadcastTextID0`= 41375 WHERE `ID`= 16065; +UPDATE `npc_text` SET `BroadcastTextID0`= 41377 WHERE `ID`= 16066; +UPDATE `npc_text` SET `BroadcastTextID0`= 41379 WHERE `ID`= 16067; +UPDATE `npc_text` SET `BroadcastTextID0`= 41393 WHERE `ID`= 16069; +UPDATE `npc_text` SET `BroadcastTextID0`= 41394 WHERE `ID`= 16070; +UPDATE `npc_text` SET `BroadcastTextID0`= 41411 WHERE `ID`= 16074; +UPDATE `npc_text` SET `BroadcastTextID0`= 41412 WHERE `ID`= 16075; +UPDATE `npc_text` SET `BroadcastTextID0`= 41413 WHERE `ID`= 16076; +UPDATE `npc_text` SET `BroadcastTextID0`= 41416 WHERE `ID`= 16077; +UPDATE `npc_text` SET `BroadcastTextID0`= 41417 WHERE `ID`= 16078; +UPDATE `npc_text` SET `BroadcastTextID0`= 41466 WHERE `ID`= 16084; +UPDATE `npc_text` SET `BroadcastTextID0`= 41470 WHERE `ID`= 16085; +UPDATE `npc_text` SET `BroadcastTextID0`= 41508 WHERE `ID`= 16090; +UPDATE `npc_text` SET `BroadcastTextID0`= 41543 WHERE `ID`= 16094; +UPDATE `npc_text` SET `BroadcastTextID0`= 41558 WHERE `ID`= 16095; +UPDATE `npc_text` SET `BroadcastTextID0`= 41582 WHERE `ID`= 16099; +UPDATE `npc_text` SET `BroadcastTextID0`= 41587 WHERE `ID`= 16100; +UPDATE `npc_text` SET `BroadcastTextID0`= 41620 WHERE `ID`= 16101; +UPDATE `npc_text` SET `BroadcastTextID0`= 41659 WHERE `ID`= 16105; +UPDATE `npc_text` SET `BroadcastTextID0`= 41661 WHERE `ID`= 16106; +UPDATE `npc_text` SET `BroadcastTextID0`= 41663 WHERE `ID`= 16107; +UPDATE `npc_text` SET `BroadcastTextID0`= 41675 WHERE `ID`= 16113; +UPDATE `npc_text` SET `BroadcastTextID0`= 41676 WHERE `ID`= 16114; +UPDATE `npc_text` SET `BroadcastTextID0`= 41677 WHERE `ID`= 16111; +UPDATE `npc_text` SET `BroadcastTextID0`= 41679 WHERE `ID`= 16112; +UPDATE `npc_text` SET `BroadcastTextID0`= 41680 WHERE `ID`= 16115; +UPDATE `npc_text` SET `BroadcastTextID0`= 41681 WHERE `ID`= 16116; +UPDATE `npc_text` SET `BroadcastTextID0`= 41686 WHERE `ID`= 16123; +UPDATE `npc_text` SET `BroadcastTextID0`= 41687 WHERE `ID`= 16124; +UPDATE `npc_text` SET `BroadcastTextID0`= 41702 WHERE `ID`= 16126; +UPDATE `npc_text` SET `BroadcastTextID0`= 41706 WHERE `ID`= 16127; +UPDATE `npc_text` SET `BroadcastTextID0`= 41708 WHERE `ID`= 16128; +UPDATE `npc_text` SET `BroadcastTextID0`= 41710 WHERE `ID`= 16129; +UPDATE `npc_text` SET `BroadcastTextID0`= 41712 WHERE `ID`= 16130; +UPDATE `npc_text` SET `BroadcastTextID0`= 41715 WHERE `ID`= 16131; +UPDATE `npc_text` SET `BroadcastTextID0`= 41717 WHERE `ID`= 16132; +UPDATE `npc_text` SET `BroadcastTextID0`= 41758 WHERE `ID`= 16138; +UPDATE `npc_text` SET `BroadcastTextID0`= 41766 WHERE `ID`= 16142; +UPDATE `npc_text` SET `BroadcastTextID0`= 41767 WHERE `ID`= 16143; +UPDATE `npc_text` SET `BroadcastTextID0`= 41768 WHERE `ID`= 16144; +UPDATE `npc_text` SET `BroadcastTextID0`= 41797 WHERE `ID`= 16149; +UPDATE `npc_text` SET `BroadcastTextID0`= 41899 WHERE `ID`= 16164; +UPDATE `npc_text` SET `BroadcastTextID0`= 41916 WHERE `ID`= 16165; +UPDATE `npc_text` SET `BroadcastTextID0`= 41917 WHERE `ID`= 16166; +UPDATE `npc_text` SET `BroadcastTextID0`= 41918 WHERE `ID`= 16167; +UPDATE `npc_text` SET `BroadcastTextID0`= 41919 WHERE `ID`= 16168; +UPDATE `npc_text` SET `BroadcastTextID0`= 41920 WHERE `ID`= 16169; +UPDATE `npc_text` SET `BroadcastTextID0`= 41921 WHERE `ID`= 16170; +UPDATE `npc_text` SET `BroadcastTextID0`= 41922 WHERE `ID`= 16171; +UPDATE `npc_text` SET `BroadcastTextID0`= 41923 WHERE `ID`= 16172; +UPDATE `npc_text` SET `BroadcastTextID0`= 41933 WHERE `ID`= 16173; +UPDATE `npc_text` SET `BroadcastTextID0`= 41949 WHERE `ID`= 16178; +UPDATE `npc_text` SET `BroadcastTextID0`= 41980 WHERE `ID`= 16179; +UPDATE `npc_text` SET `BroadcastTextID0`= 41990 WHERE `ID`= 16180; +UPDATE `npc_text` SET `BroadcastTextID0`= 41991 WHERE `ID`= 16181; +UPDATE `npc_text` SET `BroadcastTextID0`= 41992 WHERE `ID`= 16182; +UPDATE `npc_text` SET `BroadcastTextID0`= 41993 WHERE `ID`= 16183; +UPDATE `npc_text` SET `BroadcastTextID0`= 41994 WHERE `ID`= 16184; +UPDATE `npc_text` SET `BroadcastTextID0`= 41995 WHERE `ID`= 16185; +UPDATE `npc_text` SET `BroadcastTextID0`= 41996 WHERE `ID`= 16186; +UPDATE `npc_text` SET `BroadcastTextID0`= 41997 WHERE `ID`= 16187; +UPDATE `npc_text` SET `BroadcastTextID0`= 42001 WHERE `ID`= 16188; +UPDATE `npc_text` SET `BroadcastTextID0`= 42027 WHERE `ID`= 16189; +UPDATE `npc_text` SET `BroadcastTextID0`= 42031 WHERE `ID`= 16190; +UPDATE `npc_text` SET `BroadcastTextID0`= 42041 WHERE `ID`= 16829; +UPDATE `npc_text` SET `BroadcastTextID0`= 42078 WHERE `ID`= 16192; +UPDATE `npc_text` SET `BroadcastTextID0`= 42081 WHERE `ID`= 16193; +UPDATE `npc_text` SET `BroadcastTextID0`= 42082 WHERE `ID`= 16194; +UPDATE `npc_text` SET `BroadcastTextID0`= 42086 WHERE `ID`= 16197; +UPDATE `npc_text` SET `BroadcastTextID0`= 42087 WHERE `ID`= 16200; +UPDATE `npc_text` SET `BroadcastTextID0`= 42088 WHERE `ID`= 16199; +UPDATE `npc_text` SET `BroadcastTextID0`= 42102 WHERE `ID`= 16202; +UPDATE `npc_text` SET `BroadcastTextID0`= 42107 WHERE `ID`= 16203; +UPDATE `npc_text` SET `BroadcastTextID0`= 42172 WHERE `ID`= 16211; +UPDATE `npc_text` SET `BroadcastTextID0`= 42220 WHERE `ID`= 16214; +UPDATE `npc_text` SET `BroadcastTextID0`= 42232 WHERE `ID`= 16216; +UPDATE `npc_text` SET `BroadcastTextID0`= 42236 WHERE `ID`= 16220; +UPDATE `npc_text` SET `BroadcastTextID0`= 42289 WHERE `ID`= 16231; +UPDATE `npc_text` SET `BroadcastTextID0`= 42316 WHERE `ID`= 16234; +UPDATE `npc_text` SET `BroadcastTextID0`= 42325 WHERE `ID`= 16236; +UPDATE `npc_text` SET `BroadcastTextID0`= 42326 WHERE `ID`= 16237; +UPDATE `npc_text` SET `BroadcastTextID0`= 42327 WHERE `ID`= 16238; +UPDATE `npc_text` SET `BroadcastTextID0`= 42328 WHERE `ID`= 16239; +UPDATE `npc_text` SET `BroadcastTextID0`= 42337 WHERE `ID`= 16241; +UPDATE `npc_text` SET `BroadcastTextID0`= 42365 WHERE `ID`= 16250; +UPDATE `npc_text` SET `BroadcastTextID0`= 42448 WHERE `ID`= 16256; +UPDATE `npc_text` SET `BroadcastTextID0`= 42455 WHERE `ID`= 16258; +UPDATE `npc_text` SET `BroadcastTextID0`= 42460 WHERE `ID`= 16260; +UPDATE `npc_text` SET `BroadcastTextID0`= 42467 WHERE `ID`= 16262; +UPDATE `npc_text` SET `BroadcastTextID0`= 42482 WHERE `ID`= 16264; +UPDATE `npc_text` SET `BroadcastTextID0`= 42485 WHERE `ID`= 16265; +UPDATE `npc_text` SET `BroadcastTextID0`= 42499 WHERE `ID`= 16272; +UPDATE `npc_text` SET `BroadcastTextID0`= 42596 WHERE `ID`= 16280; +UPDATE `npc_text` SET `BroadcastTextID0`= 42614 WHERE `ID`= 16284; +UPDATE `npc_text` SET `BroadcastTextID0`= 42617 WHERE `ID`= 16285; +UPDATE `npc_text` SET `BroadcastTextID0`= 42632 WHERE `ID`= 16288; +UPDATE `npc_text` SET `BroadcastTextID0`= 42667 WHERE `ID`= 16293; +UPDATE `npc_text` SET `BroadcastTextID0`= 42720 WHERE `ID`= 16297; +UPDATE `npc_text` SET `BroadcastTextID0`= 42721 WHERE `ID`= 16298; +UPDATE `npc_text` SET `BroadcastTextID0`= 42744 WHERE `ID`= 16303; +UPDATE `npc_text` SET `BroadcastTextID0`= 42754 WHERE `ID`= 16305; +UPDATE `npc_text` SET `BroadcastTextID0`= 42789 WHERE `ID`= 16311; +UPDATE `npc_text` SET `BroadcastTextID0`= 42791 WHERE `ID`= 16312; +UPDATE `npc_text` SET `BroadcastTextID0`= 42794 WHERE `ID`= 16313; +UPDATE `npc_text` SET `BroadcastTextID0`= 42851 WHERE `ID`= 16319; +UPDATE `npc_text` SET `BroadcastTextID0`= 42852 WHERE `ID`= 16320; +UPDATE `npc_text` SET `BroadcastTextID0`= 42857 WHERE `ID`= 16321; +UPDATE `npc_text` SET `BroadcastTextID0`= 42858 WHERE `ID`= 16322; +UPDATE `npc_text` SET `BroadcastTextID0`= 42863 WHERE `ID`= 16324; +UPDATE `npc_text` SET `BroadcastTextID0`= 42896 WHERE `ID`= 16330; +UPDATE `npc_text` SET `BroadcastTextID0`= 42910 WHERE `ID`= 16334; +UPDATE `npc_text` SET `BroadcastTextID0`= 42911 WHERE `ID`= 16335; +UPDATE `npc_text` SET `BroadcastTextID0`= 42912 WHERE `ID`= 16336; +UPDATE `npc_text` SET `BroadcastTextID0`= 42913 WHERE `ID`= 16337; +UPDATE `npc_text` SET `BroadcastTextID0`= 42914 WHERE `ID`= 16338; +UPDATE `npc_text` SET `BroadcastTextID0`= 42917 WHERE `ID`= 16339; +UPDATE `npc_text` SET `BroadcastTextID0`= 42919 WHERE `ID`= 16340; +UPDATE `npc_text` SET `BroadcastTextID0`= 42920 WHERE `ID`= 16341; +UPDATE `npc_text` SET `BroadcastTextID0`= 42940 WHERE `ID`= 16343; +UPDATE `npc_text` SET `BroadcastTextID0`= 42951 WHERE `ID`= 16345; +UPDATE `npc_text` SET `BroadcastTextID0`= 42971 WHERE `ID`= 16348; +UPDATE `npc_text` SET `BroadcastTextID0`= 43092 WHERE `ID`= 16363; +UPDATE `npc_text` SET `BroadcastTextID0`= 43123 WHERE `ID`= 16365; +UPDATE `npc_text` SET `BroadcastTextID0`= 43124 WHERE `ID`= 16366; +UPDATE `npc_text` SET `BroadcastTextID0`= 43188 WHERE `ID`= 16372; +UPDATE `npc_text` SET `BroadcastTextID0`= 43194 WHERE `ID`= 16373; +UPDATE `npc_text` SET `BroadcastTextID0`= 43197 WHERE `ID`= 16374; +UPDATE `npc_text` SET `BroadcastTextID0`= 43199 WHERE `ID`= 16375; +UPDATE `npc_text` SET `BroadcastTextID0`= 43201 WHERE `ID`= 16376; +UPDATE `npc_text` SET `BroadcastTextID0`= 43206 WHERE `ID`= 16378; +UPDATE `npc_text` SET `BroadcastTextID0`= 43216 WHERE `ID`= 16383; +UPDATE `npc_text` SET `BroadcastTextID0`= 43217 WHERE `ID`= 16384; +UPDATE `npc_text` SET `BroadcastTextID0`= 43233 WHERE `ID`= 16386; +UPDATE `npc_text` SET `BroadcastTextID0`= 43254 WHERE `ID`= 16387; +UPDATE `npc_text` SET `BroadcastTextID0`= 43255 WHERE `ID`= 16388; +UPDATE `npc_text` SET `BroadcastTextID0`= 43273 WHERE `ID`= 16390; +UPDATE `npc_text` SET `BroadcastTextID0`= 43274 WHERE `ID`= 16391; +UPDATE `npc_text` SET `BroadcastTextID0`= 43282 WHERE `ID`= 16393; +UPDATE `npc_text` SET `BroadcastTextID0`= 43285 WHERE `ID`= 16394; +UPDATE `npc_text` SET `BroadcastTextID0`= 43290 WHERE `ID`= 16399; +UPDATE `npc_text` SET `BroadcastTextID0`= 43318 WHERE `ID`= 16402; +UPDATE `npc_text` SET `BroadcastTextID0`= 43425 WHERE `ID`= 16412; +UPDATE `npc_text` SET `BroadcastTextID0`= 43444 WHERE `ID`= 16418; +UPDATE `npc_text` SET `BroadcastTextID0`= 43448 WHERE `ID`= 16420; +UPDATE `npc_text` SET `BroadcastTextID0`= 43454 WHERE `ID`= 16422; +UPDATE `npc_text` SET `BroadcastTextID0`= 43504 WHERE `ID`= 16425; +UPDATE `npc_text` SET `BroadcastTextID0`= 43513 WHERE `ID`= 16426; +UPDATE `npc_text` SET `BroadcastTextID0`= 43523 WHERE `ID`= 16427; +UPDATE `npc_text` SET `BroadcastTextID0`= 43529 WHERE `ID`= 16429; +UPDATE `npc_text` SET `BroadcastTextID0`= 43533 WHERE `ID`= 16430; +UPDATE `npc_text` SET `BroadcastTextID0`= 43565 WHERE `ID`= 16435; +UPDATE `npc_text` SET `BroadcastTextID0`= 43567 WHERE `ID`= 16437; +UPDATE `npc_text` SET `BroadcastTextID0`= 43568 WHERE `ID`= 16438; +UPDATE `npc_text` SET `BroadcastTextID0`= 43569 WHERE `ID`= 16439; +UPDATE `npc_text` SET `BroadcastTextID0`= 43575 WHERE `ID`= 16440; +UPDATE `npc_text` SET `BroadcastTextID0`= 43587 WHERE `ID`= 16441; +UPDATE `npc_text` SET `BroadcastTextID0`= 43591 WHERE `ID`= 16442; +UPDATE `npc_text` SET `BroadcastTextID0`= 43609 WHERE `ID`= 16443; +UPDATE `npc_text` SET `BroadcastTextID0`= 43656 WHERE `ID`= 16451; +UPDATE `npc_text` SET `BroadcastTextID0`= 43679 WHERE `ID`= 16455; +UPDATE `npc_text` SET `BroadcastTextID0`= 43685 WHERE `ID`= 16457; +UPDATE `npc_text` SET `BroadcastTextID0`= 43687 WHERE `ID`= 16458; +UPDATE `npc_text` SET `BroadcastTextID0`= 43689 WHERE `ID`= 16460; +UPDATE `npc_text` SET `BroadcastTextID0`= 43691 WHERE `ID`= 16461; +UPDATE `npc_text` SET `BroadcastTextID0`= 43693 WHERE `ID`= 16463; +UPDATE `npc_text` SET `BroadcastTextID0`= 43695 WHERE `ID`= 16464; +UPDATE `npc_text` SET `BroadcastTextID0`= 43700 WHERE `ID`= 16465; +UPDATE `npc_text` SET `BroadcastTextID0`= 43719 WHERE `ID`= 16469; +UPDATE `npc_text` SET `BroadcastTextID0`= 43721 WHERE `ID`= 16470; +UPDATE `npc_text` SET `BroadcastTextID0`= 43728 WHERE `ID`= 16471; +UPDATE `npc_text` SET `BroadcastTextID0`= 43734 WHERE `ID`= 16472; +UPDATE `npc_text` SET `BroadcastTextID0`= 43737 WHERE `ID`= 16473; +UPDATE `npc_text` SET `BroadcastTextID0`= 43771 WHERE `ID`= 16478; +UPDATE `npc_text` SET `BroadcastTextID0`= 43812 WHERE `ID`= 16483; +UPDATE `npc_text` SET `BroadcastTextID0`= 43819 WHERE `ID`= 16486; +UPDATE `npc_text` SET `BroadcastTextID0`= 43831 WHERE `ID`= 16488; +UPDATE `npc_text` SET `BroadcastTextID0`= 43834 WHERE `ID`= 16491; +UPDATE `npc_text` SET `BroadcastTextID0`= 43983 WHERE `ID`= 16498; +UPDATE `npc_text` SET `BroadcastTextID0`= 44117 WHERE `ID`= 16500; +UPDATE `npc_text` SET `BroadcastTextID0`= 44236 WHERE `ID`= 16505; +UPDATE `npc_text` SET `BroadcastTextID0`= 44247 WHERE `ID`= 16507; +UPDATE `npc_text` SET `BroadcastTextID0`= 44248 WHERE `ID`= 16508; +UPDATE `npc_text` SET `BroadcastTextID0`= 44254 WHERE `ID`= 16509; +UPDATE `npc_text` SET `BroadcastTextID0`= 44335 WHERE `ID`= 16519; +UPDATE `npc_text` SET `BroadcastTextID0`= 44340 WHERE `ID`= 16520; +UPDATE `npc_text` SET `BroadcastTextID0`= 44341 WHERE `ID`= 16521; +UPDATE `npc_text` SET `BroadcastTextID0`= 44342 WHERE `ID`= 16522; +UPDATE `npc_text` SET `BroadcastTextID0`= 44343 WHERE `ID`= 16523; +UPDATE `npc_text` SET `BroadcastTextID0`= 44356 WHERE `ID`= 16527; +UPDATE `npc_text` SET `BroadcastTextID0`= 44383 WHERE `ID`= 18959; +UPDATE `npc_text` SET `BroadcastTextID0`= 44383 WHERE `ID`= 16536; +UPDATE `npc_text` SET `BroadcastTextID0`= 44400 WHERE `ID`= 18170; +UPDATE `npc_text` SET `BroadcastTextID0`= 44401 WHERE `ID`= 16541; +UPDATE `npc_text` SET `BroadcastTextID0`= 44402 WHERE `ID`= 16542; +UPDATE `npc_text` SET `BroadcastTextID0`= 44405 WHERE `ID`= 16543; +UPDATE `npc_text` SET `BroadcastTextID0`= 44416 WHERE `ID`= 16545; +UPDATE `npc_text` SET `BroadcastTextID0`= 44438 WHERE `ID`= 16549; +UPDATE `npc_text` SET `BroadcastTextID0`= 44441 WHERE `ID`= 16550; +UPDATE `npc_text` SET `BroadcastTextID0`= 44448 WHERE `ID`= 16552; +UPDATE `npc_text` SET `BroadcastTextID0`= 44449 WHERE `ID`= 16553; +UPDATE `npc_text` SET `BroadcastTextID0`= 44450 WHERE `ID`= 16554; +UPDATE `npc_text` SET `BroadcastTextID0`= 44451 WHERE `ID`= 16555; +UPDATE `npc_text` SET `BroadcastTextID0`= 44452 WHERE `ID`= 16556; +UPDATE `npc_text` SET `BroadcastTextID0`= 44460 WHERE `ID`= 16558; +UPDATE `npc_text` SET `BroadcastTextID0`= 44463 WHERE `ID`= 16559; +UPDATE `npc_text` SET `BroadcastTextID0`= 44464 WHERE `ID`= 16560; +UPDATE `npc_text` SET `BroadcastTextID0`= 44481 WHERE `ID`= 16565; +UPDATE `npc_text` SET `BroadcastTextID0`= 44483 WHERE `ID`= 16566; +UPDATE `npc_text` SET `BroadcastTextID0`= 44494 WHERE `ID`= 16569; +UPDATE `npc_text` SET `BroadcastTextID0`= 44495 WHERE `ID`= 16570; +UPDATE `npc_text` SET `BroadcastTextID0`= 44496 WHERE `ID`= 16571; +UPDATE `npc_text` SET `BroadcastTextID0`= 44518 WHERE `ID`= 16572; +UPDATE `npc_text` SET `BroadcastTextID0`= 44520 WHERE `ID`= 16573; +UPDATE `npc_text` SET `BroadcastTextID0`= 44538 WHERE `ID`= 16579; +UPDATE `npc_text` SET `BroadcastTextID0`= 44539 WHERE `ID`= 16580; +UPDATE `npc_text` SET `BroadcastTextID0`= 44545 WHERE `ID`= 16583; +UPDATE `npc_text` SET `BroadcastTextID0`= 44556 WHERE `ID`= 16587; +UPDATE `npc_text` SET `BroadcastTextID0`= 44557 WHERE `ID`= 16588; +UPDATE `npc_text` SET `BroadcastTextID0`= 44558 WHERE `ID`= 16589; +UPDATE `npc_text` SET `BroadcastTextID0`= 44566 WHERE `ID`= 16593; +UPDATE `npc_text` SET `BroadcastTextID0`= 44568 WHERE `ID`= 16594; +UPDATE `npc_text` SET `BroadcastTextID0`= 44581 WHERE `ID`= 16592; +UPDATE `npc_text` SET `BroadcastTextID0`= 44585 WHERE `ID`= 16597; +UPDATE `npc_text` SET `BroadcastTextID0`= 44588 WHERE `ID`= 16601; +UPDATE `npc_text` SET `BroadcastTextID0`= 44594 WHERE `ID`= 16602; +UPDATE `npc_text` SET `BroadcastTextID0`= 44595 WHERE `ID`= 16603; +UPDATE `npc_text` SET `BroadcastTextID0`= 44598 WHERE `ID`= 16604; +UPDATE `npc_text` SET `BroadcastTextID0`= 44602 WHERE `ID`= 16605; +UPDATE `npc_text` SET `BroadcastTextID0`= 44605 WHERE `ID`= 16606; +UPDATE `npc_text` SET `BroadcastTextID0`= 44607 WHERE `ID`= 16607; +UPDATE `npc_text` SET `BroadcastTextID0`= 44608 WHERE `ID`= 16608; +UPDATE `npc_text` SET `BroadcastTextID0`= 44622 WHERE `ID`= 16612; +UPDATE `npc_text` SET `BroadcastTextID0`= 44623 WHERE `ID`= 16613; +UPDATE `npc_text` SET `BroadcastTextID0`= 44624 WHERE `ID`= 16614; +UPDATE `npc_text` SET `BroadcastTextID0`= 44625 WHERE `ID`= 16615; +UPDATE `npc_text` SET `BroadcastTextID0`= 44626 WHERE `ID`= 16616; +UPDATE `npc_text` SET `BroadcastTextID0`= 44631 WHERE `ID`= 16617; +UPDATE `npc_text` SET `BroadcastTextID0`= 44634 WHERE `ID`= 16618; +UPDATE `npc_text` SET `BroadcastTextID0`= 44636 WHERE `ID`= 16619; +UPDATE `npc_text` SET `BroadcastTextID0`= 44638 WHERE `ID`= 16620; +UPDATE `npc_text` SET `BroadcastTextID0`= 44640 WHERE `ID`= 16621; +UPDATE `npc_text` SET `BroadcastTextID0`= 44645 WHERE `ID`= 16625; +UPDATE `npc_text` SET `BroadcastTextID0`= 44648 WHERE `ID`= 16627; +UPDATE `npc_text` SET `BroadcastTextID0`= 44650 WHERE `ID`= 16628; +UPDATE `npc_text` SET `BroadcastTextID0`= 44651 WHERE `ID`= 16629; +UPDATE `npc_text` SET `BroadcastTextID0`= 44653 WHERE `ID`= 16630; +UPDATE `npc_text` SET `BroadcastTextID0`= 44655 WHERE `ID`= 16631; +UPDATE `npc_text` SET `BroadcastTextID0`= 44658 WHERE `ID`= 16632; +UPDATE `npc_text` SET `BroadcastTextID0`= 44661 WHERE `ID`= 16634; +UPDATE `npc_text` SET `BroadcastTextID0`= 44666 WHERE `ID`= 16635; +UPDATE `npc_text` SET `BroadcastTextID0`= 44729 WHERE `ID`= 16638; +UPDATE `npc_text` SET `BroadcastTextID0`= 44742 WHERE `ID`= 16641; +UPDATE `npc_text` SET `BroadcastTextID0`= 44743 WHERE `ID`= 16642; +UPDATE `npc_text` SET `BroadcastTextID0`= 44787 WHERE `ID`= 16651; +UPDATE `npc_text` SET `BroadcastTextID0`= 44789 WHERE `ID`= 16653; +UPDATE `npc_text` SET `BroadcastTextID0`= 44815 WHERE `ID`= 16663; +UPDATE `npc_text` SET `BroadcastTextID0`= 44872 WHERE `ID`= 16673; +UPDATE `npc_text` SET `BroadcastTextID0`= 44901 WHERE `ID`= 16682; +UPDATE `npc_text` SET `BroadcastTextID0`= 44904 WHERE `ID`= 16683; +UPDATE `npc_text` SET `BroadcastTextID0`= 44918 WHERE `ID`= 16465; +UPDATE `npc_text` SET `BroadcastTextID0`= 44924 WHERE `ID`= 16687; +UPDATE `npc_text` SET `BroadcastTextID0`= 44928 WHERE `ID`= 16688; +UPDATE `npc_text` SET `BroadcastTextID0`= 44939 WHERE `ID`= 16689; +UPDATE `npc_text` SET `BroadcastTextID0`= 44982 WHERE `ID`= 16694; +UPDATE `npc_text` SET `BroadcastTextID0`= 45085 WHERE `ID`= 16705; +UPDATE `npc_text` SET `BroadcastTextID0`= 45116 WHERE `ID`= 16711; +UPDATE `npc_text` SET `BroadcastTextID0`= 45119 WHERE `ID`= 16712; +UPDATE `npc_text` SET `BroadcastTextID0`= 45121 WHERE `ID`= 16706; +UPDATE `npc_text` SET `BroadcastTextID0`= 45122 WHERE `ID`= 16714; +UPDATE `npc_text` SET `BroadcastTextID0`= 45125 WHERE `ID`= 16716; +UPDATE `npc_text` SET `BroadcastTextID0`= 45126 WHERE `ID`= 16717; +UPDATE `npc_text` SET `BroadcastTextID0`= 45129 WHERE `ID`= 16719; +UPDATE `npc_text` SET `BroadcastTextID0`= 45130 WHERE `ID`= 16720; +UPDATE `npc_text` SET `BroadcastTextID0`= 45159 WHERE `ID`= 16727; +UPDATE `npc_text` SET `BroadcastTextID0`= 45194 WHERE `ID`= 16729; +UPDATE `npc_text` SET `BroadcastTextID0`= 45195 WHERE `ID`= 16730; +UPDATE `npc_text` SET `BroadcastTextID0`= 45196 WHERE `ID`= 16731; +UPDATE `npc_text` SET `BroadcastTextID0`= 45197 WHERE `ID`= 16732; +UPDATE `npc_text` SET `BroadcastTextID0`= 45198 WHERE `ID`= 16733; +UPDATE `npc_text` SET `BroadcastTextID0`= 45230 WHERE `ID`= 16737; +UPDATE `npc_text` SET `BroadcastTextID0`= 45243 WHERE `ID`= 16742; +UPDATE `npc_text` SET `BroadcastTextID0`= 45244 WHERE `ID`= 16743; +UPDATE `npc_text` SET `BroadcastTextID0`= 45257 WHERE `ID`= 16744; +UPDATE `npc_text` SET `BroadcastTextID0`= 45258 WHERE `ID`= 16745; +UPDATE `npc_text` SET `BroadcastTextID0`= 45272 WHERE `ID`= 16748; +UPDATE `npc_text` SET `BroadcastTextID0`= 45275 WHERE `ID`= 16750; +UPDATE `npc_text` SET `BroadcastTextID0`= 45276 WHERE `ID`= 16751; +UPDATE `npc_text` SET `BroadcastTextID0`= 45287 WHERE `ID`= 16754; +UPDATE `npc_text` SET `BroadcastTextID0`= 45289 WHERE `ID`= 16755; +UPDATE `npc_text` SET `BroadcastTextID0`= 45290 WHERE `ID`= 16756; +UPDATE `npc_text` SET `BroadcastTextID0`= 45292 WHERE `ID`= 16757; +UPDATE `npc_text` SET `BroadcastTextID0`= 45296 WHERE `ID`= 16760; +UPDATE `npc_text` SET `BroadcastTextID0`= 45298 WHERE `ID`= 16761; +UPDATE `npc_text` SET `BroadcastTextID0`= 45299 WHERE `ID`= 16762; +UPDATE `npc_text` SET `BroadcastTextID0`= 45302 WHERE `ID`= 16763; +UPDATE `npc_text` SET `BroadcastTextID0`= 45319 WHERE `ID`= 16766; +UPDATE `npc_text` SET `BroadcastTextID0`= 45320 WHERE `ID`= 16767; +UPDATE `npc_text` SET `BroadcastTextID0`= 45323 WHERE `ID`= 16768; +UPDATE `npc_text` SET `BroadcastTextID0`= 45345 WHERE `ID`= 16771; +UPDATE `npc_text` SET `BroadcastTextID0`= 45345 WHERE `ID`= 16772; +UPDATE `npc_text` SET `BroadcastTextID0`= 45354 WHERE `ID`= 16774; +UPDATE `npc_text` SET `BroadcastTextID0`= 45356 WHERE `ID`= 16776; +UPDATE `npc_text` SET `BroadcastTextID0`= 45360 WHERE `ID`= 16780; +UPDATE `npc_text` SET `BroadcastTextID0`= 45375 WHERE `ID`= 16786; +UPDATE `npc_text` SET `BroadcastTextID0`= 45393 WHERE `ID`= 16787; +UPDATE `npc_text` SET `BroadcastTextID0`= 45397 WHERE `ID`= 16790; +UPDATE `npc_text` SET `BroadcastTextID0`= 45399 WHERE `ID`= 16792; +UPDATE `npc_text` SET `BroadcastTextID0`= 45400 WHERE `ID`= 16793; +UPDATE `npc_text` SET `BroadcastTextID0`= 45401 WHERE `ID`= 16794; +UPDATE `npc_text` SET `BroadcastTextID0`= 45402 WHERE `ID`= 16795; +UPDATE `npc_text` SET `BroadcastTextID0`= 45413 WHERE `ID`= 16805; +UPDATE `npc_text` SET `BroadcastTextID0`= 45414 WHERE `ID`= 16799; +UPDATE `npc_text` SET `BroadcastTextID0`= 45424 WHERE `ID`= 17498; +UPDATE `npc_text` SET `BroadcastTextID0`= 45424 WHERE `ID`= 16800; +UPDATE `npc_text` SET `BroadcastTextID0`= 45428 WHERE `ID`= 16803; +UPDATE `npc_text` SET `BroadcastTextID0`= 45429 WHERE `ID`= 16804; +UPDATE `npc_text` SET `BroadcastTextID0`= 45430 WHERE `ID`= 16798; +UPDATE `npc_text` SET `BroadcastTextID0`= 45431 WHERE `ID`= 16806; +UPDATE `npc_text` SET `BroadcastTextID0`= 45433 WHERE `ID`= 16807; +UPDATE `npc_text` SET `BroadcastTextID0`= 45435 WHERE `ID`= 16808; +UPDATE `npc_text` SET `BroadcastTextID0`= 45443 WHERE `ID`= 16810; +UPDATE `npc_text` SET `BroadcastTextID0`= 45448 WHERE `ID`= 16811; +UPDATE `npc_text` SET `BroadcastTextID0`= 45452 WHERE `ID`= 16812; +UPDATE `npc_text` SET `BroadcastTextID0`= 45455 WHERE `ID`= 16813; +UPDATE `npc_text` SET `BroadcastTextID0`= 45477 WHERE `ID`= 16815; +UPDATE `npc_text` SET `BroadcastTextID0`= 45510 WHERE `ID`= 16824; +UPDATE `npc_text` SET `BroadcastTextID0`= 45514 WHERE `ID`= 16825; +UPDATE `npc_text` SET `BroadcastTextID0`= 45518 WHERE `ID`= 16828; +UPDATE `npc_text` SET `BroadcastTextID0`= 45527 WHERE `ID`= 16831; +UPDATE `npc_text` SET `BroadcastTextID0`= 45528 WHERE `ID`= 16832; +UPDATE `npc_text` SET `BroadcastTextID0`= 45535 WHERE `ID`= 16835; +UPDATE `npc_text` SET `BroadcastTextID0`= 45536 WHERE `ID`= 16836; +UPDATE `npc_text` SET `BroadcastTextID0`= 45553 WHERE `ID`= 16839; +UPDATE `npc_text` SET `BroadcastTextID0`= 45554 WHERE `ID`= 16840; +UPDATE `npc_text` SET `BroadcastTextID0`= 45555 WHERE `ID`= 16841; +UPDATE `npc_text` SET `BroadcastTextID0`= 45563 WHERE `ID`= 16844; +UPDATE `npc_text` SET `BroadcastTextID0`= 45567 WHERE `ID`= 16846; +UPDATE `npc_text` SET `BroadcastTextID0`= 45568 WHERE `ID`= 16847; +UPDATE `npc_text` SET `BroadcastTextID0`= 45604 WHERE `ID`= 16849; +UPDATE `npc_text` SET `BroadcastTextID0`= 45618 WHERE `ID`= 16851; +UPDATE `npc_text` SET `BroadcastTextID0`= 45663 WHERE `ID`= 16862; +UPDATE `npc_text` SET `BroadcastTextID0`= 45665 WHERE `ID`= 16858; +UPDATE `npc_text` SET `BroadcastTextID0`= 45670 WHERE `ID`= 16864; +UPDATE `npc_text` SET `BroadcastTextID0`= 45674 WHERE `ID`= 16865; +UPDATE `npc_text` SET `BroadcastTextID0`= 45676 WHERE `ID`= 16866; +UPDATE `npc_text` SET `BroadcastTextID0`= 45677 WHERE `ID`= 16867; +UPDATE `npc_text` SET `BroadcastTextID0`= 45688 WHERE `ID`= 16869; +UPDATE `npc_text` SET `BroadcastTextID0`= 45705 WHERE `ID`= 16870; +UPDATE `npc_text` SET `BroadcastTextID0`= 45709 WHERE `ID`= 16871; +UPDATE `npc_text` SET `BroadcastTextID0`= 45714 WHERE `ID`= 16872; +UPDATE `npc_text` SET `BroadcastTextID0`= 45719 WHERE `ID`= 16873; +UPDATE `npc_text` SET `BroadcastTextID0`= 45726 WHERE `ID`= 16874; +UPDATE `npc_text` SET `BroadcastTextID0`= 45752 WHERE `ID`= 16875; +UPDATE `npc_text` SET `BroadcastTextID0`= 45762 WHERE `ID`= 16876; +UPDATE `npc_text` SET `BroadcastTextID0`= 45766 WHERE `ID`= 16877; +UPDATE `npc_text` SET `BroadcastTextID0`= 45790 WHERE `ID`= 16878; +UPDATE `npc_text` SET `BroadcastTextID0`= 45791 WHERE `ID`= 16879; +UPDATE `npc_text` SET `BroadcastTextID0`= 45795 WHERE `ID`= 16880; +UPDATE `npc_text` SET `BroadcastTextID0`= 45798 WHERE `ID`= 16883; +UPDATE `npc_text` SET `BroadcastTextID0`= 45799 WHERE `ID`= 16884; +UPDATE `npc_text` SET `BroadcastTextID0`= 45801 WHERE `ID`= 16886; +UPDATE `npc_text` SET `BroadcastTextID0`= 45802 WHERE `ID`= 16887; +UPDATE `npc_text` SET `BroadcastTextID0`= 45803 WHERE `ID`= 16888; +UPDATE `npc_text` SET `BroadcastTextID0`= 45804 WHERE `ID`= 16889; +UPDATE `npc_text` SET `BroadcastTextID0`= 45817 WHERE `ID`= 16893; +UPDATE `npc_text` SET `BroadcastTextID0`= 45847 WHERE `ID`= 16897; +UPDATE `npc_text` SET `BroadcastTextID0`= 45848 WHERE `ID`= 16898; +UPDATE `npc_text` SET `BroadcastTextID0`= 45851 WHERE `ID`= 16899; +UPDATE `npc_text` SET `BroadcastTextID0`= 45925 WHERE `ID`= 16907; +UPDATE `npc_text` SET `BroadcastTextID0`= 45927 WHERE `ID`= 16908; +UPDATE `npc_text` SET `BroadcastTextID0`= 45928 WHERE `ID`= 16909; +UPDATE `npc_text` SET `BroadcastTextID0`= 45957 WHERE `ID`= 16914; +UPDATE `npc_text` SET `BroadcastTextID0`= 45961 WHERE `ID`= 16918; +UPDATE `npc_text` SET `BroadcastTextID0`= 45963 WHERE `ID`= 16920; +UPDATE `npc_text` SET `BroadcastTextID0`= 45982 WHERE `ID`= 16923; +UPDATE `npc_text` SET `BroadcastTextID0`= 46003 WHERE `ID`= 16928; +UPDATE `npc_text` SET `BroadcastTextID0`= 46006 WHERE `ID`= 16929; +UPDATE `npc_text` SET `BroadcastTextID0`= 46070 WHERE `ID`= 16941; +UPDATE `npc_text` SET `BroadcastTextID0`= 46071 WHERE `ID`= 16942; +UPDATE `npc_text` SET `BroadcastTextID0`= 46086 WHERE `ID`= 16944; +UPDATE `npc_text` SET `BroadcastTextID0`= 46112 WHERE `ID`= 16951; +UPDATE `npc_text` SET `BroadcastTextID0`= 46118 WHERE `ID`= 16957; +UPDATE `npc_text` SET `BroadcastTextID0`= 46120 WHERE `ID`= 16958; +UPDATE `npc_text` SET `BroadcastTextID0`= 46128 WHERE `ID`= 16959; +UPDATE `npc_text` SET `BroadcastTextID0`= 46137 WHERE `ID`= 16963; +UPDATE `npc_text` SET `BroadcastTextID0`= 46138 WHERE `ID`= 17749; +UPDATE `npc_text` SET `BroadcastTextID0`= 46138 WHERE `ID`= 16964; +UPDATE `npc_text` SET `BroadcastTextID0`= 46140 WHERE `ID`= 16965; +UPDATE `npc_text` SET `BroadcastTextID0`= 46162 WHERE `ID`= 16966; +UPDATE `npc_text` SET `BroadcastTextID0`= 46163 WHERE `ID`= 16967; +UPDATE `npc_text` SET `BroadcastTextID0`= 46165 WHERE `ID`= 16968; +UPDATE `npc_text` SET `BroadcastTextID0`= 46166 WHERE `ID`= 16969; +UPDATE `npc_text` SET `BroadcastTextID0`= 46167 WHERE `ID`= 16970; +UPDATE `npc_text` SET `BroadcastTextID0`= 46175 WHERE `ID`= 16973; +UPDATE `npc_text` SET `BroadcastTextID0`= 46228 WHERE `ID`= 16975; +UPDATE `npc_text` SET `BroadcastTextID0`= 46256 WHERE `ID`= 16980; +UPDATE `npc_text` SET `BroadcastTextID0`= 46262 WHERE `ID`= 16981; +UPDATE `npc_text` SET `BroadcastTextID0`= 46267 WHERE `ID`= 16984; +UPDATE `npc_text` SET `BroadcastTextID0`= 46319 WHERE `ID`= 16986; +UPDATE `npc_text` SET `BroadcastTextID0`= 46335 WHERE `ID`= 16987; +UPDATE `npc_text` SET `BroadcastTextID0`= 46348 WHERE `ID`= 16988; +UPDATE `npc_text` SET `BroadcastTextID0`= 46349 WHERE `ID`= 16989; +UPDATE `npc_text` SET `BroadcastTextID0`= 46350 WHERE `ID`= 16990; +UPDATE `npc_text` SET `BroadcastTextID0`= 46353 WHERE `ID`= 16991; +UPDATE `npc_text` SET `BroadcastTextID0`= 46358 WHERE `ID`= 16995; +UPDATE `npc_text` SET `BroadcastTextID0`= 46374 WHERE `ID`= 16996; +UPDATE `npc_text` SET `BroadcastTextID0`= 46375 WHERE `ID`= 16997; +UPDATE `npc_text` SET `BroadcastTextID0`= 46376 WHERE `ID`= 16998; +UPDATE `npc_text` SET `BroadcastTextID0`= 46384 WHERE `ID`= 17000; +UPDATE `npc_text` SET `BroadcastTextID0`= 46406 WHERE `ID`= 17004; +UPDATE `npc_text` SET `BroadcastTextID0`= 46411 WHERE `ID`= 17005; +UPDATE `npc_text` SET `BroadcastTextID0`= 46413 WHERE `ID`= 17007; +UPDATE `npc_text` SET `BroadcastTextID0`= 46419 WHERE `ID`= 17010; +UPDATE `npc_text` SET `BroadcastTextID0`= 46421 WHERE `ID`= 17011; +UPDATE `npc_text` SET `BroadcastTextID0`= 46423 WHERE `ID`= 17012; +UPDATE `npc_text` SET `BroadcastTextID0`= 46425 WHERE `ID`= 17013; +UPDATE `npc_text` SET `BroadcastTextID0`= 46429 WHERE `ID`= 17009; +UPDATE `npc_text` SET `BroadcastTextID0`= 46430 WHERE `ID`= 17014; +UPDATE `npc_text` SET `BroadcastTextID0`= 46462 WHERE `ID`= 17019; +UPDATE `npc_text` SET `BroadcastTextID0`= 46508 WHERE `ID`= 17024; +UPDATE `npc_text` SET `BroadcastTextID0`= 46514 WHERE `ID`= 17026; +UPDATE `npc_text` SET `BroadcastTextID0`= 46528 WHERE `ID`= 17030; +UPDATE `npc_text` SET `BroadcastTextID0`= 46529 WHERE `ID`= 17031; +UPDATE `npc_text` SET `BroadcastTextID0`= 46532 WHERE `ID`= 17032; +UPDATE `npc_text` SET `BroadcastTextID0`= 46539 WHERE `ID`= 17034; +UPDATE `npc_text` SET `BroadcastTextID0`= 46549 WHERE `ID`= 17036; +UPDATE `npc_text` SET `BroadcastTextID0`= 46592 WHERE `ID`= 17038; +UPDATE `npc_text` SET `BroadcastTextID0`= 46612 WHERE `ID`= 17042; +UPDATE `npc_text` SET `BroadcastTextID0`= 46629 WHERE `ID`= 17045; +UPDATE `npc_text` SET `BroadcastTextID0`= 46647 WHERE `ID`= 17046; +UPDATE `npc_text` SET `BroadcastTextID0`= 46698 WHERE `ID`= 17051; +UPDATE `npc_text` SET `BroadcastTextID0`= 46700 WHERE `ID`= 17052; +UPDATE `npc_text` SET `BroadcastTextID0`= 46715 WHERE `ID`= 16465; +UPDATE `npc_text` SET `BroadcastTextID0`= 46716 WHERE `ID`= 17055; +UPDATE `npc_text` SET `BroadcastTextID0`= 46725 WHERE `ID`= 17057; +UPDATE `npc_text` SET `BroadcastTextID0`= 46762 WHERE `ID`= 17061; +UPDATE `npc_text` SET `BroadcastTextID0`= 46822 WHERE `ID`= 17072; +UPDATE `npc_text` SET `BroadcastTextID0`= 46823 WHERE `ID`= 17073; +UPDATE `npc_text` SET `BroadcastTextID0`= 46826 WHERE `ID`= 17074; +UPDATE `npc_text` SET `BroadcastTextID0`= 46827 WHERE `ID`= 17075; +UPDATE `npc_text` SET `BroadcastTextID0`= 46855 WHERE `ID`= 17080; +UPDATE `npc_text` SET `BroadcastTextID0`= 46874 WHERE `ID`= 17086; +UPDATE `npc_text` SET `BroadcastTextID0`= 46883 WHERE `ID`= 17087; +UPDATE `npc_text` SET `BroadcastTextID0`= 46950 WHERE `ID`= 17097; +UPDATE `npc_text` SET `BroadcastTextID0`= 46960 WHERE `ID`= 17098; +UPDATE `npc_text` SET `BroadcastTextID0`= 46961 WHERE `ID`= 17099; +UPDATE `npc_text` SET `BroadcastTextID0`= 46963 WHERE `ID`= 17100; +UPDATE `npc_text` SET `BroadcastTextID0`= 46967 WHERE `ID`= 17102; +UPDATE `npc_text` SET `BroadcastTextID0`= 47010 WHERE `ID`= 17103; +UPDATE `npc_text` SET `BroadcastTextID0`= 47011 WHERE `ID`= 17104; +UPDATE `npc_text` SET `BroadcastTextID0`= 47012 WHERE `ID`= 17105; +UPDATE `npc_text` SET `BroadcastTextID0`= 47053 WHERE `ID`= 17111; +UPDATE `npc_text` SET `BroadcastTextID0`= 47055 WHERE `ID`= 17112; +UPDATE `npc_text` SET `BroadcastTextID0`= 47073 WHERE `ID`= 17115; +UPDATE `npc_text` SET `BroadcastTextID0`= 47075 WHERE `ID`= 17116; +UPDATE `npc_text` SET `BroadcastTextID0`= 47077 WHERE `ID`= 17117; +UPDATE `npc_text` SET `BroadcastTextID0`= 47085 WHERE `ID`= 17119; +UPDATE `npc_text` SET `BroadcastTextID0`= 47091 WHERE `ID`= 17235; +UPDATE `npc_text` SET `BroadcastTextID0`= 47168 WHERE `ID`= 17140; +UPDATE `npc_text` SET `BroadcastTextID0`= 47179 WHERE `ID`= 17142; +UPDATE `npc_text` SET `BroadcastTextID0`= 47180 WHERE `ID`= 17143; +UPDATE `npc_text` SET `BroadcastTextID0`= 47233 WHERE `ID`= 17150; +UPDATE `npc_text` SET `BroadcastTextID0`= 47234 WHERE `ID`= 17148; +UPDATE `npc_text` SET `BroadcastTextID0`= 47240 WHERE `ID`= 17151; +UPDATE `npc_text` SET `BroadcastTextID0`= 47244 WHERE `ID`= 17152; +UPDATE `npc_text` SET `BroadcastTextID0`= 47246 WHERE `ID`= 17153; +UPDATE `npc_text` SET `BroadcastTextID0`= 47257 WHERE `ID`= 17155; +UPDATE `npc_text` SET `BroadcastTextID0`= 47259 WHERE `ID`= 17156; +UPDATE `npc_text` SET `BroadcastTextID0`= 47261 WHERE `ID`= 17157; +UPDATE `npc_text` SET `BroadcastTextID0`= 47267 WHERE `ID`= 17158; +UPDATE `npc_text` SET `BroadcastTextID0`= 47283 WHERE `ID`= 17167; +UPDATE `npc_text` SET `BroadcastTextID0`= 47288 WHERE `ID`= 17169; +UPDATE `npc_text` SET `BroadcastTextID0`= 47289 WHERE `ID`= 17170; +UPDATE `npc_text` SET `BroadcastTextID0`= 47300 WHERE `ID`= 17172; +UPDATE `npc_text` SET `BroadcastTextID0`= 47368 WHERE `ID`= 17174; +UPDATE `npc_text` SET `BroadcastTextID0`= 47370 WHERE `ID`= 17175; +UPDATE `npc_text` SET `BroadcastTextID0`= 47373 WHERE `ID`= 17177; +UPDATE `npc_text` SET `BroadcastTextID0`= 47374 WHERE `ID`= 17178; +UPDATE `npc_text` SET `BroadcastTextID0`= 47375 WHERE `ID`= 17179; +UPDATE `npc_text` SET `BroadcastTextID0`= 47380 WHERE `ID`= 17181; +UPDATE `npc_text` SET `BroadcastTextID0`= 47419 WHERE `ID`= 17187; +UPDATE `npc_text` SET `BroadcastTextID0`= 47420 WHERE `ID`= 17188; +UPDATE `npc_text` SET `BroadcastTextID0`= 47444 WHERE `ID`= 17189; +UPDATE `npc_text` SET `BroadcastTextID0`= 47461 WHERE `ID`= 17192; +UPDATE `npc_text` SET `BroadcastTextID0`= 47464 WHERE `ID`= 17193; +UPDATE `npc_text` SET `BroadcastTextID0`= 47465 WHERE `ID`= 17194; +UPDATE `npc_text` SET `BroadcastTextID0`= 47555 WHERE `ID`= 17208; +UPDATE `npc_text` SET `BroadcastTextID0`= 47565 WHERE `ID`= 17212; +UPDATE `npc_text` SET `BroadcastTextID0`= 47571 WHERE `ID`= 17213; +UPDATE `npc_text` SET `BroadcastTextID0`= 47579 WHERE `ID`= 17216; +UPDATE `npc_text` SET `BroadcastTextID0`= 47580 WHERE `ID`= 17217; +UPDATE `npc_text` SET `BroadcastTextID0`= 47582 WHERE `ID`= 17219; +UPDATE `npc_text` SET `BroadcastTextID0`= 47583 WHERE `ID`= 17220; +UPDATE `npc_text` SET `BroadcastTextID0`= 47584 WHERE `ID`= 17221; +UPDATE `npc_text` SET `BroadcastTextID0`= 47589 WHERE `ID`= 17222; +UPDATE `npc_text` SET `BroadcastTextID0`= 47600 WHERE `ID`= 17226; +UPDATE `npc_text` SET `BroadcastTextID0`= 47604 WHERE `ID`= 17227; +UPDATE `npc_text` SET `BroadcastTextID0`= 47613 WHERE `ID`= 17228; +UPDATE `npc_text` SET `BroadcastTextID0`= 47615 WHERE `ID`= 17229; +UPDATE `npc_text` SET `BroadcastTextID0`= 47621 WHERE `ID`= 17231; +UPDATE `npc_text` SET `BroadcastTextID0`= 47626 WHERE `ID`= 17233; +UPDATE `npc_text` SET `BroadcastTextID0`= 47632 WHERE `ID`= 17235; +UPDATE `npc_text` SET `BroadcastTextID0`= 47661 WHERE `ID`= 17239; +UPDATE `npc_text` SET `BroadcastTextID0`= 47663 WHERE `ID`= 17240; +UPDATE `npc_text` SET `BroadcastTextID0`= 47673 WHERE `ID`= 17241; +UPDATE `npc_text` SET `BroadcastTextID0`= 47675 WHERE `ID`= 17242; +UPDATE `npc_text` SET `BroadcastTextID0`= 47677 WHERE `ID`= 17243; +UPDATE `npc_text` SET `BroadcastTextID0`= 47683 WHERE `ID`= 17244; +UPDATE `npc_text` SET `BroadcastTextID0`= 47685 WHERE `ID`= 17245; +UPDATE `npc_text` SET `BroadcastTextID0`= 47687 WHERE `ID`= 17246; +UPDATE `npc_text` SET `BroadcastTextID0`= 47694 WHERE `ID`= 17247; +UPDATE `npc_text` SET `BroadcastTextID0`= 47697 WHERE `ID`= 17248; +UPDATE `npc_text` SET `BroadcastTextID0`= 47737 WHERE `ID`= 17251; +UPDATE `npc_text` SET `BroadcastTextID0`= 47740 WHERE `ID`= 17252; +UPDATE `npc_text` SET `BroadcastTextID0`= 47743 WHERE `ID`= 17253; +UPDATE `npc_text` SET `BroadcastTextID0`= 47745 WHERE `ID`= 17254; +UPDATE `npc_text` SET `BroadcastTextID0`= 47747 WHERE `ID`= 17255; +UPDATE `npc_text` SET `BroadcastTextID0`= 47775 WHERE `ID`= 17263; +UPDATE `npc_text` SET `BroadcastTextID0`= 47789 WHERE `ID`= 17266; +UPDATE `npc_text` SET `BroadcastTextID0`= 47794 WHERE `ID`= 17267; +UPDATE `npc_text` SET `BroadcastTextID0`= 47801 WHERE `ID`= 17268; +UPDATE `npc_text` SET `BroadcastTextID0`= 47802 WHERE `ID`= 17269; +UPDATE `npc_text` SET `BroadcastTextID0`= 47803 WHERE `ID`= 17270; +UPDATE `npc_text` SET `BroadcastTextID0`= 47837 WHERE `ID`= 17276; +UPDATE `npc_text` SET `BroadcastTextID0`= 47843 WHERE `ID`= 17278; +UPDATE `npc_text` SET `BroadcastTextID0`= 47846 WHERE `ID`= 17279; +UPDATE `npc_text` SET `BroadcastTextID0`= 47847 WHERE `ID`= 17280; +UPDATE `npc_text` SET `BroadcastTextID0`= 47848 WHERE `ID`= 17281; +UPDATE `npc_text` SET `BroadcastTextID0`= 47848 WHERE `ID`= 17296; +UPDATE `npc_text` SET `BroadcastTextID0`= 47890 WHERE `ID`= 17291; +UPDATE `npc_text` SET `BroadcastTextID0`= 47891 WHERE `ID`= 17292; +UPDATE `npc_text` SET `BroadcastTextID0`= 47895 WHERE `ID`= 17166; +UPDATE `npc_text` SET `BroadcastTextID0`= 47933 WHERE `ID`= 17299; +UPDATE `npc_text` SET `BroadcastTextID0`= 47935 WHERE `ID`= 17300; +UPDATE `npc_text` SET `BroadcastTextID0`= 47945 WHERE `ID`= 17302; +UPDATE `npc_text` SET `BroadcastTextID0`= 47946 WHERE `ID`= 17303; +UPDATE `npc_text` SET `BroadcastTextID0`= 47963 WHERE `ID`= 17304; +UPDATE `npc_text` SET `BroadcastTextID0`= 47964 WHERE `ID`= 17305; +UPDATE `npc_text` SET `BroadcastTextID0`= 47978 WHERE `ID`= 17307; +UPDATE `npc_text` SET `BroadcastTextID0`= 47980 WHERE `ID`= 17308; +UPDATE `npc_text` SET `BroadcastTextID0`= 47982 WHERE `ID`= 17309; +UPDATE `npc_text` SET `BroadcastTextID0`= 47984 WHERE `ID`= 17310; +UPDATE `npc_text` SET `BroadcastTextID0`= 47986 WHERE `ID`= 17311; +UPDATE `npc_text` SET `BroadcastTextID0`= 47994 WHERE `ID`= 17306; +UPDATE `npc_text` SET `BroadcastTextID0`= 47997 WHERE `ID`= 17319; +UPDATE `npc_text` SET `BroadcastTextID0`= 48011 WHERE `ID`= 17321; +UPDATE `npc_text` SET `BroadcastTextID0`= 48024 WHERE `ID`= 17323; +UPDATE `npc_text` SET `BroadcastTextID0`= 48026 WHERE `ID`= 17324; +UPDATE `npc_text` SET `BroadcastTextID0`= 48039 WHERE `ID`= 17327; +UPDATE `npc_text` SET `BroadcastTextID0`= 48043 WHERE `ID`= 17330; +UPDATE `npc_text` SET `BroadcastTextID0`= 48049 WHERE `ID`= 17334; +UPDATE `npc_text` SET `BroadcastTextID0`= 48051 WHERE `ID`= 17336; +UPDATE `npc_text` SET `BroadcastTextID0`= 48068 WHERE `ID`= 17338; +UPDATE `npc_text` SET `BroadcastTextID0`= 48086 WHERE `ID`= 17342; +UPDATE `npc_text` SET `BroadcastTextID0`= 48089 WHERE `ID`= 17345; +UPDATE `npc_text` SET `BroadcastTextID0`= 48090 WHERE `ID`= 17346; +UPDATE `npc_text` SET `BroadcastTextID0`= 48100 WHERE `ID`= 17350; +UPDATE `npc_text` SET `BroadcastTextID0`= 48110 WHERE `ID`= 17354; +UPDATE `npc_text` SET `BroadcastTextID0`= 48113 WHERE `ID`= 17356; +UPDATE `npc_text` SET `BroadcastTextID0`= 48131 WHERE `ID`= 17357; +UPDATE `npc_text` SET `BroadcastTextID0`= 48138 WHERE `ID`= 17359; +UPDATE `npc_text` SET `BroadcastTextID0`= 48140 WHERE `ID`= 17360; +UPDATE `npc_text` SET `BroadcastTextID0`= 48143 WHERE `ID`= 17361; +UPDATE `npc_text` SET `BroadcastTextID0`= 48145 WHERE `ID`= 17362; +UPDATE `npc_text` SET `BroadcastTextID0`= 48146 WHERE `ID`= 17363; +UPDATE `npc_text` SET `BroadcastTextID0`= 48148 WHERE `ID`= 17364; +UPDATE `npc_text` SET `BroadcastTextID0`= 48149 WHERE `ID`= 17365; +UPDATE `npc_text` SET `BroadcastTextID0`= 48151 WHERE `ID`= 17366; +UPDATE `npc_text` SET `BroadcastTextID0`= 48165 WHERE `ID`= 17370; +UPDATE `npc_text` SET `BroadcastTextID0`= 48166 WHERE `ID`= 17371; +UPDATE `npc_text` SET `BroadcastTextID0`= 48168 WHERE `ID`= 17373; +UPDATE `npc_text` SET `BroadcastTextID0`= 48169 WHERE `ID`= 17374; +UPDATE `npc_text` SET `BroadcastTextID0`= 48196 WHERE `ID`= 17382; +UPDATE `npc_text` SET `BroadcastTextID0`= 48197 WHERE `ID`= 17383; +UPDATE `npc_text` SET `BroadcastTextID0`= 48198 WHERE `ID`= 17384; +UPDATE `npc_text` SET `BroadcastTextID0`= 48199 WHERE `ID`= 17385; +UPDATE `npc_text` SET `BroadcastTextID0`= 48200 WHERE `ID`= 17386; +UPDATE `npc_text` SET `BroadcastTextID0`= 48201 WHERE `ID`= 17387; +UPDATE `npc_text` SET `BroadcastTextID0`= 48242 WHERE `ID`= 17394; +UPDATE `npc_text` SET `BroadcastTextID0`= 48244 WHERE `ID`= 17395; +UPDATE `npc_text` SET `BroadcastTextID0`= 48251 WHERE `ID`= 17397; +UPDATE `npc_text` SET `BroadcastTextID0`= 48252 WHERE `ID`= 17398; +UPDATE `npc_text` SET `BroadcastTextID0`= 48262 WHERE `ID`= 17400; +UPDATE `npc_text` SET `BroadcastTextID0`= 48264 WHERE `ID`= 17401; +UPDATE `npc_text` SET `BroadcastTextID0`= 48290 WHERE `ID`= 17405; +UPDATE `npc_text` SET `BroadcastTextID0`= 48296 WHERE `ID`= 17406; +UPDATE `npc_text` SET `BroadcastTextID0`= 48301 WHERE `ID`= 17407; +UPDATE `npc_text` SET `BroadcastTextID0`= 48302 WHERE `ID`= 17408; +UPDATE `npc_text` SET `BroadcastTextID0`= 48305 WHERE `ID`= 17409; +UPDATE `npc_text` SET `BroadcastTextID0`= 48317 WHERE `ID`= 17410; +UPDATE `npc_text` SET `BroadcastTextID0`= 48347 WHERE `ID`= 17416; +UPDATE `npc_text` SET `BroadcastTextID0`= 48350 WHERE `ID`= 17417; +UPDATE `npc_text` SET `BroadcastTextID0`= 48351 WHERE `ID`= 17418; +UPDATE `npc_text` SET `BroadcastTextID0`= 48352 WHERE `ID`= 17419; +UPDATE `npc_text` SET `BroadcastTextID0`= 48353 WHERE `ID`= 17420; +UPDATE `npc_text` SET `BroadcastTextID0`= 48354 WHERE `ID`= 17421; +UPDATE `npc_text` SET `BroadcastTextID0`= 48355 WHERE `ID`= 17422; +UPDATE `npc_text` SET `BroadcastTextID0`= 48363 WHERE `ID`= 17423; +UPDATE `npc_text` SET `BroadcastTextID0`= 48369 WHERE `ID`= 17425; +UPDATE `npc_text` SET `BroadcastTextID0`= 48373 WHERE `ID`= 17426; +UPDATE `npc_text` SET `BroadcastTextID0`= 48374 WHERE `ID`= 17427; +UPDATE `npc_text` SET `BroadcastTextID0`= 48394 WHERE `ID`= 17430; +UPDATE `npc_text` SET `BroadcastTextID0`= 48395 WHERE `ID`= 17431; +UPDATE `npc_text` SET `BroadcastTextID0`= 48396 WHERE `ID`= 17432; +UPDATE `npc_text` SET `BroadcastTextID0`= 48403 WHERE `ID`= 17433; +UPDATE `npc_text` SET `BroadcastTextID0`= 48406 WHERE `ID`= 17434; +UPDATE `npc_text` SET `BroadcastTextID0`= 48438 WHERE `ID`= 17441; +UPDATE `npc_text` SET `BroadcastTextID0`= 48442 WHERE `ID`= 17442; +UPDATE `npc_text` SET `BroadcastTextID0`= 48446 WHERE `ID`= 17443; +UPDATE `npc_text` SET `BroadcastTextID0`= 48458 WHERE `ID`= 17446; +UPDATE `npc_text` SET `BroadcastTextID0`= 48471 WHERE `ID`= 17450; +UPDATE `npc_text` SET `BroadcastTextID0`= 48489 WHERE `ID`= 17451; +UPDATE `npc_text` SET `BroadcastTextID0`= 48494 WHERE `ID`= 17452; +UPDATE `npc_text` SET `BroadcastTextID0`= 48518 WHERE `ID`= 17455; +UPDATE `npc_text` SET `BroadcastTextID0`= 48519 WHERE `ID`= 17456; +UPDATE `npc_text` SET `BroadcastTextID0`= 48520 WHERE `ID`= 17457; +UPDATE `npc_text` SET `BroadcastTextID0`= 48551 WHERE `ID`= 17459; +UPDATE `npc_text` SET `BroadcastTextID0`= 48579 WHERE `ID`= 17462; +UPDATE `npc_text` SET `BroadcastTextID0`= 48581 WHERE `ID`= 17463; +UPDATE `npc_text` SET `BroadcastTextID0`= 48583 WHERE `ID`= 17464; +UPDATE `npc_text` SET `BroadcastTextID0`= 48607 WHERE `ID`= 17467; +UPDATE `npc_text` SET `BroadcastTextID0`= 48608 WHERE `ID`= 17468; +UPDATE `npc_text` SET `BroadcastTextID0`= 48650 WHERE `ID`= 17469; +UPDATE `npc_text` SET `BroadcastTextID0`= 48672 WHERE `ID`= 17472; +UPDATE `npc_text` SET `BroadcastTextID0`= 48690 WHERE `ID`= 17477; +UPDATE `npc_text` SET `BroadcastTextID0`= 48728 WHERE `ID`= 17483; +UPDATE `npc_text` SET `BroadcastTextID0`= 48742 WHERE `ID`= 17486; +UPDATE `npc_text` SET `BroadcastTextID0`= 48743 WHERE `ID`= 17485; +UPDATE `npc_text` SET `BroadcastTextID0`= 48746 WHERE `ID`= 17487; +UPDATE `npc_text` SET `BroadcastTextID0`= 48756 WHERE `ID`= 17491; +UPDATE `npc_text` SET `BroadcastTextID0`= 48762 WHERE `ID`= 17494; +UPDATE `npc_text` SET `BroadcastTextID0`= 48763 WHERE `ID`= 17495; +UPDATE `npc_text` SET `BroadcastTextID0`= 48770 WHERE `ID`= 17496; +UPDATE `npc_text` SET `BroadcastTextID0`= 48810 WHERE `ID`= 17498; +UPDATE `npc_text` SET `BroadcastTextID0`= 48810 WHERE `ID`= 16800; +UPDATE `npc_text` SET `BroadcastTextID0`= 48839 WHERE `ID`= 17500; +UPDATE `npc_text` SET `BroadcastTextID0`= 48848 WHERE `ID`= 17503; +UPDATE `npc_text` SET `BroadcastTextID0`= 48849 WHERE `ID`= 17504; +UPDATE `npc_text` SET `BroadcastTextID0`= 48850 WHERE `ID`= 17505; +UPDATE `npc_text` SET `BroadcastTextID0`= 48868 WHERE `ID`= 17511; +UPDATE `npc_text` SET `BroadcastTextID0`= 48871 WHERE `ID`= 17512; +UPDATE `npc_text` SET `BroadcastTextID0`= 48873 WHERE `ID`= 17513; +UPDATE `npc_text` SET `BroadcastTextID0`= 48874 WHERE `ID`= 17516; +UPDATE `npc_text` SET `BroadcastTextID0`= 48875 WHERE `ID`= 17517; +UPDATE `npc_text` SET `BroadcastTextID0`= 48876 WHERE `ID`= 17518; +UPDATE `npc_text` SET `BroadcastTextID0`= 48887 WHERE `ID`= 17514; +UPDATE `npc_text` SET `BroadcastTextID0`= 48892 WHERE `ID`= 17515; +UPDATE `npc_text` SET `BroadcastTextID0`= 48959 WHERE `ID`= 17521; +UPDATE `npc_text` SET `BroadcastTextID0`= 49072 WHERE `ID`= 17533; +UPDATE `npc_text` SET `BroadcastTextID0`= 49078 WHERE `ID`= 17534; +UPDATE `npc_text` SET `BroadcastTextID0`= 49083 WHERE `ID`= 17535; +UPDATE `npc_text` SET `BroadcastTextID0`= 49088 WHERE `ID`= 17536; +UPDATE `npc_text` SET `BroadcastTextID0`= 49136 WHERE `ID`= 17538; +UPDATE `npc_text` SET `BroadcastTextID0`= 49138 WHERE `ID`= 17540; +UPDATE `npc_text` SET `BroadcastTextID0`= 49141 WHERE `ID`= 17542; +UPDATE `npc_text` SET `BroadcastTextID0`= 49198 WHERE `ID`= 17552; +UPDATE `npc_text` SET `BroadcastTextID0`= 49231 WHERE `ID`= 17554; +UPDATE `npc_text` SET `BroadcastTextID0`= 49253 WHERE `ID`= 17557; +UPDATE `npc_text` SET `BroadcastTextID0`= 49283 WHERE `ID`= 17558; +UPDATE `npc_text` SET `BroadcastTextID0`= 49289 WHERE `ID`= 17559; +UPDATE `npc_text` SET `BroadcastTextID0`= 49305 WHERE `ID`= 17749; +UPDATE `npc_text` SET `BroadcastTextID0`= 49305 WHERE `ID`= 16964; +UPDATE `npc_text` SET `BroadcastTextID0`= 49343 WHERE `ID`= 17566; +UPDATE `npc_text` SET `BroadcastTextID0`= 49344 WHERE `ID`= 17567; +UPDATE `npc_text` SET `BroadcastTextID0`= 49348 WHERE `ID`= 17569; +UPDATE `npc_text` SET `BroadcastTextID0`= 49349 WHERE `ID`= 17570; +UPDATE `npc_text` SET `BroadcastTextID0`= 49350 WHERE `ID`= 17571; +UPDATE `npc_text` SET `BroadcastTextID0`= 49365 WHERE `ID`= 17578; +UPDATE `npc_text` SET `BroadcastTextID0`= 49404 WHERE `ID`= 17582; +UPDATE `npc_text` SET `BroadcastTextID0`= 49461 WHERE `ID`= 17583; +UPDATE `npc_text` SET `BroadcastTextID0`= 49540 WHERE `ID`= 17821; +UPDATE `npc_text` SET `BroadcastTextID0`= 49569 WHERE `ID`= 17586; +UPDATE `npc_text` SET `BroadcastTextID0`= 49577 WHERE `ID`= 17587; +UPDATE `npc_text` SET `BroadcastTextID0`= 49679 WHERE `ID`= 17593; +UPDATE `npc_text` SET `BroadcastTextID0`= 49694 WHERE `ID`= 17594; +UPDATE `npc_text` SET `BroadcastTextID0`= 49698 WHERE `ID`= 17595; +UPDATE `npc_text` SET `BroadcastTextID0`= 49718 WHERE `ID`= 17599; +UPDATE `npc_text` SET `BroadcastTextID0`= 49720 WHERE `ID`= 17598; +UPDATE `npc_text` SET `BroadcastTextID0`= 49721 WHERE `ID`= 17599; +UPDATE `npc_text` SET `BroadcastTextID0`= 49746 WHERE `ID`= 17600; +UPDATE `npc_text` SET `BroadcastTextID0`= 49764 WHERE `ID`= 17606; +UPDATE `npc_text` SET `BroadcastTextID0`= 49765 WHERE `ID`= 17607; +UPDATE `npc_text` SET `BroadcastTextID0`= 49766 WHERE `ID`= 17608; +UPDATE `npc_text` SET `BroadcastTextID0`= 49777 WHERE `ID`= 17791; +UPDATE `npc_text` SET `BroadcastTextID0`= 49783 WHERE `ID`= 17611; +UPDATE `npc_text` SET `BroadcastTextID0`= 49788 WHERE `ID`= 17615; +UPDATE `npc_text` SET `BroadcastTextID0`= 49789 WHERE `ID`= 17616; +UPDATE `npc_text` SET `BroadcastTextID0`= 49810 WHERE `ID`= 17619; +UPDATE `npc_text` SET `BroadcastTextID0`= 49821 WHERE `ID`= 17620; +UPDATE `npc_text` SET `BroadcastTextID0`= 49825 WHERE `ID`= 17659; +UPDATE `npc_text` SET `BroadcastTextID0`= 49847 WHERE `ID`= 17627; +UPDATE `npc_text` SET `BroadcastTextID0`= 49862 WHERE `ID`= 17629; +UPDATE `npc_text` SET `BroadcastTextID0`= 49885 WHERE `ID`= 17638; +UPDATE `npc_text` SET `BroadcastTextID0`= 49887 WHERE `ID`= 17639; +UPDATE `npc_text` SET `BroadcastTextID0`= 49975 WHERE `ID`= 17659; +UPDATE `npc_text` SET `BroadcastTextID0`= 49978 WHERE `ID`= 17661; +UPDATE `npc_text` SET `BroadcastTextID0`= 49988 WHERE `ID`= 17662; +UPDATE `npc_text` SET `BroadcastTextID0`= 49999 WHERE `ID`= 17665; +UPDATE `npc_text` SET `BroadcastTextID0`= 50001 WHERE `ID`= 17666; +UPDATE `npc_text` SET `BroadcastTextID0`= 50002 WHERE `ID`= 17667; +UPDATE `npc_text` SET `BroadcastTextID0`= 50003 WHERE `ID`= 17668; +UPDATE `npc_text` SET `BroadcastTextID0`= 50004 WHERE `ID`= 17669; +UPDATE `npc_text` SET `BroadcastTextID0`= 50006 WHERE `ID`= 17670; +UPDATE `npc_text` SET `BroadcastTextID0`= 50014 WHERE `ID`= 17671; +UPDATE `npc_text` SET `BroadcastTextID0`= 50018 WHERE `ID`= 17675; +UPDATE `npc_text` SET `BroadcastTextID0`= 50021 WHERE `ID`= 17678; +UPDATE `npc_text` SET `BroadcastTextID0`= 50023 WHERE `ID`= 17680; +UPDATE `npc_text` SET `BroadcastTextID0`= 50024 WHERE `ID`= 17681; +UPDATE `npc_text` SET `BroadcastTextID0`= 50025 WHERE `ID`= 17682; +UPDATE `npc_text` SET `BroadcastTextID0`= 50030 WHERE `ID`= 17684; +UPDATE `npc_text` SET `BroadcastTextID0`= 50037 WHERE `ID`= 17686; +UPDATE `npc_text` SET `BroadcastTextID0`= 50038 WHERE `ID`= 17687; +UPDATE `npc_text` SET `BroadcastTextID0`= 50039 WHERE `ID`= 17689; +UPDATE `npc_text` SET `BroadcastTextID0`= 50046 WHERE `ID`= 17690; +UPDATE `npc_text` SET `BroadcastTextID0`= 50047 WHERE `ID`= 17691; +UPDATE `npc_text` SET `BroadcastTextID0`= 50060 WHERE `ID`= 17704; +UPDATE `npc_text` SET `BroadcastTextID0`= 50060 WHERE `ID`= 17707; +UPDATE `npc_text` SET `BroadcastTextID0`= 50063 WHERE `ID`= 17704; +UPDATE `npc_text` SET `BroadcastTextID0`= 50063 WHERE `ID`= 17707; +UPDATE `npc_text` SET `BroadcastTextID0`= 50084 WHERE `ID`= 17710; +UPDATE `npc_text` SET `BroadcastTextID0`= 50093 WHERE `ID`= 17712; +UPDATE `npc_text` SET `BroadcastTextID0`= 50208 WHERE `ID`= 17725; +UPDATE `npc_text` SET `BroadcastTextID0`= 50233 WHERE `ID`= 17726; +UPDATE `npc_text` SET `BroadcastTextID0`= 50270 WHERE `ID`= 17735; +UPDATE `npc_text` SET `BroadcastTextID0`= 50271 WHERE `ID`= 17736; +UPDATE `npc_text` SET `BroadcastTextID0`= 50312 WHERE `ID`= 17740; +UPDATE `npc_text` SET `BroadcastTextID0`= 50382 WHERE `ID`= 17745; +UPDATE `npc_text` SET `BroadcastTextID0`= 50398 WHERE `ID`= 17746; +UPDATE `npc_text` SET `BroadcastTextID0`= 50402 WHERE `ID`= 17747; +UPDATE `npc_text` SET `BroadcastTextID0`= 50418 WHERE `ID`= 17748; +UPDATE `npc_text` SET `BroadcastTextID0`= 50429 WHERE `ID`= 17749; +UPDATE `npc_text` SET `BroadcastTextID0`= 50429 WHERE `ID`= 16964; +UPDATE `npc_text` SET `BroadcastTextID0`= 50440 WHERE `ID`= 17749; +UPDATE `npc_text` SET `BroadcastTextID0`= 50440 WHERE `ID`= 16964; +UPDATE `npc_text` SET `BroadcastTextID0`= 50497 WHERE `ID`= 17753; +UPDATE `npc_text` SET `BroadcastTextID0`= 50498 WHERE `ID`= 17754; +UPDATE `npc_text` SET `BroadcastTextID0`= 50537 WHERE `ID`= 17758; +UPDATE `npc_text` SET `BroadcastTextID0`= 50616 WHERE `ID`= 17763; +UPDATE `npc_text` SET `BroadcastTextID0`= 50623 WHERE `ID`= 17770; +UPDATE `npc_text` SET `BroadcastTextID0`= 50624 WHERE `ID`= 17772; +UPDATE `npc_text` SET `BroadcastTextID0`= 50625 WHERE `ID`= 17793; +UPDATE `npc_text` SET `BroadcastTextID0`= 50626 WHERE `ID`= 17774; +UPDATE `npc_text` SET `BroadcastTextID0`= 50629 WHERE `ID`= 17775; +UPDATE `npc_text` SET `BroadcastTextID0`= 50639 WHERE `ID`= 17789; +UPDATE `npc_text` SET `BroadcastTextID0`= 50652 WHERE `ID`= 17800; +UPDATE `npc_text` SET `BroadcastTextID0`= 50690 WHERE `ID`= 17815; +UPDATE `npc_text` SET `BroadcastTextID0`= 50707 WHERE `ID`= 17818; +UPDATE `npc_text` SET `BroadcastTextID0`= 50710 WHERE `ID`= 17819; +UPDATE `npc_text` SET `BroadcastTextID0`= 50715 WHERE `ID`= 17824; +UPDATE `npc_text` SET `BroadcastTextID0`= 50748 WHERE `ID`= 17837; +UPDATE `npc_text` SET `BroadcastTextID0`= 50751 WHERE `ID`= 17838; +UPDATE `npc_text` SET `BroadcastTextID0`= 50758 WHERE `ID`= 17840; +UPDATE `npc_text` SET `BroadcastTextID0`= 50761 WHERE `ID`= 17842; +UPDATE `npc_text` SET `BroadcastTextID0`= 50764 WHERE `ID`= 17843; +UPDATE `npc_text` SET `BroadcastTextID0`= 50824 WHERE `ID`= 17856; +UPDATE `npc_text` SET `BroadcastTextID0`= 50827 WHERE `ID`= 17857; +UPDATE `npc_text` SET `BroadcastTextID0`= 50840 WHERE `ID`= 17859; +UPDATE `npc_text` SET `BroadcastTextID0`= 50850 WHERE `ID`= 17861; +UPDATE `npc_text` SET `BroadcastTextID0`= 50858 WHERE `ID`= 17866; +UPDATE `npc_text` SET `BroadcastTextID0`= 50901 WHERE `ID`= 17878; +UPDATE `npc_text` SET `BroadcastTextID0`= 50915 WHERE `ID`= 17880; +UPDATE `npc_text` SET `BroadcastTextID0`= 50916 WHERE `ID`= 17881; +UPDATE `npc_text` SET `BroadcastTextID0`= 50952 WHERE `ID`= 17891; +UPDATE `npc_text` SET `BroadcastTextID0`= 50953 WHERE `ID`= 17892; +UPDATE `npc_text` SET `BroadcastTextID0`= 50967 WHERE `ID`= 17896; +UPDATE `npc_text` SET `BroadcastTextID0`= 51008 WHERE `ID`= 17904; +UPDATE `npc_text` SET `BroadcastTextID0`= 51009 WHERE `ID`= 17905; +UPDATE `npc_text` SET `BroadcastTextID0`= 51010 WHERE `ID`= 17906; +UPDATE `npc_text` SET `BroadcastTextID0`= 51017 WHERE `ID`= 17907; +UPDATE `npc_text` SET `BroadcastTextID0`= 51046 WHERE `ID`= 16465; +UPDATE `npc_text` SET `BroadcastTextID0`= 51188 WHERE `ID`= 17593; +UPDATE `npc_text` SET `BroadcastTextID0`= 51215 WHERE `ID`= 17941; +UPDATE `npc_text` SET `BroadcastTextID0`= 51248 WHERE `ID`= 17947; +UPDATE `npc_text` SET `BroadcastTextID0`= 51258 WHERE `ID`= 17949; +UPDATE `npc_text` SET `BroadcastTextID0`= 51267 WHERE `ID`= 17952; +UPDATE `npc_text` SET `BroadcastTextID0`= 51292 WHERE `ID`= 17956; +UPDATE `npc_text` SET `BroadcastTextID0`= 51307 WHERE `ID`= 17960; +UPDATE `npc_text` SET `BroadcastTextID0`= 51314 WHERE `ID`= 17961; +UPDATE `npc_text` SET `BroadcastTextID0`= 51341 WHERE `ID`= 17967; +UPDATE `npc_text` SET `BroadcastTextID0`= 51385 WHERE `ID`= 17972; +UPDATE `npc_text` SET `BroadcastTextID0`= 51466 WHERE `ID`= 17980; +UPDATE `npc_text` SET `BroadcastTextID0`= 51470 WHERE `ID`= 17983; +UPDATE `npc_text` SET `BroadcastTextID0`= 51498 WHERE `ID`= 17986; +UPDATE `npc_text` SET `BroadcastTextID0`= 51500 WHERE `ID`= 17988; +UPDATE `npc_text` SET `BroadcastTextID0`= 51501 WHERE `ID`= 17989; +UPDATE `npc_text` SET `BroadcastTextID0`= 51541 WHERE `ID`= 17993; +UPDATE `npc_text` SET `BroadcastTextID0`= 51555 WHERE `ID`= 17996; +UPDATE `npc_text` SET `BroadcastTextID0`= 51563 WHERE `ID`= 17997; +UPDATE `npc_text` SET `BroadcastTextID0`= 51565 WHERE `ID`= 17998; +UPDATE `npc_text` SET `BroadcastTextID0`= 51567 WHERE `ID`= 18001; +UPDATE `npc_text` SET `BroadcastTextID0`= 51579 WHERE `ID`= 18002; +UPDATE `npc_text` SET `BroadcastTextID0`= 51701 WHERE `ID`= 18116; +UPDATE `npc_text` SET `BroadcastTextID0`= 51701 WHERE `ID`= 18022; +UPDATE `npc_text` SET `BroadcastTextID0`= 51724 WHERE `ID`= 18024; +UPDATE `npc_text` SET `BroadcastTextID0`= 51742 WHERE `ID`= 18026; +UPDATE `npc_text` SET `BroadcastTextID0`= 51759 WHERE `ID`= 18028; +UPDATE `npc_text` SET `BroadcastTextID0`= 51792 WHERE `ID`= 18032; +UPDATE `npc_text` SET `BroadcastTextID0`= 51857 WHERE `ID`= 18037; +UPDATE `npc_text` SET `BroadcastTextID0`= 51861 WHERE `ID`= 18038; +UPDATE `npc_text` SET `BroadcastTextID0`= 51893 WHERE `ID`= 18044; +UPDATE `npc_text` SET `BroadcastTextID0`= 51895 WHERE `ID`= 18045; +UPDATE `npc_text` SET `BroadcastTextID0`= 51968 WHERE `ID`= 18075; +UPDATE `npc_text` SET `BroadcastTextID0`= 52050 WHERE `ID`= 18087; +UPDATE `npc_text` SET `BroadcastTextID0`= 52051 WHERE `ID`= 18088; +UPDATE `npc_text` SET `BroadcastTextID0`= 52052 WHERE `ID`= 18089; +UPDATE `npc_text` SET `BroadcastTextID0`= 52054 WHERE `ID`= 18091; +UPDATE `npc_text` SET `BroadcastTextID0`= 52057 WHERE `ID`= 18094; +UPDATE `npc_text` SET `BroadcastTextID0`= 52059 WHERE `ID`= 18095; +UPDATE `npc_text` SET `BroadcastTextID0`= 52061 WHERE `ID`= 18097; +UPDATE `npc_text` SET `BroadcastTextID0`= 52062 WHERE `ID`= 18098; +UPDATE `npc_text` SET `BroadcastTextID0`= 52064 WHERE `ID`= 18099; +UPDATE `npc_text` SET `BroadcastTextID0`= 52065 WHERE `ID`= 18100; +UPDATE `npc_text` SET `BroadcastTextID0`= 52067 WHERE `ID`= 18101; +UPDATE `npc_text` SET `BroadcastTextID0`= 52068 WHERE `ID`= 18102; +UPDATE `npc_text` SET `BroadcastTextID0`= 52069 WHERE `ID`= 18103; +UPDATE `npc_text` SET `BroadcastTextID0`= 52072 WHERE `ID`= 18105; +UPDATE `npc_text` SET `BroadcastTextID0`= 52075 WHERE `ID`= 18107; +UPDATE `npc_text` SET `BroadcastTextID0`= 52078 WHERE `ID`= 18108; +UPDATE `npc_text` SET `BroadcastTextID0`= 52126 WHERE `ID`= 18113; +UPDATE `npc_text` SET `BroadcastTextID0`= 52131 WHERE `ID`= 18116; +UPDATE `npc_text` SET `BroadcastTextID0`= 52131 WHERE `ID`= 18022; +UPDATE `npc_text` SET `BroadcastTextID0`= 52251 WHERE `ID`= 18130; +UPDATE `npc_text` SET `BroadcastTextID0`= 52253 WHERE `ID`= 18131; +UPDATE `npc_text` SET `BroadcastTextID0`= 52337 WHERE `ID`= 18137; +UPDATE `npc_text` SET `BroadcastTextID0`= 52340 WHERE `ID`= 18140; +UPDATE `npc_text` SET `BroadcastTextID0`= 52341 WHERE `ID`= 18141; +UPDATE `npc_text` SET `BroadcastTextID0`= 52351 WHERE `ID`= 18142; +UPDATE `npc_text` SET `BroadcastTextID0`= 52359 WHERE `ID`= 18144; +UPDATE `npc_text` SET `BroadcastTextID0`= 52360 WHERE `ID`= 18145; +UPDATE `npc_text` SET `BroadcastTextID0`= 52361 WHERE `ID`= 18146; +UPDATE `npc_text` SET `BroadcastTextID0`= 52364 WHERE `ID`= 18149; +UPDATE `npc_text` SET `BroadcastTextID0`= 52372 WHERE `ID`= 18156; +UPDATE `npc_text` SET `BroadcastTextID0`= 52374 WHERE `ID`= 18157; +UPDATE `npc_text` SET `BroadcastTextID0`= 52377 WHERE `ID`= 18159; +UPDATE `npc_text` SET `BroadcastTextID0`= 52378 WHERE `ID`= 18160; +UPDATE `npc_text` SET `BroadcastTextID0`= 52379 WHERE `ID`= 17800; +UPDATE `npc_text` SET `BroadcastTextID0`= 52380 WHERE `ID`= 18162; +UPDATE `npc_text` SET `BroadcastTextID0`= 52381 WHERE `ID`= 18163; +UPDATE `npc_text` SET `BroadcastTextID0`= 52383 WHERE `ID`= 18166; +UPDATE `npc_text` SET `BroadcastTextID0`= 52384 WHERE `ID`= 18167; +UPDATE `npc_text` SET `BroadcastTextID0`= 52385 WHERE `ID`= 18169; +UPDATE `npc_text` SET `BroadcastTextID0`= 52386 WHERE `ID`= 18170; +UPDATE `npc_text` SET `BroadcastTextID0`= 52387 WHERE `ID`= 16541; +UPDATE `npc_text` SET `BroadcastTextID0`= 52388 WHERE `ID`= 18172; +UPDATE `npc_text` SET `BroadcastTextID0`= 52390 WHERE `ID`= 18174; +UPDATE `npc_text` SET `BroadcastTextID0`= 52391 WHERE `ID`= 18175; +UPDATE `npc_text` SET `BroadcastTextID0`= 52392 WHERE `ID`= 18176; +UPDATE `npc_text` SET `BroadcastTextID0`= 52525 WHERE `ID`= 18195; +UPDATE `npc_text` SET `BroadcastTextID0`= 52551 WHERE `ID`= 18203; +UPDATE `npc_text` SET `BroadcastTextID0`= 52634 WHERE `ID`= 18205; +UPDATE `npc_text` SET `BroadcastTextID0`= 52756 WHERE `ID`= 18217; +UPDATE `npc_text` SET `BroadcastTextID0`= 52823 WHERE `ID`= 18224; +UPDATE `npc_text` SET `BroadcastTextID0`= 52892 WHERE `ID`= 18238; +UPDATE `npc_text` SET `BroadcastTextID0`= 52893 WHERE `ID`= 18239; +UPDATE `npc_text` SET `BroadcastTextID0`= 52895 WHERE `ID`= 18240; +UPDATE `npc_text` SET `BroadcastTextID0`= 52912 WHERE `ID`= 18242; +UPDATE `npc_text` SET `BroadcastTextID0`= 52932 WHERE `ID`= 18249; +UPDATE `npc_text` SET `BroadcastTextID0`= 52933 WHERE `ID`= 18250; +UPDATE `npc_text` SET `BroadcastTextID0`= 52934 WHERE `ID`= 18251; +UPDATE `npc_text` SET `BroadcastTextID0`= 52945 WHERE `ID`= 18256; +UPDATE `npc_text` SET `BroadcastTextID0`= 52946 WHERE `ID`= 18257; +UPDATE `npc_text` SET `BroadcastTextID0`= 52957 WHERE `ID`= 18263; +UPDATE `npc_text` SET `BroadcastTextID0`= 52958 WHERE `ID`= 18264; +UPDATE `npc_text` SET `BroadcastTextID0`= 52960 WHERE `ID`= 18266; +UPDATE `npc_text` SET `BroadcastTextID0`= 52964 WHERE `ID`= 18267; +UPDATE `npc_text` SET `BroadcastTextID0`= 52965 WHERE `ID`= 18268; +UPDATE `npc_text` SET `BroadcastTextID0`= 52970 WHERE `ID`= 18463; +UPDATE `npc_text` SET `BroadcastTextID0`= 52970 WHERE `ID`= 18269; +UPDATE `npc_text` SET `BroadcastTextID0`= 53000 WHERE `ID`= 18276; +UPDATE `npc_text` SET `BroadcastTextID0`= 53018 WHERE `ID`= 18280; +UPDATE `npc_text` SET `BroadcastTextID0`= 53027 WHERE `ID`= 18284; +UPDATE `npc_text` SET `BroadcastTextID0`= 53043 WHERE `ID`= 18287; +UPDATE `npc_text` SET `BroadcastTextID0`= 53052 WHERE `ID`= 18288; +UPDATE `npc_text` SET `BroadcastTextID0`= 53056 WHERE `ID`= 18289; +UPDATE `npc_text` SET `BroadcastTextID0`= 53059 WHERE `ID`= 18290; +UPDATE `npc_text` SET `BroadcastTextID0`= 53062 WHERE `ID`= 18291; +UPDATE `npc_text` SET `BroadcastTextID0`= 53064 WHERE `ID`= 18292; +UPDATE `npc_text` SET `BroadcastTextID0`= 53066 WHERE `ID`= 18293; +UPDATE `npc_text` SET `BroadcastTextID0`= 53068 WHERE `ID`= 18294; +UPDATE `npc_text` SET `BroadcastTextID0`= 53069 WHERE `ID`= 18295; +UPDATE `npc_text` SET `BroadcastTextID0`= 53075 WHERE `ID`= 18298; +UPDATE `npc_text` SET `BroadcastTextID0`= 53077 WHERE `ID`= 18299; +UPDATE `npc_text` SET `BroadcastTextID0`= 53078 WHERE `ID`= 18300; +UPDATE `npc_text` SET `BroadcastTextID0`= 53081 WHERE `ID`= 18302; +UPDATE `npc_text` SET `BroadcastTextID0`= 53082 WHERE `ID`= 18303; +UPDATE `npc_text` SET `BroadcastTextID0`= 53103 WHERE `ID`= 18307; +UPDATE `npc_text` SET `BroadcastTextID0`= 53111 WHERE `ID`= 18312; +UPDATE `npc_text` SET `BroadcastTextID0`= 53117 WHERE `ID`= 18313; +UPDATE `npc_text` SET `BroadcastTextID0`= 53118 WHERE `ID`= 18314; +UPDATE `npc_text` SET `BroadcastTextID0`= 53125 WHERE `ID`= 18317; +UPDATE `npc_text` SET `BroadcastTextID0`= 53132 WHERE `ID`= 18318; +UPDATE `npc_text` SET `BroadcastTextID0`= 53142 WHERE `ID`= 18321; +UPDATE `npc_text` SET `BroadcastTextID0`= 53142 WHERE `ID`= 18322; +UPDATE `npc_text` SET `BroadcastTextID0`= 53144 WHERE `ID`= 18321; +UPDATE `npc_text` SET `BroadcastTextID0`= 53144 WHERE `ID`= 18322; +UPDATE `npc_text` SET `BroadcastTextID0`= 53164 WHERE `ID`= 18325; +UPDATE `npc_text` SET `BroadcastTextID0`= 53191 WHERE `ID`= 18330; +UPDATE `npc_text` SET `BroadcastTextID0`= 53249 WHERE `ID`= 18342; +UPDATE `npc_text` SET `BroadcastTextID0`= 53312 WHERE `ID`= 18348; +UPDATE `npc_text` SET `BroadcastTextID0`= 53319 WHERE `ID`= 18350; +UPDATE `npc_text` SET `BroadcastTextID0`= 53323 WHERE `ID`= 18352; +UPDATE `npc_text` SET `BroadcastTextID0`= 53328 WHERE `ID`= 18353; +UPDATE `npc_text` SET `BroadcastTextID0`= 53334 WHERE `ID`= 18354; +UPDATE `npc_text` SET `BroadcastTextID0`= 53398 WHERE `ID`= 18362; +UPDATE `npc_text` SET `BroadcastTextID0`= 53399 WHERE `ID`= 18363; +UPDATE `npc_text` SET `BroadcastTextID0`= 53401 WHERE `ID`= 18364; +UPDATE `npc_text` SET `BroadcastTextID0`= 53402 WHERE `ID`= 18365; +UPDATE `npc_text` SET `BroadcastTextID0`= 53404 WHERE `ID`= 18366; +UPDATE `npc_text` SET `BroadcastTextID0`= 53414 WHERE `ID`= 18369; +UPDATE `npc_text` SET `BroadcastTextID0`= 53416 WHERE `ID`= 18370; +UPDATE `npc_text` SET `BroadcastTextID0`= 53418 WHERE `ID`= 18371; +UPDATE `npc_text` SET `BroadcastTextID0`= 53421 WHERE `ID`= 18372; +UPDATE `npc_text` SET `BroadcastTextID0`= 53443 WHERE `ID`= 18376; +UPDATE `npc_text` SET `BroadcastTextID0`= 53501 WHERE `ID`= 18390; +UPDATE `npc_text` SET `BroadcastTextID0`= 53754 WHERE `ID`= 18444; +UPDATE `npc_text` SET `BroadcastTextID0`= 53773 WHERE `ID`= 18452; +UPDATE `npc_text` SET `BroadcastTextID0`= 53794 WHERE `ID`= 18463; +UPDATE `npc_text` SET `BroadcastTextID0`= 53794 WHERE `ID`= 18269; +UPDATE `npc_text` SET `BroadcastTextID0`= 54082 WHERE `ID`= 18512; +UPDATE `npc_text` SET `BroadcastTextID0`= 54163 WHERE `ID`= 18521; +UPDATE `npc_text` SET `BroadcastTextID0`= 54267 WHERE `ID`= 18555; +UPDATE `npc_text` SET `BroadcastTextID0`= 54324 WHERE `ID`= 18559; +UPDATE `npc_text` SET `BroadcastTextID0`= 54326 WHERE `ID`= 18560; +UPDATE `npc_text` SET `BroadcastTextID0`= 54330 WHERE `ID`= 18562; +UPDATE `npc_text` SET `BroadcastTextID0`= 54332 WHERE `ID`= 18563; +UPDATE `npc_text` SET `BroadcastTextID0`= 54451 WHERE `ID`= 18583; +UPDATE `npc_text` SET `BroadcastTextID0`= 54524 WHERE `ID`= 18593; +UPDATE `npc_text` SET `BroadcastTextID0`= 54642 WHERE `ID`= 18613; +UPDATE `npc_text` SET `BroadcastTextID0`= 55137 WHERE `ID`= 18698; +UPDATE `npc_text` SET `BroadcastTextID0`= 55393 WHERE `ID`= 18740; +UPDATE `npc_text` SET `BroadcastTextID0`= 55766 WHERE `ID`= 18799; +UPDATE `npc_text` SET `BroadcastTextID0`= 55771 WHERE `ID`= 18800; +UPDATE `npc_text` SET `BroadcastTextID0`= 55985 WHERE `ID`= 18848; +UPDATE `npc_text` SET `BroadcastTextID0`= 55985 WHERE `ID`= 18877; +UPDATE `npc_text` SET `BroadcastTextID0`= 56021 WHERE `ID`= 18851; +UPDATE `npc_text` SET `BroadcastTextID0`= 56077 WHERE `ID`= 18867; +UPDATE `npc_text` SET `BroadcastTextID0`= 56304 WHERE `ID`= 18904; +UPDATE `npc_text` SET `BroadcastTextID0`= 56523 WHERE `ID`= 18867; +UPDATE `npc_text` SET `BroadcastTextID0`= 56546 WHERE `ID`= 18941; +UPDATE `npc_text` SET `BroadcastTextID0`= 56547 WHERE `ID`= 18942; +UPDATE `npc_text` SET `BroadcastTextID0`= 56581 WHERE `ID`= 18951; +UPDATE `npc_text` SET `BroadcastTextID0`= 56585 WHERE `ID`= 18953; +UPDATE `npc_text` SET `BroadcastTextID0`= 56587 WHERE `ID`= 18954; +UPDATE `npc_text` SET `BroadcastTextID0`= 56602 WHERE `ID`= 18959; +UPDATE `npc_text` SET `BroadcastTextID0`= 56602 WHERE `ID`= 16536; +UPDATE `npc_text` SET `BroadcastTextID0`= 56609 WHERE `ID`= 18962; +UPDATE `npc_text` SET `BroadcastTextID0`= 56610 WHERE `ID`= 18963; +UPDATE `npc_text` SET `BroadcastTextID0`= 56672 WHERE `ID`= 18965; +UPDATE `npc_text` SET `BroadcastTextID0`= 56673 WHERE `ID`= 18966; +UPDATE `npc_text` SET `BroadcastTextID0`= 56709 WHERE `ID`= 18978; +UPDATE `npc_text` SET `BroadcastTextID0`= 56887 WHERE `ID`= 18991; +UPDATE `npc_text` SET `BroadcastTextID0`= 56893 WHERE `ID`= 19020; +UPDATE `npc_text` SET `BroadcastTextID0`= 56941 WHERE `ID`= 19016; +UPDATE `npc_text` SET `BroadcastTextID0`= 56948 WHERE `ID`= 19019; +UPDATE `npc_text` SET `BroadcastTextID0`= 56951 WHERE `ID`= 19021; +UPDATE `npc_text` SET `BroadcastTextID0`= 56952 WHERE `ID`= 19022; +UPDATE `npc_text` SET `BroadcastTextID0`= 56953 WHERE `ID`= 19023; +UPDATE `npc_text` SET `BroadcastTextID0`= 58309 WHERE `ID`= 18321; +UPDATE `npc_text` SET `BroadcastTextID0`= 58309 WHERE `ID`= 18322; +UPDATE `npc_text` SET `BroadcastTextID0`= 61023 WHERE `ID`= 18321; +UPDATE `npc_text` SET `BroadcastTextID0`= 61023 WHERE `ID`= 18322; +UPDATE `npc_text` SET `BroadcastTextID0`= 61839 WHERE `ID`= 18321; +UPDATE `npc_text` SET `BroadcastTextID0`= 61839 WHERE `ID`= 18322; +UPDATE `npc_text` SET `BroadcastTextID0`= 62303 WHERE `ID`= 18321; +UPDATE `npc_text` SET `BroadcastTextID0`= 62303 WHERE `ID`= 18322; +UPDATE `npc_text` SET `BroadcastTextID0`= 62321 WHERE `ID`= 18583; +UPDATE `npc_text` SET `BroadcastTextID0`= 62792 WHERE `ID`= 17235; +UPDATE `npc_text` SET `BroadcastTextID0`= 63178 WHERE `ID`= 17805; +UPDATE `npc_text` SET `BroadcastTextID0`= 63178 WHERE `ID`= 17804; +UPDATE `npc_text` SET `BroadcastTextID0`= 65124 WHERE `ID`= 17235; +UPDATE `npc_text` SET `BroadcastTextID0`= 65655 WHERE `ID`= 17805; +UPDATE `npc_text` SET `BroadcastTextID0`= 65655 WHERE `ID`= 17804; +UPDATE `npc_text` SET `BroadcastTextID0`= 67509 WHERE `ID`= 17805; +UPDATE `npc_text` SET `BroadcastTextID0`= 67509 WHERE `ID`= 17804; +UPDATE `npc_text` SET `BroadcastTextID0`= 68570 WHERE `ID`= 17046; +UPDATE `npc_text` SET `BroadcastTextID0`= 69196 WHERE `ID`= 17805; +UPDATE `npc_text` SET `BroadcastTextID0`= 69196 WHERE `ID`= 17804; +UPDATE `npc_text` SET `BroadcastTextID0`= 69414 WHERE `ID`= 16500; +UPDATE `npc_text` SET `BroadcastTextID0`= 72224 WHERE `ID`= 17805; +UPDATE `npc_text` SET `BroadcastTextID0`= 72224 WHERE `ID`= 17804; +UPDATE `npc_text` SET `BroadcastTextID0`= 2821 WHERE `ID`= 194; +UPDATE `npc_text` SET `BroadcastTextID0`= 3459 WHERE `ID`= 34; +UPDATE `npc_text` SET `BroadcastTextID0`= 4591 WHERE `ID`= 8318; +UPDATE `npc_text` SET `BroadcastTextID0`= 4858 WHERE `ID`= 34; +UPDATE `npc_text` SET `BroadcastTextID0`= 4978 WHERE `ID`= 2673; +UPDATE `npc_text` SET `BroadcastTextID0`= 5888 WHERE `ID`= 34; +UPDATE `npc_text` SET `BroadcastTextID0`= 6617 WHERE `ID`= 34; +UPDATE `npc_text` SET `BroadcastTextID0`= 6705 WHERE `ID`= 34; +UPDATE `npc_text` SET `BroadcastTextID0`= 6775 WHERE `ID`= 34; +UPDATE `npc_text` SET `BroadcastTextID0`= 7130 WHERE `ID`= 8753; +UPDATE `npc_text` SET `BroadcastTextID0`= 7131 WHERE `ID`= 8753; +UPDATE `npc_text` SET `BroadcastTextID0`= 7132 WHERE `ID`= 8753; +UPDATE `npc_text` SET `BroadcastTextID0`= 7163 WHERE `ID`= 14735; +UPDATE `npc_text` SET `BroadcastTextID0`= 7660 WHERE `ID`= 9397; +UPDATE `npc_text` SET `BroadcastTextID0`= 8817 WHERE `ID`= 6236; +UPDATE `npc_text` SET `BroadcastTextID0`= 8826 WHERE `ID`= 6242; +UPDATE `npc_text` SET `BroadcastTextID0`= 9106 WHERE `ID`= 6714; +UPDATE `npc_text` SET `BroadcastTextID0`= 9148 WHERE `ID`= 14735; +UPDATE `npc_text` SET `BroadcastTextID0`= 9238 WHERE `ID`= 6799; +UPDATE `npc_text` SET `BroadcastTextID0`= 9244 WHERE `ID`= 6805; +UPDATE `npc_text` SET `BroadcastTextID0`= 9246 WHERE `ID`= 6807; +UPDATE `npc_text` SET `BroadcastTextID0`= 9249 WHERE `ID`= 6810; +UPDATE `npc_text` SET `BroadcastTextID0`= 9263 WHERE `ID`= 6813; +UPDATE `npc_text` SET `BroadcastTextID0`= 9266 WHERE `ID`= 6816; +UPDATE `npc_text` SET `BroadcastTextID0`= 9269 WHERE `ID`= 6819; +UPDATE `npc_text` SET `BroadcastTextID0`= 9272 WHERE `ID`= 6822; +UPDATE `npc_text` SET `BroadcastTextID0`= 9276 WHERE `ID`= 6826; +UPDATE `npc_text` SET `BroadcastTextID0`= 9279 WHERE `ID`= 6829; +UPDATE `npc_text` SET `BroadcastTextID0`= 9285 WHERE `ID`= 6835; +UPDATE `npc_text` SET `BroadcastTextID0`= 9288 WHERE `ID`= 6826; +UPDATE `npc_text` SET `BroadcastTextID0`= 9328 WHERE `ID`= 6865; +UPDATE `npc_text` SET `BroadcastTextID0`= 9329 WHERE `ID`= 6865; +UPDATE `npc_text` SET `BroadcastTextID0`= 9340 WHERE `ID`= 6873; +UPDATE `npc_text` SET `BroadcastTextID0`= 9497 WHERE `ID`= 4; +UPDATE `npc_text` SET `BroadcastTextID0`= 9573 WHERE `ID`= 6984; +UPDATE `npc_text` SET `BroadcastTextID0`= 9789 WHERE `ID`= 7057; +UPDATE `npc_text` SET `BroadcastTextID0`= 9874 WHERE `ID`= 7178; +UPDATE `npc_text` SET `BroadcastTextID0`= 9875 WHERE `ID`= 5; +UPDATE `npc_text` SET `BroadcastTextID0`= 10034 WHERE `ID`= 7335; +UPDATE `npc_text` SET `BroadcastTextID0`= 10117 WHERE `ID`= 7381; +UPDATE `npc_text` SET `BroadcastTextID0`= 10163 WHERE `ID`= 7396; +UPDATE `npc_text` SET `BroadcastTextID0`= 10165 WHERE `ID`= 7398; +UPDATE `npc_text` SET `BroadcastTextID0`= 10166 WHERE `ID`= 7399; +UPDATE `npc_text` SET `BroadcastTextID0`= 12202 WHERE `ID`= 8482; +UPDATE `npc_text` SET `BroadcastTextID0`= 12204 WHERE `ID`= 8483; +UPDATE `npc_text` SET `BroadcastTextID0`= 12246 WHERE `ID`= 8506; +UPDATE `npc_text` SET `BroadcastTextID0`= 12403 WHERE `ID`= 8555; +UPDATE `npc_text` SET `BroadcastTextID0`= 12474 WHERE `ID`= 8593; +UPDATE `npc_text` SET `BroadcastTextID0`= 12475 WHERE `ID`= 8594; +UPDATE `npc_text` SET `BroadcastTextID0`= 12784 WHERE `ID`= 8676; +UPDATE `npc_text` SET `BroadcastTextID0`= 13306 WHERE `ID`= 8753; +UPDATE `npc_text` SET `BroadcastTextID0`= 13506 WHERE `ID`= 8814; +UPDATE `npc_text` SET `BroadcastTextID0`= 14050 WHERE `ID`= 8969; +UPDATE `npc_text` SET `BroadcastTextID0`= 14385 WHERE `ID`= 3; +UPDATE `npc_text` SET `BroadcastTextID0`= 14869 WHERE `ID`= 9225; +UPDATE `npc_text` SET `BroadcastTextID0`= 14877 WHERE `ID`= 9228; +UPDATE `npc_text` SET `BroadcastTextID0`= 14993 WHERE `ID`= 9273; +UPDATE `npc_text` SET `BroadcastTextID0`= 15444 WHERE `ID`= 9396; +UPDATE `npc_text` SET `BroadcastTextID0`= 15446 WHERE `ID`= 9397; +UPDATE `npc_text` SET `BroadcastTextID0`= 15535 WHERE `ID`= 9430; +UPDATE `npc_text` SET `BroadcastTextID0`= 16967 WHERE `ID`= 194; +UPDATE `npc_text` SET `BroadcastTextID0`= 17477 WHERE `ID`= 9991; +UPDATE `npc_text` SET `BroadcastTextID0`= 17477 WHERE `ID`= 9935; +UPDATE `npc_text` SET `BroadcastTextID0`= 17948 WHERE `ID`= 10020; +UPDATE `npc_text` SET `BroadcastTextID0`= 17961 WHERE `ID`= 13578; +UPDATE `npc_text` SET `BroadcastTextID0`= 18423 WHERE `ID`= 10120; +UPDATE `npc_text` SET `BroadcastTextID0`= 18424 WHERE `ID`= 10122; +UPDATE `npc_text` SET `BroadcastTextID0`= 18426 WHERE `ID`= 10123; +UPDATE `npc_text` SET `BroadcastTextID0`= 18827 WHERE `ID`= 10278; +UPDATE `npc_text` SET `BroadcastTextID0`= 19136 WHERE `ID`= 10368; +UPDATE `npc_text` SET `BroadcastTextID0`= 19183 WHERE `ID`= 10375; +UPDATE `npc_text` SET `BroadcastTextID0`= 19628 WHERE `ID`= 10510; +UPDATE `npc_text` SET `BroadcastTextID0`= 19932 WHERE `ID`= 10635; +UPDATE `npc_text` SET `BroadcastTextID0`= 20507 WHERE `ID`= 10738; +UPDATE `npc_text` SET `BroadcastTextID0`= 20975 WHERE `ID`= 2566; +UPDATE `npc_text` SET `BroadcastTextID0`= 21517 WHERE `ID`= 10959; +UPDATE `npc_text` SET `BroadcastTextID0`= 21660 WHERE `ID`= 10982; +UPDATE `npc_text` SET `BroadcastTextID0`= 22574 WHERE `ID`= 11538; +UPDATE `npc_text` SET `BroadcastTextID0`= 23070 WHERE `ID`= 11872; +UPDATE `npc_text` SET `BroadcastTextID0`= 23555 WHERE `ID`= 12117; +UPDATE `npc_text` SET `BroadcastTextID0`= 25184 WHERE `ID`= 12517; +UPDATE `npc_text` SET `BroadcastTextID0`= 25188 WHERE `ID`= 12518; +UPDATE `npc_text` SET `BroadcastTextID0`= 25189 WHERE `ID`= 12519; +UPDATE `npc_text` SET `BroadcastTextID0`= 25266 WHERE `ID`= 12535; +UPDATE `npc_text` SET `BroadcastTextID0`= 25862 WHERE `ID`= 12665; +UPDATE `npc_text` SET `BroadcastTextID0`= 27139 WHERE `ID`= 12971; +UPDATE `npc_text` SET `BroadcastTextID0`= 27141 WHERE `ID`= 12973; +UPDATE `npc_text` SET `BroadcastTextID0`= 29493 WHERE `ID`= 8753; +UPDATE `npc_text` SET `BroadcastTextID0`= 30333 WHERE `ID`= 13578; +UPDATE `npc_text` SET `BroadcastTextID0`= 30864 WHERE `ID`= 14125; +UPDATE `npc_text` SET `BroadcastTextID0`= 30864 WHERE `ID`= 48; +UPDATE `npc_text` SET `BroadcastTextID0`= 31982 WHERE `ID`= 13938; +UPDATE `npc_text` SET `BroadcastTextID0`= 32778 WHERE `ID`= 14125; +UPDATE `npc_text` SET `BroadcastTextID0`= 32778 WHERE `ID`= 48; +UPDATE `npc_text` SET `BroadcastTextID0`= 32779 WHERE `ID`= 14125; +UPDATE `npc_text` SET `BroadcastTextID0`= 32779 WHERE `ID`= 48; +UPDATE `npc_text` SET `BroadcastTextID0`= 32780 WHERE `ID`= 14125; +UPDATE `npc_text` SET `BroadcastTextID0`= 32780 WHERE `ID`= 48; +UPDATE `npc_text` SET `BroadcastTextID0`= 32808 WHERE `ID`= 8753; +UPDATE `npc_text` SET `BroadcastTextID0`= 33146 WHERE `ID`= 14289; +UPDATE `npc_text` SET `BroadcastTextID0`= 33147 WHERE `ID`= 14297; +UPDATE `npc_text` SET `BroadcastTextID0`= 33149 WHERE `ID`= 14298; +UPDATE `npc_text` SET `BroadcastTextID0`= 33151 WHERE `ID`= 14300; +UPDATE `npc_text` SET `BroadcastTextID0`= 33156 WHERE `ID`= 14290; +UPDATE `npc_text` SET `BroadcastTextID0`= 33158 WHERE `ID`= 14292; +UPDATE `npc_text` SET `BroadcastTextID0`= 33159 WHERE `ID`= 14293; +UPDATE `npc_text` SET `BroadcastTextID0`= 33175 WHERE `ID`= 14260; +UPDATE `npc_text` SET `BroadcastTextID0`= 33185 WHERE `ID`= 14264; +UPDATE `npc_text` SET `BroadcastTextID0`= 33208 WHERE `ID`= 14275; +UPDATE `npc_text` SET `BroadcastTextID0`= 33344 WHERE `ID`= 14312; +UPDATE `npc_text` SET `BroadcastTextID0`= 33349 WHERE `ID`= 14315; +UPDATE `npc_text` SET `BroadcastTextID0`= 33433 WHERE `ID`= 14336; +UPDATE `npc_text` SET `BroadcastTextID0`= 33434 WHERE `ID`= 14337; +UPDATE `npc_text` SET `BroadcastTextID0`= 33435 WHERE `ID`= 14338; +UPDATE `npc_text` SET `BroadcastTextID0`= 33513 WHERE `ID`= 14344; +UPDATE `npc_text` SET `BroadcastTextID0`= 33542 WHERE `ID`= 14346; +UPDATE `npc_text` SET `BroadcastTextID0`= 33965 WHERE `ID`= 14432; +UPDATE `npc_text` SET `BroadcastTextID0`= 34036 WHERE `ID`= 14447; +UPDATE `npc_text` SET `BroadcastTextID0`= 34394 WHERE `ID`= 14488; +UPDATE `npc_text` SET `BroadcastTextID0`= 34416 WHERE `ID`= 14494; +UPDATE `npc_text` SET `BroadcastTextID0`= 34463 WHERE `ID`= 14505; +UPDATE `npc_text` SET `BroadcastTextID0`= 34467 WHERE `ID`= 14507; +UPDATE `npc_text` SET `BroadcastTextID0`= 34469 WHERE `ID`= 14508; +UPDATE `npc_text` SET `BroadcastTextID0`= 34470 WHERE `ID`= 14509; +UPDATE `npc_text` SET `BroadcastTextID0`= 34483 WHERE `ID`= 14514; +UPDATE `npc_text` SET `BroadcastTextID0`= 34485 WHERE `ID`= 14517; +UPDATE `npc_text` SET `BroadcastTextID0`= 34487 WHERE `ID`= 14518; +UPDATE `npc_text` SET `BroadcastTextID0`= 34492 WHERE `ID`= 14520; +UPDATE `npc_text` SET `BroadcastTextID0`= 34494 WHERE `ID`= 14521; +UPDATE `npc_text` SET `BroadcastTextID0`= 34510 WHERE `ID`= 14523; +UPDATE `npc_text` SET `BroadcastTextID0`= 34523 WHERE `ID`= 14529; +UPDATE `npc_text` SET `BroadcastTextID0`= 34548 WHERE `ID`= 14532; +UPDATE `npc_text` SET `BroadcastTextID0`= 34584 WHERE `ID`= 14541; +UPDATE `npc_text` SET `BroadcastTextID0`= 34637 WHERE `ID`= 14547; +UPDATE `npc_text` SET `BroadcastTextID0`= 34638 WHERE `ID`= 14548; +UPDATE `npc_text` SET `BroadcastTextID0`= 34692 WHERE `ID`= 14553; +UPDATE `npc_text` SET `BroadcastTextID0`= 34710 WHERE `ID`= 14555; +UPDATE `npc_text` SET `BroadcastTextID0`= 34724 WHERE `ID`= 14557; +UPDATE `npc_text` SET `BroadcastTextID0`= 34790 WHERE `ID`= 14565; +UPDATE `npc_text` SET `BroadcastTextID0`= 34791 WHERE `ID`= 14564; +UPDATE `npc_text` SET `BroadcastTextID0`= 34816 WHERE `ID`= 14566; +UPDATE `npc_text` SET `BroadcastTextID0`= 34838 WHERE `ID`= 14568; +UPDATE `npc_text` SET `BroadcastTextID0`= 34842 WHERE `ID`= 14571; +UPDATE `npc_text` SET `BroadcastTextID0`= 34843 WHERE `ID`= 14572; +UPDATE `npc_text` SET `BroadcastTextID0`= 34852 WHERE `ID`= 14574; +UPDATE `npc_text` SET `BroadcastTextID0`= 34853 WHERE `ID`= 14575; +UPDATE `npc_text` SET `BroadcastTextID0`= 34855 WHERE `ID`= 14576; +UPDATE `npc_text` SET `BroadcastTextID0`= 34857 WHERE `ID`= 14577; +UPDATE `npc_text` SET `BroadcastTextID0`= 34869 WHERE `ID`= 14579; +UPDATE `npc_text` SET `BroadcastTextID0`= 34876 WHERE `ID`= 14580; +UPDATE `npc_text` SET `BroadcastTextID0`= 34895 WHERE `ID`= 14585; +UPDATE `npc_text` SET `BroadcastTextID0`= 34936 WHERE `ID`= 14591; +UPDATE `npc_text` SET `BroadcastTextID0`= 34945 WHERE `ID`= 14593; +UPDATE `npc_text` SET `BroadcastTextID0`= 34949 WHERE `ID`= 14595; +UPDATE `npc_text` SET `BroadcastTextID0`= 34950 WHERE `ID`= 14596; +UPDATE `npc_text` SET `BroadcastTextID0`= 34951 WHERE `ID`= 14597; +UPDATE `npc_text` SET `BroadcastTextID0`= 34953 WHERE `ID`= 14599; +UPDATE `npc_text` SET `BroadcastTextID0`= 34954 WHERE `ID`= 14600; +UPDATE `npc_text` SET `BroadcastTextID0`= 34959 WHERE `ID`= 15000; +UPDATE `npc_text` SET `BroadcastTextID0`= 34959 WHERE `ID`= 14605; +UPDATE `npc_text` SET `BroadcastTextID0`= 35011 WHERE `ID`= 14612; +UPDATE `npc_text` SET `BroadcastTextID0`= 35019 WHERE `ID`= 14616; +UPDATE `npc_text` SET `BroadcastTextID0`= 35048 WHERE `ID`= 14623; +UPDATE `npc_text` SET `BroadcastTextID0`= 35049 WHERE `ID`= 14624; +UPDATE `npc_text` SET `BroadcastTextID0`= 35053 WHERE `ID`= 14625; +UPDATE `npc_text` SET `BroadcastTextID0`= 35092 WHERE `ID`= 14636; +UPDATE `npc_text` SET `BroadcastTextID0`= 35093 WHERE `ID`= 14637; +UPDATE `npc_text` SET `BroadcastTextID0`= 35094 WHERE `ID`= 14638; +UPDATE `npc_text` SET `BroadcastTextID0`= 35098 WHERE `ID`= 14642; +UPDATE `npc_text` SET `BroadcastTextID0`= 35099 WHERE `ID`= 14643; +UPDATE `npc_text` SET `BroadcastTextID0`= 35100 WHERE `ID`= 14644; +UPDATE `npc_text` SET `BroadcastTextID0`= 35111 WHERE `ID`= 14649; +UPDATE `npc_text` SET `BroadcastTextID0`= 35122 WHERE `ID`= 14652; +UPDATE `npc_text` SET `BroadcastTextID0`= 35261 WHERE `ID`= 14683; +UPDATE `npc_text` SET `BroadcastTextID0`= 35289 WHERE `ID`= 14684; +UPDATE `npc_text` SET `BroadcastTextID0`= 35333 WHERE `ID`= 14690; +UPDATE `npc_text` SET `BroadcastTextID0`= 35349 WHERE `ID`= 14694; +UPDATE `npc_text` SET `BroadcastTextID0`= 35350 WHERE `ID`= 14695; +UPDATE `npc_text` SET `BroadcastTextID0`= 35353 WHERE `ID`= 14697; +UPDATE `npc_text` SET `BroadcastTextID0`= 35355 WHERE `ID`= 14698; +UPDATE `npc_text` SET `BroadcastTextID0`= 35361 WHERE `ID`= 14700; +UPDATE `npc_text` SET `BroadcastTextID0`= 35364 WHERE `ID`= 14702; +UPDATE `npc_text` SET `BroadcastTextID0`= 35478 WHERE `ID`= 14729; +UPDATE `npc_text` SET `BroadcastTextID0`= 35482 WHERE `ID`= 14731; +UPDATE `npc_text` SET `BroadcastTextID0`= 35501 WHERE `ID`= 14735; +UPDATE `npc_text` SET `BroadcastTextID0`= 35563 WHERE `ID`= 14739; +UPDATE `npc_text` SET `BroadcastTextID0`= 35565 WHERE `ID`= 14740; +UPDATE `npc_text` SET `BroadcastTextID0`= 35866 WHERE `ID`= 14762; +UPDATE `npc_text` SET `BroadcastTextID0`= 35884 WHERE `ID`= 14766; +UPDATE `npc_text` SET `BroadcastTextID0`= 35946 WHERE `ID`= 14786; +UPDATE `npc_text` SET `BroadcastTextID0`= 35958 WHERE `ID`= 14792; +UPDATE `npc_text` SET `BroadcastTextID0`= 35962 WHERE `ID`= 14795; +UPDATE `npc_text` SET `BroadcastTextID0`= 35963 WHERE `ID`= 14796; +UPDATE `npc_text` SET `BroadcastTextID0`= 35964 WHERE `ID`= 14797; +UPDATE `npc_text` SET `BroadcastTextID0`= 35965 WHERE `ID`= 14798; +UPDATE `npc_text` SET `BroadcastTextID0`= 35966 WHERE `ID`= 14799; +UPDATE `npc_text` SET `BroadcastTextID0`= 35974 WHERE `ID`= 14802; +UPDATE `npc_text` SET `BroadcastTextID0`= 35975 WHERE `ID`= 14803; +UPDATE `npc_text` SET `BroadcastTextID0`= 35976 WHERE `ID`= 14805; +UPDATE `npc_text` SET `BroadcastTextID0`= 35978 WHERE `ID`= 14806; +UPDATE `npc_text` SET `BroadcastTextID0`= 35980 WHERE `ID`= 14807; +UPDATE `npc_text` SET `BroadcastTextID0`= 35981 WHERE `ID`= 14808; +UPDATE `npc_text` SET `BroadcastTextID0`= 36042 WHERE `ID`= 14826; +UPDATE `npc_text` SET `BroadcastTextID0`= 36054 WHERE `ID`= 14831; +UPDATE `npc_text` SET `BroadcastTextID0`= 36055 WHERE `ID`= 14832; +UPDATE `npc_text` SET `BroadcastTextID0`= 36056 WHERE `ID`= 14833; +UPDATE `npc_text` SET `BroadcastTextID0`= 36065 WHERE `ID`= 14838; +UPDATE `npc_text` SET `BroadcastTextID0`= 36066 WHERE `ID`= 14839; +UPDATE `npc_text` SET `BroadcastTextID0`= 36074 WHERE `ID`= 14846; +UPDATE `npc_text` SET `BroadcastTextID0`= 36076 WHERE `ID`= 14848; +UPDATE `npc_text` SET `BroadcastTextID0`= 36077 WHERE `ID`= 14849; +UPDATE `npc_text` SET `BroadcastTextID0`= 36097 WHERE `ID`= 14860; +UPDATE `npc_text` SET `BroadcastTextID0`= 36127 WHERE `ID`= 14863; +UPDATE `npc_text` SET `BroadcastTextID0`= 36142 WHERE `ID`= 14867; +UPDATE `npc_text` SET `BroadcastTextID0`= 36149 WHERE `ID`= 14868; +UPDATE `npc_text` SET `BroadcastTextID0`= 36150 WHERE `ID`= 14869; +UPDATE `npc_text` SET `BroadcastTextID0`= 36153 WHERE `ID`= 14871; +UPDATE `npc_text` SET `BroadcastTextID0`= 36164 WHERE `ID`= 14873; +UPDATE `npc_text` SET `BroadcastTextID0`= 36168 WHERE `ID`= 14874; +UPDATE `npc_text` SET `BroadcastTextID0`= 36179 WHERE `ID`= 14875; +UPDATE `npc_text` SET `BroadcastTextID0`= 36188 WHERE `ID`= 14879; +UPDATE `npc_text` SET `BroadcastTextID0`= 36196 WHERE `ID`= 14881; +UPDATE `npc_text` SET `BroadcastTextID0`= 36205 WHERE `ID`= 14886; +UPDATE `npc_text` SET `BroadcastTextID0`= 36250 WHERE `ID`= 14888; +UPDATE `npc_text` SET `BroadcastTextID0`= 36253 WHERE `ID`= 14897; +UPDATE `npc_text` SET `BroadcastTextID0`= 36298 WHERE `ID`= 14932; +UPDATE `npc_text` SET `BroadcastTextID0`= 36319 WHERE `ID`= 14938; +UPDATE `npc_text` SET `BroadcastTextID0`= 36350 WHERE `ID`= 14945; +UPDATE `npc_text` SET `BroadcastTextID0`= 36352 WHERE `ID`= 14946; +UPDATE `npc_text` SET `BroadcastTextID0`= 36354 WHERE `ID`= 14947; +UPDATE `npc_text` SET `BroadcastTextID0`= 36356 WHERE `ID`= 14948; +UPDATE `npc_text` SET `BroadcastTextID0`= 36358 WHERE `ID`= 14949; +UPDATE `npc_text` SET `BroadcastTextID0`= 36360 WHERE `ID`= 14950; +UPDATE `npc_text` SET `BroadcastTextID0`= 36362 WHERE `ID`= 14951; +UPDATE `npc_text` SET `BroadcastTextID0`= 36364 WHERE `ID`= 14952; +UPDATE `npc_text` SET `BroadcastTextID0`= 36371 WHERE `ID`= 14956; +UPDATE `npc_text` SET `BroadcastTextID0`= 36374 WHERE `ID`= 14959; +UPDATE `npc_text` SET `BroadcastTextID0`= 36386 WHERE `ID`= 14961; +UPDATE `npc_text` SET `BroadcastTextID0`= 36397 WHERE `ID`= 14964; +UPDATE `npc_text` SET `BroadcastTextID0`= 36398 WHERE `ID`= 14965; +UPDATE `npc_text` SET `BroadcastTextID0`= 36401 WHERE `ID`= 14967; +UPDATE `npc_text` SET `BroadcastTextID0`= 36409 WHERE `ID`= 14971; +UPDATE `npc_text` SET `BroadcastTextID0`= 36422 WHERE `ID`= 14976; +UPDATE `npc_text` SET `BroadcastTextID0`= 36426 WHERE `ID`= 14977; +UPDATE `npc_text` SET `BroadcastTextID0`= 36453 WHERE `ID`= 14981; +UPDATE `npc_text` SET `BroadcastTextID0`= 36457 WHERE `ID`= 14985; +UPDATE `npc_text` SET `BroadcastTextID0`= 36459 WHERE `ID`= 14986; +UPDATE `npc_text` SET `BroadcastTextID0`= 36468 WHERE `ID`= 14987; +UPDATE `npc_text` SET `BroadcastTextID0`= 36469 WHERE `ID`= 14988; +UPDATE `npc_text` SET `BroadcastTextID0`= 36471 WHERE `ID`= 14990; +UPDATE `npc_text` SET `BroadcastTextID0`= 36472 WHERE `ID`= 14991; +UPDATE `npc_text` SET `BroadcastTextID0`= 36473 WHERE `ID`= 14992; +UPDATE `npc_text` SET `BroadcastTextID0`= 36475 WHERE `ID`= 14994; +UPDATE `npc_text` SET `BroadcastTextID0`= 36476 WHERE `ID`= 14995; +UPDATE `npc_text` SET `BroadcastTextID0`= 36481 WHERE `ID`= 15000; +UPDATE `npc_text` SET `BroadcastTextID0`= 36481 WHERE `ID`= 14605; +UPDATE `npc_text` SET `BroadcastTextID0`= 36482 WHERE `ID`= 15001; +UPDATE `npc_text` SET `BroadcastTextID0`= 36521 WHERE `ID`= 15007; +UPDATE `npc_text` SET `BroadcastTextID0`= 36522 WHERE `ID`= 15008; +UPDATE `npc_text` SET `BroadcastTextID0`= 36551 WHERE `ID`= 15012; +UPDATE `npc_text` SET `BroadcastTextID0`= 36556 WHERE `ID`= 15013; +UPDATE `npc_text` SET `BroadcastTextID0`= 36578 WHERE `ID`= 15021; +UPDATE `npc_text` SET `BroadcastTextID0`= 36605 WHERE `ID`= 15028; +UPDATE `npc_text` SET `BroadcastTextID0`= 36606 WHERE `ID`= 15029; +UPDATE `npc_text` SET `BroadcastTextID0`= 36636 WHERE `ID`= 15035; +UPDATE `npc_text` SET `BroadcastTextID0`= 36638 WHERE `ID`= 15036; +UPDATE `npc_text` SET `BroadcastTextID0`= 36737 WHERE `ID`= 15063; +UPDATE `npc_text` SET `BroadcastTextID0`= 36888 WHERE `ID`= 15083; +UPDATE `npc_text` SET `BroadcastTextID0`= 36924 WHERE `ID`= 15104; +UPDATE `npc_text` SET `BroadcastTextID0`= 36938 WHERE `ID`= 15110; +UPDATE `npc_text` SET `BroadcastTextID0`= 36939 WHERE `ID`= 15111; +UPDATE `npc_text` SET `BroadcastTextID0`= 36941 WHERE `ID`= 15112; +UPDATE `npc_text` SET `BroadcastTextID0`= 36967 WHERE `ID`= 15117; +UPDATE `npc_text` SET `BroadcastTextID0`= 36979 WHERE `ID`= 15121; +UPDATE `npc_text` SET `BroadcastTextID0`= 37002 WHERE `ID`= 15127; +UPDATE `npc_text` SET `BroadcastTextID0`= 37005 WHERE `ID`= 15128; +UPDATE `npc_text` SET `BroadcastTextID0`= 37012 WHERE `ID`= 15132; +UPDATE `npc_text` SET `BroadcastTextID0`= 37045 WHERE `ID`= 15135; +UPDATE `npc_text` SET `BroadcastTextID0`= 37048 WHERE `ID`= 15136; +UPDATE `npc_text` SET `BroadcastTextID0`= 37057 WHERE `ID`= 15137; +UPDATE `npc_text` SET `BroadcastTextID0`= 37059 WHERE `ID`= 15138; +UPDATE `npc_text` SET `BroadcastTextID0`= 37060 WHERE `ID`= 15139; +UPDATE `npc_text` SET `BroadcastTextID0`= 37066 WHERE `ID`= 15140; +UPDATE `npc_text` SET `BroadcastTextID0`= 37078 WHERE `ID`= 15141; +UPDATE `npc_text` SET `BroadcastTextID0`= 37081 WHERE `ID`= 15145; +UPDATE `npc_text` SET `BroadcastTextID0`= 37082 WHERE `ID`= 15146; +UPDATE `npc_text` SET `BroadcastTextID0`= 37083 WHERE `ID`= 15147; +UPDATE `npc_text` SET `BroadcastTextID0`= 37098 WHERE `ID`= 15148; +UPDATE `npc_text` SET `BroadcastTextID0`= 37231 WHERE `ID`= 15173; +UPDATE `npc_text` SET `BroadcastTextID0`= 37303 WHERE `ID`= 15185; +UPDATE `npc_text` SET `BroadcastTextID0`= 37462 WHERE `ID`= 15196; +UPDATE `npc_text` SET `BroadcastTextID0`= 37463 WHERE `ID`= 15197; +UPDATE `npc_text` SET `BroadcastTextID0`= 37464 WHERE `ID`= 15198; +UPDATE `npc_text` SET `BroadcastTextID0`= 37473 WHERE `ID`= 15200; +UPDATE `npc_text` SET `BroadcastTextID0`= 37475 WHERE `ID`= 15201; +UPDATE `npc_text` SET `BroadcastTextID0`= 37481 WHERE `ID`= 15203; +UPDATE `npc_text` SET `BroadcastTextID0`= 37519 WHERE `ID`= 15205; +UPDATE `npc_text` SET `BroadcastTextID0`= 37553 WHERE `ID`= 15208; +UPDATE `npc_text` SET `BroadcastTextID0`= 37562 WHERE `ID`= 15213; +UPDATE `npc_text` SET `BroadcastTextID0`= 37652 WHERE `ID`= 15220; +UPDATE `npc_text` SET `BroadcastTextID0`= 37675 WHERE `ID`= 15222; +UPDATE `npc_text` SET `BroadcastTextID0`= 37676 WHERE `ID`= 15223; +UPDATE `npc_text` SET `BroadcastTextID0`= 37716 WHERE `ID`= 15224; +UPDATE `npc_text` SET `BroadcastTextID0`= 37717 WHERE `ID`= 15225; +UPDATE `npc_text` SET `BroadcastTextID0`= 37718 WHERE `ID`= 15226; +UPDATE `npc_text` SET `BroadcastTextID0`= 37719 WHERE `ID`= 15227; +UPDATE `npc_text` SET `BroadcastTextID0`= 37721 WHERE `ID`= 15228; +UPDATE `npc_text` SET `BroadcastTextID0`= 37779 WHERE `ID`= 15233; +UPDATE `npc_text` SET `BroadcastTextID0`= 37797 WHERE `ID`= 15235; +UPDATE `npc_text` SET `BroadcastTextID0`= 37798 WHERE `ID`= 15236; +UPDATE `npc_text` SET `BroadcastTextID0`= 37799 WHERE `ID`= 15237; +UPDATE `npc_text` SET `BroadcastTextID0`= 37801 WHERE `ID`= 15238; +UPDATE `npc_text` SET `BroadcastTextID0`= 37803 WHERE `ID`= 15239; +UPDATE `npc_text` SET `BroadcastTextID0`= 37822 WHERE `ID`= 15241; +UPDATE `npc_text` SET `BroadcastTextID0`= 37853 WHERE `ID`= 15243; +UPDATE `npc_text` SET `BroadcastTextID0`= 37870 WHERE `ID`= 15246; +UPDATE `npc_text` SET `BroadcastTextID0`= 37871 WHERE `ID`= 15248; +UPDATE `npc_text` SET `BroadcastTextID0`= 37884 WHERE `ID`= 15251; +UPDATE `npc_text` SET `BroadcastTextID0`= 37889 WHERE `ID`= 15252; +UPDATE `npc_text` SET `BroadcastTextID0`= 37930 WHERE `ID`= 15257; +UPDATE `npc_text` SET `BroadcastTextID0`= 37935 WHERE `ID`= 15260; +UPDATE `npc_text` SET `BroadcastTextID0`= 37937 WHERE `ID`= 15264; +UPDATE `npc_text` SET `BroadcastTextID0`= 37938 WHERE `ID`= 15263; +UPDATE `npc_text` SET `BroadcastTextID0`= 37957 WHERE `ID`= 15273; +UPDATE `npc_text` SET `BroadcastTextID0`= 37959 WHERE `ID`= 15266; +UPDATE `npc_text` SET `BroadcastTextID0`= 37961 WHERE `ID`= 15267; +UPDATE `npc_text` SET `BroadcastTextID0`= 37964 WHERE `ID`= 15268; +UPDATE `npc_text` SET `BroadcastTextID0`= 37966 WHERE `ID`= 15269; +UPDATE `npc_text` SET `BroadcastTextID0`= 37967 WHERE `ID`= 15270; +UPDATE `npc_text` SET `BroadcastTextID0`= 37968 WHERE `ID`= 15275; +UPDATE `npc_text` SET `BroadcastTextID0`= 37973 WHERE `ID`= 15277; +UPDATE `npc_text` SET `BroadcastTextID0`= 37974 WHERE `ID`= 15278; +UPDATE `npc_text` SET `BroadcastTextID0`= 38021 WHERE `ID`= 15280; +UPDATE `npc_text` SET `BroadcastTextID0`= 38107 WHERE `ID`= 15288; +UPDATE `npc_text` SET `BroadcastTextID0`= 38108 WHERE `ID`= 15289; +UPDATE `npc_text` SET `BroadcastTextID0`= 38182 WHERE `ID`= 15291; +UPDATE `npc_text` SET `BroadcastTextID0`= 38199 WHERE `ID`= 15292; +UPDATE `npc_text` SET `BroadcastTextID0`= 38200 WHERE `ID`= 15293; +UPDATE `npc_text` SET `BroadcastTextID0`= 38207 WHERE `ID`= 15295; +UPDATE `npc_text` SET `BroadcastTextID0`= 38208 WHERE `ID`= 15294; +UPDATE `npc_text` SET `BroadcastTextID0`= 38232 WHERE `ID`= 15301; +UPDATE `npc_text` SET `BroadcastTextID0`= 38248 WHERE `ID`= 15302; +UPDATE `npc_text` SET `BroadcastTextID0`= 38250 WHERE `ID`= 15303; +UPDATE `npc_text` SET `BroadcastTextID0`= 38292 WHERE `ID`= 15309; +UPDATE `npc_text` SET `BroadcastTextID0`= 38307 WHERE `ID`= 15313; +UPDATE `npc_text` SET `BroadcastTextID0`= 38309 WHERE `ID`= 15315; +UPDATE `npc_text` SET `BroadcastTextID0`= 38316 WHERE `ID`= 15318; +UPDATE `npc_text` SET `BroadcastTextID0`= 38326 WHERE `ID`= 15325; +UPDATE `npc_text` SET `BroadcastTextID0`= 38327 WHERE `ID`= 15326; +UPDATE `npc_text` SET `BroadcastTextID0`= 38329 WHERE `ID`= 15327; +UPDATE `npc_text` SET `BroadcastTextID0`= 38331 WHERE `ID`= 15328; +UPDATE `npc_text` SET `BroadcastTextID0`= 38333 WHERE `ID`= 15329; +UPDATE `npc_text` SET `BroadcastTextID0`= 38335 WHERE `ID`= 15330; +UPDATE `npc_text` SET `BroadcastTextID0`= 38337 WHERE `ID`= 15331; +UPDATE `npc_text` SET `BroadcastTextID0`= 38341 WHERE `ID`= 15333; +UPDATE `npc_text` SET `BroadcastTextID0`= 38342 WHERE `ID`= 15332; +UPDATE `npc_text` SET `BroadcastTextID0`= 38395 WHERE `ID`= 15346; +UPDATE `npc_text` SET `BroadcastTextID0`= 38398 WHERE `ID`= 15347; +UPDATE `npc_text` SET `BroadcastTextID0`= 38404 WHERE `ID`= 15348; +UPDATE `npc_text` SET `BroadcastTextID0`= 38411 WHERE `ID`= 15349; +UPDATE `npc_text` SET `BroadcastTextID0`= 38412 WHERE `ID`= 15350; +UPDATE `npc_text` SET `BroadcastTextID0`= 38413 WHERE `ID`= 15351; +UPDATE `npc_text` SET `BroadcastTextID0`= 38438 WHERE `ID`= 15353; +UPDATE `npc_text` SET `BroadcastTextID0`= 38443 WHERE `ID`= 15354; +UPDATE `npc_text` SET `BroadcastTextID0`= 38446 WHERE `ID`= 15357; +UPDATE `npc_text` SET `BroadcastTextID0`= 38449 WHERE `ID`= 15360; +UPDATE `npc_text` SET `BroadcastTextID0`= 38456 WHERE `ID`= 15367; +UPDATE `npc_text` SET `BroadcastTextID0`= 38463 WHERE `ID`= 15369; +UPDATE `npc_text` SET `BroadcastTextID0`= 38483 WHERE `ID`= 15377; +UPDATE `npc_text` SET `BroadcastTextID0`= 38509 WHERE `ID`= 15381; +UPDATE `npc_text` SET `BroadcastTextID0`= 38573 WHERE `ID`= 15393; +UPDATE `npc_text` SET `BroadcastTextID0`= 38575 WHERE `ID`= 15394; +UPDATE `npc_text` SET `BroadcastTextID0`= 38580 WHERE `ID`= 15397; +UPDATE `npc_text` SET `BroadcastTextID0`= 38585 WHERE `ID`= 15398; +UPDATE `npc_text` SET `BroadcastTextID0`= 38605 WHERE `ID`= 15401; +UPDATE `npc_text` SET `BroadcastTextID0`= 38614 WHERE `ID`= 15403; +UPDATE `npc_text` SET `BroadcastTextID0`= 38615 WHERE `ID`= 15404; +UPDATE `npc_text` SET `BroadcastTextID0`= 38634 WHERE `ID`= 15408; +UPDATE `npc_text` SET `BroadcastTextID0`= 38643 WHERE `ID`= 15409; +UPDATE `npc_text` SET `BroadcastTextID0`= 38650 WHERE `ID`= 15411; +UPDATE `npc_text` SET `BroadcastTextID0`= 38673 WHERE `ID`= 15418; +UPDATE `npc_text` SET `BroadcastTextID0`= 38676 WHERE `ID`= 15421; +UPDATE `npc_text` SET `BroadcastTextID0`= 38677 WHERE `ID`= 15422; +UPDATE `npc_text` SET `BroadcastTextID0`= 38730 WHERE `ID`= 15431; +UPDATE `npc_text` SET `BroadcastTextID0`= 38752 WHERE `ID`= 15435; +UPDATE `npc_text` SET `BroadcastTextID0`= 38798 WHERE `ID`= 15442; +UPDATE `npc_text` SET `BroadcastTextID0`= 38799 WHERE `ID`= 15443; +UPDATE `npc_text` SET `BroadcastTextID0`= 38800 WHERE `ID`= 15444; +UPDATE `npc_text` SET `BroadcastTextID0`= 38827 WHERE `ID`= 15455; +UPDATE `npc_text` SET `BroadcastTextID0`= 38841 WHERE `ID`= 15459; +UPDATE `npc_text` SET `BroadcastTextID0`= 38842 WHERE `ID`= 15460; +UPDATE `npc_text` SET `BroadcastTextID0`= 38843 WHERE `ID`= 15461; +UPDATE `npc_text` SET `BroadcastTextID0`= 38891 WHERE `ID`= 15466; +UPDATE `npc_text` SET `BroadcastTextID0`= 38910 WHERE `ID`= 15468; +UPDATE `npc_text` SET `BroadcastTextID0`= 38927 WHERE `ID`= 15471; +UPDATE `npc_text` SET `BroadcastTextID0`= 38929 WHERE `ID`= 15473; +UPDATE `npc_text` SET `BroadcastTextID0`= 38930 WHERE `ID`= 15474; +UPDATE `npc_text` SET `BroadcastTextID0`= 38931 WHERE `ID`= 15475; +UPDATE `npc_text` SET `BroadcastTextID0`= 38932 WHERE `ID`= 15476; +UPDATE `npc_text` SET `BroadcastTextID0`= 38933 WHERE `ID`= 15477; +UPDATE `npc_text` SET `BroadcastTextID0`= 38934 WHERE `ID`= 15478; +UPDATE `npc_text` SET `BroadcastTextID0`= 38935 WHERE `ID`= 15479; +UPDATE `npc_text` SET `BroadcastTextID0`= 38936 WHERE `ID`= 15480; +UPDATE `npc_text` SET `BroadcastTextID0`= 38961 WHERE `ID`= 15481; +UPDATE `npc_text` SET `BroadcastTextID0`= 38962 WHERE `ID`= 15482; +UPDATE `npc_text` SET `BroadcastTextID0`= 38964 WHERE `ID`= 15484; +UPDATE `npc_text` SET `BroadcastTextID0`= 38978 WHERE `ID`= 15485; +UPDATE `npc_text` SET `BroadcastTextID0`= 39002 WHERE `ID`= 15490; +UPDATE `npc_text` SET `BroadcastTextID0`= 39040 WHERE `ID`= 15496; +UPDATE `npc_text` SET `BroadcastTextID0`= 39041 WHERE `ID`= 15495; +UPDATE `npc_text` SET `BroadcastTextID0`= 39065 WHERE `ID`= 15500; +UPDATE `npc_text` SET `BroadcastTextID0`= 39072 WHERE `ID`= 15501; +UPDATE `npc_text` SET `BroadcastTextID0`= 39109 WHERE `ID`= 15508; +UPDATE `npc_text` SET `BroadcastTextID0`= 39111 WHERE `ID`= 15510; +UPDATE `npc_text` SET `BroadcastTextID0`= 39112 WHERE `ID`= 15511; +UPDATE `npc_text` SET `BroadcastTextID0`= 39113 WHERE `ID`= 15512; +UPDATE `npc_text` SET `BroadcastTextID0`= 39115 WHERE `ID`= 15514; +UPDATE `npc_text` SET `BroadcastTextID0`= 39117 WHERE `ID`= 15515; +UPDATE `npc_text` SET `BroadcastTextID0`= 39120 WHERE `ID`= 15517; +UPDATE `npc_text` SET `BroadcastTextID0`= 39121 WHERE `ID`= 15518; +UPDATE `npc_text` SET `BroadcastTextID0`= 39122 WHERE `ID`= 15519; +UPDATE `npc_text` SET `BroadcastTextID0`= 39129 WHERE `ID`= 15524; +UPDATE `npc_text` SET `BroadcastTextID0`= 39151 WHERE `ID`= 15528; +UPDATE `npc_text` SET `BroadcastTextID0`= 39172 WHERE `ID`= 15531; +UPDATE `npc_text` SET `BroadcastTextID0`= 39180 WHERE `ID`= 15532; +UPDATE `npc_text` SET `BroadcastTextID0`= 39187 WHERE `ID`= 15535; +UPDATE `npc_text` SET `BroadcastTextID0`= 39188 WHERE `ID`= 15536; +UPDATE `npc_text` SET `BroadcastTextID0`= 39203 WHERE `ID`= 15542; +UPDATE `npc_text` SET `BroadcastTextID0`= 39209 WHERE `ID`= 15547; +UPDATE `npc_text` SET `BroadcastTextID0`= 39214 WHERE `ID`= 15549; +UPDATE `npc_text` SET `BroadcastTextID0`= 39217 WHERE `ID`= 15551; +UPDATE `npc_text` SET `BroadcastTextID0`= 39218 WHERE `ID`= 15552; +UPDATE `npc_text` SET `BroadcastTextID0`= 39220 WHERE `ID`= 15554; +UPDATE `npc_text` SET `BroadcastTextID0`= 39229 WHERE `ID`= 15558; +UPDATE `npc_text` SET `BroadcastTextID0`= 39234 WHERE `ID`= 15559; +UPDATE `npc_text` SET `BroadcastTextID0`= 39239 WHERE `ID`= 15561; +UPDATE `npc_text` SET `BroadcastTextID0`= 39252 WHERE `ID`= 15563; +UPDATE `npc_text` SET `BroadcastTextID0`= 39253 WHERE `ID`= 15564; +UPDATE `npc_text` SET `BroadcastTextID0`= 39257 WHERE `ID`= 15565; +UPDATE `npc_text` SET `BroadcastTextID0`= 40543 WHERE `ID`= 24; +UPDATE `npc_text` SET `BroadcastTextID0`= 41575 WHERE `ID`= 225; +UPDATE `npc_text` SET `BroadcastTextID0`= 43197 WHERE `ID`= 246; +UPDATE `npc_text` SET `BroadcastTextID0`= 43199 WHERE `ID`= 247; +UPDATE `npc_text` SET `BroadcastTextID0`= 43201 WHERE `ID`= 248; +UPDATE `npc_text` SET `BroadcastTextID0`= 43330 WHERE `ID`= 8753; +UPDATE `npc_text` SET `BroadcastTextID0`= 43340 WHERE `ID`= 8753; +UPDATE `npc_text` SET `BroadcastTextID0`= 44383 WHERE `ID`= 15347; +UPDATE `npc_text` SET `BroadcastTextID0`= 45514 WHERE `ID`= 185; +UPDATE `npc_text` SET `BroadcastTextID0`= 46055 WHERE `ID`= 42; +UPDATE `npc_text` SET `BroadcastTextID0`= 46528 WHERE `ID`= 134; +UPDATE `npc_text` SET `BroadcastTextID0`= 49696 WHERE `ID`= 8753; +UPDATE `npc_text` SET `BroadcastTextID0`= 50398 WHERE `ID`= 82; +UPDATE `npc_text` SET `BroadcastTextID0`= 50704 WHERE `ID`= 153; +UPDATE `npc_text` SET `BroadcastTextID0`= 50721 WHERE `ID`= 8753; +UPDATE `npc_text` SET `BroadcastTextID0`= 53142 WHERE `ID`= 14125; +UPDATE `npc_text` SET `BroadcastTextID0`= 53142 WHERE `ID`= 48; +UPDATE `npc_text` SET `BroadcastTextID0`= 53144 WHERE `ID`= 14125; +UPDATE `npc_text` SET `BroadcastTextID0`= 53144 WHERE `ID`= 48; +UPDATE `npc_text` SET `BroadcastTextID0`= 53249 WHERE `ID`= 166; +UPDATE `npc_text` SET `BroadcastTextID0`= 56602 WHERE `ID`= 15347; +UPDATE `npc_text` SET `BroadcastTextID0`= 56609 WHERE `ID`= 18; +UPDATE `npc_text` SET `BroadcastTextID0`= 58309 WHERE `ID`= 14125; +UPDATE `npc_text` SET `BroadcastTextID0`= 58309 WHERE `ID`= 48; +UPDATE `npc_text` SET `BroadcastTextID0`= 61023 WHERE `ID`= 14125; +UPDATE `npc_text` SET `BroadcastTextID0`= 61023 WHERE `ID`= 48; +UPDATE `npc_text` SET `BroadcastTextID0`= 61839 WHERE `ID`= 14125; +UPDATE `npc_text` SET `BroadcastTextID0`= 61839 WHERE `ID`= 48; +UPDATE `npc_text` SET `BroadcastTextID0`= 62303 WHERE `ID`= 14125; +UPDATE `npc_text` SET `BroadcastTextID0`= 62303 WHERE `ID`= 48; +UPDATE `npc_text` SET `BroadcastTextID0`= 69232 WHERE `ID`= 14344; +UPDATE `npc_text` SET `BroadcastTextID0`= 74212 WHERE `ID`= 7381; +UPDATE `npc_text` SET `BroadcastTextID0`= 9707 WHERE `ID`= 7029; +UPDATE `npc_text` SET `BroadcastTextID0`= 9717 WHERE `ID`= 7030; +UPDATE `npc_text` SET `BroadcastTextID0`= 9719 WHERE `ID`= 7031; +UPDATE `npc_text` SET `BroadcastTextID0`= 9721 WHERE `ID`= 7032; +UPDATE `npc_text` SET `BroadcastTextID0`= 9723 WHERE `ID`= 7033; +UPDATE `npc_text` SET `BroadcastTextID0`= 9725 WHERE `ID`= 7034; +UPDATE `npc_text` SET `BroadcastTextID0`= 10689 WHERE `ID`= 7748; +UPDATE `npc_text` SET `BroadcastTextID0`= 12620 WHERE `ID`= 18960; +UPDATE `npc_text` SET `BroadcastTextID0`= 12620 WHERE `ID`= 17711; +UPDATE `npc_text` SET `BroadcastTextID0`= 14721 WHERE `ID`= 16474; +UPDATE `npc_text` SET `BroadcastTextID0`= 14757 WHERE `ID`= 18960; +UPDATE `npc_text` SET `BroadcastTextID0`= 14757 WHERE `ID`= 17711; +UPDATE `npc_text` SET `BroadcastTextID0`= 15392 WHERE `ID`= 9380; +UPDATE `npc_text` SET `BroadcastTextID0`= 15394 WHERE `ID`= 9381; +UPDATE `npc_text` SET `BroadcastTextID0`= 20530 WHERE `ID`= 10743; +UPDATE `npc_text` SET `BroadcastTextID0`= 23153 WHERE `ID`= 11907; +UPDATE `npc_text` SET `BroadcastTextID0`= 25280 WHERE `ID`= 14351; +UPDATE `npc_text` SET `BroadcastTextID0`= 27932 WHERE `ID`= 18532; +UPDATE `npc_text` SET `BroadcastTextID0`= 29493 WHERE `ID`= 14347; +UPDATE `npc_text` SET `BroadcastTextID0`= 29493 WHERE `ID`= 14327; +UPDATE `npc_text` SET `BroadcastTextID0`= 32808 WHERE `ID`= 14347; +UPDATE `npc_text` SET `BroadcastTextID0`= 32808 WHERE `ID`= 14327; +UPDATE `npc_text` SET `BroadcastTextID0`= 32839 WHERE `ID`= 14143; +UPDATE `npc_text` SET `BroadcastTextID0`= 32935 WHERE `ID`= 17078; +UPDATE `npc_text` SET `BroadcastTextID0`= 32935 WHERE `ID`= 14454; +UPDATE `npc_text` SET `BroadcastTextID0`= 33174 WHERE `ID`= 14259; +UPDATE `npc_text` SET `BroadcastTextID0`= 33177 WHERE `ID`= 14261; +UPDATE `npc_text` SET `BroadcastTextID0`= 33206 WHERE `ID`= 14274; +UPDATE `npc_text` SET `BroadcastTextID0`= 33210 WHERE `ID`= 14276; +UPDATE `npc_text` SET `BroadcastTextID0`= 33327 WHERE `ID`= 14304; +UPDATE `npc_text` SET `BroadcastTextID0`= 33343 WHERE `ID`= 14311; +UPDATE `npc_text` SET `BroadcastTextID0`= 33350 WHERE `ID`= 14316; +UPDATE `npc_text` SET `BroadcastTextID0`= 33377 WHERE `ID`= 14322; +UPDATE `npc_text` SET `BroadcastTextID0`= 33410 WHERE `ID`= 14347; +UPDATE `npc_text` SET `BroadcastTextID0`= 33410 WHERE `ID`= 14327; +UPDATE `npc_text` SET `BroadcastTextID0`= 33450 WHERE `ID`= 14339; +UPDATE `npc_text` SET `BroadcastTextID0`= 33451 WHERE `ID`= 14340; +UPDATE `npc_text` SET `BroadcastTextID0`= 33548 WHERE `ID`= 14347; +UPDATE `npc_text` SET `BroadcastTextID0`= 33548 WHERE `ID`= 14327; +UPDATE `npc_text` SET `BroadcastTextID0`= 33572 WHERE `ID`= 14351; +UPDATE `npc_text` SET `BroadcastTextID0`= 33590 WHERE `ID`= 14357; +UPDATE `npc_text` SET `BroadcastTextID0`= 33591 WHERE `ID`= 14358; +UPDATE `npc_text` SET `BroadcastTextID0`= 34095 WHERE `ID`= 17078; +UPDATE `npc_text` SET `BroadcastTextID0`= 34095 WHERE `ID`= 14454; +UPDATE `npc_text` SET `BroadcastTextID0`= 34215 WHERE `ID`= 14468; +UPDATE `npc_text` SET `BroadcastTextID0`= 34221 WHERE `ID`= 14469; +UPDATE `npc_text` SET `BroadcastTextID0`= 34224 WHERE `ID`= 14470; +UPDATE `npc_text` SET `BroadcastTextID0`= 34464 WHERE `ID`= 14506; +UPDATE `npc_text` SET `BroadcastTextID0`= 34570 WHERE `ID`= 14538; +UPDATE `npc_text` SET `BroadcastTextID0`= 34628 WHERE `ID`= 14546; +UPDATE `npc_text` SET `BroadcastTextID0`= 34641 WHERE `ID`= 14549; +UPDATE `npc_text` SET `BroadcastTextID0`= 34708 WHERE `ID`= 14554; +UPDATE `npc_text` SET `BroadcastTextID0`= 34721 WHERE `ID`= 14556; +UPDATE `npc_text` SET `BroadcastTextID0`= 34761 WHERE `ID`= 14562; +UPDATE `npc_text` SET `BroadcastTextID0`= 34788 WHERE `ID`= 14563; +UPDATE `npc_text` SET `BroadcastTextID0`= 34933 WHERE `ID`= 14590; +UPDATE `npc_text` SET `BroadcastTextID0`= 34955 WHERE `ID`= 14601; +UPDATE `npc_text` SET `BroadcastTextID0`= 34957 WHERE `ID`= 14603; +UPDATE `npc_text` SET `BroadcastTextID0`= 34958 WHERE `ID`= 14604; +UPDATE `npc_text` SET `BroadcastTextID0`= 34984 WHERE `ID`= 14549; +UPDATE `npc_text` SET `BroadcastTextID0`= 35077 WHERE `ID`= 14631; +UPDATE `npc_text` SET `BroadcastTextID0`= 35140 WHERE `ID`= 14657; +UPDATE `npc_text` SET `BroadcastTextID0`= 35255 WHERE `ID`= 14681; +UPDATE `npc_text` SET `BroadcastTextID0`= 35348 WHERE `ID`= 14693; +UPDATE `npc_text` SET `BroadcastTextID0`= 35381 WHERE `ID`= 14703; +UPDATE `npc_text` SET `BroadcastTextID0`= 35384 WHERE `ID`= 14705; +UPDATE `npc_text` SET `BroadcastTextID0`= 35678 WHERE `ID`= 14742; +UPDATE `npc_text` SET `BroadcastTextID0`= 35774 WHERE `ID`= 14744; +UPDATE `npc_text` SET `BroadcastTextID0`= 35776 WHERE `ID`= 14745; +UPDATE `npc_text` SET `BroadcastTextID0`= 35778 WHERE `ID`= 14746; +UPDATE `npc_text` SET `BroadcastTextID0`= 35780 WHERE `ID`= 14747; +UPDATE `npc_text` SET `BroadcastTextID0`= 35782 WHERE `ID`= 14748; +UPDATE `npc_text` SET `BroadcastTextID0`= 35784 WHERE `ID`= 14749; +UPDATE `npc_text` SET `BroadcastTextID0`= 35834 WHERE `ID`= 14752; +UPDATE `npc_text` SET `BroadcastTextID0`= 35890 WHERE `ID`= 14767; +UPDATE `npc_text` SET `BroadcastTextID0`= 35897 WHERE `ID`= 14768; +UPDATE `npc_text` SET `BroadcastTextID0`= 35902 WHERE `ID`= 14770; +UPDATE `npc_text` SET `BroadcastTextID0`= 35953 WHERE `ID`= 14789; +UPDATE `npc_text` SET `BroadcastTextID0`= 35972 WHERE `ID`= 14801; +UPDATE `npc_text` SET `BroadcastTextID0`= 35982 WHERE `ID`= 14809; +UPDATE `npc_text` SET `BroadcastTextID0`= 35984 WHERE `ID`= 14811; +UPDATE `npc_text` SET `BroadcastTextID0`= 35985 WHERE `ID`= 14812; +UPDATE `npc_text` SET `BroadcastTextID0`= 36043 WHERE `ID`= 14827; +UPDATE `npc_text` SET `BroadcastTextID0`= 36057 WHERE `ID`= 14834; +UPDATE `npc_text` SET `BroadcastTextID0`= 36058 WHERE `ID`= 14835; +UPDATE `npc_text` SET `BroadcastTextID0`= 36059 WHERE `ID`= 14836; +UPDATE `npc_text` SET `BroadcastTextID0`= 36068 WHERE `ID`= 14840; +UPDATE `npc_text` SET `BroadcastTextID0`= 36069 WHERE `ID`= 14841; +UPDATE `npc_text` SET `BroadcastTextID0`= 36070 WHERE `ID`= 14842; +UPDATE `npc_text` SET `BroadcastTextID0`= 36071 WHERE `ID`= 14843; +UPDATE `npc_text` SET `BroadcastTextID0`= 36072 WHERE `ID`= 14844; +UPDATE `npc_text` SET `BroadcastTextID0`= 36073 WHERE `ID`= 14845; +UPDATE `npc_text` SET `BroadcastTextID0`= 36152 WHERE `ID`= 14870; +UPDATE `npc_text` SET `BroadcastTextID0`= 36192 WHERE `ID`= 14880; +UPDATE `npc_text` SET `BroadcastTextID0`= 36332 WHERE `ID`= 14942; +UPDATE `npc_text` SET `BroadcastTextID0`= 36370 WHERE `ID`= 17549; +UPDATE `npc_text` SET `BroadcastTextID0`= 36370 WHERE `ID`= 14955; +UPDATE `npc_text` SET `BroadcastTextID0`= 36387 WHERE `ID`= 14962; +UPDATE `npc_text` SET `BroadcastTextID0`= 36400 WHERE `ID`= 14966; +UPDATE `npc_text` SET `BroadcastTextID0`= 36404 WHERE `ID`= 14969; +UPDATE `npc_text` SET `BroadcastTextID0`= 36405 WHERE `ID`= 14970; +UPDATE `npc_text` SET `BroadcastTextID0`= 36454 WHERE `ID`= 14982; +UPDATE `npc_text` SET `BroadcastTextID0`= 36455 WHERE `ID`= 14983; +UPDATE `npc_text` SET `BroadcastTextID0`= 36477 WHERE `ID`= 14996; +UPDATE `npc_text` SET `BroadcastTextID0`= 36479 WHERE `ID`= 14998; +UPDATE `npc_text` SET `BroadcastTextID0`= 36486 WHERE `ID`= 15002; +UPDATE `npc_text` SET `BroadcastTextID0`= 36593 WHERE `ID`= 15025; +UPDATE `npc_text` SET `BroadcastTextID0`= 36635 WHERE `ID`= 15034; +UPDATE `npc_text` SET `BroadcastTextID0`= 36669 WHERE `ID`= 15042; +UPDATE `npc_text` SET `BroadcastTextID0`= 36833 WHERE `ID`= 15079; +UPDATE `npc_text` SET `BroadcastTextID0`= 36999 WHERE `ID`= 15126; +UPDATE `npc_text` SET `BroadcastTextID0`= 37011 WHERE `ID`= 15131; +UPDATE `npc_text` SET `BroadcastTextID0`= 37110 WHERE `ID`= 15149; +UPDATE `npc_text` SET `BroadcastTextID0`= 37111 WHERE `ID`= 15150; +UPDATE `npc_text` SET `BroadcastTextID0`= 37295 WHERE `ID`= 15182; +UPDATE `npc_text` SET `BroadcastTextID0`= 37854 WHERE `ID`= 15244; +UPDATE `npc_text` SET `BroadcastTextID0`= 37958 WHERE `ID`= 15274; +UPDATE `npc_text` SET `BroadcastTextID0`= 37971 WHERE `ID`= 15276; +UPDATE `npc_text` SET `BroadcastTextID0`= 37972 WHERE `ID`= 15272; +UPDATE `npc_text` SET `BroadcastTextID0`= 38302 WHERE `ID`= 15312; +UPDATE `npc_text` SET `BroadcastTextID0`= 38310 WHERE `ID`= 15316; +UPDATE `npc_text` SET `BroadcastTextID0`= 38312 WHERE `ID`= 15317; +UPDATE `npc_text` SET `BroadcastTextID0`= 38325 WHERE `ID`= 15324; +UPDATE `npc_text` SET `BroadcastTextID0`= 38392 WHERE `ID`= 15344; +UPDATE `npc_text` SET `BroadcastTextID0`= 38394 WHERE `ID`= 15345; +UPDATE `npc_text` SET `BroadcastTextID0`= 38452 WHERE `ID`= 15363; +UPDATE `npc_text` SET `BroadcastTextID0`= 38454 WHERE `ID`= 15365; +UPDATE `npc_text` SET `BroadcastTextID0`= 38467 WHERE `ID`= 15370; +UPDATE `npc_text` SET `BroadcastTextID0`= 38477 WHERE `ID`= 15371; +UPDATE `npc_text` SET `BroadcastTextID0`= 38478 WHERE `ID`= 15372; +UPDATE `npc_text` SET `BroadcastTextID0`= 38479 WHERE `ID`= 15373; +UPDATE `npc_text` SET `BroadcastTextID0`= 38480 WHERE `ID`= 15374; +UPDATE `npc_text` SET `BroadcastTextID0`= 38481 WHERE `ID`= 15375; +UPDATE `npc_text` SET `BroadcastTextID0`= 38482 WHERE `ID`= 15376; +UPDATE `npc_text` SET `BroadcastTextID0`= 38521 WHERE `ID`= 15385; +UPDATE `npc_text` SET `BroadcastTextID0`= 38531 WHERE `ID`= 15387; +UPDATE `npc_text` SET `BroadcastTextID0`= 38577 WHERE `ID`= 15395; +UPDATE `npc_text` SET `BroadcastTextID0`= 38618 WHERE `ID`= 15406; +UPDATE `npc_text` SET `BroadcastTextID0`= 38674 WHERE `ID`= 15419; +UPDATE `npc_text` SET `BroadcastTextID0`= 38675 WHERE `ID`= 15420; +UPDATE `npc_text` SET `BroadcastTextID0`= 38723 WHERE `ID`= 15428; +UPDATE `npc_text` SET `BroadcastTextID0`= 38751 WHERE `ID`= 15434; +UPDATE `npc_text` SET `BroadcastTextID0`= 38838 WHERE `ID`= 15458; +UPDATE `npc_text` SET `BroadcastTextID0`= 38963 WHERE `ID`= 15483; +UPDATE `npc_text` SET `BroadcastTextID0`= 38980 WHERE `ID`= 15486; +UPDATE `npc_text` SET `BroadcastTextID0`= 38985 WHERE `ID`= 15487; +UPDATE `npc_text` SET `BroadcastTextID0`= 38987 WHERE `ID`= 15488; +UPDATE `npc_text` SET `BroadcastTextID0`= 38990 WHERE `ID`= 15489; +UPDATE `npc_text` SET `BroadcastTextID0`= 39088 WHERE `ID`= 15504; +UPDATE `npc_text` SET `BroadcastTextID0`= 39118 WHERE `ID`= 15516; +UPDATE `npc_text` SET `BroadcastTextID0`= 39149 WHERE `ID`= 15526; +UPDATE `npc_text` SET `BroadcastTextID0`= 39150 WHERE `ID`= 15527; +UPDATE `npc_text` SET `BroadcastTextID0`= 39159 WHERE `ID`= 15529; +UPDATE `npc_text` SET `BroadcastTextID0`= 39170 WHERE `ID`= 15530; +UPDATE `npc_text` SET `BroadcastTextID0`= 39182 WHERE `ID`= 15534; +UPDATE `npc_text` SET `BroadcastTextID0`= 39190 WHERE `ID`= 15537; +UPDATE `npc_text` SET `BroadcastTextID0`= 39191 WHERE `ID`= 15538; +UPDATE `npc_text` SET `BroadcastTextID0`= 39192 WHERE `ID`= 15539; +UPDATE `npc_text` SET `BroadcastTextID0`= 39193 WHERE `ID`= 15540; +UPDATE `npc_text` SET `BroadcastTextID0`= 39205 WHERE `ID`= 15543; +UPDATE `npc_text` SET `BroadcastTextID0`= 39216 WHERE `ID`= 15550; +UPDATE `npc_text` SET `BroadcastTextID0`= 39226 WHERE `ID`= 15556; +UPDATE `npc_text` SET `BroadcastTextID0`= 39258 WHERE `ID`= 15566; +UPDATE `npc_text` SET `BroadcastTextID0`= 39365 WHERE `ID`= 15595; +UPDATE `npc_text` SET `BroadcastTextID0`= 39389 WHERE `ID`= 15600; +UPDATE `npc_text` SET `BroadcastTextID0`= 39464 WHERE `ID`= 15616; +UPDATE `npc_text` SET `BroadcastTextID0`= 39493 WHERE `ID`= 15633; +UPDATE `npc_text` SET `BroadcastTextID0`= 39494 WHERE `ID`= 15634; +UPDATE `npc_text` SET `BroadcastTextID0`= 39518 WHERE `ID`= 15641; +UPDATE `npc_text` SET `BroadcastTextID0`= 39544 WHERE `ID`= 15652; +UPDATE `npc_text` SET `BroadcastTextID0`= 39546 WHERE `ID`= 15653; +UPDATE `npc_text` SET `BroadcastTextID0`= 39600 WHERE `ID`= 15671; +UPDATE `npc_text` SET `BroadcastTextID0`= 39602 WHERE `ID`= 15673; +UPDATE `npc_text` SET `BroadcastTextID0`= 39603 WHERE `ID`= 15674; +UPDATE `npc_text` SET `BroadcastTextID0`= 39604 WHERE `ID`= 15675; +UPDATE `npc_text` SET `BroadcastTextID0`= 39607 WHERE `ID`= 15678; +UPDATE `npc_text` SET `BroadcastTextID0`= 39622 WHERE `ID`= 15693; +UPDATE `npc_text` SET `BroadcastTextID0`= 39623 WHERE `ID`= 15694; +UPDATE `npc_text` SET `BroadcastTextID0`= 39633 WHERE `ID`= 15697; +UPDATE `npc_text` SET `BroadcastTextID0`= 39637 WHERE `ID`= 15701; +UPDATE `npc_text` SET `BroadcastTextID0`= 39743 WHERE `ID`= 15719; +UPDATE `npc_text` SET `BroadcastTextID0`= 39760 WHERE `ID`= 15726; +UPDATE `npc_text` SET `BroadcastTextID0`= 39762 WHERE `ID`= 15727; +UPDATE `npc_text` SET `BroadcastTextID0`= 39763 WHERE `ID`= 15728; +UPDATE `npc_text` SET `BroadcastTextID0`= 39764 WHERE `ID`= 15729; +UPDATE `npc_text` SET `BroadcastTextID0`= 39823 WHERE `ID`= 15745; +UPDATE `npc_text` SET `BroadcastTextID0`= 39826 WHERE `ID`= 15747; +UPDATE `npc_text` SET `BroadcastTextID0`= 39920 WHERE `ID`= 15754; +UPDATE `npc_text` SET `BroadcastTextID0`= 39953 WHERE `ID`= 15760; +UPDATE `npc_text` SET `BroadcastTextID0`= 39954 WHERE `ID`= 15761; +UPDATE `npc_text` SET `BroadcastTextID0`= 39984 WHERE `ID`= 15770; +UPDATE `npc_text` SET `BroadcastTextID0`= 39998 WHERE `ID`= 15774; +UPDATE `npc_text` SET `BroadcastTextID0`= 39998 WHERE `ID`= 158; +UPDATE `npc_text` SET `BroadcastTextID0`= 40007 WHERE `ID`= 15776; +UPDATE `npc_text` SET `BroadcastTextID0`= 40009 WHERE `ID`= 15777; +UPDATE `npc_text` SET `BroadcastTextID0`= 40200 WHERE `ID`= 15802; +UPDATE `npc_text` SET `BroadcastTextID0`= 40241 WHERE `ID`= 15816; +UPDATE `npc_text` SET `BroadcastTextID0`= 40265 WHERE `ID`= 15821; +UPDATE `npc_text` SET `BroadcastTextID0`= 40288 WHERE `ID`= 15828; +UPDATE `npc_text` SET `BroadcastTextID0`= 40291 WHERE `ID`= 15831; +UPDATE `npc_text` SET `BroadcastTextID0`= 40310 WHERE `ID`= 15835; +UPDATE `npc_text` SET `BroadcastTextID0`= 40330 WHERE `ID`= 15838; +UPDATE `npc_text` SET `BroadcastTextID0`= 40355 WHERE `ID`= 15842; +UPDATE `npc_text` SET `BroadcastTextID0`= 40386 WHERE `ID`= 15847; +UPDATE `npc_text` SET `BroadcastTextID0`= 40401 WHERE `ID`= 15850; +UPDATE `npc_text` SET `BroadcastTextID0`= 40402 WHERE `ID`= 15851; +UPDATE `npc_text` SET `BroadcastTextID0`= 40453 WHERE `ID`= 15867; +UPDATE `npc_text` SET `BroadcastTextID0`= 40502 WHERE `ID`= 15883; +UPDATE `npc_text` SET `BroadcastTextID0`= 40663 WHERE `ID`= 15922; +UPDATE `npc_text` SET `BroadcastTextID0`= 40731 WHERE `ID`= 15932; +UPDATE `npc_text` SET `BroadcastTextID0`= 40733 WHERE `ID`= 15933; +UPDATE `npc_text` SET `BroadcastTextID0`= 40767 WHERE `ID`= 15937; +UPDATE `npc_text` SET `BroadcastTextID0`= 40770 WHERE `ID`= 15938; +UPDATE `npc_text` SET `BroadcastTextID0`= 40802 WHERE `ID`= 15942; +UPDATE `npc_text` SET `BroadcastTextID0`= 40813 WHERE `ID`= 15946; +UPDATE `npc_text` SET `BroadcastTextID0`= 40895 WHERE `ID`= 15951; +UPDATE `npc_text` SET `BroadcastTextID0`= 40956 WHERE `ID`= 15965; +UPDATE `npc_text` SET `BroadcastTextID0`= 40957 WHERE `ID`= 15966; +UPDATE `npc_text` SET `BroadcastTextID0`= 40984 WHERE `ID`= 15971; +UPDATE `npc_text` SET `BroadcastTextID0`= 41038 WHERE `ID`= 15978; +UPDATE `npc_text` SET `BroadcastTextID0`= 41058 WHERE `ID`= 15982; +UPDATE `npc_text` SET `BroadcastTextID0`= 41092 WHERE `ID`= 15987; +UPDATE `npc_text` SET `BroadcastTextID0`= 41094 WHERE `ID`= 15988; +UPDATE `npc_text` SET `BroadcastTextID0`= 41096 WHERE `ID`= 15989; +UPDATE `npc_text` SET `BroadcastTextID0`= 41129 WHERE `ID`= 15995; +UPDATE `npc_text` SET `BroadcastTextID0`= 41139 WHERE `ID`= 16003; +UPDATE `npc_text` SET `BroadcastTextID0`= 41150 WHERE `ID`= 16007; +UPDATE `npc_text` SET `BroadcastTextID0`= 41170 WHERE `ID`= 16010; +UPDATE `npc_text` SET `BroadcastTextID0`= 41257 WHERE `ID`= 16027; +UPDATE `npc_text` SET `BroadcastTextID0`= 41317 WHERE `ID`= 16037; +UPDATE `npc_text` SET `BroadcastTextID0`= 41318 WHERE `ID`= 16038; +UPDATE `npc_text` SET `BroadcastTextID0`= 41319 WHERE `ID`= 16039; +UPDATE `npc_text` SET `BroadcastTextID0`= 41356 WHERE `ID`= 16055; +UPDATE `npc_text` SET `BroadcastTextID0`= 41357 WHERE `ID`= 16056; +UPDATE `npc_text` SET `BroadcastTextID0`= 41359 WHERE `ID`= 16057; +UPDATE `npc_text` SET `BroadcastTextID0`= 41395 WHERE `ID`= 16071; +UPDATE `npc_text` SET `BroadcastTextID0`= 41396 WHERE `ID`= 16072; +UPDATE `npc_text` SET `BroadcastTextID0`= 41507 WHERE `ID`= 16089; +UPDATE `npc_text` SET `BroadcastTextID0`= 41682 WHERE `ID`= 16118; +UPDATE `npc_text` SET `BroadcastTextID0`= 41683 WHERE `ID`= 16119; +UPDATE `npc_text` SET `BroadcastTextID0`= 41684 WHERE `ID`= 16120; +UPDATE `npc_text` SET `BroadcastTextID0`= 41685 WHERE `ID`= 16121; +UPDATE `npc_text` SET `BroadcastTextID0`= 41692 WHERE `ID`= 16117; +UPDATE `npc_text` SET `BroadcastTextID0`= 41761 WHERE `ID`= 16140; +UPDATE `npc_text` SET `BroadcastTextID0`= 41787 WHERE `ID`= 16147; +UPDATE `npc_text` SET `BroadcastTextID0`= 41854 WHERE `ID`= 16157; +UPDATE `npc_text` SET `BroadcastTextID0`= 41934 WHERE `ID`= 16174; +UPDATE `npc_text` SET `BroadcastTextID0`= 42083 WHERE `ID`= 16195; +UPDATE `npc_text` SET `BroadcastTextID0`= 42085 WHERE `ID`= 16198; +UPDATE `npc_text` SET `BroadcastTextID0`= 42234 WHERE `ID`= 16218; +UPDATE `npc_text` SET `BroadcastTextID0`= 42235 WHERE `ID`= 16219; +UPDATE `npc_text` SET `BroadcastTextID0`= 42243 WHERE `ID`= 16221; +UPDATE `npc_text` SET `BroadcastTextID0`= 42245 WHERE `ID`= 16222; +UPDATE `npc_text` SET `BroadcastTextID0`= 42275 WHERE `ID`= 16230; +UPDATE `npc_text` SET `BroadcastTextID0`= 42339 WHERE `ID`= 16243; +UPDATE `npc_text` SET `BroadcastTextID0`= 42343 WHERE `ID`= 16244; +UPDATE `npc_text` SET `BroadcastTextID0`= 42346 WHERE `ID`= 16245; +UPDATE `npc_text` SET `BroadcastTextID0`= 42349 WHERE `ID`= 16246; +UPDATE `npc_text` SET `BroadcastTextID0`= 42350 WHERE `ID`= 16247; +UPDATE `npc_text` SET `BroadcastTextID0`= 42459 WHERE `ID`= 16259; +UPDATE `npc_text` SET `BroadcastTextID0`= 42494 WHERE `ID`= 16269; +UPDATE `npc_text` SET `BroadcastTextID0`= 42618 WHERE `ID`= 16286; +UPDATE `npc_text` SET `BroadcastTextID0`= 42751 WHERE `ID`= 16304; +UPDATE `npc_text` SET `BroadcastTextID0`= 43088 WHERE `ID`= 16362; +UPDATE `npc_text` SET `BroadcastTextID0`= 43120 WHERE `ID`= 16364; +UPDATE `npc_text` SET `BroadcastTextID0`= 43330 WHERE `ID`= 14347; +UPDATE `npc_text` SET `BroadcastTextID0`= 43330 WHERE `ID`= 14327; +UPDATE `npc_text` SET `BroadcastTextID0`= 43337 WHERE `ID`= 17078; +UPDATE `npc_text` SET `BroadcastTextID0`= 43337 WHERE `ID`= 14454; +UPDATE `npc_text` SET `BroadcastTextID0`= 43340 WHERE `ID`= 14347; +UPDATE `npc_text` SET `BroadcastTextID0`= 43340 WHERE `ID`= 14327; +UPDATE `npc_text` SET `BroadcastTextID0`= 43344 WHERE `ID`= 17078; +UPDATE `npc_text` SET `BroadcastTextID0`= 43344 WHERE `ID`= 14454; +UPDATE `npc_text` SET `BroadcastTextID0`= 43372 WHERE `ID`= 16406; +UPDATE `npc_text` SET `BroadcastTextID0`= 43486 WHERE `ID`= 16424; +UPDATE `npc_text` SET `BroadcastTextID0`= 43562 WHERE `ID`= 16433; +UPDATE `npc_text` SET `BroadcastTextID0`= 43741 WHERE `ID`= 16474; +UPDATE `npc_text` SET `BroadcastTextID0`= 43984 WHERE `ID`= 16499; +UPDATE `npc_text` SET `BroadcastTextID0`= 44239 WHERE `ID`= 16506; +UPDATE `npc_text` SET `BroadcastTextID0`= 44301 WHERE `ID`= 16510; +UPDATE `npc_text` SET `BroadcastTextID0`= 44306 WHERE `ID`= 16511; +UPDATE `npc_text` SET `BroadcastTextID0`= 44413 WHERE `ID`= 16544; +UPDATE `npc_text` SET `BroadcastTextID0`= 44426 WHERE `ID`= 16547; +UPDATE `npc_text` SET `BroadcastTextID0`= 44436 WHERE `ID`= 16548; +UPDATE `npc_text` SET `BroadcastTextID0`= 44477 WHERE `ID`= 16562; +UPDATE `npc_text` SET `BroadcastTextID0`= 44478 WHERE `ID`= 16563; +UPDATE `npc_text` SET `BroadcastTextID0`= 44480 WHERE `ID`= 16564; +UPDATE `npc_text` SET `BroadcastTextID0`= 44525 WHERE `ID`= 16574; +UPDATE `npc_text` SET `BroadcastTextID0`= 44527 WHERE `ID`= 16575; +UPDATE `npc_text` SET `BroadcastTextID0`= 44540 WHERE `ID`= 16581; +UPDATE `npc_text` SET `BroadcastTextID0`= 44551 WHERE `ID`= 16585; +UPDATE `npc_text` SET `BroadcastTextID0`= 44552 WHERE `ID`= 16586; +UPDATE `npc_text` SET `BroadcastTextID0`= 44575 WHERE `ID`= 16590; +UPDATE `npc_text` SET `BroadcastTextID0`= 44616 WHERE `ID`= 16610; +UPDATE `npc_text` SET `BroadcastTextID0`= 44642 WHERE `ID`= 16622; +UPDATE `npc_text` SET `BroadcastTextID0`= 44643 WHERE `ID`= 16845; +UPDATE `npc_text` SET `BroadcastTextID0`= 44643 WHERE `ID`= 16623; +UPDATE `npc_text` SET `BroadcastTextID0`= 44756 WHERE `ID`= 16644; +UPDATE `npc_text` SET `BroadcastTextID0`= 44809 WHERE `ID`= 16661; +UPDATE `npc_text` SET `BroadcastTextID0`= 44831 WHERE `ID`= 16667; +UPDATE `npc_text` SET `BroadcastTextID0`= 44840 WHERE `ID`= 16669; +UPDATE `npc_text` SET `BroadcastTextID0`= 44841 WHERE `ID`= 16670; +UPDATE `npc_text` SET `BroadcastTextID0`= 44854 WHERE `ID`= 16671; +UPDATE `npc_text` SET `BroadcastTextID0`= 44871 WHERE `ID`= 16672; +UPDATE `npc_text` SET `BroadcastTextID0`= 44922 WHERE `ID`= 16686; +UPDATE `npc_text` SET `BroadcastTextID0`= 44945 WHERE `ID`= 16691; +UPDATE `npc_text` SET `BroadcastTextID0`= 45022 WHERE `ID`= 16702; +UPDATE `npc_text` SET `BroadcastTextID0`= 45173 WHERE `ID`= 16728; +UPDATE `npc_text` SET `BroadcastTextID0`= 45229 WHERE `ID`= 16736; +UPDATE `npc_text` SET `BroadcastTextID0`= 45262 WHERE `ID`= 16747; +UPDATE `npc_text` SET `BroadcastTextID0`= 45293 WHERE `ID`= 16758; +UPDATE `npc_text` SET `BroadcastTextID0`= 45295 WHERE `ID`= 16759; +UPDATE `npc_text` SET `BroadcastTextID0`= 45355 WHERE `ID`= 16775; +UPDATE `npc_text` SET `BroadcastTextID0`= 45357 WHERE `ID`= 16777; +UPDATE `npc_text` SET `BroadcastTextID0`= 45460 WHERE `ID`= 16814; +UPDATE `npc_text` SET `BroadcastTextID0`= 45478 WHERE `ID`= 16816; +UPDATE `npc_text` SET `BroadcastTextID0`= 45479 WHERE `ID`= 16817; +UPDATE `npc_text` SET `BroadcastTextID0`= 45521 WHERE `ID`= 16830; +UPDATE `npc_text` SET `BroadcastTextID0`= 45531 WHERE `ID`= 16833; +UPDATE `npc_text` SET `BroadcastTextID0`= 45534 WHERE `ID`= 16834; +UPDATE `npc_text` SET `BroadcastTextID0`= 45564 WHERE `ID`= 16845; +UPDATE `npc_text` SET `BroadcastTextID0`= 45564 WHERE `ID`= 16623; +UPDATE `npc_text` SET `BroadcastTextID0`= 45574 WHERE `ID`= 16848; +UPDATE `npc_text` SET `BroadcastTextID0`= 45679 WHERE `ID`= 16868; +UPDATE `npc_text` SET `BroadcastTextID0`= 45865 WHERE `ID`= 16901; +UPDATE `npc_text` SET `BroadcastTextID0`= 45911 WHERE `ID`= 16903; +UPDATE `npc_text` SET `BroadcastTextID0`= 45924 WHERE `ID`= 16906; +UPDATE `npc_text` SET `BroadcastTextID0`= 46007 WHERE `ID`= 16930; +UPDATE `npc_text` SET `BroadcastTextID0`= 46062 WHERE `ID`= 16939; +UPDATE `npc_text` SET `BroadcastTextID0`= 46082 WHERE `ID`= 16943; +UPDATE `npc_text` SET `BroadcastTextID0`= 46089 WHERE `ID`= 16945; +UPDATE `npc_text` SET `BroadcastTextID0`= 46091 WHERE `ID`= 16946; +UPDATE `npc_text` SET `BroadcastTextID0`= 46094 WHERE `ID`= 16947; +UPDATE `npc_text` SET `BroadcastTextID0`= 46097 WHERE `ID`= 16948; +UPDATE `npc_text` SET `BroadcastTextID0`= 46135 WHERE `ID`= 16961; +UPDATE `npc_text` SET `BroadcastTextID0`= 46246 WHERE `ID`= 16979; +UPDATE `npc_text` SET `BroadcastTextID0`= 46318 WHERE `ID`= 16985; +UPDATE `npc_text` SET `BroadcastTextID0`= 46397 WHERE `ID`= 17002; +UPDATE `npc_text` SET `BroadcastTextID0`= 46412 WHERE `ID`= 17006; +UPDATE `npc_text` SET `BroadcastTextID0`= 46531 WHERE `ID`= 17742; +UPDATE `npc_text` SET `BroadcastTextID0`= 46538 WHERE `ID`= 17033; +UPDATE `npc_text` SET `BroadcastTextID0`= 46543 WHERE `ID`= 17035; +UPDATE `npc_text` SET `BroadcastTextID0`= 46601 WHERE `ID`= 17040; +UPDATE `npc_text` SET `BroadcastTextID0`= 46701 WHERE `ID`= 17053; +UPDATE `npc_text` SET `BroadcastTextID0`= 46804 WHERE `ID`= 17068; +UPDATE `npc_text` SET `BroadcastTextID0`= 46840 WHERE `ID`= 17078; +UPDATE `npc_text` SET `BroadcastTextID0`= 46840 WHERE `ID`= 14454; +UPDATE `npc_text` SET `BroadcastTextID0`= 46841 WHERE `ID`= 17079; +UPDATE `npc_text` SET `BroadcastTextID0`= 46924 WHERE `ID`= 17089; +UPDATE `npc_text` SET `BroadcastTextID0`= 46928 WHERE `ID`= 17091; +UPDATE `npc_text` SET `BroadcastTextID0`= 46946 WHERE `ID`= 17095; +UPDATE `npc_text` SET `BroadcastTextID0`= 47023 WHERE `ID`= 17107; +UPDATE `npc_text` SET `BroadcastTextID0`= 47027 WHERE `ID`= 17108; +UPDATE `npc_text` SET `BroadcastTextID0`= 47052 WHERE `ID`= 17110; +UPDATE `npc_text` SET `BroadcastTextID0`= 47080 WHERE `ID`= 17118; +UPDATE `npc_text` SET `BroadcastTextID0`= 47274 WHERE `ID`= 17161; +UPDATE `npc_text` SET `BroadcastTextID0`= 47277 WHERE `ID`= 17163; +UPDATE `npc_text` SET `BroadcastTextID0`= 47279 WHERE `ID`= 17164; +UPDATE `npc_text` SET `BroadcastTextID0`= 47281 WHERE `ID`= 17165; +UPDATE `npc_text` SET `BroadcastTextID0`= 47287 WHERE `ID`= 17168; +UPDATE `npc_text` SET `BroadcastTextID0`= 47367 WHERE `ID`= 17173; +UPDATE `npc_text` SET `BroadcastTextID0`= 47495 WHERE `ID`= 17197; +UPDATE `npc_text` SET `BroadcastTextID0`= 47572 WHERE `ID`= 17214; +UPDATE `npc_text` SET `BroadcastTextID0`= 47581 WHERE `ID`= 17218; +UPDATE `npc_text` SET `BroadcastTextID0`= 47590 WHERE `ID`= 17223; +UPDATE `npc_text` SET `BroadcastTextID0`= 47625 WHERE `ID`= 17232; +UPDATE `npc_text` SET `BroadcastTextID0`= 47748 WHERE `ID`= 17256; +UPDATE `npc_text` SET `BroadcastTextID0`= 47750 WHERE `ID`= 17257; +UPDATE `npc_text` SET `BroadcastTextID0`= 47752 WHERE `ID`= 17258; +UPDATE `npc_text` SET `BroadcastTextID0`= 47754 WHERE `ID`= 17259; +UPDATE `npc_text` SET `BroadcastTextID0`= 47833 WHERE `ID`= 17275; +UPDATE `npc_text` SET `BroadcastTextID0`= 47896 WHERE `ID`= 17293; +UPDATE `npc_text` SET `BroadcastTextID0`= 47896 WHERE `ID`= 141; +UPDATE `npc_text` SET `BroadcastTextID0`= 47992 WHERE `ID`= 17315; +UPDATE `npc_text` SET `BroadcastTextID0`= 48046 WHERE `ID`= 17332; +UPDATE `npc_text` SET `BroadcastTextID0`= 48047 WHERE `ID`= 17333; +UPDATE `npc_text` SET `BroadcastTextID0`= 48096 WHERE `ID`= 17347; +UPDATE `npc_text` SET `BroadcastTextID0`= 48097 WHERE `ID`= 17348; +UPDATE `npc_text` SET `BroadcastTextID0`= 48099 WHERE `ID`= 17349; +UPDATE `npc_text` SET `BroadcastTextID0`= 48153 WHERE `ID`= 17367; +UPDATE `npc_text` SET `BroadcastTextID0`= 48153 WHERE `ID`= 215; +UPDATE `npc_text` SET `BroadcastTextID0`= 48163 WHERE `ID`= 17368; +UPDATE `npc_text` SET `BroadcastTextID0`= 48167 WHERE `ID`= 17372; +UPDATE `npc_text` SET `BroadcastTextID0`= 48253 WHERE `ID`= 17399; +UPDATE `npc_text` SET `BroadcastTextID0`= 48472 WHERE `ID`= 17328; +UPDATE `npc_text` SET `BroadcastTextID0`= 48674 WHERE `ID`= 17473; +UPDATE `npc_text` SET `BroadcastTextID0`= 48729 WHERE `ID`= 17484; +UPDATE `npc_text` SET `BroadcastTextID0`= 49048 WHERE `ID`= 17532; +UPDATE `npc_text` SET `BroadcastTextID0`= 49135 WHERE `ID`= 17537; +UPDATE `npc_text` SET `BroadcastTextID0`= 49139 WHERE `ID`= 17541; +UPDATE `npc_text` SET `BroadcastTextID0`= 49174 WHERE `ID`= 17549; +UPDATE `npc_text` SET `BroadcastTextID0`= 49174 WHERE `ID`= 14955; +UPDATE `npc_text` SET `BroadcastTextID0`= 49182 WHERE `ID`= 17550; +UPDATE `npc_text` SET `BroadcastTextID0`= 49240 WHERE `ID`= 17556; +UPDATE `npc_text` SET `BroadcastTextID0`= 49334 WHERE `ID`= 17564; +UPDATE `npc_text` SET `BroadcastTextID0`= 49335 WHERE `ID`= 17565; +UPDATE `npc_text` SET `BroadcastTextID0`= 49355 WHERE `ID`= 17572; +UPDATE `npc_text` SET `BroadcastTextID0`= 49356 WHERE `ID`= 17573; +UPDATE `npc_text` SET `BroadcastTextID0`= 49360 WHERE `ID`= 17574; +UPDATE `npc_text` SET `BroadcastTextID0`= 49362 WHERE `ID`= 17575; +UPDATE `npc_text` SET `BroadcastTextID0`= 49363 WHERE `ID`= 17576; +UPDATE `npc_text` SET `BroadcastTextID0`= 49514 WHERE `ID`= 17585; +UPDATE `npc_text` SET `BroadcastTextID0`= 49640 WHERE `ID`= 17589; +UPDATE `npc_text` SET `BroadcastTextID0`= 49642 WHERE `ID`= 17590; +UPDATE `npc_text` SET `BroadcastTextID0`= 49866 WHERE `ID`= 17637; +UPDATE `npc_text` SET `BroadcastTextID0`= 49868 WHERE `ID`= 17636; +UPDATE `npc_text` SET `BroadcastTextID0`= 49870 WHERE `ID`= 17635; +UPDATE `npc_text` SET `BroadcastTextID0`= 49874 WHERE `ID`= 17634; +UPDATE `npc_text` SET `BroadcastTextID0`= 49878 WHERE `ID`= 17633; +UPDATE `npc_text` SET `BroadcastTextID0`= 49880 WHERE `ID`= 17632; +UPDATE `npc_text` SET `BroadcastTextID0`= 49882 WHERE `ID`= 17631; +UPDATE `npc_text` SET `BroadcastTextID0`= 49884 WHERE `ID`= 17630; +UPDATE `npc_text` SET `BroadcastTextID0`= 50048 WHERE `ID`= 17692; +UPDATE `npc_text` SET `BroadcastTextID0`= 50049 WHERE `ID`= 17693; +UPDATE `npc_text` SET `BroadcastTextID0`= 50052 WHERE `ID`= 17696; +UPDATE `npc_text` SET `BroadcastTextID0`= 50054 WHERE `ID`= 17698; +UPDATE `npc_text` SET `BroadcastTextID0`= 50056 WHERE `ID`= 17700; +UPDATE `npc_text` SET `BroadcastTextID0`= 50059 WHERE `ID`= 17702; +UPDATE `npc_text` SET `BroadcastTextID0`= 50088 WHERE `ID`= 18960; +UPDATE `npc_text` SET `BroadcastTextID0`= 50088 WHERE `ID`= 17711; +UPDATE `npc_text` SET `BroadcastTextID0`= 50268 WHERE `ID`= 17734; +UPDATE `npc_text` SET `BroadcastTextID0`= 50269 WHERE `ID`= 17733; +UPDATE `npc_text` SET `BroadcastTextID0`= 50313 WHERE `ID`= 17741; +UPDATE `npc_text` SET `BroadcastTextID0`= 50429 WHERE `ID`= 18960; +UPDATE `npc_text` SET `BroadcastTextID0`= 50429 WHERE `ID`= 17711; +UPDATE `npc_text` SET `BroadcastTextID0`= 50650 WHERE `ID`= 17799; +UPDATE `npc_text` SET `BroadcastTextID0`= 50711 WHERE `ID`= 17820; +UPDATE `npc_text` SET `BroadcastTextID0`= 50737 WHERE `ID`= 17830; +UPDATE `npc_text` SET `BroadcastTextID0`= 50743 WHERE `ID`= 17833; +UPDATE `npc_text` SET `BroadcastTextID0`= 50747 WHERE `ID`= 17836; +UPDATE `npc_text` SET `BroadcastTextID0`= 50793 WHERE `ID`= 17849; +UPDATE `npc_text` SET `BroadcastTextID0`= 50821 WHERE `ID`= 17855; +UPDATE `npc_text` SET `BroadcastTextID0`= 50934 WHERE `ID`= 17888; +UPDATE `npc_text` SET `BroadcastTextID0`= 50949 WHERE `ID`= 17890; +UPDATE `npc_text` SET `BroadcastTextID0`= 50995 WHERE `ID`= 17901; +UPDATE `npc_text` SET `BroadcastTextID0`= 51238 WHERE `ID`= 17946; +UPDATE `npc_text` SET `BroadcastTextID0`= 51264 WHERE `ID`= 17951; +UPDATE `npc_text` SET `BroadcastTextID0`= 51452 WHERE `ID`= 17976; +UPDATE `npc_text` SET `BroadcastTextID0`= 51454 WHERE `ID`= 17977; +UPDATE `npc_text` SET `BroadcastTextID0`= 51520 WHERE `ID`= 17990; +UPDATE `npc_text` SET `BroadcastTextID0`= 51566 WHERE `ID`= 17999; +UPDATE `npc_text` SET `BroadcastTextID0`= 51573 WHERE `ID`= 18000; +UPDATE `npc_text` SET `BroadcastTextID0`= 51594 WHERE `ID`= 18005; +UPDATE `npc_text` SET `BroadcastTextID0`= 51595 WHERE `ID`= 18006; +UPDATE `npc_text` SET `BroadcastTextID0`= 51627 WHERE `ID`= 18012; +UPDATE `npc_text` SET `BroadcastTextID0`= 51731 WHERE `ID`= 18165; +UPDATE `npc_text` SET `BroadcastTextID0`= 51731 WHERE `ID`= 18025; +UPDATE `npc_text` SET `BroadcastTextID0`= 51762 WHERE `ID`= 18029; +UPDATE `npc_text` SET `BroadcastTextID0`= 51764 WHERE `ID`= 18030; +UPDATE `npc_text` SET `BroadcastTextID0`= 51767 WHERE `ID`= 18031; +UPDATE `npc_text` SET `BroadcastTextID0`= 51871 WHERE `ID`= 18042; +UPDATE `npc_text` SET `BroadcastTextID0`= 51871 WHERE `ID`= 18041; +UPDATE `npc_text` SET `BroadcastTextID0`= 51882 WHERE `ID`= 18043; +UPDATE `npc_text` SET `BroadcastTextID0`= 51903 WHERE `ID`= 18047; +UPDATE `npc_text` SET `BroadcastTextID0`= 51904 WHERE `ID`= 18048; +UPDATE `npc_text` SET `BroadcastTextID0`= 52223 WHERE `ID`= 18124; +UPDATE `npc_text` SET `BroadcastTextID0`= 52335 WHERE `ID`= 18135; +UPDATE `npc_text` SET `BroadcastTextID0`= 52338 WHERE `ID`= 18138; +UPDATE `npc_text` SET `BroadcastTextID0`= 52339 WHERE `ID`= 18139; +UPDATE `npc_text` SET `BroadcastTextID0`= 52353 WHERE `ID`= 18143; +UPDATE `npc_text` SET `BroadcastTextID0`= 52363 WHERE `ID`= 18148; +UPDATE `npc_text` SET `BroadcastTextID0`= 52366 WHERE `ID`= 18151; +UPDATE `npc_text` SET `BroadcastTextID0`= 52367 WHERE `ID`= 18150; +UPDATE `npc_text` SET `BroadcastTextID0`= 52368 WHERE `ID`= 18152; +UPDATE `npc_text` SET `BroadcastTextID0`= 52369 WHERE `ID`= 18153; +UPDATE `npc_text` SET `BroadcastTextID0`= 52370 WHERE `ID`= 18154; +UPDATE `npc_text` SET `BroadcastTextID0`= 52371 WHERE `ID`= 18155; +UPDATE `npc_text` SET `BroadcastTextID0`= 52376 WHERE `ID`= 18158; +UPDATE `npc_text` SET `BroadcastTextID0`= 52409 WHERE `ID`= 18185; +UPDATE `npc_text` SET `BroadcastTextID0`= 52410 WHERE `ID`= 18186; +UPDATE `npc_text` SET `BroadcastTextID0`= 52460 WHERE `ID`= 18189; +UPDATE `npc_text` SET `BroadcastTextID0`= 52528 WHERE `ID`= 18197; +UPDATE `npc_text` SET `BroadcastTextID0`= 52533 WHERE `ID`= 18201; +UPDATE `npc_text` SET `BroadcastTextID0`= 52537 WHERE `ID`= 18202; +UPDATE `npc_text` SET `BroadcastTextID0`= 52538 WHERE `ID`= 18200; +UPDATE `npc_text` SET `BroadcastTextID0`= 52561 WHERE `ID`= 18204; +UPDATE `npc_text` SET `BroadcastTextID0`= 52651 WHERE `ID`= 18207; +UPDATE `npc_text` SET `BroadcastTextID0`= 52652 WHERE `ID`= 18208; +UPDATE `npc_text` SET `BroadcastTextID0`= 52715 WHERE `ID`= 18212; +UPDATE `npc_text` SET `BroadcastTextID0`= 52789 WHERE `ID`= 18220; +UPDATE `npc_text` SET `BroadcastTextID0`= 52790 WHERE `ID`= 18221; +UPDATE `npc_text` SET `BroadcastTextID0`= 52792 WHERE `ID`= 18222; +UPDATE `npc_text` SET `BroadcastTextID0`= 52914 WHERE `ID`= 18243; +UPDATE `npc_text` SET `BroadcastTextID0`= 52915 WHERE `ID`= 18244; +UPDATE `npc_text` SET `BroadcastTextID0`= 52929 WHERE `ID`= 18247; +UPDATE `npc_text` SET `BroadcastTextID0`= 52931 WHERE `ID`= 18248; +UPDATE `npc_text` SET `BroadcastTextID0`= 52937 WHERE `ID`= 18252; +UPDATE `npc_text` SET `BroadcastTextID0`= 52938 WHERE `ID`= 18253; +UPDATE `npc_text` SET `BroadcastTextID0`= 52941 WHERE `ID`= 18254; +UPDATE `npc_text` SET `BroadcastTextID0`= 52942 WHERE `ID`= 18255; +UPDATE `npc_text` SET `BroadcastTextID0`= 52949 WHERE `ID`= 18258; +UPDATE `npc_text` SET `BroadcastTextID0`= 52952 WHERE `ID`= 18259; +UPDATE `npc_text` SET `BroadcastTextID0`= 52953 WHERE `ID`= 18260; +UPDATE `npc_text` SET `BroadcastTextID0`= 52954 WHERE `ID`= 18261; +UPDATE `npc_text` SET `BroadcastTextID0`= 52956 WHERE `ID`= 18262; +UPDATE `npc_text` SET `BroadcastTextID0`= 52959 WHERE `ID`= 18265; +UPDATE `npc_text` SET `BroadcastTextID0`= 53074 WHERE `ID`= 18297; +UPDATE `npc_text` SET `BroadcastTextID0`= 53086 WHERE `ID`= 18304; +UPDATE `npc_text` SET `BroadcastTextID0`= 53106 WHERE `ID`= 18308; +UPDATE `npc_text` SET `BroadcastTextID0`= 53121 WHERE `ID`= 18316; +UPDATE `npc_text` SET `BroadcastTextID0`= 53140 WHERE `ID`= 18320; +UPDATE `npc_text` SET `BroadcastTextID0`= 53140 WHERE `ID`= 18324; +UPDATE `npc_text` SET `BroadcastTextID0`= 53146 WHERE `ID`= 18320; +UPDATE `npc_text` SET `BroadcastTextID0`= 53146 WHERE `ID`= 18324; +UPDATE `npc_text` SET `BroadcastTextID0`= 53188 WHERE `ID`= 18329; +UPDATE `npc_text` SET `BroadcastTextID0`= 54072 WHERE `ID`= 18510; +UPDATE `npc_text` SET `BroadcastTextID0`= 54232 WHERE `ID`= 18544; +UPDATE `npc_text` SET `BroadcastTextID0`= 56604 WHERE `ID`= 18960; +UPDATE `npc_text` SET `BroadcastTextID0`= 56604 WHERE `ID`= 17711; +UPDATE `npc_text` SET `BroadcastTextID0`= 56608 WHERE `ID`= 18961; +UPDATE `npc_text` SET `BroadcastTextID0`= 56831 WHERE `ID`= 18986; +UPDATE `npc_text` SET `BroadcastTextID0`= 56942 WHERE `ID`= 19017; +UPDATE `npc_text` SET `BroadcastTextID0`= 66076 WHERE `ID`= 16157; +UPDATE `npc_text` SET `BroadcastTextID0`= 67987 WHERE `ID`= 17078; +UPDATE `npc_text` SET `BroadcastTextID0`= 67987 WHERE `ID`= 14454; +UPDATE `npc_text` SET `BroadcastTextID0`= 67990 WHERE `ID`= 17078; +UPDATE `npc_text` SET `BroadcastTextID0`= 67990 WHERE `ID`= 14454; diff --git a/sql/updates/world/2015_05_30_03_world.sql b/sql/updates/world/2015_05_30_03_world.sql new file mode 100644 index 00000000000..634705b846f --- /dev/null +++ b/sql/updates/world/2015_05_30_03_world.sql @@ -0,0 +1,8 @@ +-- +UPDATE `npc_text` SET `text0_0`="$N, you are ready for the ultimate task. The fiery runes etched on the floor of the molten core are conduits to the realm of fire, and their presence is both an affront to us and a source of power for the Firelords. They must be extinguished!$B$BTo extinguish a rune, take a vial of aqual quintessence. Pour it on the rune and its flame will go out, rendering it useless and weakening our enemy!", `BroadcastTextID0`=8703 WHERE `id`=6158; +DELETE FROM `gossip_menu` WHERE `entry`=5032; +UPDATE `creature_template` SET `npcflag`=2, `gossip_menu_id`=0 WHERE `entry`=241; + +UPDATE `creature_template` SET `gossip_menu_id`=11611 WHERE `entry`=240; +DELETE FROM `gossip_menu` WHERE `entry`=6159; +DELETE FROM `npc_text` WHERE `ID`=6157; diff --git a/sql/updates/world/2015_05_31_00_world.sql b/sql/updates/world/2015_05_31_00_world.sql new file mode 100644 index 00000000000..090cff4b41b --- /dev/null +++ b/sql/updates/world/2015_05_31_00_world.sql @@ -0,0 +1,227 @@ +-- Howling Fjord - Dereleict Strand + +DELETE FROM `creature_addon` WHERE `guid` IN (118717, 118612, 118609); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(118717,0,0,8,1,0, ''), +(118612,0,0,0,1,27, ''), +(118609,0,0,0,1,27, ''); + +-- North Fleet Soldier SAI +SET @GUID := -118616; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=23793; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@GUID,0,0,0,1,0,100,0,1000,1000,20000,20000,90,8,0,0,0,0,0,1,0,0,0,0,0,0,0,"North Fleet Soldier - Out of Combat - Set Flag Standstate Kneel"), +(@GUID,0,1,0,1,0,100,0,10000,10000,10000,10000,91,8,0,0,0,0,0,1,0,0,0,0,0,0,0,"North Fleet Soldier - Out of Combat - Remove Flag Standstate Kneel"); + +-- North Fleet Soldier SAI +SET @GUID := -118618; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=23793; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@GUID,0,0,0,1,0,100,0,1000,1000,20000,20000,90,8,0,0,0,0,0,1,0,0,0,0,0,0,0,"North Fleet Soldier - Out of Combat - Set Flag Standstate Kneel"), +(@GUID,0,1,0,1,0,100,0,10000,10000,10000,10000,91,8,0,0,0,0,0,1,0,0,0,0,0,0,0,"North Fleet Soldier - Out of Combat - Remove Flag Standstate Kneel"); + +-- North Fleet Soldier SAI +SET @GUID := -118615; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=23793; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@GUID,0,0,0,1,0,100,0,1000,1000,20000,20000,90,8,0,0,0,0,0,1,0,0,0,0,0,0,0,"North Fleet Soldier - Out of Combat - Set Flag Standstate Kneel"), +(@GUID,0,1,0,1,0,100,0,10000,10000,10000,10000,91,8,0,0,0,0,0,1,0,0,0,0,0,0,0,"North Fleet Soldier - Out of Combat - Remove Flag Standstate Kneel"); + +-- North Fleet Soldier SAI +SET @GUID := -118614; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=23793; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@GUID,0,0,0,1,0,100,0,1000,1000,20000,20000,90,8,0,0,0,0,0,1,0,0,0,0,0,0,0,"North Fleet Soldier - Out of Combat - Set Flag Standstate Kneel"), +(@GUID,0,1,0,1,0,100,0,10000,10000,10000,10000,91,8,0,0,0,0,0,1,0,0,0,0,0,0,0,"North Fleet Soldier - Out of Combat - Remove Flag Standstate Kneel"); + +-- North Fleet Soldier SAI +SET @GUID := -118617; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=23793; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@GUID,0,0,0,1,0,100,0,1000,1000,20000,20000,90,8,0,0,0,0,0,1,0,0,0,0,0,0,0,"North Fleet Soldier - Out of Combat - Set Flag Standstate Kneel"), +(@GUID,0,1,0,1,0,100,0,10000,10000,10000,10000,91,8,0,0,0,0,0,1,0,0,0,0,0,0,0,"North Fleet Soldier - Out of Combat - Remove Flag Standstate Kneel"); + +SET @NPC := 118715; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1366.91,`position_y`=-6403.691,`position_z`=2.680478 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1366.91,-6403.691,2.680478,0,0,0,0,100,0), +(@PATH,2,1363.91,-6401.191,3.180478,0,0,0,0,100,0), +(@PATH,3,1361.41,-6399.191,3.680478,0,0,0,0,100,0), +(@PATH,4,1355.06,-6393.984,3.712503,0,0,0,0,100,0), +(@PATH,5,1364.06,-6401.234,3.212503,0,0,0,0,100,0), +(@PATH,6,1367.183,-6403.969,2.503129,0,0,0,0,100,0), +(@PATH,7,1379.433,-6410.219,2.003129,0,0,0,0,100,0), +(@PATH,8,1383.577,-6412.28,1.622055,0,0,0,0,100,0), +(@PATH,9,1400.694,-6411.621,1.439368,0,0,0,0,100,0), +(@PATH,10,1427.231,-6407.261,1.381301,0,0,0,0,100,0), +(@PATH,11,1438.388,-6408.347,1.346219,0,0,0,0,100,0), +(@PATH,12,1439.638,-6408.847,1.346219,0,0,0,0,100,0), +(@PATH,13,1441.138,-6410.347,1.596219,0,0,0,0,100,0), +(@PATH,14,1442.638,-6412.347,1.846219,0,0,0,0,100,0), +(@PATH,15,1444.79,-6415.361,2.014442,0,0,0,0,100,0), +(@PATH,16,1447.54,-6414.111,2.264442,0,0,0,0,100,0), +(@PATH,17,1450.79,-6412.611,3.014442,0,0,0,0,100,0), +(@PATH,18,1453.327,-6411.495,3.152454,0,0,0,0,100,0), +(@PATH,19,1456.827,-6403.495,2.402454,0,0,0,0,100,0), +(@PATH,20,1458.577,-6399.995,1.902454,0,0,0,0,100,0), +(@PATH,21,1459.675,-6397.563,2.077178,0,0,0,0,100,0), +(@PATH,22,1459.425,-6392.563,2.577178,0,0,0,0,100,0), +(@PATH,23,1459.175,-6389.563,3.327178,0,0,0,0,100,0), +(@PATH,24,1458.925,-6386.563,4.077178,0,0,0,0,100,0), +(@PATH,25,1458.675,-6382.813,4.327178,0,0,0,0,100,0), +(@PATH,26,1458.175,-6375.813,5.077178,0,0,0,0,100,0), +(@PATH,27,1457.925,-6372.063,5.577178,0,0,0,0,100,0), +(@PATH,28,1457.675,-6369.063,6.327178,0,0,0,0,100,0), +(@PATH,29,1457.675,-6366.063,7.077178,0,0,0,0,100,0), +(@PATH,30,1457.49,-6365.789,7.133235,0,0,0,0,100,0), +(@PATH,31,1457.49,-6365.289,7.133235,0,0,0,0,100,0), +(@PATH,32,1459.66,-6364.438,7.431883,0,0,0,0,100,0), +(@PATH,33,1459.776,-6364.708,7.375866,0,0,0,0,100,0), +(@PATH,34,1457.526,-6365.458,7.125866,0,0,0,0,100,0), +(@PATH,35,1457.776,-6367.458,6.875866,0,0,0,0,100,0), +(@PATH,36,1457.776,-6370.458,6.125866,0,0,0,0,100,0), +(@PATH,37,1458.026,-6373.458,5.375866,0,0,0,0,100,0), +(@PATH,38,1458.526,-6377.458,4.625866,0,0,0,0,100,0), +(@PATH,39,1459.026,-6384.208,4.375866,0,0,0,0,100,0), +(@PATH,40,1459.276,-6388.208,3.625866,0,0,0,0,100,0), +(@PATH,41,1459.526,-6391.208,3.125866,0,0,0,0,100,0), +(@PATH,42,1459.776,-6394.208,2.375866,0,0,0,0,100,0), +(@PATH,43,1459.735,-6397.894,1.937207,0,0,0,0,100,0), +(@PATH,44,1456.985,-6403.394,2.437207,0,0,0,0,100,0), +(@PATH,45,1455.985,-6405.644,2.937207,0,0,0,0,100,0), +(@PATH,46,1452.916,-6411.519,2.985259,0,0,0,0,100,0), +(@PATH,47,1448.666,-6413.519,2.485259,0,0,0,0,100,0), +(@PATH,48,1444.586,-6415.515,1.851662,0,0,0,0,100,0), +(@PATH,49,1442.836,-6412.265,1.851662,0,0,0,0,100,0), +(@PATH,50,1441.836,-6411.015,1.601662,0,0,0,0,100,0), +(@PATH,51,1439.836,-6408.765,1.601662,0,0,0,0,100,0), +(@PATH,52,1439.502,-6408.882,1.482241,0,0,0,0,100,0), +(@PATH,53,1438.502,-6408.882,1.232241,0,0,0,0,100,0), +(@PATH,54,1426.759,-6407.316,1.181526,0,0,0,0,100,0), +(@PATH,55,1400.52,-6411.691,1.317291,0,0,0,0,100,0), +(@PATH,56,1383.313,-6412.44,1.821733,0,0,0,0,100,0), +(@PATH,57,1376.313,-6408.69,2.071733,0,0,0,0,100,0); + +SET @NPC := 108486; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1472.888,`position_y`=-6264.896,`position_z`=5.352096 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1472.888,-6264.896,5.352096,0,0,0,0,100,0), +(@PATH,2,1473.138,-6265.646,5.352096,0,0,0,0,100,0), +(@PATH,3,1471.138,-6276.396,5.852096,0,0,0,0,100,0), +(@PATH,4,1469.888,-6283.146,6.352096,0,0,0,0,100,0), +(@PATH,5,1468.638,-6290.896,6.852096,0,0,0,0,100,0), +(@PATH,6,1467.138,-6298.896,7.602096,0,0,0,0,100,0), +(@PATH,7,1467.035,-6299.166,7.627969,0,0,0,0,100,0), +(@PATH,8,1467.035,-6299.916,7.377969,0,0,0,0,100,0), +(@PATH,9,1467.035,-6308.916,8.12797,0,0,0,0,100,0), +(@PATH,10,1467.126,-6323.873,7.746972,0,0,0,0,100,0), +(@PATH,11,1471.376,-6329.373,7.246972,0,0,0,0,100,0), +(@PATH,12,1477.948,-6337.766,6.911916,5.416241,0,0,0,100,0), +(@PATH,13,1474.383,-6323.951,7.680174,0,0,0,0,100,0), +(@PATH,14,1472.883,-6318.451,8.180174,0,0,0,0,100,0), +(@PATH,15,1468.028,-6299.964,7.639977,0,0,0,0,100,0), +(@PATH,16,1469.528,-6292.964,7.139977,0,0,0,0,100,0), +(@PATH,17,1471.028,-6286.214,6.389977,0,0,0,0,100,0), +(@PATH,18,1472.528,-6278.714,6.139977,0,0,0,0,100,0), +(@PATH,19,1474.028,-6270.714,5.389977,0,0,0,0,100,0), +(@PATH,20,1474.964,-6266.524,5.035554,0,0,0,0,100,0), +(@PATH,21,1475.214,-6248.774,5.785554,0,0,0,0,100,0), +(@PATH,22,1475.268,-6247.398,5.807261,0,0,0,0,100,0), +(@PATH,23,1471.348,-6240.949,5.550797,2.094752,0,0,0,100,0); + +SET @NPC := 101318; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1488.648,`position_y`=-6204.83,`position_z`=5.769119 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1488.648,-6204.83,5.769119,0,0,0,0,100,0), +(@PATH,2,1497.148,-6226.08,5.269119,0,0,0,0,100,0), +(@PATH,3,1500.011,-6233.605,5.060438,0,0,0,0,100,0), +(@PATH,4,1500.011,-6260.355,5.310438,0,0,0,0,100,0), +(@PATH,5,1500.011,-6265.355,5.810438,0,0,0,0,100,0), +(@PATH,6,1500.109,-6265.473,5.888788,0,0,0,0,100,0), +(@PATH,7,1500.109,-6266.973,6.138788,0,0,0,0,100,0), +(@PATH,8,1508.791,-6290.721,6.167375,0,0,0,0,100,0), +(@PATH,9,1507.291,-6299.471,6.667375,0,0,0,0,100,0), +(@PATH,10,1505.291,-6314.221,7.167375,0,0,0,0,100,0), +(@PATH,11,1505.904,-6314.034,7.007656,0,0,0,0,100,0), +(@PATH,12,1510.183,-6300.333,6.515838,0,0,0,0,100,0), +(@PATH,13,1510.183,-6293.333,6.015838,0,0,0,0,100,0), +(@PATH,14,1511.227,-6266.65,5.682878,0,0,0,0,100,0), +(@PATH,15,1508.227,-6241.15,6.182878,0,0,0,0,100,0), +(@PATH,16,1507.123,-6232.67,5.979321,0,0,0,0,100,0), +(@PATH,17,1502.351,-6201.641,6.309025,0,0,0,0,100,0), +(@PATH,18,1490.271,-6207.956,6.065028,0,0,0,0,100,0); + +SET @NPC := 101307; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1570.567,`position_y`=-6265.962,`position_z`=6.703756 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1570.567,-6265.962,6.703756,0,0,0,0,100,0), +(@PATH,2,1571.317,-6266.712,6.453756,0,0,0,0,100,0), +(@PATH,3,1579.416,-6265.596,7.200127,0,0,0,0,100,0), +(@PATH,4,1578.416,-6266.596,7.200127,0,0,0,0,100,0), +(@PATH,5,1577.416,-6270.596,7.450127,0,0,0,0,100,0), +(@PATH,6,1577.416,-6274.846,7.700127,0,0,0,0,100,0), +(@PATH,7,1578.667,-6276.01,7.95574,0,0,0,0,100,0), +(@PATH,8,1579.167,-6278.51,8.20574,0,0,0,0,100,0), +(@PATH,9,1569.438,-6279.025,7.695375,0,0,0,0,100,0), +(@PATH,10,1566.438,-6278.525,7.195375,0,0,0,0,100,0), +(@PATH,11,1563.438,-6278.275,6.695375,0,0,0,0,100,0), +(@PATH,12,1539.938,-6275.525,6.195375,0,0,0,0,100,0), +(@PATH,13,1533.601,-6274.893,5.569158,0,0,0,0,100,0), +(@PATH,14,1522.351,-6284.643,5.819158,0,0,0,0,100,0), +(@PATH,15,1506.851,-6298.143,6.569158,0,0,0,0,100,0), +(@PATH,16,1506.571,-6298.359,6.857921,0,0,0,0,100,0), +(@PATH,17,1505.071,-6299.609,6.607921,0,0,0,0,100,0), +(@PATH,18,1498.321,-6301.609,7.357921,0,0,0,0,100,0), +(@PATH,19,1494.571,-6302.359,7.607921,0,0,0,0,100,0), +(@PATH,20,1490.071,-6303.859,8.357921,0,0,0,0,100,0), +(@PATH,21,1480.551,-6306.729,8.720417,0,0,0,0,100,0), +(@PATH,22,1469.551,-6319.479,8.220417,0,0,0,0,100,0), +(@PATH,23,1457.14,-6332.838,8.262967,0,0,0,0,100,0), +(@PATH,24,1444.39,-6333.088,7.512967,0,0,0,0,100,0), +(@PATH,25,1439.39,-6333.088,7.012967,0,0,0,0,100,0), +(@PATH,26,1434.39,-6333.088,6.512967,0,0,0,0,100,0), +(@PATH,27,1434.122,-6333.369,6.238153,0,0,0,0,100,0), +(@PATH,28,1433.122,-6333.369,6.238153,0,0,0,0,100,0), +(@PATH,29,1411.013,-6333.472,6.215061,0,0,0,0,100,0), +(@PATH,30,1412.691,-6340.484,6.268942,0,0,0,0,100,0), +(@PATH,31,1409.974,-6339.788,6.441183,0,0,0,0,100,0), +(@PATH,32,1407.367,-6339.119,6.361105,0,0,0,0,100,0), +(@PATH,33,1406.214,-6339.782,7.377893,0,0,0,0,100,0), +(@PATH,34,1406.561,-6340.945,7.394681,1.154748,5000,0,0,100,0), +(@PATH,35,1407.723,-6339.971,6.870447,0,0,0,0,100,0), +(@PATH,36,1428.595,-6309.238,6.015383,0,0,0,0,100,0), +(@PATH,37,1433.345,-6302.738,5.515383,0,0,0,0,100,0), +(@PATH,38,1433.623,-6302.414,5.622099,0,0,0,0,100,0), +(@PATH,39,1434.623,-6301.164,5.622099,0,0,0,0,100,0), +(@PATH,40,1445.623,-6292.664,5.872099,0,0,0,0,100,0), +(@PATH,41,1449.123,-6289.664,6.372099,0,0,0,0,100,0), +(@PATH,42,1465.615,-6277.031,6.045777,0,0,0,0,100,0), +(@PATH,43,1500.381,-6274.618,6.177592,0,0,0,0,100,0), +(@PATH,44,1509.881,-6267.618,5.927592,0,0,0,0,100,0), +(@PATH,45,1515.381,-6263.368,5.427592,0,0,0,0,100,0), +(@PATH,46,1530.381,-6252.118,6.177592,0,0,0,0,100,0), +(@PATH,47,1533.511,-6249.774,6.607514,0,0,0,0,100,0), +(@PATH,48,1537.261,-6246.524,6.857514,0,0,0,0,100,0), +(@PATH,49,1555.521,-6246.682,6.738133,0,0,0,0,100,0), +(@PATH,50,1562.639,-6250.232,6.456325,0,0,0,0,100,0); diff --git a/sql/updates/world/2015_05_31_01_world.sql b/sql/updates/world/2015_05_31_01_world.sql new file mode 100644 index 00000000000..151c7865bbc --- /dev/null +++ b/sql/updates/world/2015_05_31_01_world.sql @@ -0,0 +1,532 @@ +-- +-- North Fleet Sailor SAI +SET @ENTRY := 23866; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,0,10000,10000,10000,10000,49,0,0,0,0,0,0,19,23865,10,0,0,0,0,0,"North Fleet Sailor - Out of Combat - Start Attacking"); + +UPDATE `creature` SET `position_x`=2315.688,`position_y`=-5998.779,`position_z`=2.620016 WHERE `guid`=200011; +-- Winterskorn Scout SAI +SET @GUID := -200011; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=24116; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@GUID,0,0,0,25,0,100,0,0,0,0,0,53,0,2000110,1,0,0,2,1,0,0,0,0,0,0,0,"Winterskorn Scout - On Reset - Start Waypoint"), +(@GUID,0,1,2,40,0,100,0,6,2000110,0,0,54,6000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Winterskorn Scout - On Waypoint 6 Reached - Pause Waypoint"), +(@GUID,0,2,0,61,0,100,0,6,2000110,0,0,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Winterskorn Scout - On Waypoint 6 Reached - Play Emote 1"), +(@GUID,0,3,0,40,0,100,0,13,2000110,0,0,54,10000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Winterskorn Scout - On Waypoint 13 Reached - Pause Waypoint"); + +SET @PATH := 2000110; +DELETE FROM `waypoints` WHERE `entry`=@PATH; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`) VALUES +(@PATH,1,2315.688,-5998.779,2.620016), +(@PATH,2,2315.938,-5997.279,2.120016), +(@PATH,3,2316.201,-5997.023,2.256905), +(@PATH,4,2316.451,-5995.273,2.006905), +(@PATH,5,2316.451,-5993.023,2.006905), +(@PATH,6,2316.701,-5991.023,2.006905), +(@PATH,7,2316.608,-5990.383,1.743775), +(@PATH,8,2316.304,-5992.458,2.601433), +(@PATH,9,2315.804,-5994.958,1.851433), +(@PATH,10,2315.554,-5997.208,2.351433), +(@PATH,11,2315.554,-5998.208,2.601433), +(@PATH,12,2314.804,-6002.708,2.101433), +(@PATH,13,2314.5,-6004.032,1.959091); + +DELETE FROM `creature_addon` WHERE `guid`=200012; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(200012,0,0,1,1,0, ''); + +-- Winterskorn Scout SAI +SET @GUID := -200012; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=24116; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@GUID,0,0,0,1,0,100,0,2000,2000,2000,2000,5,7,0,0,0,0,0,1,0,0,0,0,0,0,0,"Winterskorn Scout - Out of Combat - Play Emote 7"); + +-- +-- Giants RUN -- +-- +-- Iron Rune Stonecaller SAI +SET @ENTRY := 24030; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,0,1000,1000,12000,25000,11,43269,0,0,0,0,0,1,0,0,0,0,0,0,0,"Iron Rune Stonecaller - Out of Combat - Cast 'Summon Stone Giant'"); + +SET @NPC := 120132; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2205.236,`position_y`=-5883.114,`position_z`=234.0254 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2205.236,-5883.114,234.0254,0,0,0,0,100,0), +(@PATH,2,2202.736,-5884.864,233.2754,0,0,0,0,100,0), +(@PATH,3,2200.736,-5886.364,232.5254,0,0,0,0,100,0), +(@PATH,4,2199.236,-5887.614,232.2754,0,0,0,0,100,0), +(@PATH,5,2196.736,-5889.364,231.5254,0,0,0,0,100,0), +(@PATH,6,2197.222,-5889.061,231.8507,0,0,0,0,100,0), +(@PATH,7,2199.722,-5887.311,232.3507,0,0,0,0,100,0), +(@PATH,8,2200.972,-5886.311,232.8507,0,0,0,0,100,0), +(@PATH,9,2204.222,-5883.811,233.8507,0,0,0,0,100,0), +(@PATH,10,2205.595,-5882.668,234.1769,0,0,0,0,100,0), +(@PATH,11,2214.723,-5867.117,234.3781,0,0,0,0,100,0), +(@PATH,12,2223.223,-5854.617,233.8781,0,0,0,0,100,0), +(@PATH,13,2229.723,-5845.117,234.6281,0,0,0,0,100,0), +(@PATH,14,2232.973,-5840.117,233.6281,0,0,0,0,100,0), +(@PATH,15,2233.973,-5838.367,233.1281,0,0,0,0,100,0), +(@PATH,16,2235.879,-5835.819,232.8821,0,0,0,0,100,0), +(@PATH,17,2244.879,-5824.069,233.3821,0,0,0,0,100,0), +(@PATH,18,2248.129,-5820.319,233.8821,0,0,0,0,100,0), +(@PATH,19,2251.129,-5816.319,234.6321,0,0,0,0,100,0), +(@PATH,20,2251.333,-5816.246,234.7803,0,0,0,0,100,0), +(@PATH,21,2251.583,-5815.996,234.7803,0,0,0,0,100,0), +(@PATH,22,2253.583,-5815.996,235.5303,0,0,0,0,100,0), +(@PATH,23,2256.583,-5816.246,236.0303,0,0,0,0,100,0), +(@PATH,24,2260.583,-5816.246,236.5303,0,0,0,0,100,0), +(@PATH,25,2263.333,-5816.496,237.2803,0,0,0,0,100,0), +(@PATH,26,2266.333,-5816.496,238.0303,0,0,0,0,100,0), +(@PATH,27,2269.333,-5816.496,238.7803,0,0,0,0,100,0), +(@PATH,28,2273.333,-5816.746,239.2803,0,0,0,0,100,0), +(@PATH,29,2273.584,-5816.578,239.4526,0,0,0,0,100,0), +(@PATH,30,2274.084,-5816.578,239.7026,0,0,0,0,100,0), +(@PATH,31,2277.084,-5816.578,240.2026,0,0,0,0,100,0), +(@PATH,32,2280.084,-5816.578,240.7026,0,0,0,0,100,0), +(@PATH,33,2283.084,-5816.578,241.4526,0,0,0,0,100,0), +(@PATH,34,2284.834,-5816.578,241.9526,0,0,0,0,100,0), +(@PATH,35,2286.834,-5816.578,242.7026,0,0,0,0,100,0), +(@PATH,36,2288.834,-5816.578,243.2026,0,0,0,0,100,0), +(@PATH,37,2290.834,-5816.578,243.9526,0,0,0,0,100,0), +(@PATH,38,2293.834,-5816.578,244.9526,0,0,0,0,100,0), +(@PATH,39,2294.101,-5816.669,245.2336,0,0,0,0,100,0), +(@PATH,40,2295.601,-5816.669,245.4836,0,0,0,0,100,0), +(@PATH,41,2298.601,-5816.669,246.2336,0,0,0,0,100,0), +(@PATH,42,2300.601,-5816.669,246.7336,0,0,0,0,100,0), +(@PATH,43,2303.601,-5816.919,247.4836,0,0,0,0,100,0), +(@PATH,44,2305.601,-5816.919,247.9836,0,0,0,0,100,0), +(@PATH,45,2307.351,-5817.169,248.4836,0,0,0,0,100,0), +(@PATH,46,2310.351,-5817.169,249.2336,0,0,0,0,100,0), +(@PATH,47,2312.351,-5817.169,249.7336,0,0,0,0,100,0), +(@PATH,48,2314.351,-5817.169,250.4836,0,0,0,0,100,0), +(@PATH,49,2317.351,-5817.419,250.9836,0,0,0,0,100,0), +(@PATH,50,2320.351,-5817.419,251.7336,0,0,0,0,100,0), +(@PATH,51,2317.865,-5817.402,251.3246,0,0,0,0,100,0), +(@PATH,52,2314.865,-5817.152,250.5746,0,0,0,0,100,0), +(@PATH,53,2311.865,-5817.152,249.8246,0,0,0,0,100,0), +(@PATH,54,2309.865,-5817.152,249.0746,0,0,0,0,100,0), +(@PATH,55,2308.115,-5817.152,248.5746,0,0,0,0,100,0), +(@PATH,56,2306.115,-5817.152,248.0746,0,0,0,0,100,0), +(@PATH,57,2304.115,-5816.902,247.5746,0,0,0,0,100,0), +(@PATH,58,2301.115,-5816.902,246.8246,0,0,0,0,100,0), +(@PATH,59,2299.115,-5816.652,246.3246,0,0,0,0,100,0), +(@PATH,60,2296.115,-5816.652,245.5746,0,0,0,0,100,0), +(@PATH,61,2295.889,-5816.669,245.3645,0,0,0,0,100,0), +(@PATH,62,2295.389,-5816.669,245.3645,0,0,0,0,100,0), +(@PATH,63,2293.389,-5816.669,244.6145,0,0,0,0,100,0), +(@PATH,64,2290.389,-5816.669,243.6145,0,0,0,0,100,0), +(@PATH,65,2288.389,-5816.669,243.1145,0,0,0,0,100,0), +(@PATH,66,2286.389,-5816.669,242.3645,0,0,0,0,100,0), +(@PATH,67,2284.639,-5816.669,241.8645,0,0,0,0,100,0), +(@PATH,68,2281.639,-5816.669,241.3645,0,0,0,0,100,0), +(@PATH,69,2278.639,-5816.669,240.6145,0,0,0,0,100,0), +(@PATH,70,2275.639,-5816.669,239.8645,0,0,0,0,100,0), +(@PATH,71,2275.427,-5816.347,239.6109,0,0,0,0,100,0), +(@PATH,72,2273.927,-5816.347,239.3609,0,0,0,0,100,0), +(@PATH,73,2268.927,-5816.347,238.6109,0,0,0,0,100,0), +(@PATH,74,2265.927,-5816.347,238.1109,0,0,0,0,100,0), +(@PATH,75,2263.177,-5816.347,237.3609,0,0,0,0,100,0), +(@PATH,76,2260.177,-5816.347,236.8609,0,0,0,0,100,0), +(@PATH,77,2257.177,-5816.097,236.1109,0,0,0,0,100,0), +(@PATH,78,2254.177,-5816.097,235.6109,0,0,0,0,100,0), +(@PATH,79,2252.177,-5816.097,234.8609,0,0,0,0,100,0), +(@PATH,80,2251.755,-5816.022,234.7061,0,0,0,0,100,0), +(@PATH,81,2251.255,-5816.022,234.4561,0,0,0,0,100,0), +(@PATH,82,2249.005,-5819.272,233.9561,0,0,0,0,100,0), +(@PATH,83,2245.755,-5823.022,233.4561,0,0,0,0,100,0), +(@PATH,84,2237.505,-5833.772,232.7061,0,0,0,0,100,0), +(@PATH,85,2237.158,-5834.125,232.8664,0,0,0,0,100,0), +(@PATH,86,2235.658,-5835.875,232.8664,0,0,0,0,100,0), +(@PATH,87,2233.408,-5839.375,233.3664,0,0,0,0,100,0), +(@PATH,88,2232.408,-5840.875,234.1164,0,0,0,0,100,0), +(@PATH,89,2219.158,-5860.625,234.6164,0,0,0,0,100,0); + +SET @NPC := 120149; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2262.334,`position_y`=-5751.438,`position_z`=235.7999 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2262.334,-5751.438,235.7999,0,0,0,0,100,0), +(@PATH,2,2265.334,-5751.688,236.2999,0,0,0,0,100,0), +(@PATH,3,2268.334,-5751.688,236.7999,0,0,0,0,100,0), +(@PATH,4,2272.334,-5751.938,237.2999,0,0,0,0,100,0), +(@PATH,5,2276.084,-5751.938,237.7999,0,0,0,0,100,0), +(@PATH,6,2281.084,-5752.188,238.5499,0,0,0,0,100,0), +(@PATH,7,2285.119,-5752.452,239.3618,0,0,0,0,100,0), +(@PATH,8,2290.119,-5751.702,239.8618,0,0,0,0,100,0), +(@PATH,9,2293.119,-5751.202,240.6118,0,0,0,0,100,0), +(@PATH,10,2296.869,-5750.952,241.3618,0,0,0,0,100,0), +(@PATH,11,2298.869,-5750.702,242.1118,0,0,0,0,100,0), +(@PATH,12,2300.619,-5750.452,242.8618,0,0,0,0,100,0), +(@PATH,13,2302.619,-5750.202,243.3618,0,0,0,0,100,0), +(@PATH,14,2284.775,-5752.427,238.9423,0,0,0,0,100,0), +(@PATH,15,2280.025,-5752.177,238.1923,0,0,0,0,100,0), +(@PATH,16,2276.025,-5751.927,237.6923,0,0,0,0,100,0), +(@PATH,17,2271.275,-5751.927,237.1923,0,0,0,0,100,0), +(@PATH,18,2267.275,-5751.677,236.6923,0,0,0,0,100,0), +(@PATH,19,2264.275,-5751.677,235.9423,0,0,0,0,100,0), +(@PATH,20,2263.899,-5751.408,235.8208,0,0,0,0,100,0), +(@PATH,21,2262.149,-5751.158,235.3208,0,0,0,0,100,0), +(@PATH,22,2259.899,-5749.408,234.5708,0,0,0,0,100,0), +(@PATH,23,2258.149,-5748.158,234.0708,0,0,0,0,100,0), +(@PATH,24,2255.399,-5745.658,233.5708,0,0,0,0,100,0), +(@PATH,25,2250.649,-5742.158,232.8208,0,0,0,0,100,0), +(@PATH,26,2247.649,-5739.658,232.0708,0,0,0,0,100,0), +(@PATH,27,2245.899,-5738.408,231.3208,0,0,0,0,100,0), +(@PATH,28,2245.635,-5738.067,231.0636,0,0,0,0,100,0), +(@PATH,29,2245.385,-5737.817,231.0636,0,0,0,0,100,0), +(@PATH,30,2242.385,-5737.817,230.3136,0,0,0,0,100,0), +(@PATH,31,2238.385,-5737.817,229.5636,0,0,0,0,100,0), +(@PATH,32,2235.385,-5737.567,228.8136,0,0,0,0,100,0), +(@PATH,33,2232.385,-5737.567,228.5636,0,0,0,0,100,0), +(@PATH,34,2230.385,-5737.317,227.8136,0,0,0,0,100,0), +(@PATH,35,2227.635,-5737.317,227.0636,0,0,0,0,100,0), +(@PATH,36,2223.635,-5737.067,226.5636,0,0,0,0,100,0), +(@PATH,37,2228.52,-5737.324,227.3947,0,0,0,0,100,0), +(@PATH,38,2231.52,-5737.324,228.1447,0,0,0,0,100,0), +(@PATH,39,2233.52,-5737.324,228.6447,0,0,0,0,100,0), +(@PATH,40,2236.52,-5737.324,229.6447,0,0,0,0,100,0), +(@PATH,41,2239.52,-5737.574,230.1447,0,0,0,0,100,0), +(@PATH,42,2244.52,-5737.824,230.8947,0,0,0,0,100,0), +(@PATH,43,2244.827,-5737.938,231.2612,0,0,0,0,100,0), +(@PATH,44,2245.577,-5738.188,231.5112,0,0,0,0,100,0), +(@PATH,45,2247.077,-5739.438,232.0112,0,0,0,0,100,0), +(@PATH,46,2249.577,-5741.188,232.7612,0,0,0,0,100,0), +(@PATH,47,2252.327,-5743.688,233.0112,0,0,0,0,100,0), +(@PATH,48,2256.327,-5746.688,233.7612,0,0,0,0,100,0), +(@PATH,49,2259.577,-5748.938,234.7612,0,0,0,0,100,0), +(@PATH,50,2261.827,-5750.938,235.5112,0,0,0,0,100,0); + +DELETE FROM `creature_addon` WHERE `guid` IN (109831, 109828, 109826, 109830,109823, 109825,109824); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(109831,0,0,0,1,234, ''), +(109828,0,0,0,1,234, ''), +(109830,0,0,0,1,234, ''), +(109826,0,0,0,1,234, ''), +(109823,0,0,0,1,234, ''), +(109825,0,0,0,1,234, ''), +(109824,0,0,0,1,234, ''); + +SET @NPC := 120150; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2128.34,`position_y`=-5658.604,`position_z`=223.8993 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2128.34,-5658.604,223.8993,0,0,0,0,100,0), +(@PATH,2,2125.84,-5654.354,223.1493,0,0,0,0,100,0), +(@PATH,3,2122.84,-5648.354,222.8993,0,0,0,0,100,0), +(@PATH,4,2123.144,-5649.323,222.8194,0,0,0,0,100,0), +(@PATH,5,2126.394,-5655.073,223.3194,0,0,0,0,100,0), +(@PATH,6,2128.553,-5658.948,223.8999,0,0,0,0,100,0), +(@PATH,7,2129.803,-5662.698,224.3999,0,0,0,0,100,0), +(@PATH,8,2134.125,-5675.085,224.4907,0,0,0,0,100,0), +(@PATH,9,2152.488,-5679.756,223.9727,0,0,0,0,100,0), +(@PATH,10,2160.738,-5690.756,224.7227,0,0,0,0,100,0), +(@PATH,11,2163.738,-5694.756,225.2227,0,0,0,0,100,0), +(@PATH,12,2165.899,-5697.549,225.7736,0,0,0,0,100,0), +(@PATH,13,2166.149,-5700.549,226.5236,0,0,0,0,100,0), +(@PATH,14,2166.649,-5704.549,227.0236,0,0,0,0,100,0), +(@PATH,15,2168.59,-5716.993,226.6831,0,0,0,0,100,0), +(@PATH,16,2167.84,-5719.993,225.9331,0,0,0,0,100,0), +(@PATH,17,2167.09,-5722.743,225.1831,0,0,0,0,100,0), +(@PATH,18,2166.59,-5724.743,224.6831,0,0,0,0,100,0), +(@PATH,19,2165.34,-5728.493,224.1831,0,0,0,0,100,0), +(@PATH,20,2164.34,-5732.243,223.4331,0,0,0,0,100,0), +(@PATH,21,2162.84,-5738.993,222.9331,0,0,0,0,100,0), +(@PATH,22,2160.84,-5745.743,222.1831,0,0,0,0,100,0), +(@PATH,23,2162.729,-5739.398,222.9048,0,0,0,0,100,0), +(@PATH,24,2164.229,-5733.648,223.4048,0,0,0,0,100,0), +(@PATH,25,2164.979,-5729.898,224.1548,0,0,0,0,100,0), +(@PATH,26,2165.979,-5726.898,224.4048,0,0,0,0,100,0), +(@PATH,27,2166.729,-5724.148,224.9048,0,0,0,0,100,0), +(@PATH,28,2167.479,-5721.148,225.6548,0,0,0,0,100,0), +(@PATH,29,2167.979,-5719.398,226.1548,0,0,0,0,100,0), +(@PATH,30,2168.548,-5716.782,226.5884,0,0,0,0,100,0), +(@PATH,31,2167.798,-5711.782,227.0884,0,0,0,0,100,0), +(@PATH,32,2166.798,-5703.282,226.5884,0,0,0,0,100,0), +(@PATH,33,2166.048,-5698.282,226.0884,0,0,0,0,100,0), +(@PATH,34,2165.742,-5697.929,225.9924,0,0,0,0,100,0), +(@PATH,35,2165.742,-5697.429,225.7424,0,0,0,0,100,0), +(@PATH,36,2163.242,-5694.179,224.9924,0,0,0,0,100,0), +(@PATH,37,2160.242,-5690.429,224.4924,0,0,0,0,100,0), +(@PATH,38,2152.176,-5679.611,224.0445,0,0,0,0,100,0), +(@PATH,39,2144.426,-5677.861,224.5445,0,0,0,0,100,0); + +SET @NPC := 120152; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2154.159,`position_y`=-5723.996,`position_z`=223.0912 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2154.159,-5723.996,223.0912,0,0,0,0,100,0), +(@PATH,2,2137.623,-5711.125,222.6578,0,0,0,0,100,0), +(@PATH,3,2129.873,-5709.875,221.9078,0,0,0,0,100,0), +(@PATH,4,2119.815,-5707.577,221.3295,0,0,0,0,100,0), +(@PATH,5,2114.065,-5709.077,220.8295,0,0,0,0,100,0), +(@PATH,6,2108.565,-5710.327,220.3295,0,0,0,0,100,0), +(@PATH,7,2101.43,-5712.379,219.8378,0,0,0,0,100,0), +(@PATH,8,2099.93,-5717.379,219.8378,0,0,0,0,100,0), +(@PATH,9,2098.93,-5718.379,219.5878,0,0,0,0,100,0), +(@PATH,10,2098.18,-5720.129,219.8378,0,0,0,0,100,0), +(@PATH,11,2097.43,-5720.879,219.8378,0,0,0,0,100,0), +(@PATH,12,2094.14,-5721.884,220.084,0,0,0,0,100,0), +(@PATH,13,2092.64,-5726.134,220.084,0,0,0,0,100,0), +(@PATH,14,2091.89,-5726.134,220.084,0,0,0,0,100,0), +(@PATH,15,2087.875,-5731.934,220.9643,0,0,0,0,100,0), +(@PATH,16,2092.625,-5745.934,221.2143,0,0,0,0,100,0), +(@PATH,17,2094.375,-5750.684,221.9643,0,0,0,0,100,0), +(@PATH,18,2095.442,-5753.201,222.3668,0,0,0,0,100,0), +(@PATH,19,2104.192,-5759.951,223.1168,0,0,0,0,100,0), +(@PATH,20,2119.141,-5770.843,222.4777,0,0,0,0,100,0), +(@PATH,21,2124.141,-5769.843,222.2277,0,0,0,0,100,0), +(@PATH,22,2131.641,-5768.343,221.4777,0,0,0,0,100,0), +(@PATH,23,2140.391,-5766.593,222.2277,0,0,0,0,100,0), +(@PATH,24,2140.742,-5766.548,221.9879,0,0,0,0,100,0), +(@PATH,25,2142.742,-5766.048,222.2379,0,0,0,0,100,0), +(@PATH,26,2151.492,-5753.048,221.4879,0,0,0,0,100,0), +(@PATH,27,2155.317,-5747.127,221.8537,0,0,0,0,100,0), +(@PATH,28,2154.817,-5738.127,222.1037,0,0,0,0,100,0), +(@PATH,29,2154.317,-5729.377,222.8537,0,0,0,0,100,0); + +SET @NPC := 120137; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2075.252,`position_y`=-5716.352,`position_z`=220.4356 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2075.252,-5716.352,220.4356,0,0,0,0,100,0), +(@PATH,2,2070.502,-5707.852,219.9356,0,0,0,0,100,0), +(@PATH,3,2069.502,-5705.852,220.1856,0,0,0,0,100,0), +(@PATH,4,2070.526,-5706.426,220.133,0,0,0,0,100,0), +(@PATH,5,2065.526,-5702.926,219.883,0,0,0,0,100,0), +(@PATH,6,2065.026,-5702.426,219.883,0,0,0,0,100,0), +(@PATH,7,2064.776,-5701.676,219.883,0,0,0,0,100,0), +(@PATH,8,2065.526,-5700.176,219.883,0,0,0,0,100,0), +(@PATH,9,2060.776,-5693.676,219.633,0,0,0,0,100,0), +(@PATH,10,2060.422,-5693.571,219.6252,0,0,0,0,100,0), +(@PATH,11,2058.672,-5693.071,219.6252,0,0,0,0,100,0), +(@PATH,12,2047.04,-5682.255,219.5401,0,0,0,0,100,0), +(@PATH,13,2042.04,-5678.005,219.2901,0,0,0,0,100,0), +(@PATH,14,2041.632,-5678.002,219.3048,0,0,0,0,100,0), +(@PATH,15,2039.632,-5677.252,219.3048,0,0,0,0,100,0), +(@PATH,16,2037.132,-5678.252,219.3048,0,0,0,0,100,0), +(@PATH,17,2035.882,-5678.752,219.0548,0,0,0,0,100,0), +(@PATH,18,2033.632,-5678.002,219.0548,0,0,0,0,100,0), +(@PATH,19,2029.16,-5686.224,218.986,0,0,0,0,100,0), +(@PATH,20,2023.726,-5703.316,219.4464,0,0,0,0,100,0), +(@PATH,21,2022.476,-5714.066,219.9464,0,0,0,0,100,0), +(@PATH,22,2022.648,-5712.915,219.7182,0,0,0,0,100,0), +(@PATH,23,2024.124,-5703.091,219.3032,0,0,0,0,100,0), +(@PATH,24,2029.471,-5685.995,219.0933,0,0,0,0,100,0), +(@PATH,25,2033.471,-5681.245,219.0933,0,0,0,0,100,0), +(@PATH,26,2037.471,-5681.245,219.0933,0,0,0,0,100,0), +(@PATH,27,2038.221,-5679.495,219.3433,0,0,0,0,100,0), +(@PATH,28,2038.521,-5679.581,219.3637,0,0,0,0,100,0), +(@PATH,29,2039.521,-5677.831,219.3637,0,0,0,0,100,0), +(@PATH,30,2040.771,-5678.081,219.1137,0,0,0,0,100,0), +(@PATH,31,2042.021,-5678.081,219.3637,0,0,0,0,100,0), +(@PATH,32,2075.252,-5716.352,220.4356,0,0,0,0,100,0); + +SET @NPC := 120147; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2102.03,`position_y`=-5800.944,`position_z`=223.819 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2102.03,-5800.944,223.819,0,0,0,0,100,0), +(@PATH,2,2080.937,-5796.923,223.4334,0,0,0,0,100,0), +(@PATH,3,2074.937,-5792.173,222.6834,0,0,0,0,100,0), +(@PATH,4,2065.619,-5785.093,222.6266,0,0,0,0,100,0), +(@PATH,5,2051.119,-5782.343,222.8766,0,0,0,0,100,0), +(@PATH,6,2046.524,-5781.284,223.3339,0,0,0,0,100,0), +(@PATH,7,2029.024,-5777.534,222.8339,0,0,0,0,100,0), +(@PATH,8,2033.789,-5778.684,223.2256,0,0,0,0,100,0), +(@PATH,9,2046.719,-5781.6,223.3394,0,0,0,0,100,0), +(@PATH,10,2053.469,-5782.85,222.5894,0,0,0,0,100,0), +(@PATH,11,2065.735,-5785.408,222.6681,0,0,0,0,100,0), +(@PATH,12,2074.985,-5792.408,222.9181,0,0,0,0,100,0), +(@PATH,13,2081.066,-5797.328,223.2618,0,0,0,0,100,0), +(@PATH,14,2095.566,-5799.828,224.0118,0,0,0,0,100,0), +(@PATH,15,2102.262,-5800.976,223.6565,0,0,0,0,100,0), +(@PATH,16,2120.868,-5798.317,223.4864,0,0,0,0,100,0), +(@PATH,17,2134.618,-5811.067,223.7364,0,0,0,0,100,0), +(@PATH,18,2134.876,-5811.295,224.1177,0,0,0,0,100,0), +(@PATH,19,2136.126,-5812.795,224.1177,0,0,0,0,100,0), +(@PATH,20,2140.126,-5818.545,224.8677,0,0,0,0,100,0), +(@PATH,21,2142.876,-5822.295,225.3677,0,0,0,0,100,0), +(@PATH,22,2145.626,-5826.545,226.1177,0,0,0,0,100,0), +(@PATH,23,2148.376,-5830.545,226.6177,0,0,0,0,100,0), +(@PATH,24,2148.635,-5830.768,226.9688,0,0,0,0,100,0), +(@PATH,25,2149.135,-5831.268,226.9688,0,0,0,0,100,0), +(@PATH,26,2150.635,-5835.018,227.2188,0,0,0,0,100,0), +(@PATH,27,2155.635,-5847.768,227.9688,0,0,0,0,100,0), +(@PATH,28,2154.901,-5846.021,227.5791,0,0,0,0,100,0), +(@PATH,29,2149.901,-5833.271,227.3291,0,0,0,0,100,0), +(@PATH,30,2149.71,-5833.156,227.0473,0,0,0,0,100,0), +(@PATH,31,2148.71,-5830.906,226.7973,0,0,0,0,100,0), +(@PATH,32,2145.46,-5826.156,226.0473,0,0,0,0,100,0), +(@PATH,33,2143.71,-5823.656,225.5473,0,0,0,0,100,0), +(@PATH,34,2140.96,-5819.656,225.0473,0,0,0,0,100,0), +(@PATH,35,2138.21,-5815.656,224.5473,0,0,0,0,100,0), +(@PATH,36,2136.034,-5812.465,224.0105,0,0,0,0,100,0), +(@PATH,37,2130.034,-5806.965,223.5105,0,0,0,0,100,0), +(@PATH,38,2120.728,-5798.307,223.3551,0,0,0,0,100,0), +(@PATH,39,2102.076,-5801.051,223.8351,0,0,0,0,100,0); + +SET @NPC := 120136; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2080.225,`position_y`=-5589.215,`position_z`=221.3878 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2080.225,-5589.215,221.3878,0,0,0,0,100,0), +(@PATH,2,2081.975,-5593.715,220.6378,0,0,0,0,100,0), +(@PATH,3,2083.975,-5599.465,220.3878,0,0,0,0,100,0), +(@PATH,4,2089.191,-5614.264,220.0699,0,0,0,0,100,0), +(@PATH,5,2096.053,-5639.193,220.6267,0,0,0,0,100,0), +(@PATH,6,2100.053,-5639.443,221.1267,0,0,0,0,100,0), +(@PATH,7,2104.053,-5639.693,221.6267,0,0,0,0,100,0), +(@PATH,8,2117.312,-5640.561,221.1541,0,0,0,0,100,0), +(@PATH,9,2112.312,-5640.311,221.6541,0,0,0,0,100,0), +(@PATH,10,2100.562,-5639.811,221.1541,0,0,0,0,100,0), +(@PATH,11,2097.562,-5639.561,220.9041,0,0,0,0,100,0), +(@PATH,12,2097.3,-5639.193,220.5651,0,0,0,0,100,0), +(@PATH,13,2096.05,-5639.193,220.3151,0,0,0,0,100,0), +(@PATH,14,2094.55,-5634.443,220.0651,0,0,0,0,100,0), +(@PATH,15,2089.009,-5613.948,220.2999,0,0,0,0,100,0), +(@PATH,16,2082.009,-5594.448,220.5499,0,0,0,0,100,0), +(@PATH,17,2080.509,-5589.698,221.2999,0,0,0,0,100,0), +(@PATH,18,2080.143,-5589.684,221.4837,0,0,0,0,100,0), +(@PATH,19,2079.893,-5588.934,221.7337,0,0,0,0,100,0), +(@PATH,20,2076.143,-5581.684,222.2337,0,0,0,0,100,0), +(@PATH,21,2071.212,-5571.433,222.7248,0,0,0,0,100,0), +(@PATH,22,2073.462,-5562.183,221.7248,0,0,0,0,100,0), +(@PATH,23,2074.686,-5557.151,221.2854,0,0,0,0,100,0), +(@PATH,24,2069.488,-5540.957,221.5191,0,0,0,0,100,0), +(@PATH,25,2061.988,-5530.707,221.7691,0,0,0,0,100,0), +(@PATH,26,2064.464,-5534.364,221.5207,0,0,0,0,100,0), +(@PATH,27,2069.663,-5541.201,221.3927,0,0,0,0,100,0), +(@PATH,28,2074.632,-5557.394,221.5371,0,0,0,0,100,0), +(@PATH,29,2073.132,-5562.894,222.0371,0,0,0,0,100,0), +(@PATH,30,2071.13,-5571.828,222.6939,0,0,0,0,100,0), +(@PATH,31,2077.38,-5583.828,221.6939,0,0,0,0,100,0), +(@PATH,32,2080.168,-5589.105,221.3963,0,0,0,0,100,0), +(@PATH,33,2081.918,-5593.855,220.6463,0,0,0,0,100,0), +(@PATH,34,2083.918,-5599.355,220.3963,0,0,0,0,100,0); + +SET @NPC := 120151; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2142.654,`position_y`=-5556.986,`position_z`=225.6937 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2142.654,-5556.986,225.6937,0,0,0,0,100,0), +(@PATH,2,2142.904,-5557.986,225.4437,0,0,0,0,100,0), +(@PATH,3,2145.654,-5560.986,225.1937,0,0,0,0,100,0), +(@PATH,4,2142.755,-5558.065,225.3596,0,0,0,0,100,0), +(@PATH,5,2142.851,-5557.728,225.8659,0,0,0,0,100,0), +(@PATH,6,2141.101,-5554.228,226.6159,0,0,0,0,100,0), +(@PATH,7,2140.601,-5552.478,227.1159,0,0,0,0,100,0), +(@PATH,8,2139.601,-5549.728,227.8659,0,0,0,0,100,0), +(@PATH,9,2138.101,-5545.978,228.6159,0,0,0,0,100,0), +(@PATH,10,2137.798,-5545.773,228.9405,0,0,0,0,100,0), +(@PATH,11,2136.798,-5543.773,229.4405,0,0,0,0,100,0), +(@PATH,12,2135.798,-5541.023,229.6905,0,0,0,0,100,0), +(@PATH,13,2134.548,-5537.023,230.4405,0,0,0,0,100,0), +(@PATH,14,2131.298,-5528.023,230.9405,0,0,0,0,100,0), +(@PATH,15,2129.448,-5523.198,231.5357,0,0,0,0,100,0), +(@PATH,16,2126.948,-5518.948,232.2857,0,0,0,0,100,0), +(@PATH,17,2121.149,-5509.625,231.9573,0,0,0,0,100,0), +(@PATH,18,2119.649,-5507.125,231.4573,0,0,0,0,100,0), +(@PATH,19,2112.399,-5494.375,231.9573,0,0,0,0,100,0), +(@PATH,20,2112.38,-5494.367,231.9073,0,0,0,0,100,0), +(@PATH,21,2116.13,-5500.867,231.4073,0,0,0,0,100,0), +(@PATH,22,2121.361,-5509.888,231.6478,0,0,0,0,100,0), +(@PATH,23,2123.611,-5513.388,232.3978,0,0,0,0,100,0), +(@PATH,24,2127.861,-5520.638,231.6478,0,0,0,0,100,0), +(@PATH,25,2129.729,-5523.562,231.5181,0,0,0,0,100,0); + +SET @NPC := 120142; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2079.262,`position_y`=-5562.862,`position_z`=222.2908 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2079.262,-5562.862,222.2908,0,0,0,0,100,0), +(@PATH,2,2072.012,-5582.112,222.0408,0,0,0,0,100,0), +(@PATH,3,2071.887,-5582.362,221.7679,0,0,0,0,100,0), +(@PATH,4,2071.387,-5584.362,221.7679,0,0,0,0,100,0), +(@PATH,5,2077.887,-5592.612,221.0179,0,0,0,0,100,0), +(@PATH,6,2080.637,-5595.612,220.7679,0,0,0,0,100,0), +(@PATH,7,2083.449,-5599.147,220.1104,0,0,0,0,100,0), +(@PATH,8,2081.201,-5606.92,219.7044,0,0,0,0,100,0), +(@PATH,9,2083.427,-5599.123,220.4243,0,0,0,0,100,0), +(@PATH,10,2079.427,-5594.373,220.6743,0,0,0,0,100,0), +(@PATH,11,2076.927,-5591.623,221.1743,0,0,0,0,100,0), +(@PATH,12,2071.344,-5584.12,221.8966,0,0,0,0,100,0), +(@PATH,13,2073.344,-5578.37,222.3966,0,0,0,0,100,0), +(@PATH,14,2079.698,-5562.533,222.5299,0,0,0,0,100,0), +(@PATH,15,2086.698,-5553.283,223.2799,0,0,0,0,100,0), +(@PATH,16,2088.698,-5551.033,223.7799,0,0,0,0,100,0), +(@PATH,17,2091.198,-5547.783,224.7799,0,0,0,0,100,0), +(@PATH,18,2090.645,-5548.484,224.2913,0,0,0,0,100,0), +(@PATH,19,2088.145,-5551.734,223.5413,0,0,0,0,100,0), +(@PATH,20,2086.395,-5553.984,223.0413,0,0,0,0,100,0), +(@PATH,21,2079.382,-5562.914,222.5029,0,0,0,0,100,0), +(@PATH,22,2071.882,-5582.164,222.0029,0,0,0,0,100,0); + +SET @NPC := 120140; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1922.999,`position_y`=-5645.25,`position_z`=215.718 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1922.999,-5645.25,215.718,0,0,0,0,100,0), +(@PATH,2,1933.499,-5635,216.218,0,0,0,0,100,0), +(@PATH,3,1937.249,-5631.75,216.718,0,0,0,0,100,0), +(@PATH,4,1937.389,-5631.363,216.962,0,0,0,0,100,0), +(@PATH,5,1938.389,-5630.613,217.462,0,0,0,0,100,0), +(@PATH,6,1939.139,-5628.863,217.962,0,0,0,0,100,0), +(@PATH,7,1940.889,-5625.363,218.462,0,0,0,0,100,0), +(@PATH,8,1942.889,-5622.113,219.212,0,0,0,0,100,0), +(@PATH,9,1944.389,-5619.613,219.712,0,0,0,0,100,0), +(@PATH,10,1943.933,-5620.388,219.5658,0,0,0,0,100,0), +(@PATH,11,1942.183,-5623.638,218.8158,0,0,0,0,100,0), +(@PATH,12,1940.683,-5626.138,218.3158,0,0,0,0,100,0), +(@PATH,13,1938.933,-5629.638,217.5658,0,0,0,0,100,0), +(@PATH,14,1938.662,-5629.795,217.488,0,0,0,0,100,0), +(@PATH,15,1937.912,-5630.795,217.238,0,0,0,0,100,0), +(@PATH,16,1935.162,-5633.545,216.488,0,0,0,0,100,0), +(@PATH,17,1931.412,-5636.795,216.238,0,0,0,0,100,0), +(@PATH,18,1922.758,-5645.203,215.613,0,0,0,0,100,0), +(@PATH,19,1909.855,-5639.054,216.2815,0,0,0,0,100,0), +(@PATH,20,1902.855,-5639.054,216.5315,0,0,0,0,100,0), +(@PATH,21,1899.105,-5639.054,217.0315,0,0,0,0,100,0), +(@PATH,22,1892.578,-5638.81,217.5839,0,0,0,0,100,0), +(@PATH,23,1892.559,-5638.872,217.3643,0,0,0,0,100,0), +(@PATH,24,1892.922,-5638.996,217.5783,0,0,0,0,100,0), +(@PATH,25,1900.672,-5638.996,216.8283,0,0,0,0,100,0), +(@PATH,26,1904.672,-5638.996,216.5783,0,0,0,0,100,0), +(@PATH,27,1910.292,-5639.049,215.9298,0,0,0,0,100,0); diff --git a/sql/updates/world/2015_05_31_02_world.sql b/sql/updates/world/2015_05_31_02_world.sql new file mode 100644 index 00000000000..fdc14ab4b6f --- /dev/null +++ b/sql/updates/world/2015_05_31_02_world.sql @@ -0,0 +1,994 @@ +-- Ivalds Ruin +SET @NPC := 110932; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1180.336,`position_y`=-6128.782,`position_z`=232.3257 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1180.336,-6128.782,232.3257,0,0,0,0,100,0), +(@PATH,2,1189.086,-6129.282,232.3257,0,0,0,0,100,0), +(@PATH,3,1195.086,-6129.782,232.0757,0,0,0,0,100,0), +(@PATH,4,1197.836,-6130.032,232.0757,0,0,0,0,100,0), +(@PATH,5,1202.823,-6130.508,232.1263,0,0,0,0,100,0), +(@PATH,6,1204.073,-6130.758,232.1263,0,0,0,0,100,0), +(@PATH,7,1205.823,-6131.258,232.1263,0,0,0,0,100,0), +(@PATH,8,1209.823,-6132.258,232.3763,0,0,0,0,100,0), +(@PATH,9,1215.823,-6133.508,232.3763,0,0,0,0,100,0), +(@PATH,10,1216.823,-6133.758,232.3763,0,0,0,0,100,0), +(@PATH,11,1218.073,-6134.258,232.3763,0,0,0,0,100,0), +(@PATH,12,1217.078,-6133.991,232.3467,0,0,0,0,100,0), +(@PATH,13,1218.328,-6134.491,232.3467,0,0,0,0,100,0), +(@PATH,14,1219.578,-6134.741,232.3467,0,0,0,0,100,0), +(@PATH,15,1220.328,-6136.741,232.3467,0,0,0,0,100,0), +(@PATH,16,1221.078,-6138.741,232.3467,0,0,0,0,100,0), +(@PATH,17,1221.578,-6140.241,232.3467,0,0,0,0,100,0), +(@PATH,18,1221.828,-6141.241,232.3467,0,0,0,0,100,0), +(@PATH,19,1223.578,-6145.241,232.3467,0,0,0,0,100,0), +(@PATH,20,1224.078,-6146.491,232.3467,0,0,0,0,100,0), +(@PATH,21,1224.828,-6148.491,232.3467,0,0,0,0,100,0), +(@PATH,22,1225.015,-6148.597,232.3571,0,0,0,0,100,0), +(@PATH,23,1226.015,-6151.097,232.6071,0,0,0,0,100,0), +(@PATH,24,1231.015,-6151.097,232.6071,0,0,0,0,100,0), +(@PATH,25,1239.265,-6151.097,232.6071,0,0,0,0,100,0), +(@PATH,26,1240.765,-6151.097,232.6071,0,0,0,0,100,0), +(@PATH,27,1244.015,-6151.097,232.6071,0,0,0,0,100,0), +(@PATH,28,1248.765,-6151.097,232.6071,0,0,0,0,100,0), +(@PATH,29,1249.765,-6151.097,232.6071,0,0,0,0,100,0), +(@PATH,30,1249.916,-6151.293,232.7089,0,0,0,0,100,0), +(@PATH,31,1248.666,-6151.293,232.7089,0,0,0,0,100,0), +(@PATH,32,1244.166,-6151.293,232.7089,0,0,0,0,100,0), +(@PATH,33,1241.666,-6151.293,232.7089,0,0,0,0,100,0), +(@PATH,34,1239.416,-6151.293,232.7089,0,0,0,0,100,0), +(@PATH,35,1231.166,-6151.293,232.7089,0,0,0,0,100,0), +(@PATH,36,1225.625,-6151.007,232.6139,0,0,0,0,100,0), +(@PATH,37,1224.625,-6148.507,232.6139,0,0,0,0,100,0), +(@PATH,38,1224.125,-6146.507,232.3639,0,0,0,0,100,0), +(@PATH,39,1223.875,-6145.257,232.3639,0,0,0,0,100,0), +(@PATH,40,1222.125,-6141.257,232.3639,0,0,0,0,100,0), +(@PATH,41,1221.875,-6140.257,232.3639,0,0,0,0,100,0), +(@PATH,42,1221.125,-6138.757,232.3639,0,0,0,0,100,0), +(@PATH,43,1220.375,-6136.757,232.3639,0,0,0,0,100,0), +(@PATH,44,1219.875,-6135.757,232.3639,0,0,0,0,100,0), +(@PATH,45,1220.191,-6136.571,232.3501,0,0,0,0,100,0), +(@PATH,46,1219.691,-6135.321,232.3501,0,0,0,0,100,0), +(@PATH,47,1219.441,-6134.571,232.3501,0,0,0,0,100,0), +(@PATH,48,1218.191,-6134.321,232.3501,0,0,0,0,100,0), +(@PATH,49,1216.691,-6134.071,232.3501,0,0,0,0,100,0), +(@PATH,50,1215.691,-6133.821,232.3501,0,0,0,0,100,0), +(@PATH,51,1209.941,-6132.321,232.3501,0,0,0,0,100,0), +(@PATH,52,1206.691,-6131.321,232.3501,0,0,0,0,100,0), +(@PATH,53,1203.941,-6130.821,232.1001,0,0,0,0,100,0), +(@PATH,54,1203.768,-6130.406,232.1589,0,0,0,0,100,0), +(@PATH,55,1202.768,-6130.156,232.1589,0,0,0,0,100,0), +(@PATH,56,1198.518,-6129.906,232.1589,0,0,0,0,100,0), +(@PATH,57,1196.018,-6129.906,232.1589,0,0,0,0,100,0), +(@PATH,58,1189.268,-6129.406,232.1589,0,0,0,0,100,0), +(@PATH,59,1180.483,-6128.761,232.2115,0,0,0,0,100,0), +(@PATH,60,1180.733,-6132.261,232.2115,0,0,0,0,100,0), +(@PATH,61,1181.233,-6135.261,232.4615,0,0,0,0,100,0), +(@PATH,62,1181.733,-6140.011,232.2115,0,0,0,0,100,0), +(@PATH,63,1181.983,-6142.261,232.2115,0,0,0,0,100,0), +(@PATH,64,1182.135,-6145.712,232.5059,0,0,0,0,100,0), +(@PATH,65,1178.885,-6145.712,232.5059,0,0,0,0,100,0), +(@PATH,66,1169.135,-6145.462,232.5059,0,0,0,0,100,0), +(@PATH,67,1159.135,-6145.462,232.5059,0,0,0,0,100,0), +(@PATH,68,1158.585,-6145.534,232.5935,0,0,0,0,100,0), +(@PATH,69,1168.835,-6145.784,232.5935,0,0,0,0,100,0), +(@PATH,70,1178.835,-6145.784,232.5935,0,0,0,0,100,0), +(@PATH,71,1182.017,-6145.818,232.5059,0,0,0,0,100,0), +(@PATH,72,1181.517,-6142.068,232.5059,0,0,0,0,100,0), +(@PATH,73,1181.517,-6140.318,232.2559,0,0,0,0,100,0), +(@PATH,74,1180.767,-6135.318,232.2559,0,0,0,0,100,0), +(@PATH,75,1180.517,-6132.818,232.2559,0,0,0,0,100,0), +(@PATH,76,1180.278,-6128.755,232.3258,0,0,0,0,100,0); + +SET @NPC := 110930; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1227.227,`position_y`=-6151.406,`position_z`=232.6666 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1227.227,-6151.406,232.6666,0,0,0,0,100,0), +(@PATH,2,1230.977,-6152.156,232.6666,0,0,0,0,100,0), +(@PATH,3,1237.977,-6153.156,232.6666,0,0,0,0,100,0), +(@PATH,4,1240.727,-6153.656,232.6666,0,0,0,0,100,0), +(@PATH,5,1243.727,-6154.406,232.6666,0,0,0,0,100,0), +(@PATH,6,1248.477,-6155.156,232.6666,0,0,0,0,100,0), +(@PATH,7,1251.227,-6155.406,232.6666,0,0,0,0,100,0), +(@PATH,8,1251.9,-6155.427,232.7089,0,0,0,0,100,0), +(@PATH,9,1249.4,-6154.927,232.7089,0,0,0,0,100,0), +(@PATH,10,1244.15,-6154.177,232.7089,0,0,0,0,100,0), +(@PATH,11,1241.65,-6153.677,232.7089,0,0,0,0,100,0), +(@PATH,12,1237.9,-6153.177,232.7089,0,0,0,0,100,0), +(@PATH,13,1231.15,-6152.177,232.7089,0,0,0,0,100,0), +(@PATH,14,1226.937,-6151.503,232.5917,0,0,0,0,100,0), +(@PATH,15,1224.937,-6161.003,232.5917,0,0,0,0,100,0), +(@PATH,16,1222.187,-6171.253,232.3417,0,0,0,0,100,0), +(@PATH,17,1221.937,-6172.503,232.3417,0,0,0,0,100,0), +(@PATH,18,1221.722,-6172.723,232.2798,0,0,0,0,100,0), +(@PATH,19,1221.472,-6173.973,232.2798,0,0,0,0,100,0), +(@PATH,20,1218.222,-6174.973,232.2798,0,0,0,0,100,0), +(@PATH,21,1208.222,-6177.473,232.2798,0,0,0,0,100,0), +(@PATH,22,1206.972,-6177.973,232.2798,0,0,0,0,100,0), +(@PATH,23,1204.472,-6178.723,232.0298,0,0,0,0,100,0), +(@PATH,24,1204.254,-6178.76,232.2578,0,0,0,0,100,0), +(@PATH,25,1203.004,-6179.01,232.2578,0,0,0,0,100,0), +(@PATH,26,1199.254,-6178.26,232.2578,0,0,0,0,100,0), +(@PATH,27,1196.754,-6178.01,232.2578,0,0,0,0,100,0), +(@PATH,28,1192.004,-6177.26,232.2578,0,0,0,0,100,0), +(@PATH,29,1185.203,-6175.807,232.4763,0,0,0,0,100,0), +(@PATH,30,1184.453,-6169.557,232.4763,0,0,0,0,100,0), +(@PATH,31,1182.203,-6154.557,232.2263,0,0,0,0,100,0), +(@PATH,32,1181.955,-6154.301,232.2615,0,0,0,0,100,0), +(@PATH,33,1181.455,-6151.801,232.5115,0,0,0,0,100,0), +(@PATH,34,1169.205,-6151.301,232.5115,0,0,0,0,100,0), +(@PATH,35,1168.917,-6151.489,232.5935,0,0,0,0,100,0), +(@PATH,36,1181.649,-6151.987,232.6092,0,0,0,0,100,0), +(@PATH,37,1182.149,-6154.737,232.6092,0,0,0,0,100,0), +(@PATH,38,1184.399,-6169.737,232.3592,0,0,0,0,100,0), +(@PATH,39,1185.458,-6176.079,232.5671,0,0,0,0,100,0), +(@PATH,40,1191.958,-6177.079,232.5671,0,0,0,0,100,0), +(@PATH,41,1195.958,-6177.829,232.0671,0,0,0,0,100,0), +(@PATH,42,1198.208,-6178.329,232.0671,0,0,0,0,100,0), +(@PATH,43,1203.124,-6178.934,232.0299,0,0,0,0,100,0), +(@PATH,44,1204.374,-6178.684,232.0299,0,0,0,0,100,0), +(@PATH,45,1206.624,-6178.184,232.0299,0,0,0,0,100,0), +(@PATH,46,1208.374,-6177.684,232.2799,0,0,0,0,100,0), +(@PATH,47,1218.124,-6174.934,232.5299,0,0,0,0,100,0), +(@PATH,48,1221.589,-6173.651,232.3593,0,0,0,0,100,0), +(@PATH,49,1221.839,-6172.401,232.3593,0,0,0,0,100,0), +(@PATH,50,1222.089,-6171.401,232.3593,0,0,0,0,100,0), +(@PATH,51,1224.589,-6160.901,232.3593,0,0,0,0,100,0); + +SET @NPC := 110929; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1211.381,`position_y`=-6177.669,`position_z`=232.2903 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1211.381,-6177.669,232.2903,0,0,0,0,100,0), +(@PATH,2,1206.631,-6176.919,232.2903,0,0,0,0,100,0), +(@PATH,3,1204.381,-6176.919,232.2903,0,0,0,0,100,0), +(@PATH,4,1199.381,-6176.169,232.2903,0,0,0,0,100,0), +(@PATH,5,1196.881,-6175.669,232.2903,0,0,0,0,100,0), +(@PATH,6,1189.381,-6174.669,232.2903,0,0,0,0,100,0), +(@PATH,7,1189.249,-6174.344,232.0894,0,0,0,0,100,0), +(@PATH,8,1187.749,-6174.344,232.5894,0,0,0,0,100,0), +(@PATH,9,1187.249,-6172.594,232.5894,0,0,0,0,100,0), +(@PATH,10,1182.749,-6154.594,232.3394,0,0,0,0,100,0), +(@PATH,11,1180.749,-6147.594,232.5894,0,0,0,0,100,0), +(@PATH,12,1180.762,-6147.252,232.4858,0,0,0,0,100,0), +(@PATH,13,1180.762,-6146.752,232.4858,0,0,0,0,100,0), +(@PATH,14,1181.012,-6142.252,232.4858,0,0,0,0,100,0), +(@PATH,15,1181.262,-6140.252,232.2358,0,0,0,0,100,0), +(@PATH,16,1181.512,-6135.252,232.2358,0,0,0,0,100,0), +(@PATH,17,1181.512,-6132.752,232.2358,0,0,0,0,100,0), +(@PATH,18,1182.28,-6126.95,232.4513,0,0,0,0,100,0), +(@PATH,19,1189.03,-6128.2,232.4513,0,0,0,0,100,0), +(@PATH,20,1195.53,-6129.45,232.2013,0,0,0,0,100,0), +(@PATH,21,1197.78,-6129.95,232.2013,0,0,0,0,100,0), +(@PATH,22,1203.28,-6130.95,232.2013,0,0,0,0,100,0), +(@PATH,23,1205.53,-6131.45,232.2013,0,0,0,0,100,0), +(@PATH,24,1209.53,-6131.95,232.4513,0,0,0,0,100,0), +(@PATH,25,1209.52,-6132.008,232.4267,0,0,0,0,100,0), +(@PATH,26,1211.77,-6132.508,232.4267,0,0,0,0,100,0), +(@PATH,27,1211.77,-6130.008,232.4267,0,0,0,0,100,0), +(@PATH,28,1211.77,-6129.008,232.4267,0,0,0,0,100,0), +(@PATH,29,1211.77,-6124.758,232.4267,0,0,0,0,100,0), +(@PATH,30,1211.52,-6123.758,232.4267,0,0,0,0,100,0), +(@PATH,31,1211.27,-6115.508,232.4267,0,0,0,0,100,0), +(@PATH,32,1211.27,-6109.508,232.4267,0,0,0,0,100,0), +(@PATH,33,1211.27,-6108.008,232.4267,0,0,0,0,100,0), +(@PATH,34,1211.02,-6107.008,232.4267,0,0,0,0,100,0), +(@PATH,35,1211.02,-6105.508,232.4267,0,0,0,0,100,0), +(@PATH,36,1211.206,-6105.44,232.4854,0,0,0,0,100,0), +(@PATH,37,1211.456,-6106.69,232.4854,0,0,0,0,100,0), +(@PATH,38,1211.456,-6108.19,232.4854,0,0,0,0,100,0), +(@PATH,39,1211.456,-6109.69,232.4854,0,0,0,0,100,0), +(@PATH,40,1211.456,-6114.94,232.4854,0,0,0,0,100,0), +(@PATH,41,1211.706,-6123.19,232.4854,0,0,0,0,100,0), +(@PATH,42,1211.706,-6124.94,232.4854,0,0,0,0,100,0), +(@PATH,43,1211.706,-6128.94,232.4854,0,0,0,0,100,0), +(@PATH,44,1211.706,-6129.94,232.4854,0,0,0,0,100,0), +(@PATH,45,1211.885,-6128.875,232.4516,0,0,0,0,100,0), +(@PATH,46,1211.885,-6129.875,232.4516,0,0,0,0,100,0), +(@PATH,47,1211.885,-6132.375,232.4516,0,0,0,0,100,0), +(@PATH,48,1209.635,-6132.125,232.4516,0,0,0,0,100,0), +(@PATH,49,1206.385,-6131.375,232.4516,0,0,0,0,100,0), +(@PATH,50,1203.635,-6130.875,232.2016,0,0,0,0,100,0), +(@PATH,51,1198.635,-6129.875,232.2016,0,0,0,0,100,0), +(@PATH,52,1196.385,-6129.375,232.2016,0,0,0,0,100,0), +(@PATH,53,1189.385,-6127.875,232.2016,0,0,0,0,100,0), +(@PATH,54,1181.989,-6126.856,232.2364,0,0,0,0,100,0), +(@PATH,55,1181.739,-6132.356,232.2364,0,0,0,0,100,0), +(@PATH,56,1181.489,-6135.356,232.4864,0,0,0,0,100,0), +(@PATH,57,1181.239,-6139.856,232.2364,0,0,0,0,100,0), +(@PATH,58,1180.989,-6142.106,232.2364,0,0,0,0,100,0), +(@PATH,59,1180.729,-6147.178,232.5381,0,0,0,0,100,0), +(@PATH,60,1182.729,-6154.678,232.5381,0,0,0,0,100,0), +(@PATH,61,1187.229,-6172.678,232.2881,0,0,0,0,100,0), +(@PATH,62,1187.935,-6174.519,232.4605,0,0,0,0,100,0), +(@PATH,63,1189.435,-6174.769,232.4605,0,0,0,0,100,0), +(@PATH,64,1196.435,-6175.519,232.2105,0,0,0,0,100,0), +(@PATH,65,1198.685,-6175.769,232.2105,0,0,0,0,100,0), +(@PATH,66,1203.935,-6176.519,232.2105,0,0,0,0,100,0), +(@PATH,67,1206.435,-6176.769,232.2105,0,0,0,0,100,0), +(@PATH,68,1211.435,-6177.891,232.3447,0,0,0,0,100,0), +(@PATH,69,1211.435,-6179.141,232.3447,0,0,0,0,100,0), +(@PATH,70,1211.685,-6182.641,232.3447,0,0,0,0,100,0), +(@PATH,71,1211.685,-6183.891,232.3447,0,0,0,0,100,0), +(@PATH,72,1211.935,-6186.641,232.3447,0,0,0,0,100,0), +(@PATH,73,1211.935,-6188.391,232.3447,0,0,0,0,100,0), +(@PATH,74,1211.935,-6192.641,232.3447,0,0,0,0,100,0), +(@PATH,75,1212.185,-6193.891,232.3447,0,0,0,0,100,0), +(@PATH,76,1212.185,-6195.141,232.3447,0,0,0,0,100,0), +(@PATH,77,1212.185,-6196.391,232.3447,0,0,0,0,100,0), +(@PATH,78,1212.435,-6201.641,232.3447,0,0,0,0,100,0), +(@PATH,79,1212.435,-6203.141,232.3447,0,0,0,0,100,0), +(@PATH,80,1212.488,-6203.186,232.4932,0,0,0,0,100,0), +(@PATH,81,1212.488,-6201.686,232.4932,0,0,0,0,100,0), +(@PATH,82,1212.238,-6196.436,232.4932,0,0,0,0,100,0), +(@PATH,83,1212.238,-6195.186,232.4932,0,0,0,0,100,0), +(@PATH,84,1211.988,-6193.936,232.4932,0,0,0,0,100,0), +(@PATH,85,1211.988,-6192.686,232.4932,0,0,0,0,100,0), +(@PATH,86,1211.988,-6188.436,232.4932,0,0,0,0,100,0), +(@PATH,87,1211.988,-6186.686,232.4932,0,0,0,0,100,0), +(@PATH,88,1211.988,-6183.936,232.4932,0,0,0,0,100,0), +(@PATH,89,1211.988,-6182.686,232.4932,0,0,0,0,100,0), +(@PATH,90,1211.738,-6178.936,232.4932,0,0,0,0,100,0); + +SET @NPC := 110851; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1229.605,`position_y`=-6105.737,`position_z`=232.0919 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1229.605,-6105.737,232.0919,0,0,0,0,100,0), +(@PATH,2,1224.605,-6107.737,232.0919,0,0,0,0,100,0), +(@PATH,3,1217.105,-6111.237,232.3419,0,0,0,0,100,0), +(@PATH,4,1216.855,-6130.237,232.3419,0,0,0,0,100,0), +(@PATH,5,1221.855,-6141.237,232.3419,0,0,0,0,100,0), +(@PATH,6,1223.855,-6173.487,232.3419,0,0,0,0,100,0), +(@PATH,7,1222.855,-6175.987,232.3419,0,0,0,0,100,0), +(@PATH,8,1216.605,-6180.237,232.3419,0,0,0,0,100,0), +(@PATH,9,1215.105,-6203.487,232.3419,0,0,0,0,100,0), +(@PATH,10,1216.605,-6177.987,232.3419,0,0,0,0,100,0), +(@PATH,11,1219.605,-6171.987,232.3419,0,0,0,0,100,0), +(@PATH,12,1220.105,-6132.987,232.3419,0,0,0,0,100,0), +(@PATH,13,1215.605,-6124.487,232.3419,0,0,0,0,100,0), +(@PATH,14,1216.355,-6109.237,232.3419,0,0,0,0,100,0), +(@PATH,15,1226.855,-6107.487,232.0919,0,0,0,0,100,0), +(@PATH,16,1229.605,-6105.737,232.0919,0,0,0,0,100,0); + +SET @NPC := 107306; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1155.734,`position_y`=-6198.038,`position_z`=242.1501 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1155.734,-6198.038,242.1501,0,0,0,0,100,0), +(@PATH,2,1156.984,-6199.538,241.4001,0,0,0,0,100,0), +(@PATH,3,1157.734,-6200.538,240.6501,0,0,0,0,100,0), +(@PATH,4,1158.984,-6202.038,240.1501,0,0,0,0,100,0), +(@PATH,5,1167.234,-6211.538,240.6501,0,0,0,0,100,0), +(@PATH,6,1169.734,-6214.788,241.9001,0,0,0,0,100,0), +(@PATH,7,1169.484,-6214.288,241.1501,0,0,0,0,100,0), +(@PATH,8,1166.734,-6211.038,240.1501,0,0,0,0,100,0), +(@PATH,9,1159.984,-6203.038,239.6501,0,0,0,0,100,0), +(@PATH,10,1159.234,-6202.288,240.4001,0,0,0,0,100,0), +(@PATH,11,1157.484,-6200.038,241.4001,0,0,0,0,100,0); + +SET @NPC := 107191; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1202.167,`position_y`=-6079.404,`position_z`=257.2258 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1202.167,-6079.404,257.2258,0,0,0,0,100,0), +(@PATH,2,1202.917,-6078.904,257.9758,0,0,0,0,100,0), +(@PATH,3,1204.667,-6077.654,259.4758,0,0,0,0,100,0), +(@PATH,4,1206.167,-6076.404,260.7258,0,0,0,0,100,0), +(@PATH,5,1207.667,-6075.154,262.2258,0,0,0,0,100,0), +(@PATH,6,1208.417,-6074.904,262.9758,0,0,0,0,100,0), +(@PATH,7,1209.917,-6073.654,263.7258,0,0,0,0,100,0), +(@PATH,8,1212.167,-6071.654,264.4758,0,0,0,0,100,0), +(@PATH,9,1213.917,-6070.654,265.2258,0,0,0,0,100,0), +(@PATH,10,1214.104,-6070.411,265.5035,0,0,0,0,100,0), +(@PATH,11,1215.604,-6069.161,265.7535,0,0,0,0,100,0), +(@PATH,12,1218.354,-6067.911,266.2535,0,0,0,0,100,0), +(@PATH,13,1222.854,-6066.411,267.0035,0,0,0,0,100,0), +(@PATH,14,1229.014,-6063.944,266.9492,0,0,0,0,100,0), +(@PATH,15,1235.014,-6064.194,267.6992,0,0,0,0,100,0), +(@PATH,16,1238.764,-6064.444,267.9492,0,0,0,0,100,0), +(@PATH,17,1245.764,-6064.694,268.6992,0,0,0,0,100,0), +(@PATH,18,1246.021,-6064.786,268.6804,0,0,0,0,100,0), +(@PATH,19,1246.771,-6064.786,268.9304,0,0,0,0,100,0), +(@PATH,20,1248.271,-6067.286,268.1804,0,0,0,0,100,0), +(@PATH,21,1253.521,-6075.286,267.4304,0,0,0,0,100,0), +(@PATH,22,1256.021,-6079.536,266.9304,0,0,0,0,100,0), +(@PATH,23,1258.771,-6083.786,266.4304,0,0,0,0,100,0), +(@PATH,24,1258.941,-6083.706,266.5193,0,0,0,0,100,0), +(@PATH,25,1259.691,-6084.706,266.2693,0,0,0,0,100,0), +(@PATH,26,1261.941,-6081.706,266.7693,0,0,0,0,100,0), +(@PATH,27,1267.016,-6076.709,266.7007,0,0,0,0,100,0), +(@PATH,28,1274.016,-6076.959,266.2007,0,0,0,0,100,0), +(@PATH,29,1283.766,-6077.709,265.7007,0,0,0,0,100,0), +(@PATH,30,1283.256,-6077.316,265.718,0,0,0,0,100,0), +(@PATH,31,1272.506,-6077.066,266.218,0,0,0,0,100,0), +(@PATH,32,1266.974,-6076.642,266.8226,0,0,0,0,100,0), +(@PATH,33,1259.445,-6084.734,266.0691,0,0,0,0,100,0), +(@PATH,34,1256.195,-6079.734,267.0691,0,0,0,0,100,0), +(@PATH,35,1253.695,-6075.484,267.5691,0,0,0,0,100,0), +(@PATH,36,1248.445,-6067.234,268.0691,0,0,0,0,100,0), +(@PATH,37,1248.022,-6067.044,267.9692,0,0,0,0,100,0), +(@PATH,38,1246.522,-6064.794,268.7192,0,0,0,0,100,0), +(@PATH,39,1242.522,-6064.544,267.9692,0,0,0,0,100,0), +(@PATH,40,1234.772,-6064.294,267.2192,0,0,0,0,100,0), +(@PATH,41,1229.772,-6064.044,266.9692,0,0,0,0,100,0), +(@PATH,42,1229.461,-6064.025,266.7701,0,0,0,0,100,0), +(@PATH,43,1228.711,-6064.025,266.7701,0,0,0,0,100,0), +(@PATH,44,1217.711,-6068.275,266.2701,0,0,0,0,100,0), +(@PATH,45,1217.631,-6068.476,266.2463,0,0,0,0,100,0), +(@PATH,46,1215.381,-6069.226,265.7463,0,0,0,0,100,0), +(@PATH,47,1213.131,-6071.226,264.7463,0,0,0,0,100,0), +(@PATH,48,1211.381,-6072.476,263.9963,0,0,0,0,100,0), +(@PATH,49,1209.381,-6074.226,262.9963,0,0,0,0,100,0), +(@PATH,50,1207.881,-6075.226,262.2463,0,0,0,0,100,0), +(@PATH,51,1206.881,-6075.726,261.2463,0,0,0,0,100,0), +(@PATH,52,1205.381,-6076.976,259.4963,0,0,0,0,100,0), +(@PATH,53,1203.881,-6078.226,258.2463,0,0,0,0,100,0), +(@PATH,54,1202.381,-6079.476,257.2463,0,0,0,0,100,0), +(@PATH,55,1201.381,-6080.226,256.2463,0,0,0,0,100,0); + +SET @NPC := 107191; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1222.866,`position_y`=-6083.042,`position_z`=252.2136 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1222.866,-6083.042,252.2136,0,0,0,0,100,0), +(@PATH,2,1222.116,-6083.292,252.2136,0,0,0,0,100,0), +(@PATH,3,1221.616,-6083.292,252.2136,0,0,0,0,100,0), +(@PATH,4,1210.366,-6084.542,252.2136,0,0,0,0,100,0), +(@PATH,5,1209.116,-6084.792,252.4636,0,0,0,0,100,0), +(@PATH,6,1205.687,-6085.07,253.5938,0,0,0,0,100,0), +(@PATH,7,1203.937,-6083.82,254.0938,0,0,0,0,100,0), +(@PATH,8,1202.437,-6082.82,255.0938,0,0,0,0,100,0), +(@PATH,9,1200.687,-6081.57,256.0938,0,0,0,0,100,0), +(@PATH,10,1199.937,-6081.07,256.5938,0,0,0,0,100,0), +(@PATH,11,1197.437,-6079.32,257.0938,0,0,0,0,100,0), +(@PATH,12,1195.937,-6078.07,257.8438,0,0,0,0,100,0), +(@PATH,13,1193.687,-6076.57,258.3438,0,0,0,0,100,0), +(@PATH,14,1191.187,-6074.82,259.0938,0,0,0,0,100,0), +(@PATH,15,1187.937,-6072.57,259.8438,0,0,0,0,100,0), +(@PATH,16,1186.187,-6071.57,260.3438,0,0,0,0,100,0), +(@PATH,17,1187.686,-6072.505,260.0255,0,0,0,0,100,0), +(@PATH,18,1185.936,-6071.255,260.2755,0,0,0,0,100,0), +(@PATH,19,1185.436,-6071.005,260.5255,0,0,0,0,100,0), +(@PATH,20,1172.936,-6069.005,259.7755,0,0,0,0,100,0), +(@PATH,21,1169.936,-6068.505,260.2755,0,0,0,0,100,0), +(@PATH,22,1164.936,-6067.505,261.0255,0,0,0,0,100,0), +(@PATH,23,1160.765,-6066.954,261.325,0,0,0,0,100,0), +(@PATH,24,1138.515,-6081.204,260.325,0,0,0,0,100,0), +(@PATH,25,1137.577,-6081.751,260.4117,0,0,0,0,100,0), +(@PATH,26,1140.827,-6079.501,260.9117,0,0,0,0,100,0), +(@PATH,27,1161.164,-6066.773,261.5139,0,0,0,0,100,0), +(@PATH,28,1165.914,-6067.773,260.7639,0,0,0,0,100,0), +(@PATH,29,1171.914,-6068.773,259.5139,0,0,0,0,100,0), +(@PATH,30,1173.664,-6069.023,260.2639,0,0,0,0,100,0), +(@PATH,31,1178.664,-6069.773,260.7639,0,0,0,0,100,0), +(@PATH,32,1185.869,-6071.214,260.4915,0,0,0,0,100,0), +(@PATH,33,1188.119,-6072.964,259.7415,0,0,0,0,100,0), +(@PATH,34,1189.869,-6073.964,259.2415,0,0,0,0,100,0), +(@PATH,35,1193.119,-6076.464,258.4915,0,0,0,0,100,0), +(@PATH,36,1196.119,-6078.464,257.7415,0,0,0,0,100,0), +(@PATH,37,1198.619,-6080.214,256.7415,0,0,0,0,100,0), +(@PATH,38,1200.369,-6081.214,255.9915,0,0,0,0,100,0), +(@PATH,39,1201.869,-6082.464,255.2415,0,0,0,0,100,0), +(@PATH,40,1203.619,-6083.464,254.2415,0,0,0,0,100,0), +(@PATH,41,1205.858,-6085.027,253.1195,0,0,0,0,100,0), +(@PATH,42,1208.608,-6084.527,252.8695,0,0,0,0,100,0), +(@PATH,43,1210.108,-6084.527,252.1195,0,0,0,0,100,0), +(@PATH,44,1221.608,-6084.277,252.3695,0,0,0,0,100,0), +(@PATH,45,1221.858,-6084.027,252.1195,0,0,0,0,100,0), +(@PATH,46,1222.108,-6083.777,252.1195,0,0,0,0,100,0), +(@PATH,47,1221.831,-6084.656,251.9646,0,0,0,0,100,0), +(@PATH,48,1222.081,-6084.156,251.9646,0,0,0,0,100,0), +(@PATH,49,1222.331,-6083.906,251.9646,0,0,0,0,100,0), +(@PATH,50,1223.081,-6083.156,251.9646,0,0,0,0,100,0), +(@PATH,51,1225.331,-6084.406,251.9646,0,0,0,0,100,0), +(@PATH,52,1228.081,-6086.156,251.9646,0,0,0,0,100,0), +(@PATH,53,1229.831,-6087.156,251.9646,0,0,0,0,100,0), +(@PATH,54,1233.331,-6089.156,251.9646,0,0,0,0,100,0), +(@PATH,55,1234.331,-6089.906,251.7146,0,0,0,0,100,0), +(@PATH,56,1239.831,-6093.156,251.7146,0,0,0,0,100,0), +(@PATH,57,1234.521,-6089.904,251.6961,0,0,0,0,100,0), +(@PATH,58,1233.521,-6089.404,251.9461,0,0,0,0,100,0), +(@PATH,59,1229.771,-6087.154,251.9461,0,0,0,0,100,0), +(@PATH,60,1228.021,-6086.154,251.9461,0,0,0,0,100,0), +(@PATH,61,1225.521,-6084.654,251.9461,0,0,0,0,100,0); + +SET @NPC := 107185; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1265.241,`position_y`=-6227.014,`position_z`=264.7959 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1265.241,-6227.014,264.7959,0,0,0,0,100,0), +(@PATH,2,1269.491,-6219.014,264.2959,0,0,0,0,100,0), +(@PATH,3,1271.491,-6215.014,263.5459,0,0,0,0,100,0), +(@PATH,4,1273.491,-6211.514,263.0459,0,0,0,0,100,0), +(@PATH,5,1275.741,-6207.014,262.5459,0,0,0,0,100,0), +(@PATH,6,1276.02,-6206.55,262.776,0,0,0,0,100,0), +(@PATH,7,1273.27,-6211.8,263.276,0,0,0,0,100,0), +(@PATH,8,1271.02,-6216.05,264.026,0,0,0,0,100,0), +(@PATH,9,1267.52,-6223.05,264.526,0,0,0,0,100,0), +(@PATH,10,1264.995,-6227.222,264.955,0,0,0,0,100,0), +(@PATH,11,1259.495,-6234.222,264.705,0,0,0,0,100,0), +(@PATH,12,1257.745,-6236.472,265.705,0,0,0,0,100,0), +(@PATH,13,1251.364,-6243.989,265.6002,0,0,0,0,100,0), +(@PATH,14,1249.364,-6243.989,265.1002,0,0,0,0,100,0), +(@PATH,15,1246.364,-6244.239,264.3502,0,0,0,0,100,0), +(@PATH,16,1243.364,-6244.239,263.6002,0,0,0,0,100,0), +(@PATH,17,1237.614,-6244.239,263.3502,0,0,0,0,100,0), +(@PATH,18,1229.614,-6244.489,262.6002,0,0,0,0,100,0), +(@PATH,19,1224.405,-6244.561,262.0631,0,0,0,0,100,0), +(@PATH,20,1224.155,-6234.561,261.3131,0,0,0,0,100,0), +(@PATH,21,1224.155,-6233.061,261.0631,0,0,0,0,100,0), +(@PATH,22,1223.905,-6231.311,260.5631,0,0,0,0,100,0), +(@PATH,23,1223.905,-6230.561,260.3131,0,0,0,0,100,0), +(@PATH,24,1223.905,-6227.561,260.3131,0,0,0,0,100,0), +(@PATH,25,1223.905,-6225.561,260.3131,0,0,0,0,100,0), +(@PATH,26,1223.905,-6222.561,260.3131,0,0,0,0,100,0), +(@PATH,27,1223.905,-6221.061,260.3131,0,0,0,0,100,0), +(@PATH,28,1223.905,-6220.561,260.3131,0,0,0,0,100,0), +(@PATH,29,1223.905,-6219.811,260.3131,0,0,0,0,100,0), +(@PATH,30,1223.905,-6219.311,260.3131,0,0,0,0,100,0), +(@PATH,31,1223.484,-6220.793,259.8505,0,0,0,0,100,0), +(@PATH,32,1223.484,-6220.293,259.8505,0,0,0,0,100,0), +(@PATH,33,1223.484,-6219.543,260.1005,0,0,0,0,100,0), +(@PATH,34,1223.484,-6219.043,259.8505,0,0,0,0,100,0), +(@PATH,35,1223.484,-6217.793,259.8505,0,0,0,0,100,0), +(@PATH,36,1220.234,-6216.793,259.8505,0,0,0,0,100,0), +(@PATH,37,1218.234,-6216.293,259.8505,0,0,0,0,100,0), +(@PATH,38,1213.234,-6215.043,257.3505,0,0,0,0,100,0), +(@PATH,39,1212.905,-6214.639,257.2925,0,0,0,0,100,0), +(@PATH,40,1211.905,-6214.389,257.0425,0,0,0,0,100,0), +(@PATH,41,1209.905,-6213.389,257.0425,0,0,0,0,100,0), +(@PATH,42,1208.655,-6212.889,257.0425,0,0,0,0,100,0), +(@PATH,43,1207.655,-6212.139,257.0425,0,0,0,0,100,0), +(@PATH,44,1206.405,-6211.889,257.0425,0,0,0,0,100,0), +(@PATH,45,1200.905,-6209.139,255.2925,0,0,0,0,100,0), +(@PATH,46,1200.686,-6208.991,255.196,0,0,0,0,100,0), +(@PATH,47,1199.686,-6208.491,254.946,0,0,0,0,100,0), +(@PATH,48,1198.936,-6213.991,254.946,0,0,0,0,100,0), +(@PATH,49,1198.186,-6218.491,255.696,0,0,0,0,100,0), +(@PATH,50,1197.186,-6220.491,255.946,0,0,0,0,100,0), +(@PATH,51,1196.764,-6220.886,256.3877,0,0,0,0,100,0), +(@PATH,52,1195.514,-6223.386,256.6377,0,0,0,0,100,0), +(@PATH,53,1195.014,-6226.386,257.1377,0,0,0,0,100,0), +(@PATH,54,1194.014,-6232.136,257.8877,0,0,0,0,100,0), +(@PATH,55,1192.742,-6237.75,257.7437,0,0,0,0,100,0), +(@PATH,56,1197.125,-6221.018,256.1147,0,0,0,0,100,0), +(@PATH,57,1197.625,-6219.268,255.1147,0,0,0,0,100,0), +(@PATH,58,1198.625,-6214.018,255.1147,0,0,0,0,100,0), +(@PATH,59,1199.759,-6208.562,255.0127,0,0,0,0,100,0), +(@PATH,60,1200.759,-6209.062,255.0127,0,0,0,0,100,0), +(@PATH,61,1205.759,-6211.562,257.0127,0,0,0,0,100,0), +(@PATH,62,1207.009,-6212.312,257.0127,0,0,0,0,100,0), +(@PATH,63,1208.509,-6212.812,257.0127,0,0,0,0,100,0), +(@PATH,64,1209.759,-6213.312,257.0127,0,0,0,0,100,0), +(@PATH,65,1208.702,-6212.984,257.3513,0,0,0,0,100,0), +(@PATH,66,1209.952,-6213.734,257.3513,0,0,0,0,100,0), +(@PATH,67,1212.202,-6214.734,257.3513,0,0,0,0,100,0), +(@PATH,68,1213.202,-6214.984,257.3513,0,0,0,0,100,0), +(@PATH,69,1218.202,-6216.234,259.6013,0,0,0,0,100,0), +(@PATH,70,1219.202,-6216.484,259.8513,0,0,0,0,100,0), +(@PATH,71,1223.648,-6217.784,260.2966,0,0,0,0,100,0), +(@PATH,72,1223.398,-6219.284,260.2966,0,0,0,0,100,0), +(@PATH,73,1223.398,-6220.534,260.2966,0,0,0,0,100,0), +(@PATH,74,1223.148,-6222.534,260.2966,0,0,0,0,100,0), +(@PATH,75,1222.898,-6226.784,260.2966,0,0,0,0,100,0), +(@PATH,76,1222.148,-6227.534,260.2966,0,0,0,0,100,0), +(@PATH,77,1222.648,-6230.784,260.2966,0,0,0,0,100,0), +(@PATH,78,1222.148,-6233.034,260.7966,0,0,0,0,100,0), +(@PATH,79,1222.898,-6237.034,261.5466,0,0,0,0,100,0), +(@PATH,80,1224.492,-6244.666,262.2464,0,0,0,0,100,0), +(@PATH,81,1230.492,-6244.416,262.7464,0,0,0,0,100,0), +(@PATH,82,1238.242,-6244.416,263.2464,0,0,0,0,100,0), +(@PATH,83,1244.242,-6244.166,263.7464,0,0,0,0,100,0), +(@PATH,84,1247.242,-6244.166,264.4964,0,0,0,0,100,0), +(@PATH,85,1250.242,-6244.166,265.2464,0,0,0,0,100,0); + +SET @NPC := 107174; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1124.235,`position_y`=-6172.264,`position_z`=259.8905 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1124.235,-6172.264,259.8905,0,0,0,0,100,0), +(@PATH,2,1123.985,-6166.514,260.6405,0,0,0,0,100,0), +(@PATH,3,1123.006,-6158.564,260.4453,0,0,0,0,100,0), +(@PATH,4,1128.506,-6154.814,259.9453,0,0,0,0,100,0), +(@PATH,5,1128.817,-6154.457,259.9253,0,0,0,0,100,0), +(@PATH,6,1129.817,-6153.707,259.6753,0,0,0,0,100,0), +(@PATH,7,1130.317,-6149.707,259.1753,0,0,0,0,100,0), +(@PATH,8,1130.817,-6145.957,258.4253,0,0,0,0,100,0), +(@PATH,9,1131.317,-6142.957,257.6753,0,0,0,0,100,0), +(@PATH,10,1132.307,-6137.309,257.1494,0,0,0,0,100,0), +(@PATH,11,1135.807,-6130.309,256.6494,0,0,0,0,100,0), +(@PATH,12,1137.557,-6126.809,256.1494,0,0,0,0,100,0), +(@PATH,13,1139.292,-6123.391,255.5599,0,0,0,0,100,0), +(@PATH,14,1132.792,-6115.891,256.3099,0,0,0,0,100,0), +(@PATH,15,1129.292,-6111.391,256.8099,0,0,0,0,100,0), +(@PATH,16,1129.007,-6111.167,257.0588,0,0,0,0,100,0), +(@PATH,17,1127.007,-6108.917,257.5588,0,0,0,0,100,0), +(@PATH,18,1124.007,-6109.167,258.3088,0,0,0,0,100,0), +(@PATH,19,1122.007,-6109.417,259.0588,0,0,0,0,100,0), +(@PATH,20,1119.257,-6109.667,259.8088,0,0,0,0,100,0), +(@PATH,21,1116.257,-6109.917,260.3088,0,0,0,0,100,0), +(@PATH,22,1119.817,-6109.485,259.6061,0,0,0,0,100,0), +(@PATH,23,1122.567,-6109.235,259.1061,0,0,0,0,100,0), +(@PATH,24,1124.567,-6108.985,258.6061,0,0,0,0,100,0), +(@PATH,25,1126.567,-6108.985,257.6061,0,0,0,0,100,0), +(@PATH,26,1139.122,-6123.446,255.6807,0,0,0,0,100,0), +(@PATH,27,1137.372,-6126.946,256.1807,0,0,0,0,100,0), +(@PATH,28,1135.122,-6131.196,256.6807,0,0,0,0,100,0), +(@PATH,29,1132.076,-6137.449,257.4678,0,0,0,0,100,0), +(@PATH,30,1131.326,-6144.449,258.2178,0,0,0,0,100,0), +(@PATH,31,1131.076,-6147.199,258.7178,0,0,0,0,100,0), +(@PATH,32,1130.576,-6150.199,259.2178,0,0,0,0,100,0), +(@PATH,33,1129.784,-6153.756,259.7093,0,0,0,0,100,0), +(@PATH,34,1123.534,-6158.256,260.4593,0,0,0,0,100,0), +(@PATH,35,1123.616,-6158.67,260.448,0,0,0,0,100,0), +(@PATH,36,1123.116,-6158.92,260.448,0,0,0,0,100,0), +(@PATH,37,1124.592,-6172.48,260.095,0,0,0,0,100,0), +(@PATH,38,1126.342,-6177.23,259.095,0,0,0,0,100,0), +(@PATH,39,1127.842,-6180.73,258.595,0,0,0,0,100,0), +(@PATH,40,1128.592,-6182.73,257.845,0,0,0,0,100,0), +(@PATH,41,1129.592,-6185.23,257.095,0,0,0,0,100,0), +(@PATH,42,1130.342,-6187.98,256.345,0,0,0,0,100,0), +(@PATH,43,1131.092,-6189.98,255.845,0,0,0,0,100,0), +(@PATH,44,1131.342,-6190.98,255.095,0,0,0,0,100,0), +(@PATH,45,1132.092,-6192.73,254.595,0,0,0,0,100,0), +(@PATH,46,1132.842,-6194.73,253.845,0,0,0,0,100,0), +(@PATH,47,1133.592,-6196.48,253.345,0,0,0,0,100,0), +(@PATH,48,1134.592,-6199.23,252.345,0,0,0,0,100,0), +(@PATH,49,1134.802,-6199.519,252.0367,0,0,0,0,100,0), +(@PATH,50,1135.552,-6201.519,251.7867,0,0,0,0,100,0), +(@PATH,51,1137.052,-6202.769,251.2867,0,0,0,0,100,0), +(@PATH,52,1139.552,-6204.519,250.5367,0,0,0,0,100,0), +(@PATH,53,1141.052,-6205.769,249.7867,0,0,0,0,100,0), +(@PATH,54,1143.552,-6207.769,249.0367,0,0,0,0,100,0), +(@PATH,55,1146.552,-6210.269,248.0367,0,0,0,0,100,0), +(@PATH,56,1149.802,-6212.519,247.2867,0,0,0,0,100,0), +(@PATH,57,1152.552,-6214.769,246.7867,0,0,0,0,100,0), +(@PATH,58,1161.302,-6221.769,247.2867,0,0,0,0,100,0), +(@PATH,59,1164.302,-6224.269,248.2867,0,0,0,0,100,0), +(@PATH,60,1165.052,-6224.769,249.0367,0,0,0,0,100,0), +(@PATH,61,1164.394,-6224.07,248.2345,0,0,0,0,100,0), +(@PATH,62,1163.644,-6223.57,247.7345,0,0,0,0,100,0), +(@PATH,63,1160.394,-6221.07,246.9845,0,0,0,0,100,0), +(@PATH,64,1148.894,-6212.07,247.7345,0,0,0,0,100,0), +(@PATH,65,1145.894,-6209.57,248.4845,0,0,0,0,100,0), +(@PATH,66,1142.644,-6207.07,249.4845,0,0,0,0,100,0), +(@PATH,67,1140.394,-6205.07,250.2345,0,0,0,0,100,0), +(@PATH,68,1138.644,-6203.82,250.9845,0,0,0,0,100,0), +(@PATH,69,1136.394,-6202.07,251.7345,0,0,0,0,100,0);# + +SET @NPC := 107186; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1179,`position_y`=-6148.844,`position_z`=221.7277 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1179,-6148.844,221.7277,0,0,0,0,100,0), +(@PATH,2,1178.5,-6150.344,221.9777,0,0,0,0,100,0), +(@PATH,3,1185.5,-6169.844,222.2277,0,0,0,0,100,0), +(@PATH,4,1187.482,-6174.699,222.9454,0,0,0,0,100,0), +(@PATH,5,1198.295,-6180.414,222.6905,0,0,0,0,100,0), +(@PATH,6,1203.295,-6180.164,222.1905,0,0,0,0,100,0), +(@PATH,7,1208.045,-6179.914,221.6905,0,0,0,0,100,0), +(@PATH,8,1213.045,-6179.664,221.1905,0,0,0,0,100,0), +(@PATH,9,1217.83,-6179.286,220.961,0,0,0,0,100,0), +(@PATH,10,1221.33,-6171.286,220.461,0,0,0,0,100,0), +(@PATH,11,1226.689,-6160.965,220.6148,0,0,0,0,100,0), +(@PATH,12,1228.189,-6147.465,221.1148,0,0,0,0,100,0), +(@PATH,13,1228.939,-6141.465,221.8648,0,0,0,0,100,0), +(@PATH,14,1228.866,-6141.102,221.9026,0,0,0,0,100,0), +(@PATH,15,1228.866,-6140.852,221.6526,0,0,0,0,100,0), +(@PATH,16,1223.116,-6133.102,221.1526,0,0,0,0,100,0), +(@PATH,17,1219.345,-6128.803,221.0262,0,0,0,0,100,0), +(@PATH,18,1215.345,-6128.303,220.2762,0,0,0,0,100,0), +(@PATH,19,1207.845,-6127.553,220.0262,0,0,0,0,100,0), +(@PATH,20,1199.551,-6126.606,219.8653,0,0,0,0,100,0), +(@PATH,21,1185.385,-6133,220.5218,0,0,0,0,100,0), +(@PATH,22,1180.885,-6144,220.7718,0,0,0,0,100,0), +(@PATH,23,1179.135,-6148.5,221.5218,0,0,0,0,100,0); + +SET @NPC := 107182; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1275.231,`position_y`=-6142.061,`position_z`=244.4795 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1275.231,-6142.061,244.4795,0,0,0,0,100,0), +(@PATH,2,1276.731,-6145.561,244.9795,0,0,0,0,100,0), +(@PATH,3,1276.981,-6152.561,245.9795,0,0,0,0,100,0), +(@PATH,4,1277.231,-6155.561,246.7295,0,0,0,0,100,0), +(@PATH,5,1277.481,-6158.561,247.4795,0,0,0,0,100,0), +(@PATH,6,1277.481,-6160.311,248.2295,0,0,0,0,100,0), +(@PATH,7,1277.731,-6162.311,248.9795,0,0,0,0,100,0), +(@PATH,8,1277.731,-6164.311,249.9795,0,0,0,0,100,0), +(@PATH,9,1277.981,-6167.311,250.4795,0,0,0,0,100,0), +(@PATH,10,1277.981,-6169.311,251.4795,0,0,0,0,100,0), +(@PATH,11,1278.231,-6171.311,252.4795,0,0,0,0,100,0), +(@PATH,12,1278.231,-6174.311,253.9795,0,0,0,0,100,0), +(@PATH,13,1278.481,-6176.311,254.9795,0,0,0,0,100,0), +(@PATH,14,1278.481,-6178.311,255.9795,0,0,0,0,100,0), +(@PATH,15,1278.489,-6176.586,255.3968,0,0,0,0,100,0), +(@PATH,16,1278.489,-6178.586,256.1468,0,0,0,0,100,0), +(@PATH,17,1278.489,-6179.086,256.3968,0,0,0,0,100,0), +(@PATH,18,1277.739,-6180.836,256.8968,0,0,0,0,100,0), +(@PATH,19,1277.239,-6182.836,257.8968,0,0,0,0,100,0), +(@PATH,20,1276.489,-6184.586,258.6468,0,0,0,0,100,0), +(@PATH,21,1275.239,-6188.086,259.1468,0,0,0,0,100,0), +(@PATH,22,1271.181,-6196.056,258.7103,0,0,0,0,100,0), +(@PATH,23,1266.181,-6195.556,261.9603,0,0,0,0,100,0), +(@PATH,24,1265.981,-6195.508,261.8902,0,0,0,0,100,0), +(@PATH,25,1264.481,-6195.258,261.8902,0,0,0,0,100,0), +(@PATH,26,1263.731,-6192.258,261.8902,0,0,0,0,100,0), +(@PATH,27,1263.231,-6189.758,261.8902,0,0,0,0,100,0), +(@PATH,28,1262.981,-6188.258,261.8902,0,0,0,0,100,0), +(@PATH,29,1262.731,-6187.258,261.8902,0,0,0,0,100,0), +(@PATH,30,1262.704,-6187.157,261.9908,0,0,0,0,100,0), +(@PATH,31,1262.954,-6188.157,261.9908,0,0,0,0,100,0), +(@PATH,32,1263.454,-6189.907,261.9908,0,0,0,0,100,0), +(@PATH,33,1263.675,-6190.025,261.9792,0,0,0,0,100,0), +(@PATH,34,1263.675,-6191.275,261.9792,0,0,0,0,100,0), +(@PATH,35,1263.925,-6192.275,261.9792,0,0,0,0,100,0), +(@PATH,36,1264.355,-6195.548,261.8675,0,0,0,0,100,0), +(@PATH,37,1266.355,-6195.048,261.8675,0,0,0,0,100,0), +(@PATH,38,1267.855,-6194.548,260.8675,0,0,0,0,100,0), +(@PATH,39,1270.355,-6194.048,259.6175,0,0,0,0,100,0), +(@PATH,40,1270.649,-6193.912,259.3318,0,0,0,0,100,0), +(@PATH,41,1273.149,-6195.162,259.5818,0,0,0,0,100,0), +(@PATH,42,1274.399,-6187.162,258.8318,0,0,0,0,100,0), +(@PATH,43,1274.899,-6184.162,258.0818,0,0,0,0,100,0), +(@PATH,44,1275.149,-6182.162,257.3318,0,0,0,0,100,0), +(@PATH,45,1275.649,-6180.412,256.3318,0,0,0,0,100,0), +(@PATH,46,1275.899,-6178.662,255.3318,0,0,0,0,100,0), +(@PATH,47,1276.149,-6176.662,254.8318,0,0,0,0,100,0), +(@PATH,48,1276.649,-6174.662,253.8318,0,0,0,0,100,0), +(@PATH,49,1276.899,-6172.662,252.8318,0,0,0,0,100,0), +(@PATH,50,1277.399,-6170.662,252.3318,0,0,0,0,100,0), +(@PATH,51,1277.649,-6168.662,251.3318,0,0,0,0,100,0), +(@PATH,52,1278.263,-6165.411,250.3526,0,0,0,0,100,0), +(@PATH,53,1277.513,-6162.661,248.8526,0,0,0,0,100,0), +(@PATH,54,1276.763,-6160.661,247.6026,0,0,0,0,100,0), +(@PATH,55,1276.263,-6158.661,246.6026,0,0,0,0,100,0), +(@PATH,56,1275.763,-6156.911,245.3526,0,0,0,0,100,0), +(@PATH,57,1275.263,-6154.911,244.8526,0,0,0,0,100,0), +(@PATH,58,1274.263,-6151.161,243.8526,0,0,0,0,100,0), +(@PATH,59,1272.763,-6146.411,242.3526,0,0,0,0,100,0), +(@PATH,60,1271.013,-6138.911,241.3526,0,0,0,0,100,0), +(@PATH,61,1269.513,-6133.911,240.8526,0,0,0,0,100,0), +(@PATH,62,1268.763,-6131.161,240.1026,0,0,0,0,100,0), +(@PATH,63,1267.763,-6127.161,239.3526,0,0,0,0,100,0), +(@PATH,64,1267.263,-6127.437,239.0915,0,0,0,0,100,0), +(@PATH,65,1266.513,-6125.687,238.5915,0,0,0,0,100,0), +(@PATH,66,1264.513,-6120.937,237.3415,0,0,0,0,100,0), +(@PATH,67,1263.513,-6118.437,237.0915,0,0,0,0,100,0), +(@PATH,68,1262.763,-6116.687,236.3415,0,0,0,0,100,0), +(@PATH,69,1261.513,-6113.937,235.8415,0,0,0,0,100,0), +(@PATH,70,1260.263,-6111.187,235.0915,0,0,0,0,100,0), +(@PATH,71,1258.883,-6109.368,235.7006,0,0,0,0,100,0), +(@PATH,72,1252.883,-6109.618,239.4506,0,0,0,0,100,0), +(@PATH,73,1242.633,-6109.868,239.4506,0,0,0,0,100,0), +(@PATH,74,1242.179,-6109.67,239.7971,0,0,0,0,100,0), +(@PATH,75,1241.179,-6109.67,240.5471,0,0,0,0,100,0), +(@PATH,76,1237.179,-6109.17,243.0471,0,0,0,0,100,0), +(@PATH,77,1234.179,-6108.92,245.2971,0,0,0,0,100,0), +(@PATH,78,1228.429,-6108.42,245.2971,0,0,0,0,100,0), +(@PATH,79,1224.929,-6108.17,245.0471,0,0,0,0,100,0), +(@PATH,80,1224.458,-6108.051,245.3477,0,0,0,0,100,0), +(@PATH,81,1222.958,-6108.051,246.0977,0,0,0,0,100,0), +(@PATH,82,1213.208,-6107.801,252.5977,0,0,0,0,100,0), +(@PATH,83,1213.088,-6107.39,252.5718,0,0,0,0,100,0), +(@PATH,84,1211.588,-6107.39,252.8218,0,0,0,0,100,0), +(@PATH,85,1212.088,-6104.39,252.8218,0,0,0,0,100,0), +(@PATH,86,1212.759,-6101.565,252.738,0,0,0,0,100,0), +(@PATH,87,1216.009,-6101.315,252.738,0,0,0,0,100,0), +(@PATH,88,1223.759,-6101.065,252.238,0,0,0,0,100,0), +(@PATH,89,1225.509,-6100.815,252.238,0,0,0,0,100,0), +(@PATH,90,1234.759,-6100.565,252.238,0,0,0,0,100,0), +(@PATH,91,1237.548,-6100.326,251.79,0.1059189,0,0,0,100,0); + +SET @NPC := 105151; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=955.4138,`position_y`=-5519.072,`position_z`=185.9005 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,955.4138,-5519.072,185.9005,0,0,0,0,100,0), +(@PATH,2,950.4138,-5516.822,185.9005,0,0,0,0,100,0), +(@PATH,3,945.1638,-5507.322,186.1505,0,0,0,0,100,0), +(@PATH,4,944.4138,-5506.822,186.1505,0,0,0,0,100,0), +(@PATH,5,942.4359,-5503.478,186.2347,0,0,0,0,100,0), +(@PATH,6,946.4359,-5499.728,185.9847,0,0,0,0,100,0), +(@PATH,7,947.1859,-5498.728,185.9847,0,0,0,0,100,0), +(@PATH,8,947.1859,-5497.728,186.2347,0,0,0,0,100,0), +(@PATH,9,951.1859,-5484.478,185.7347,0,0,0,0,100,0), +(@PATH,10,951.3481,-5484.38,185.652,0,0,0,0,100,0), +(@PATH,11,952.0981,-5481.63,185.652,0,0,0,0,100,0), +(@PATH,12,958.6332,-5469.427,186.3303,0,0,0,0,100,0), +(@PATH,13,954.1332,-5457.177,186.8303,0,0,0,0,100,0), +(@PATH,14,948.1149,-5441.228,187.2803,0,0,0,0,100,0), +(@PATH,15,946.3649,-5439.978,187.2803,0,0,0,0,100,0), +(@PATH,16,945.1149,-5428.228,189.0303,0,0,0,0,100,0), +(@PATH,17,945.1149,-5426.978,189.2803,0,0,0,0,100,0), +(@PATH,18,943.6149,-5424.478,189.7803,0,0,0,0,100,0), +(@PATH,19,942.1149,-5420.728,190.5303,0,0,0,0,100,0), +(@PATH,20,941.9315,-5420.475,190.3651,0,0,0,0,100,0), +(@PATH,21,941.1815,-5418.975,190.3651,0,0,0,0,100,0), +(@PATH,22,937.6815,-5416.475,190.8651,0,0,0,0,100,0), +(@PATH,23,939.9315,-5408.225,190.3651,0,0,0,0,100,0), +(@PATH,24,939.9315,-5404.225,190.1151,0,0,0,0,100,0), +(@PATH,25,940.6815,-5400.225,189.6151,0,0,0,0,100,0), +(@PATH,26,941.4315,-5398.475,189.1151,0,0,0,0,100,0), +(@PATH,27,941.9315,-5397.225,189.1151,0,0,0,0,100,0), +(@PATH,28,942.9315,-5395.475,189.6151,0,0,0,0,100,0), +(@PATH,29,941.8935,-5397.054,188.9172,0,0,0,0,100,0), +(@PATH,30,943.1435,-5395.054,189.4172,0,0,0,0,100,0), +(@PATH,31,943.6435,-5394.054,189.9172,0,0,0,0,100,0), +(@PATH,32,944.1435,-5391.804,190.4172,0,0,0,0,100,0), +(@PATH,33,944.1435,-5390.804,190.9172,0,0,0,0,100,0), +(@PATH,34,944.3935,-5389.804,190.4172,0,0,0,0,100,0), +(@PATH,35,945.1435,-5385.054,188.6672,0,0,0,0,100,0), +(@PATH,36,945.8935,-5379.054,186.4172,0,0,0,0,100,0), +(@PATH,37,947.8935,-5365.554,186.1672,0,0,0,0,100,0), +(@PATH,38,950.528,-5355.106,185.9254,0,0,0,0,100,0), +(@PATH,39,957.441,-5346.122,185.7424,0,0,0,0,100,0), +(@PATH,40,958.691,-5336.872,181.4924,0,0,0,0,100,0), +(@PATH,41,959.191,-5333.372,179.9924,0,0,0,0,100,0), +(@PATH,42,960.441,-5325.622,176.2424,0,0,0,0,100,0), +(@PATH,43,961.6225,-5317.392,176.0561,0,0,0,0,100,0), +(@PATH,44,956.8725,-5305.892,176.0561,0,0,0,0,100,0), +(@PATH,45,955.8725,-5303.392,176.0561,0,0,0,0,100,0), +(@PATH,46,954.4553,-5300.543,175.9087,0,0,0,0,100,0), +(@PATH,47,952.4553,-5300.293,175.9087,0,0,0,0,100,0), +(@PATH,48,950.2053,-5300.293,175.9087,0,0,0,0,100,0), +(@PATH,49,949.7053,-5300.293,175.9087,0,0,0,0,100,0), +(@PATH,50,950.6842,-5293.499,176.1137,0,0,0,0,100,0), +(@PATH,51,949.1842,-5294.499,176.1137,0,0,0,0,100,0), +(@PATH,52,940.9342,-5300.499,176.3637,0,0,0,0,100,0), +(@PATH,53,938.9342,-5302.249,176.1137,0,0,0,0,100,0), +(@PATH,54,929.4342,-5308.999,175.6137,0,0,0,0,100,0), +(@PATH,55,929.1168,-5309.279,175.6916,0,0,0,0,100,0), +(@PATH,56,928.6168,-5309.779,175.6916,0,0,0,0,100,0), +(@PATH,57,928.6168,-5312.029,175.9416,0,0,0,0,100,0), +(@PATH,58,927.1168,-5316.779,175.9416,0,0,0,0,100,0), +(@PATH,59,914.1168,-5327.279,176.6916,0,0,0,0,100,0), +(@PATH,60,911.8668,-5329.029,177.1916,0,0,0,0,100,0), +(@PATH,61,909.6168,-5331.029,177.6916,0,0,0,0,100,0), +(@PATH,62,906.3668,-5333.529,178.4416,0,0,0,0,100,0), +(@PATH,63,903.8217,-5335.636,179.4392,0,0,0,0,100,0), +(@PATH,64,902.3217,-5338.386,180.1892,0,0,0,0,100,0), +(@PATH,65,901.3217,-5340.136,180.6892,0,0,0,0,100,0), +(@PATH,66,900.5717,-5341.636,181.1892,0,0,0,0,100,0), +(@PATH,67,899.5717,-5343.136,181.9392,0,0,0,0,100,0), +(@PATH,68,898.5717,-5344.886,182.6892,0,0,0,0,100,0), +(@PATH,69,898.0717,-5345.886,183.1892,0,0,0,0,100,0), +(@PATH,70,896.91,-5347.463,183.8121,0,0,0,0,100,0), +(@PATH,71,892.91,-5346.213,184.5621,0,0,0,0,100,0), +(@PATH,72,890.16,-5345.213,185.0621,0,0,0,0,100,0), +(@PATH,73,887.41,-5344.463,185.8121,0,0,0,0,100,0), +(@PATH,74,883.66,-5343.463,186.5621,0,0,0,0,100,0), +(@PATH,75,883.3667,-5343.099,186.7668,0,0,0,0,100,0), +(@PATH,76,882.1167,-5342.849,187.0168,0,0,0,0,100,0), +(@PATH,77,878.8667,-5340.349,187.7668,0,0,0,0,100,0), +(@PATH,78,875.6167,-5337.849,188.0168,0,0,0,0,100,0), +(@PATH,79,872.6167,-5335.849,188.7668,0,0,0,0,100,0), +(@PATH,80,869.6167,-5333.349,189.5168,0,0,0,0,100,0), +(@PATH,81,866.1172,-5329.424,189.957,0,0,0,0,100,0), +(@PATH,82,863.1172,-5326.674,189.707,0,0,0,0,100,0), +(@PATH,83,855.3672,-5320.424,189.707,0,0,0,0,100,0), +(@PATH,84,854.9592,-5320.538,189.8654,0,0,0,0,100,0), +(@PATH,85,853.7092,-5319.288,189.8654,0,0,0,0,100,0), +(@PATH,86,850.9592,-5320.538,190.1154,0,0,0,0,100,0), +(@PATH,87,849.7092,-5321.038,190.1154,0,0,0,0,100,0), +(@PATH,88,843.7092,-5323.538,189.6154,0,0,0,0,100,0), +(@PATH,89,843.4592,-5323.788,189.8654,0,0,0,0,100,0), +(@PATH,90,843.7092,-5325.038,189.8654,0,0,0,0,100,0), +(@PATH,91,841.9592,-5327.288,189.8654,0,0,0,0,100,0), +(@PATH,92,832.5708,-5333.354,189.9288,0,0,0,0,100,0), +(@PATH,93,846.2416,-5344.22,190.113,0,0,0,0,100,0), +(@PATH,94,846.7416,-5345.22,190.113,0,0,0,0,100,0), +(@PATH,95,850.4916,-5356.22,195.363,0,0,0,0,100,0), +(@PATH,96,853.2416,-5364.22,199.363,0,0,0,0,100,0), +(@PATH,97,853.238,-5364.382,199.4272,0,0,0,0,100,0), +(@PATH,98,853.738,-5365.632,199.6772,0,0,0,0,100,0), +(@PATH,99,851.738,-5368.382,199.6772,0,0,0,0,100,0), +(@PATH,100,854.9686,-5375.134,199.7227,0,0,0,0,100,0), +(@PATH,101,861.7186,-5384.634,199.7227,0,0,0,0,100,0), +(@PATH,102,866.2186,-5391.134,199.9727,0,0,0,0,100,0), +(@PATH,103,869.4686,-5395.634,199.9727,0,0,0,0,100,0), +(@PATH,104,870.9686,-5397.384,200.9727,0,0,0,0,100,0), +(@PATH,105,871.9686,-5398.884,201.7227,0,0,0,0,100,0), +(@PATH,106,876.4686,-5405.384,204.9727,0,0,0,0,100,0), +(@PATH,107,877.2186,-5406.634,204.9727,0,0,0,0,100,0), +(@PATH,108,879.7186,-5409.884,202.9727,0,0,0,0,100,0), +(@PATH,109,880.4686,-5410.884,202.7227,0,0,0,0,100,0), +(@PATH,110,880.9686,-5411.634,202.9727,0,0,0,0,100,0), +(@PATH,111,881.4686,-5413.884,203.9727,0,0,0,0,100,0), +(@PATH,112,881.9686,-5415.384,205.2227,0,0,0,0,100,0), +(@PATH,113,881.9686,-5416.384,205.4727,0,0,0,0,100,0), +(@PATH,114,883.2186,-5416.884,206.7227,0,0,0,0,100,0), +(@PATH,115,883.7186,-5416.884,206.7227,0,0,0,0,100,0), +(@PATH,116,885.2186,-5416.884,206.7227,0,0,0,0,100,0), +(@PATH,117,887.7186,-5417.384,207.2227,0,0,0,0,100,0), +(@PATH,118,891.9686,-5418.384,207.2227,0,0,0,0,100,0), +(@PATH,119,895.7186,-5419.384,206.4727,0,0,0,0,100,0), +(@PATH,120,896.7186,-5419.384,206.2227,0,0,0,0,100,0), +(@PATH,121,897.9686,-5419.134,205.9727,0,0,0,0,100,0), +(@PATH,122,898.9686,-5419.134,205.9727,0,0,0,0,100,0), +(@PATH,123,899.9686,-5419.134,205.9727,0,0,0,0,100,0), +(@PATH,124,900.9686,-5419.134,205.9727,0,0,0,0,100,0), +(@PATH,125,901.9686,-5419.134,205.7227,0,0,0,0,100,0), +(@PATH,126,903.2186,-5419.134,205.7227,0,0,0,0,100,0), +(@PATH,127,904.2186,-5419.134,205.4727,0,0,0,0,100,0), +(@PATH,128,905.7186,-5420.634,206.2227,0,0,0,0,100,0), +(@PATH,129,908.2186,-5421.634,205.9727,0,0,0,0,100,0), +(@PATH,130,909.2186,-5422.134,204.7227,0,0,0,0,100,0), +(@PATH,131,910.2186,-5422.634,202.7227,0,0,0,0,100,0), +(@PATH,132,910.9686,-5422.884,200.9727,0,0,0,0,100,0), +(@PATH,133,911.9686,-5423.384,197.2227,0,0,0,0,100,0), +(@PATH,134,912.4686,-5423.634,199.2227,0,0,0,0,100,0), +(@PATH,135,913.4686,-5423.634,196.7227,0,0,0,0,100,0), +(@PATH,136,914.4686,-5423.634,195.2227,0,0,0,0,100,0), +(@PATH,137,915.4686,-5423.634,193.9727,0,0,0,0,100,0), +(@PATH,138,916.4686,-5423.634,192.4727,0,0,0,0,100,0), +(@PATH,139,920.7186,-5422.634,192.2227,0,0,0,0,100,0), +(@PATH,140,924.9686,-5422.634,191.9727,0,0,0,0,100,0), +(@PATH,141,931.7186,-5420.884,191.2227,0,0,0,0,100,0), +(@PATH,142,933.2186,-5420.634,191.2227,0,0,0,0,100,0), +(@PATH,143,941.3766,-5418.401,190.6661,0,0,0,0,100,0), +(@PATH,144,941.8766,-5420.901,190.4161,0,0,0,0,100,0), +(@PATH,145,943.3766,-5424.901,189.6661,0,0,0,0,100,0), +(@PATH,146,945.8766,-5426.151,189.4161,0,0,0,0,100,0), +(@PATH,147,946.1266,-5429.151,188.9161,0,0,0,0,100,0), +(@PATH,148,949.1989,-5440.51,186.899,0,0,0,0,100,0), +(@PATH,149,955.8127,-5459.462,186.7729,0,0,0,0,100,0), +(@PATH,150,957.0627,-5466.962,186.2729,0,0,0,0,100,0), +(@PATH,151,956.7032,-5479.127,185.9472,0,0,0,0,100,0), +(@PATH,152,956.6984,-5479.37,186.0544,0,0,0,0,100,0), +(@PATH,153,955.1984,-5482.12,185.8044,0,0,0,0,100,0), +(@PATH,154,946.9437,-5482.129,186.7903,0,0,0,0,100,0), +(@PATH,155,941.1937,-5475.379,187.2903,0,0,0,0,100,0), +(@PATH,156,939.1937,-5473.379,187.7903,0,0,0,0,100,0), +(@PATH,157,937.4437,-5471.129,188.2903,0,0,0,0,100,0), +(@PATH,158,935.4437,-5468.879,189.0403,0,0,0,0,100,0), +(@PATH,159,935.0602,-5468.584,189.2991,0,0,0,0,100,0), +(@PATH,160,934.3102,-5467.584,189.5491,0,0,0,0,100,0), +(@PATH,161,933.0602,-5467.334,190.0491,0,0,0,0,100,0), +(@PATH,162,924.5602,-5460.334,193.7991,0,0,0,0,100,0), +(@PATH,163,924.3861,-5460.094,193.9684,0,0,0,0,100,0), +(@PATH,164,923.6361,-5459.594,194.2184,0,0,0,0,100,0), +(@PATH,165,923.1361,-5458.594,194.7184,0,0,0,0,100,0), +(@PATH,166,920.6361,-5459.594,195.4684,0,0,0,0,100,0), +(@PATH,167,913.3861,-5455.844,197.9684,0,0,0,0,100,0), +(@PATH,168,910.3861,-5454.344,199.2184,0,0,0,0,100,0), +(@PATH,169,905.2805,-5452.106,201.161,0,0,0,0,100,0), +(@PATH,170,904.5305,-5450.106,201.661,0,0,0,0,100,0), +(@PATH,171,903.5305,-5448.356,202.161,0,0,0,0,100,0), +(@PATH,172,902.0305,-5446.856,202.911,0,0,0,0,100,0), +(@PATH,173,899.0305,-5446.856,203.161,0,0,0,0,100,0), +(@PATH,174,896.0305,-5446.606,203.911,0,0,0,0,100,0), +(@PATH,175,893.2805,-5446.606,204.661,0,0,0,0,100,0), +(@PATH,176,889.2805,-5446.356,205.411,0,0,0,0,100,0), +(@PATH,177,884.2805,-5446.106,206.161,0,0,0,0,100,0), +(@PATH,178,884.0074,-5446.142,206.268,0,0,0,0,100,0), +(@PATH,179,882.7574,-5446.142,206.518,0,0,0,0,100,0), +(@PATH,180,877.5074,-5449.142,207.018,0,0,0,0,100,0), +(@PATH,181,874.5074,-5450.892,207.768,0,0,0,0,100,0), +(@PATH,182,871.7574,-5452.392,208.518,0,0,0,0,100,0), +(@PATH,183,868.3604,-5454.517,209.8507,0,0,0,0,100,0), +(@PATH,184,866.3604,-5456.517,210.6007,0,0,0,0,100,0), +(@PATH,185,864.3604,-5458.517,211.1007,0,0,0,0,100,0), +(@PATH,186,861.6104,-5461.267,211.8507,0,0,0,0,100,0), +(@PATH,187,861.2526,-5461.451,212.0952,0,0,0,0,100,0), +(@PATH,188,860.0026,-5462.951,212.0952,0,0,0,0,100,0), +(@PATH,189,857.5026,-5468.201,212.3452,0,0,0,0,100,0), +(@PATH,190,853.2526,-5476.951,212.8452,0,0,0,0,100,0), +(@PATH,191,852.8783,-5477.313,213.1488,0,0,0,0,100,0), +(@PATH,192,852.6283,-5477.813,213.1488,0,0,0,0,100,0), +(@PATH,193,850.6283,-5485.313,213.3988,0,0,0,0,100,0), +(@PATH,194,847.874,-5495.187,213.9453,0,0,0,0,100,0), +(@PATH,195,840.874,-5509.187,213.1953,0,0,0,0,100,0), +(@PATH,196,838.624,-5513.687,212.6953,0,0,0,0,100,0), +(@PATH,197,838.2401,-5514.057,212.5417,0,0,0,0,100,0), +(@PATH,198,837.9901,-5514.807,212.5417,0,0,0,0,100,0), +(@PATH,199,837.9901,-5518.807,211.7917,0,0,0,0,100,0), +(@PATH,200,837.7401,-5523.557,211.0417,0,0,0,0,100,0), +(@PATH,201,837.7401,-5526.557,210.5417,0,0,0,0,100,0), +(@PATH,202,837.7572,-5526.793,210.3996,0,0,0,0,100,0), +(@PATH,203,837.7572,-5528.293,209.8996,0,0,0,0,100,0), +(@PATH,204,838.5072,-5531.043,209.1496,0,0,0,0,100,0), +(@PATH,205,839.2572,-5533.043,208.6496,0,0,0,0,100,0), +(@PATH,206,839.7572,-5534.543,207.8996,0,0,0,0,100,0), +(@PATH,207,840.2572,-5536.543,207.3996,0,0,0,0,100,0), +(@PATH,208,840.7572,-5538.543,206.6496,0,0,0,0,100,0), +(@PATH,209,841.7572,-5541.293,205.6496,0,0,0,0,100,0), +(@PATH,210,841.869,-5541.566,205.4587,0,0,0,0,100,0), +(@PATH,211,842.369,-5542.566,204.9587,0,0,0,0,100,0), +(@PATH,212,843.119,-5543.066,204.4587,0,0,0,0,100,0), +(@PATH,213,844.369,-5544.566,203.7087,0,0,0,0,100,0), +(@PATH,214,845.119,-5545.066,203.2087,0,0,0,0,100,0), +(@PATH,215,846.369,-5546.316,202.7087,0,0,0,0,100,0), +(@PATH,216,847.119,-5547.066,202.2087,0,0,0,0,100,0), +(@PATH,217,849.369,-5549.066,200.9587,0,0,0,0,100,0), +(@PATH,218,851.6705,-5550.789,200.0478,0,0,0,0,100,0), +(@PATH,219,853.4205,-5550.289,199.2978,0,0,0,0,100,0), +(@PATH,220,854.4205,-5550.039,199.2978,0,0,0,0,100,0), +(@PATH,221,857.1705,-5549.039,198.5478,0,0,0,0,100,0), +(@PATH,222,858.6705,-5548.539,198.2978,0,0,0,0,100,0), +(@PATH,223,859.4205,-5548.289,198.2978,0,0,0,0,100,0), +(@PATH,224,866.1705,-5553.289,197.2978,0,0,0,0,100,0), +(@PATH,225,867.9205,-5551.789,196.5478,0,0,0,0,100,0), +(@PATH,226,868.0256,-5551.724,196.4537,0,0,0,0,100,0), +(@PATH,227,868.5256,-5551.224,196.2037,0,0,0,0,100,0), +(@PATH,228,869.0256,-5549.724,196.2037,0,0,0,0,100,0), +(@PATH,229,870.5256,-5548.724,195.7037,0,0,0,0,100,0), +(@PATH,230,871.0256,-5548.224,195.4537,0,0,0,0,100,0), +(@PATH,231,878.5256,-5549.224,193.9537,0,0,0,0,100,0), +(@PATH,232,882.0256,-5548.474,193.2037,0,0,0,0,100,0), +(@PATH,233,885.1543,-5544.965,192.6565,0,0,0,0,100,0), +(@PATH,234,893.6543,-5542.965,193.1565,0,0,0,0,100,0), +(@PATH,235,904.4043,-5540.215,192.6565,0,0,0,0,100,0), +(@PATH,236,904.3131,-5539.99,192.9179,0,0,0,0,100,0), +(@PATH,237,904.5631,-5539.99,192.9179,0,0,0,0,100,0), +(@PATH,238,903.0631,-5537.24,193.4179,0,0,0,0,100,0), +(@PATH,239,902.3131,-5534.74,193.6679,0,0,0,0,100,0), +(@PATH,240,900.5631,-5527.49,193.6679,0,0,0,0,100,0), +(@PATH,241,900.0631,-5525.99,193.6679,0,0,0,0,100,0), +(@PATH,242,899.5631,-5524.74,193.6679,0,0,0,0,100,0), +(@PATH,243,897.0631,-5520.49,193.6679,0,0,0,0,100,0), +(@PATH,244,896.8131,-5519.74,193.6679,0,0,0,0,100,0), +(@PATH,245,896.3131,-5518.49,194.1679,0,0,0,0,100,0), +(@PATH,246,896.1418,-5518.405,194.3107,0,0,0,0,100,0), +(@PATH,247,895.6418,-5521.655,193.5607,0,0,0,0,100,0), +(@PATH,248,895.3918,-5521.905,193.5607,0,0,0,0,100,0), +(@PATH,249,895.6418,-5523.405,193.5607,0,0,0,0,100,0), +(@PATH,250,896.1418,-5524.405,193.5607,0,0,0,0,100,0), +(@PATH,251,899.6418,-5528.655,193.5607,0,0,0,0,100,0), +(@PATH,252,902.6418,-5534.655,193.3107,0,0,0,0,100,0), +(@PATH,253,904.1418,-5536.155,193.3107,0,0,0,0,100,0), +(@PATH,254,906.0405,-5540.171,192.4591,0,0,0,0,100,0), +(@PATH,255,908.7905,-5541.171,191.7091,0,0,0,0,100,0), +(@PATH,256,912.5405,-5542.421,191.2091,0,0,0,0,100,0), +(@PATH,257,914.2905,-5543.171,190.4591,0,0,0,0,100,0), +(@PATH,258,917.2905,-5544.171,189.7091,0,0,0,0,100,0), +(@PATH,259,919.0405,-5544.921,189.2091,0,0,0,0,100,0), +(@PATH,260,921.7905,-5545.921,188.7091,0,0,0,0,100,0), +(@PATH,261,924.7905,-5546.921,188.2091,0,0,0,0,100,0), +(@PATH,262,928.2905,-5548.171,187.4591,0,0,0,0,100,0), +(@PATH,263,932.0405,-5549.421,186.7091,0,0,0,0,100,0), +(@PATH,264,936.7905,-5551.171,186.2091,0,0,0,0,100,0), +(@PATH,265,945.0405,-5554.171,185.7091,0,0,0,0,100,0), +(@PATH,266,950.5491,-5556.137,185.1519,0,0,0,0,100,0), +(@PATH,267,955.7991,-5543.637,185.4019,0,0,0,0,100,0), +(@PATH,268,955.6559,-5543.351,185.5336,0,0,0,0,100,0), +(@PATH,269,956.4059,-5541.851,185.5336,0,0,0,0,100,0), +(@PATH,270,955.9059,-5533.851,186.0336,0,0,0,0,100,0); diff --git a/sql/updates/world/2015_05_31_03_world.sql b/sql/updates/world/2015_05_31_03_world.sql new file mode 100644 index 00000000000..e786e71191c --- /dev/null +++ b/sql/updates/world/2015_05_31_03_world.sql @@ -0,0 +1,331 @@ +-- Niffelvar +SET @NPC := 105148; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=967.1079,`position_y`=-5514.231,`position_z`=185.5564 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,967.1079,-5514.231,185.5564,0,0,0,0,100,0), +(@PATH,2,973.1078,-5511.305,185.636,0,0,0,0,100,0), +(@PATH,3,974.8578,-5507.305,185.386,0,0,0,0,100,0), +(@PATH,4,975.6078,-5504.805,185.636,0,0,0,0,100,0), +(@PATH,5,977.8398,-5501.016,185.5695,0,0,0,0,100,0), +(@PATH,6,974.8398,-5498.766,185.8195,0,0,0,0,100,0), +(@PATH,7,973.0898,-5489.516,185.8195,0,0,0,0,100,0), +(@PATH,8,972.8124,-5489.434,185.8257,0,0,0,0,100,0), +(@PATH,9,972.8124,-5487.184,185.8257,0,0,0,0,100,0), +(@PATH,10,973.5624,-5487.934,186.0757,0,0,0,0,100,0), +(@PATH,11,972.8124,-5485.434,185.8257,0,0,0,0,100,0), +(@PATH,12,971.3124,-5484.934,185.8257,0,0,0,0,100,0), +(@PATH,13,959.2527,-5481.798,186.207,0,0,0,0,100,0), +(@PATH,14,959.5027,-5480.048,186.207,0,0,0,0,100,0), +(@PATH,15,959.5027,-5478.798,186.207,0,0,0,0,100,0), +(@PATH,16,958.0027,-5462.298,186.457,0,0,0,0,100,0), +(@PATH,17,957.5381,-5458.777,186.8978,0,0,0,0,100,0), +(@PATH,18,964.2881,-5450.027,187.3978,0,0,0,0,100,0), +(@PATH,19,961.7017,-5453.436,186.9576,0,0,0,0,100,0), +(@PATH,20,957.4613,-5459.008,186.8079,0,0,0,0,100,0), +(@PATH,21,956.4613,-5466.758,186.3079,0,0,0,0,100,0), +(@PATH,22,956.4613,-5470.508,186.3079,0,0,0,0,100,0), +(@PATH,23,956.4613,-5474.758,186.3079,0,0,0,0,100,0), +(@PATH,24,957.9613,-5479.008,186.0579,0,0,0,0,100,0), +(@PATH,25,959.7113,-5480.008,186.3079,0,0,0,0,100,0), +(@PATH,26,958.1059,-5479.208,186.0303,0,0,0,0,100,0), +(@PATH,27,959.8559,-5480.208,186.0303,0,0,0,0,100,0), +(@PATH,28,959.3559,-5481.958,186.0303,0,0,0,0,100,0), +(@PATH,29,972.8559,-5485.208,186.0303,0,0,0,0,100,0), +(@PATH,30,972.8259,-5487.146,185.8346,0,0,0,0,100,0), +(@PATH,31,974.8259,-5491.146,186.0846,0,0,0,0,100,0), +(@PATH,32,976.0759,-5498.646,185.5846,0,0,0,0,100,0), +(@PATH,33,976.0759,-5499.646,185.5846,0,0,0,0,100,0), +(@PATH,34,976.5709,-5504.877,185.3654,0,0,0,0,100,0), +(@PATH,35,975.0709,-5507.127,185.3654,0,0,0,0,100,0), +(@PATH,36,972.8794,-5511.677,185.5527,0,0,0,0,100,0), +(@PATH,37,967.6294,-5515.427,185.5527,0,0,0,0,100,0), +(@PATH,38,966.8794,-5515.927,185.8027,0,0,0,0,100,0), +(@PATH,39,959.2223,-5519.772,185.9895,0,0,0,0,100,0), +(@PATH,40,955.4723,-5544.022,185.2395,0,0,0,0,100,0), +(@PATH,41,953.2723,-5554.739,185.2725,0,0,0,0,100,0), +(@PATH,42,952.5223,-5569.739,185.5225,0,0,0,0,100,0), +(@PATH,43,951.5223,-5593.239,186.0225,0,0,0,0,100,0), +(@PATH,44,951.3095,-5596.067,186.5411,0,0,0,0,100,0), +(@PATH,45,952.5595,-5599.817,187.2911,0,0,0,0,100,0), +(@PATH,46,953.0595,-5601.817,188.0411,0,0,0,0,100,0), +(@PATH,47,953.8095,-5603.817,188.7911,0,0,0,0,100,0), +(@PATH,48,954.0595,-5605.317,189.2911,0,0,0,0,100,0), +(@PATH,49,955.0595,-5608.317,190.0411,0,0,0,0,100,0), +(@PATH,50,955.8095,-5611.067,190.7911,0,0,0,0,100,0), +(@PATH,51,956.3095,-5613.067,191.7911,0,0,0,0,100,0), +(@PATH,52,956.6592,-5613.156,191.987,0,0,0,0,100,0), +(@PATH,53,957.1592,-5614.906,192.987,0,0,0,0,100,0), +(@PATH,54,957.4092,-5616.656,193.987,0,0,0,0,100,0), +(@PATH,55,958.1592,-5618.156,194.487,0,0,0,0,100,0), +(@PATH,56,961.4092,-5618.906,195.487,0,0,0,0,100,0), +(@PATH,57,962.6592,-5619.156,195.987,0,0,0,0,100,0), +(@PATH,58,963.9092,-5619.156,196.237,0,0,0,0,100,0), +(@PATH,59,964.9092,-5619.156,196.487,0,0,0,0,100,0), +(@PATH,60,965.1592,-5620.406,196.987,0,0,0,0,100,0), +(@PATH,61,967.1592,-5626.406,198.987,0,0,0,0,100,0), +(@PATH,62,967.6592,-5628.906,199.987,0,0,0,0,100,0), +(@PATH,63,968.1592,-5630.906,200.737,0,0,0,0,100,0), +(@PATH,64,970.9092,-5632.156,201.237,0,0,0,0,100,0), +(@PATH,65,971.9092,-5633.156,201.487,0,0,0,0,100,0), +(@PATH,66,973.4092,-5634.406,202.237,0,0,0,0,100,0), +(@PATH,67,974.9092,-5636.156,202.737,0,0,0,0,100,0), +(@PATH,68,975.3262,-5636.579,202.8941,0,0,0,0,100,0), +(@PATH,69,977.3262,-5637.829,203.8941,0,0,0,0,100,0), +(@PATH,70,980.3262,-5640.829,204.8941,0,0,0,0,100,0), +(@PATH,71,982.3262,-5642.829,205.6441,0,0,0,0,100,0), +(@PATH,72,983.3262,-5642.829,205.6441,0,0,0,0,100,0), +(@PATH,73,984.8262,-5645.329,206.3941,0,0,0,0,100,0), +(@PATH,74,985.8262,-5646.829,207.1441,0,0,0,0,100,0), +(@PATH,75,987.3262,-5649.329,207.8941,0,0,0,0,100,0), +(@PATH,76,987.5762,-5649.829,208.1441,0,0,0,0,100,0), +(@PATH,77,986.3262,-5653.579,208.8941,0,0,0,0,100,0), +(@PATH,78,985.8262,-5655.579,209.3941,0,0,0,0,100,0), +(@PATH,79,984.5588,-5654.774,208.8808,0,0,0,0,100,0), +(@PATH,80,982.5588,-5651.274,207.3808,0,0,0,0,100,0), +(@PATH,81,981.5588,-5649.524,206.6308,0,0,0,0,100,0), +(@PATH,82,980.3088,-5647.024,206.1308,0,0,0,0,100,0), +(@PATH,83,979.3088,-5645.524,205.3808,0,0,0,0,100,0), +(@PATH,84,978.8088,-5644.774,205.3808,0,0,0,0,100,0), +(@PATH,85,977.6162,-5637.225,203.3068,0,0,0,0,100,0), +(@PATH,86,976.1162,-5636.225,202.8068,0,0,0,0,100,0), +(@PATH,87,975.1162,-5636.225,202.8068,0,0,0,0,100,0), +(@PATH,88,973.6162,-5634.725,202.0568,0,0,0,0,100,0), +(@PATH,89,971.8662,-5632.975,201.5568,0,0,0,0,100,0), +(@PATH,90,970.8662,-5631.975,201.0568,0,0,0,0,100,0), +(@PATH,91,969.8662,-5630.975,200.5568,0,0,0,0,100,0), +(@PATH,92,968.8662,-5629.975,200.0568,0,0,0,0,100,0), +(@PATH,93,967.6162,-5628.975,199.8068,0,0,0,0,100,0), +(@PATH,94,966.8662,-5628.475,199.3068,0,0,0,0,100,0), +(@PATH,95,965.6162,-5627.725,199.0568,0,0,0,0,100,0), +(@PATH,96,962.3662,-5622.975,197.5568,0,0,0,0,100,0), +(@PATH,97,961.1162,-5621.475,196.5568,0,0,0,0,100,0), +(@PATH,98,960.1162,-5618.975,195.5568,0,0,0,0,100,0), +(@PATH,99,959.3662,-5617.225,194.3068,0,0,0,0,100,0), +(@PATH,100,959.1162,-5616.975,194.3068,0,0,0,0,100,0), +(@PATH,101,956.6658,-5614.739,192.7515,0,0,0,0,100,0), +(@PATH,102,956.1658,-5612.989,191.7515,0,0,0,0,100,0), +(@PATH,103,955.6658,-5610.989,190.7515,0,0,0,0,100,0), +(@PATH,104,955.1658,-5608.989,190.0015,0,0,0,0,100,0), +(@PATH,105,954.4158,-5606.489,189.5015,0,0,0,0,100,0), +(@PATH,106,953.9158,-5604.489,189.0015,0,0,0,0,100,0), +(@PATH,107,953.4158,-5602.739,188.2515,0,0,0,0,100,0), +(@PATH,108,952.6658,-5600.739,187.7515,0,0,0,0,100,0), +(@PATH,109,952.1658,-5598.739,187.2515,0,0,0,0,100,0), +(@PATH,110,951.3818,-5595.909,186.2556,0,0,0,0,100,0), +(@PATH,111,951.6318,-5589.909,186.0056,0,0,0,0,100,0), +(@PATH,112,952.6318,-5566.159,185.5056,0,0,0,0,100,0), +(@PATH,113,953.5192,-5554.345,185.3235,0,0,0,0,100,0), +(@PATH,114,955.7692,-5541.595,185.5735,0,0,0,0,100,0), +(@PATH,115,967.0384,-5514.145,185.55,0,0,0,0,100,0), +(@PATH,116,973.2693,-5511.444,185.6359,0,0,0,0,100,0); + +SET @NPC := 105150; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=974.6565,`position_y`=-5509.989,`position_z`=185.5392 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,974.6565,-5509.989,185.5392,0,0,0,0,100,0), +(@PATH,2,974.4065,-5507.739,185.5392,0,0,0,0,100,0), +(@PATH,3,973.9065,-5504.989,185.5392,0,0,0,0,100,0), +(@PATH,4,973.9065,-5503.989,185.5392,0,0,0,0,100,0), +(@PATH,5,974.1565,-5499.239,185.7892,0,0,0,0,100,0), +(@PATH,6,975.98,-5496.141,185.963,0,0,0,0,100,0), +(@PATH,7,972.98,-5489.641,185.963,0,0,0,0,100,0), +(@PATH,8,971.23,-5487.891,185.963,0,0,0,0,100,0), +(@PATH,9,971.1218,-5487.629,186.1051,0,0,0,0,100,0), +(@PATH,10,971.6218,-5486.629,186.1051,0,0,0,0,100,0), +(@PATH,11,973.1218,-5485.129,186.1051,0,0,0,0,100,0), +(@PATH,12,973.1218,-5483.129,186.1051,0,0,0,0,100,0), +(@PATH,13,983.6218,-5478.879,186.6051,0,0,0,0,100,0), +(@PATH,14,990.8718,-5476.379,187.1051,0,0,0,0,100,0), +(@PATH,15,991.6218,-5476.129,187.1051,0,0,0,0,100,0), +(@PATH,16,994.8718,-5475.879,187.6051,0,0,0,0,100,0), +(@PATH,17,995.3718,-5475.379,188.3551,0,0,0,0,100,0), +(@PATH,18,997.1218,-5474.129,188.8551,0,0,0,0,100,0), +(@PATH,19,997.8718,-5473.379,189.8551,0,0,0,0,100,0), +(@PATH,20,999.1218,-5472.129,190.8551,0,0,0,0,100,0), +(@PATH,21,999.8718,-5471.629,191.1051,0,0,0,0,100,0), +(@PATH,22,1002.372,-5469.379,191.1051,0,0,0,0,100,0), +(@PATH,23,1003.372,-5468.629,191.1051,0,0,0,0,100,0), +(@PATH,24,1002.632,-5469.161,190.9148,0,0,0,0,100,0), +(@PATH,25,1003.632,-5468.411,191.1648,0,0,0,0,100,0), +(@PATH,26,1004.132,-5467.911,191.1648,0,0,0,0,100,0), +(@PATH,27,1005.132,-5467.161,191.1648,0,0,0,0,100,0), +(@PATH,28,1006.382,-5466.661,191.1648,0,0,0,0,100,0), +(@PATH,29,1010.132,-5464.661,188.9148,0,0,0,0,100,0), +(@PATH,30,1012.132,-5463.661,187.9148,0,0,0,0,100,0), +(@PATH,31,1013.132,-5462.911,187.4148,0,0,0,0,100,0), +(@PATH,32,1015.882,-5461.411,187.6648,0,0,0,0,100,0), +(@PATH,33,1017.039,-5460.856,186.9425,0.5515445,10000,0,0,100,0), +(@PATH,34,1016.7,-5456.105,187.2113,0,0,0,0,100,0), +(@PATH,35,1016.45,-5453.605,186.9613,0,0,0,0,100,0), +(@PATH,36,1016.45,-5452.605,187.2113,0,0,0,0,100,0), +(@PATH,37,1016.45,-5451.105,187.2113,0,0,0,0,100,0), +(@PATH,38,1016.45,-5449.355,187.4613,0,0,0,0,100,0), +(@PATH,39,1016.2,-5446.855,187.2113,0,0,0,0,100,0), +(@PATH,40,1016.2,-5445.105,187.2113,0,0,0,0,100,0), +(@PATH,41,1015.373,-5447.328,187.4116,0,0,0,0,100,0), +(@PATH,42,1015.123,-5449.328,187.4116,0,0,0,0,100,0), +(@PATH,43,1014.623,-5451.578,187.9116,0,0,0,0,100,0), +(@PATH,44,1014.623,-5452.578,187.4116,0,0,0,0,100,0), +(@PATH,45,1014.123,-5454.828,187.1616,0,0,0,0,100,0), +(@PATH,46,1013.623,-5455.328,187.1616,0,0,0,0,100,0), +(@PATH,47,1013.373,-5456.078,187.4116,0,0,0,0,100,0), +(@PATH,48,1011.623,-5457.828,187.6616,0,0,0,0,100,0), +(@PATH,49,1011.873,-5459.578,187.4116,0,0,0,0,100,0), +(@PATH,50,1011.123,-5460.078,187.4116,0,0,0,0,100,0), +(@PATH,51,1009.123,-5462.078,188.9116,0,0,0,0,100,0), +(@PATH,52,1006.373,-5464.828,190.9116,0,0,0,0,100,0), +(@PATH,53,1005.873,-5465.328,191.1616,0,0,0,0,100,0), +(@PATH,54,1004.373,-5466.578,191.1616,0,0,0,0,100,0), +(@PATH,55,1004.123,-5466.828,191.1616,0,0,0,0,100,0), +(@PATH,56,1004.131,-5466.771,191.1902,0,0,0,0,100,0), +(@PATH,57,1003.881,-5467.021,191.1902,0,0,0,0,100,0), +(@PATH,58,1001.881,-5468.771,190.9402,0,0,0,0,100,0), +(@PATH,59,999.6312,-5469.521,191.1902,0,0,0,0,100,0), +(@PATH,60,998.3812,-5469.771,191.1902,0,0,0,0,100,0), +(@PATH,61,996.6312,-5470.271,189.9402,0,0,0,0,100,0), +(@PATH,62,994.8812,-5470.521,188.6902,0,0,0,0,100,0), +(@PATH,63,993.6312,-5470.771,187.6902,0,0,0,0,100,0), +(@PATH,64,992.3812,-5471.021,186.9402,0,0,0,0,100,0), +(@PATH,65,987.6312,-5472.771,186.9402,0,0,0,0,100,0), +(@PATH,66,985.7249,-5474.454,186.639,0,0,0,0,100,0), +(@PATH,67,983.2249,-5472.954,186.639,0,0,0,0,100,0), +(@PATH,68,979.4749,-5483.204,186.139,0,0,0,0,100,0), +(@PATH,69,974.9749,-5487.704,186.139,0,0,0,0,100,0), +(@PATH,70,974.9664,-5487.976,185.8645,0,0,0,0,100,0), +(@PATH,71,973.9664,-5488.226,185.8645,0,0,0,0,100,0), +(@PATH,72,973.2164,-5489.476,185.8645,0,0,0,0,100,0), +(@PATH,73,974.7164,-5491.226,186.1145,0,0,0,0,100,0), +(@PATH,74,976.2164,-5498.726,185.6145,0,0,0,0,100,0), +(@PATH,75,977.2164,-5499.976,185.6145,0,0,0,0,100,0), +(@PATH,76,975.7164,-5501.726,185.6145,0,0,0,0,100,0), +(@PATH,77,977.8255,-5503.237,185.6753,0,0,0,0,100,0), +(@PATH,78,976.5755,-5504.737,185.4253,0,0,0,0,100,0), +(@PATH,79,973.5755,-5508.487,185.4253,0,0,0,0,100,0), +(@PATH,80,967.7015,-5515.269,185.5869,0,0,0,0,100,0), +(@PATH,81,966.7015,-5516.019,185.5869,0,0,0,0,100,0), +(@PATH,82,959.2015,-5518.019,185.8369,0,0,0,0,100,0), +(@PATH,83,958.2015,-5517.769,185.8369,0,0,0,0,100,0), +(@PATH,84,958.8292,-5518.34,185.9292,0,0,0,0,100,0), +(@PATH,85,958.0792,-5518.09,185.9292,0,0,0,0,100,0), +(@PATH,86,957.5792,-5517.84,185.9292,0,0,0,0,100,0), +(@PATH,87,956.8292,-5542.59,185.4292,0,0,0,0,100,0), +(@PATH,88,956.1285,-5549.704,185.3918,0,0,0,0,100,0), +(@PATH,89,945.8813,-5558.002,185.5929,0,0,0,0,100,0), +(@PATH,90,938.8813,-5552.252,186.0929,0,0,0,0,100,0), +(@PATH,91,932.1313,-5546.752,186.3429,0,0,0,0,100,0), +(@PATH,92,929.1313,-5544.252,187.0929,0,0,0,0,100,0), +(@PATH,93,928.7361,-5544.116,187.2318,0,0,0,0,100,0), +(@PATH,94,928.2361,-5543.616,187.4818,0,0,0,0,100,0), +(@PATH,95,925.2361,-5542.866,187.9818,0,0,0,0,100,0), +(@PATH,96,922.2361,-5542.616,188.7318,0,0,0,0,100,0), +(@PATH,97,919.2361,-5542.116,189.4818,0,0,0,0,100,0), +(@PATH,98,917.4861,-5541.866,189.7318,0,0,0,0,100,0), +(@PATH,99,914.7361,-5541.366,190.4818,0,0,0,0,100,0), +(@PATH,100,912.7361,-5540.866,191.2318,0,0,0,0,100,0), +(@PATH,101,908.7361,-5540.366,191.9818,0,0,0,0,100,0), +(@PATH,102,905.7361,-5539.866,192.4818,0,0,0,0,100,0), +(@PATH,103,905.4941,-5539.848,192.6863,0,0,0,0,100,0), +(@PATH,104,904.2441,-5539.598,192.9363,0,0,0,0,100,0), +(@PATH,105,900.2441,-5539.598,193.6863,0,0,0,0,100,0), +(@PATH,106,896.2441,-5549.598,193.9363,0,0,0,0,100,0), +(@PATH,107,894.4941,-5553.348,194.6863,0,0,0,0,100,0), +(@PATH,108,893.7441,-5555.348,195.4363,0,0,0,0,100,0), +(@PATH,109,892.7441,-5557.098,195.9363,0,0,0,0,100,0), +(@PATH,110,892.6005,-5557.364,196.3071,0,0,0,0,100,0), +(@PATH,111,892.1005,-5558.864,196.5571,0,0,0,0,100,0), +(@PATH,112,893.3505,-5560.864,197.0571,0,0,0,0,100,0), +(@PATH,113,893.3505,-5562.614,197.8071,0,0,0,0,100,0), +(@PATH,114,892.3505,-5565.364,198.8071,0,0,0,0,100,0), +(@PATH,115,892.3505,-5571.114,200.8071,0,0,0,0,100,0), +(@PATH,116,892.1161,-5571.454,201.2125,0,0,0,0,100,0), +(@PATH,117,892.1161,-5572.454,201.4625,0,0,0,0,100,0), +(@PATH,118,892.1161,-5574.954,202.2125,0,0,0,0,100,0), +(@PATH,119,891.8661,-5577.204,202.4625,0,0,0,0,100,0), +(@PATH,120,890.1161,-5579.704,204.2125,0,0,0,0,100,0), +(@PATH,121,889.3117,-5579.264,203.9281,0,0,0,0,100,0), +(@PATH,122,889.3117,-5576.264,202.6781,0,0,0,0,100,0), +(@PATH,123,889.3117,-5574.764,202.6781,0,0,0,0,100,0), +(@PATH,124,889.3117,-5573.764,202.4281,0,0,0,0,100,0), +(@PATH,125,889.3117,-5572.764,201.9281,0,0,0,0,100,0), +(@PATH,126,889.3117,-5572.014,201.4281,0,0,0,0,100,0), +(@PATH,127,892.8117,-5563.514,198.1781,0,0,0,0,100,0), +(@PATH,128,892.3117,-5562.764,197.9281,0,0,0,0,100,0), +(@PATH,129,892.3117,-5561.014,197.1781,0,0,0,0,100,0), +(@PATH,130,892.5617,-5560.014,196.9281,0,0,0,0,100,0), +(@PATH,131,892.4607,-5560.639,196.9403,0,0,0,0,100,0), +(@PATH,132,892.7107,-5559.639,196.6903,0,0,0,0,100,0), +(@PATH,133,892.4607,-5558.639,196.1903,0,0,0,0,100,0), +(@PATH,134,895.4607,-5559.639,196.4403,0,0,0,0,100,0), +(@PATH,135,900.2107,-5560.139,196.1903,0,0,0,0,100,0), +(@PATH,136,901.2107,-5558.389,195.4403,0,0,0,0,100,0), +(@PATH,137,902.2107,-5556.639,194.6903,0,0,0,0,100,0), +(@PATH,138,904.2107,-5553.389,194.1903,0,0,0,0,100,0), +(@PATH,139,906.7107,-5549.139,193.4403,0,0,0,0,100,0), +(@PATH,140,908.2107,-5546.639,192.6903,0,0,0,0,100,0), +(@PATH,141,909.7107,-5544.139,191.9403,0,0,0,0,100,0), +(@PATH,142,911.7107,-5540.639,191.4403,0,0,0,0,100,0), +(@PATH,143,912.1329,-5540.756,191.1056,0,0,0,0,100,0), +(@PATH,144,912.8829,-5539.006,191.3556,0,0,0,0,100,0), +(@PATH,145,915.6329,-5540.506,190.3556,0,0,0,0,100,0), +(@PATH,146,917.3829,-5541.506,189.8556,0,0,0,0,100,0), +(@PATH,147,919.1329,-5542.506,189.1056,0,0,0,0,100,0), +(@PATH,148,922.6329,-5544.506,188.3556,0,0,0,0,100,0), +(@PATH,149,926.1329,-5546.506,187.8556,0,0,0,0,100,0), +(@PATH,150,929.3829,-5548.506,187.1056,0,0,0,0,100,0), +(@PATH,151,933.6329,-5550.506,186.6056,0,0,0,0,100,0), +(@PATH,152,942.3829,-5555.506,185.8556,0,0,0,0,100,0), +(@PATH,153,942.5719,-5555.481,185.6846,0,0,0,0,100,0), +(@PATH,154,943.5719,-5555.981,185.6846,0,0,0,0,100,0), +(@PATH,155,958.8038,-5539.903,185.5616,0,0,0,0,100,0); + +DELETE FROM `creature_text` WHERE `entry` IN (32573, 23656); +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextID`, `comment`) VALUES +(32573, 0, 0, '%s cries out and writhes in agony before passing out.', 16, 0, 100, 15, 0, 0, 23534, 'Valgarde Captive to Dragonflayer Rune-Seer'), +(23656, 0, 0, 'Good! Good! You are still alive. More fun for me!', 12, 0, 100, 1, 0, 0, 23538, 'Dragonflayer Rune-Seer to Valgarde Captive'), +(23656, 0, 1, 'These outsiders are weak and easily crushed.', 12, 0, 100, 1, 0, 0, 23536, 'Dragonflayer Rune-Seer to 0'), +(23656, 0, 2, 'They are hardier than I would expect for their size.', 12, 0, 100, 1, 0, 0, 23539, 'Dragonflayer Rune-Seer to Valgarde Captive'); + +-- Dragonflayer Rune-Seer SAI +SET @GUID := -105309; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=23656; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@GUID,0,0,0,1,0,100,0,2000,5000,30000,50000,80,10530900,2,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonflayer Rune-Seer - Out of Combat - Run Script"); + +-- Dragonflayer Rune-Seer SAI +SET @GUID := -105315; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=23656; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@GUID,0,0,0,1,0,100,0,2000,5000,30000,50000,80,10530900,2,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonflayer Rune-Seer - Out of Combat - Run Script"); + +-- Dragonflayer Rune-Seer SAI +SET @GUID := -105316; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=23656; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@GUID,0,0,0,1,0,100,0,2000,5000,30000,50000,80,10530900,2,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonflayer Rune-Seer - Out of Combat - Run Script"); + +-- Actionlist SAI +SET @ENTRY := 10530900; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,28,5384,0,0,0,0,0,19,32573,20,0,0,0,0,0,"Dragonflayer Rune-Seer - On Script - Remove Aura 'Feign Death'"), +(@ENTRY,9,1,0,0,0,100,0,3000,3000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonflayer Rune-Seer - On Script - Say Line 0"), +(@ENTRY,9,2,0,0,0,100,0,2000,2000,0,0,11,43971,0,0,0,0,0,19,32573,20,0,0,0,0,0,"Dragonflayer Rune-Seer - On Script - Cast 'Incinerate'"); + +-- Valgarde Captive SAI +SET @ENTRY := 32573; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,1,8,0,100,0,43971,0,0,0,11,5384,2,0,0,0,0,1,0,0,0,0,0,0,0,"Valgarde Captive - On Spellhit 'Incinerate' - Cast 'Feign Death'"), +(@ENTRY,0,1,0,61,0,100,0,43971,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Valgarde Captive - On Spellhit 'Incinerate' - Say Line 0"); diff --git a/sql/updates/world/2015_05_31_04_world.sql b/sql/updates/world/2015_05_31_04_world.sql new file mode 100644 index 00000000000..94785d6d356 --- /dev/null +++ b/sql/updates/world/2015_05_31_04_world.sql @@ -0,0 +1,1179 @@ +-- Howling Fjord - Part VI +SET @NPC := 105137; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=816.3098,`position_y`=-5566.948,`position_z`=220.0096 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,816.3098,-5566.948,220.0096,0,0,0,0,100,0), +(@PATH,2,815.8098,-5563.948,219.5096,0,0,0,0,100,0), +(@PATH,3,815.5598,-5560.948,218.7596,0,0,0,0,100,0), +(@PATH,4,815.3098,-5557.948,218.2596,0,0,0,0,100,0), +(@PATH,5,815.0598,-5554.948,217.2596,0,0,0,0,100,0), +(@PATH,6,814.8098,-5551.948,216.5096,0,0,0,0,100,0), +(@PATH,7,814.8098,-5549.948,215.2596,0,0,0,0,100,0), +(@PATH,8,814.5598,-5546.948,214.5096,0,0,0,0,100,0), +(@PATH,9,814.3098,-5542.198,214.0096,0,0,0,0,100,0), +(@PATH,10,812.1687,-5520.625,213.7769,0,0,0,0,100,0), +(@PATH,11,803.1687,-5520.125,214.5269,0,0,0,0,100,0), +(@PATH,12,801.1687,-5519.875,215.2769,0,0,0,0,100,0), +(@PATH,13,799.1687,-5519.875,216.0269,0,0,0,0,100,0), +(@PATH,14,798.1687,-5519.875,216.5269,0,0,0,0,100,0), +(@PATH,15,796.4187,-5519.625,217.5269,0,0,0,0,100,0), +(@PATH,16,794.4187,-5519.625,218.2769,0,0,0,0,100,0), +(@PATH,17,782.4187,-5518.625,217.5269,0,0,0,0,100,0), +(@PATH,18,781.7379,-5518.72,218.0693,0,0,0,0,100,0), +(@PATH,19,769.2379,-5520.97,218.8193,0,0,0,0,100,0), +(@PATH,20,767.2379,-5520.97,219.8193,0,0,0,0,100,0), +(@PATH,21,765.2379,-5521.47,220.3193,0,0,0,0,100,0), +(@PATH,22,763.4879,-5521.72,221.3193,0,0,0,0,100,0), +(@PATH,23,757.4879,-5522.72,222.3193,0,0,0,0,100,0), +(@PATH,24,758.4562,-5522.488,221.754,0,0,0,0,100,0), +(@PATH,25,764.2062,-5521.488,220.754,0,0,0,0,100,0), +(@PATH,26,766.2062,-5521.238,220.004,0,0,0,0,100,0), +(@PATH,27,768.2062,-5520.988,219.504,0,0,0,0,100,0), +(@PATH,28,769.9562,-5520.738,218.254,0,0,0,0,100,0), +(@PATH,29,774.9562,-5519.988,217.754,0,0,0,0,100,0), +(@PATH,30,781.9653,-5518.806,217.9444,0,0,0,0,100,0), +(@PATH,31,785.9653,-5519.056,218.6944,0,0,0,0,100,0), +(@PATH,32,795.7153,-5519.806,217.9444,0,0,0,0,100,0), +(@PATH,33,797.7153,-5519.806,217.1944,0,0,0,0,100,0), +(@PATH,34,798.7153,-5519.806,216.6944,0,0,0,0,100,0), +(@PATH,35,799.7153,-5520.056,215.9444,0,0,0,0,100,0), +(@PATH,36,801.7153,-5520.056,215.4444,0,0,0,0,100,0), +(@PATH,37,803.7153,-5520.056,214.6944,0,0,0,0,100,0), +(@PATH,38,806.7153,-5520.056,213.9444,0,0,0,0,100,0), +(@PATH,39,812.3559,-5520.624,213.6841,0,0,0,0,100,0), +(@PATH,40,814.3559,-5546.374,214.4341,0,0,0,0,100,0), +(@PATH,41,814.8559,-5550.374,215.1841,0,0,0,0,100,0), +(@PATH,42,815.1059,-5553.374,216.6841,0,0,0,0,100,0), +(@PATH,43,815.1059,-5555.374,217.6841,0,0,0,0,100,0), +(@PATH,44,815.3559,-5558.374,218.4341,0,0,0,0,100,0), +(@PATH,45,815.6059,-5561.374,219.1841,0,0,0,0,100,0), +(@PATH,46,816.1059,-5565.374,219.6841,0,0,0,0,100,0), +(@PATH,47,816.2936,-5565.591,219.9167,0,0,0,0,100,0), +(@PATH,48,816.5436,-5567.091,220.4167,0,0,0,0,100,0), +(@PATH,49,819.0436,-5572.591,221.1667,0,0,0,0,100,0), +(@PATH,50,820.7936,-5576.091,221.6667,0,0,0,0,100,0), +(@PATH,51,823.0436,-5580.591,222.1667,0,0,0,0,100,0), +(@PATH,52,825.5436,-5585.591,222.9167,0,0,0,0,100,0), +(@PATH,53,826.7936,-5588.341,223.6667,0,0,0,0,100,0), +(@PATH,54,828.7936,-5591.841,224.4167,0,0,0,0,100,0), +(@PATH,55,832.8285,-5600.151,224.2254,0,0,0,0,100,0), +(@PATH,56,835.0785,-5602.401,223.4754,0,0,0,0,100,0), +(@PATH,57,837.8285,-5605.151,222.9754,0,0,0,0,100,0), +(@PATH,58,842.0785,-5609.401,222.2254,0,0,0,0,100,0), +(@PATH,59,845.5785,-5613.151,221.7254,0,0,0,0,100,0), +(@PATH,60,847.8285,-5615.151,221.2254,0,0,0,0,100,0), +(@PATH,61,850.3285,-5617.651,220.4754,0,0,0,0,100,0), +(@PATH,62,852.3285,-5619.901,219.7254,0,0,0,0,100,0), +(@PATH,63,855.3285,-5622.651,219.2254,0,0,0,0,100,0), +(@PATH,64,858.8285,-5626.401,218.4754,0,0,0,0,100,0), +(@PATH,65,865.0785,-5632.651,219.2254,0,0,0,0,100,0), +(@PATH,66,865.2173,-5632.964,219.2449,0,0,0,0,100,0), +(@PATH,67,865.9673,-5633.464,219.2449,0,0,0,0,100,0), +(@PATH,68,870.4673,-5635.464,219.9949,0,0,0,0,100,0), +(@PATH,69,892.4673,-5644.714,220.7449,0,0,0,0,100,0), +(@PATH,70,897.9673,-5646.964,221.4949,0,0,0,0,100,0), +(@PATH,71,894.5841,-5645.571,221.1267,0,0,0,0,100,0), +(@PATH,72,890.8341,-5644.071,220.3767,0,0,0,0,100,0), +(@PATH,73,887.0841,-5642.321,219.8767,0,0,0,0,100,0), +(@PATH,74,880.8341,-5639.821,220.1267,0,0,0,0,100,0), +(@PATH,75,867.0841,-5634.071,219.3767,0,0,0,0,100,0), +(@PATH,76,866.8998,-5633.889,219.3101,0,0,0,0,100,0), +(@PATH,77,865.6498,-5633.139,219.3101,0,0,0,0,100,0), +(@PATH,78,862.8998,-5630.389,218.8101,0,0,0,0,100,0), +(@PATH,79,855.1498,-5622.639,219.3101,0,0,0,0,100,0), +(@PATH,80,851.6498,-5619.139,220.0601,0,0,0,0,100,0), +(@PATH,81,849.6498,-5617.139,220.8101,0,0,0,0,100,0), +(@PATH,82,846.8998,-5614.389,221.5601,0,0,0,0,100,0), +(@PATH,83,844.8998,-5612.139,221.8101,0,0,0,0,100,0), +(@PATH,84,840.6498,-5607.889,222.5601,0,0,0,0,100,0), +(@PATH,85,836.3998,-5603.639,223.3101,0,0,0,0,100,0), +(@PATH,86,834.1498,-5601.389,223.8101,0,0,0,0,100,0), +(@PATH,87,832.7264,-5599.951,224.1247,0,0,0,0,100,0), +(@PATH,88,830.9764,-5596.451,224.8747,0,0,0,0,100,0), +(@PATH,89,828.2264,-5590.951,224.1247,0,0,0,0,100,0), +(@PATH,90,825.9764,-5586.451,223.3747,0,0,0,0,100,0), +(@PATH,91,825.2264,-5584.701,222.6247,0,0,0,0,100,0), +(@PATH,92,822.7264,-5579.701,221.8747,0,0,0,0,100,0), +(@PATH,93,819.9764,-5574.201,221.6247,0,0,0,0,100,0), +(@PATH,94,818.2264,-5570.701,220.8747,0,0,0,0,100,0); + +SET @NPC := 105145; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=944.9855,`position_y`=-5700.701,`position_z`=225.9025 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,944.9855,-5700.701,225.9025,0,0,0,0,100,0), +(@PATH,2,949.9855,-5699.701,225.6525,0,0,0,0,100,0), +(@PATH,3,955.4855,-5698.701,226.1525,0,0,0,0,100,0), +(@PATH,4,965.2653,-5696.642,225.4637,0,0,0,0,100,0), +(@PATH,5,973.7653,-5693.142,224.9637,0,0,0,0,100,0), +(@PATH,6,976.5153,-5692.142,224.2137,0,0,0,0,100,0), +(@PATH,7,980.2653,-5690.642,223.4637,0,0,0,0,100,0), +(@PATH,8,984.0153,-5689.142,222.7137,0,0,0,0,100,0), +(@PATH,9,1000.515,-5682.892,222.2137,0,0,0,0,100,0), +(@PATH,10,1005.265,-5681.142,221.4637,0,0,0,0,100,0), +(@PATH,11,1008.859,-5679.514,221.7022,0,0,0,0,100,0), +(@PATH,12,1012.109,-5677.514,222.4522,0,0,0,0,100,0), +(@PATH,13,1016.359,-5674.764,223.2022,0,0,0,0,100,0), +(@PATH,14,1024.859,-5669.514,222.4522,0,0,0,0,100,0), +(@PATH,15,1033.859,-5664.014,222.9522,0,0,0,0,100,0), +(@PATH,16,1039.109,-5660.764,223.7022,0,0,0,0,100,0), +(@PATH,17,1046.609,-5656.014,222.9522,0,0,0,0,100,0), +(@PATH,18,1047.552,-5655.633,223.0285,0,0,0,0,100,0), +(@PATH,19,1044.052,-5657.633,223.5285,0,0,0,0,100,0), +(@PATH,20,1034.052,-5663.883,223.0285,0,0,0,0,100,0), +(@PATH,21,1030.552,-5666.133,222.5285,0,0,0,0,100,0), +(@PATH,22,1023.302,-5670.633,223.0285,0,0,0,0,100,0), +(@PATH,23,1011.302,-5677.883,222.2785,0,0,0,0,100,0), +(@PATH,24,1011.139,-5678.294,222.4689,0,0,0,0,100,0), +(@PATH,25,1008.389,-5679.794,221.7189,0,0,0,0,100,0), +(@PATH,26,999.139,-5683.544,222.7189,0,0,0,0,100,0), +(@PATH,27,983.639,-5689.294,223.2189,0,0,0,0,100,0), +(@PATH,28,978.889,-5691.294,223.7189,0,0,0,0,100,0), +(@PATH,29,976.139,-5692.294,224.4689,0,0,0,0,100,0), +(@PATH,30,972.389,-5693.794,225.2189,0,0,0,0,100,0), +(@PATH,31,964.9979,-5696.799,225.8529,0,0,0,0,100,0), +(@PATH,32,961.2479,-5697.549,226.1029,0,0,0,0,100,0), +(@PATH,33,949.7479,-5699.799,225.6029,0,0,0,0,100,0), +(@PATH,34,945.7479,-5700.549,226.1029,0,0,0,0,100,0), +(@PATH,35,942.7479,-5701.049,226.6029,0,0,0,0,100,0); + +SET @NPC := 115426; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=239.7068,`position_y`=-5681.223,`position_z`=129.7739 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,239.7068,-5681.223,129.7739,0,0,0,0,100,0), +(@PATH,2,247.9568,-5683.223,127.5239,0,0,0,0,100,0), +(@PATH,3,252.2291,-5684.197,125.1225,0,0,0,0,100,0), +(@PATH,4,256.2291,-5689.697,120.1225,0,0,0,0,100,0), +(@PATH,5,262.9791,-5699.697,114.1225,0,0,0,0,100,0), +(@PATH,6,264.9791,-5702.447,113.6225,0,0,0,0,100,0), +(@PATH,7,265.1768,-5702.77,113.3388,0,0,0,0,100,0), +(@PATH,8,266.9268,-5705.27,113.3388,0,0,0,0,100,0), +(@PATH,9,268.1768,-5706.52,112.5888,0,0,0,0,100,0), +(@PATH,10,269.1768,-5707.27,111.8388,0,0,0,0,100,0), +(@PATH,11,269.6768,-5708.02,111.3388,0,0,0,0,100,0), +(@PATH,12,274.2107,-5711.711,111.0118,0,0,0,0,100,0), +(@PATH,13,283.9607,-5709.711,109.5118,0,0,0,0,100,0), +(@PATH,14,290.4607,-5707.961,107.7618,0,0,0,0,100,0), +(@PATH,15,293.2107,-5707.711,106.7618,0,0,0,0,100,0), +(@PATH,16,297.7107,-5706.711,105.5118,0,0,0,0,100,0), +(@PATH,17,302.9607,-5705.461,103.2618,0,0,0,0,100,0), +(@PATH,18,305.0286,-5705.116,102.8382,0,0,0,0,100,0), +(@PATH,19,305.5286,-5706.366,102.5882,0,0,0,0,100,0), +(@PATH,20,306.0286,-5707.866,102.5882,0,0,0,0,100,0), +(@PATH,21,306.5286,-5709.366,102.3382,0,0,0,0,100,0), +(@PATH,22,308.2786,-5713.116,99.83823,0,0,0,0,100,0), +(@PATH,23,309.0747,-5715.212,98.81648,0,0,0,0,100,0), +(@PATH,24,307.3247,-5716.712,98.31648,0,0,0,0,100,0), +(@PATH,25,303.3247,-5720.212,96.81648,0,0,0,0,100,0), +(@PATH,26,298.3247,-5724.212,96.56648,0,0,0,0,100,0), +(@PATH,27,292.8247,-5728.962,97.06648,0,0,0,0,100,0), +(@PATH,28,290.8247,-5730.462,97.06648,0,0,0,0,100,0), +(@PATH,29,288.426,-5732.716,96.61787,0,0,0,0,100,0), +(@PATH,30,287.926,-5740.216,95.11787,0,0,0,0,100,0), +(@PATH,31,287.926,-5742.216,95.11787,0,0,0,0,100,0), +(@PATH,32,287.926,-5744.216,94.11787,0,0,0,0,100,0), +(@PATH,33,287.676,-5746.216,93.11787,0,0,0,0,100,0), +(@PATH,34,287.2972,-5755.464,89.91927,0,0,0,0,100,0), +(@PATH,35,288.2972,-5758.714,88.66927,0,0,0,0,100,0), +(@PATH,36,291.5472,-5767.964,86.41927,0,0,0,0,100,0), +(@PATH,37,297.7972,-5786.214,82.41927,0,0,0,0,100,0), +(@PATH,38,300.7485,-5793.833,82.27162,0,0,0,0,100,0), +(@PATH,39,301.2485,-5794.833,82.27162,0,0,0,0,100,0), +(@PATH,40,309.7736,-5808.727,82.54448,0,0,0,0,100,0), +(@PATH,41,309.5236,-5809.977,82.54448,0,0,0,0,100,0), +(@PATH,42,308.0236,-5815.977,82.54448,0,0,0,0,100,0), +(@PATH,43,305.2736,-5827.477,83.04448,0,0,0,0,100,0), +(@PATH,44,305.0289,-5827.861,83.46511,0,0,0,0,100,0), +(@PATH,45,304.7789,-5828.861,83.46511,0,0,0,0,100,0), +(@PATH,46,296.7789,-5831.861,83.71511,0,0,0,0,100,0), +(@PATH,47,291.7789,-5833.361,83.71511,0,0,0,0,100,0), +(@PATH,48,284.5289,-5836.111,83.96511,0,0,0,0,100,0), +(@PATH,49,281.5289,-5837.111,84.46511,0,0,0,0,100,0), +(@PATH,50,281.3865,-5837.156,84.54872,0,0,0,0,100,0), +(@PATH,51,283.8865,-5836.406,84.04872,0,0,0,0,100,0), +(@PATH,52,291.1365,-5833.656,83.79872,0,0,0,0,100,0), +(@PATH,53,296.8865,-5831.906,83.79872,0,0,0,0,100,0), +(@PATH,54,309.6002,-5809.838,82.32693,0,0,0,0,100,0), +(@PATH,55,309.8502,-5808.588,82.32693,0,0,0,0,100,0), +(@PATH,56,301.3502,-5794.588,82.07693,0,0,0,0,100,0), +(@PATH,57,287.1544,-5755.315,89.9707,0,0,0,0,100,0), +(@PATH,58,287.6544,-5746.315,92.9707,0,0,0,0,100,0), +(@PATH,59,287.6544,-5745.315,93.4707,0,0,0,0,100,0), +(@PATH,60,287.9044,-5742.065,95.2207,0,0,0,0,100,0), +(@PATH,61,287.9044,-5740.315,94.9707,0,0,0,0,100,0), +(@PATH,62,288.3708,-5732.422,96.87263,0,0,0,0,100,0), +(@PATH,63,290.8708,-5730.672,97.12263,0,0,0,0,100,0), +(@PATH,64,292.1208,-5729.422,97.12263,0,0,0,0,100,0), +(@PATH,65,298.3708,-5724.422,96.62263,0,0,0,0,100,0), +(@PATH,66,303.3708,-5720.172,96.87263,0,0,0,0,100,0), +(@PATH,67,307.3708,-5716.672,98.37263,0,0,0,0,100,0), +(@PATH,68,309.1218,-5715.098,99.18263,0,0,0,0,100,0), +(@PATH,69,308.3718,-5713.098,99.68263,0,0,0,0,100,0), +(@PATH,70,306.6218,-5709.348,102.1826,0,0,0,0,100,0), +(@PATH,71,306.1218,-5707.848,102.6826,0,0,0,0,100,0), +(@PATH,72,305.6218,-5706.348,102.6826,0,0,0,0,100,0), +(@PATH,73,305.2986,-5706.288,102.8929,0,0,0,0,100,0), +(@PATH,74,304.7986,-5705.038,103.1429,0,0,0,0,100,0), +(@PATH,75,303.0486,-5705.538,103.3929,0,0,0,0,100,0), +(@PATH,76,297.5486,-5706.788,105.3929,0,0,0,0,100,0), +(@PATH,77,293.2986,-5707.538,106.6429,0,0,0,0,100,0), +(@PATH,78,290.5486,-5708.288,107.8929,0,0,0,0,100,0), +(@PATH,79,284.0486,-5709.538,109.6429,0,0,0,0,100,0), +(@PATH,80,275.2986,-5711.538,110.8929,0,0,0,0,100,0), +(@PATH,81,274.9447,-5711.463,111.1453,0,0,0,0,100,0), +(@PATH,82,273.9447,-5711.713,111.1453,0,0,0,0,100,0), +(@PATH,83,269.9447,-5708.213,111.3953,0,0,0,0,100,0), +(@PATH,84,269.1947,-5707.463,111.8953,0,0,0,0,100,0), +(@PATH,85,268.1947,-5706.463,112.6453,0,0,0,0,100,0), +(@PATH,86,267.1947,-5705.463,113.3953,0,0,0,0,100,0), +(@PATH,87,268.0941,-5706.162,112.8736,0,0,0,0,100,0), +(@PATH,88,267.0941,-5705.412,113.6236,0,0,0,0,100,0), +(@PATH,89,266.5941,-5704.912,113.6236,0,0,0,0,100,0), +(@PATH,90,264.8441,-5702.412,113.6236,0,0,0,0,100,0), +(@PATH,91,262.8441,-5699.662,114.1236,0,0,0,0,100,0), +(@PATH,92,256.0941,-5689.662,120.1236,0,0,0,0,100,0); + +SET @NPC := 115450; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=140.9981,`position_y`=-5773.847,`position_z`=19.01464 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,140.9981,-5773.847,19.01464,0,0,0,0,100,0), +(@PATH,2,149.7481,-5767.347,26.26464,0,0,0,0,100,0), +(@PATH,3,152.0051,-5765.768,26.5225,0,0,0,0,100,0), +(@PATH,4,155.5753,-5770.291,26.51275,0,0,0,0,100,0), +(@PATH,5,153.3253,-5772.041,26.51275,0,0,0,0,100,0), +(@PATH,6,171.1161,-5783.031,37.94518,0,0,0,0,100,0), +(@PATH,7,172.1161,-5782.281,38.19518,0,0,0,0,100,0), +(@PATH,8,173.3661,-5784.281,38.19518,0,0,0,0,100,0), +(@PATH,9,174.3661,-5785.781,38.19518,0,0,0,0,100,0), +(@PATH,10,178.1161,-5791.031,38.19518,0,0,0,0,100,0), +(@PATH,11,178.3661,-5791.281,38.44518,0,0,0,0,100,0), +(@PATH,12,179.1161,-5792.281,38.44518,0,0,0,0,100,0), +(@PATH,13,179.6161,-5793.031,38.69518,0,0,0,0,100,0), +(@PATH,14,183.2137,-5797.427,38.54925,0,0,0,0,100,0), +(@PATH,15,188.9637,-5794.427,38.79925,0,0,0,0,100,0), +(@PATH,16,194.2137,-5791.427,38.79925,0,0,0,0,100,0), +(@PATH,17,197.9637,-5789.927,38.79925,0,0,0,0,100,0), +(@PATH,18,201.9637,-5787.677,38.79925,0,0,0,0,100,0), +(@PATH,19,203.2137,-5787.177,38.79925,0,0,0,0,100,0), +(@PATH,20,203.3189,-5787.2,38.92299,0,0,0,0,100,0), +(@PATH,21,205.5689,-5785.95,38.92299,0,0,0,0,100,0), +(@PATH,22,209.3189,-5789.2,38.92299,0,0,0,0,100,0), +(@PATH,23,210.2086,-5789.723,38.42034,0,0,0,0,100,0), +(@PATH,24,205.3679,-5786.115,38.86655,0,0,0,0,100,0), +(@PATH,25,203.1179,-5787.115,38.86655,0,0,0,0,100,0), +(@PATH,26,202.1179,-5787.615,38.86655,0,0,0,0,100,0), +(@PATH,27,198.1179,-5789.865,38.86655,0,0,0,0,100,0), +(@PATH,28,194.3679,-5791.865,38.61655,0,0,0,0,100,0), +(@PATH,29,188.8679,-5794.365,38.61655,0,0,0,0,100,0), +(@PATH,30,183.0873,-5797.504,38.70325,0,0,0,0,100,0), +(@PATH,31,179.8373,-5793.004,38.70325,0,0,0,0,100,0), +(@PATH,32,178.5873,-5791.504,38.70325,0,0,0,0,100,0), +(@PATH,33,174.5873,-5786.004,38.20325,0,0,0,0,100,0), +(@PATH,34,171.8038,-5782.26,38.09947,0,0,0,0,100,0), +(@PATH,35,170.8038,-5783.01,38.09947,0,0,0,0,100,0), +(@PATH,36,164.439,-5786.881,32.69273,0,0,0,0,100,0), +(@PATH,37,163.439,-5786.631,32.69273,0,0,0,0,100,0), +(@PATH,38,159.4063,-5785.582,32.43161,0,0,0,0,100,0), +(@PATH,39,153.9063,-5777.832,26.43161,0,0,0,0,100,0), +(@PATH,40,151.3135,-5774.021,26.20842,0,0,0,0,100,0), +(@PATH,41,153.5635,-5772.271,26.45842,0,0,0,0,100,0), +(@PATH,42,155.4806,-5770.13,26.60295,0,0,0,0,100,0), +(@PATH,43,151.7648,-5765.865,26.50707,0,0,0,0,100,0), +(@PATH,44,149.7648,-5767.365,26.50707,0,0,0,0,100,0), +(@PATH,45,140.7411,-5774.141,19.1757,0,0,0,0,100,0), +(@PATH,46,137.4911,-5776.641,19.1757,0,0,0,0,100,0), +(@PATH,47,132.9596,-5779.951,18.79716,0,0,0,0,100,0), +(@PATH,48,129.4596,-5782.451,15.79716,0,0,0,0,100,0), +(@PATH,49,126.1635,-5784.941,13.47462,0,0,0,0,100,0), +(@PATH,50,124.4135,-5786.191,13.47462,0,0,0,0,100,0), +(@PATH,51,124.4538,-5786.278,13.20907,0,0,0,0,100,0); + +SET @NPC := 115446; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=334.0038,`position_y`=-5775.901,`position_z`=267.0645 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,334.0038,-5775.901,267.0645,0,0,0,0,100,0), +(@PATH,2,312.5038,-5755.151,267.5645,0,0,0,0,100,0), +(@PATH,3,309.0038,-5751.901,268.0645,0,0,0,0,100,0), +(@PATH,4,306.2538,-5748.901,268.5645,0,0,0,0,100,0), +(@PATH,5,286.969,-5721.298,280.3217,0,0,0,0,100,0), +(@PATH,6,283.219,-5720.548,280.0717,0,0,0,0,100,0), +(@PATH,7,274.969,-5718.548,280.5717,0,0,0,0,100,0), +(@PATH,8,272.969,-5716.298,281.0717,0,0,0,0,100,0), +(@PATH,9,266.969,-5712.798,281.3217,0,0,0,0,100,0), +(@PATH,10,266.719,-5712.548,281.5717,0,0,0,0,100,0), +(@PATH,11,261.219,-5710.298,282.0717,0,0,0,0,100,0), +(@PATH,12,258.469,-5709.298,282.0717,0,0,0,0,100,0), +(@PATH,13,256.219,-5708.548,281.8217,0,0,0,0,100,0), +(@PATH,14,244.2268,-5703.188,283.5253,0,0,0,0,100,0), +(@PATH,15,211.0123,-5688.659,286.9947,0,0,0,0,100,0), +(@PATH,16,209.2623,-5690.159,287.2447,0,0,0,0,100,0), +(@PATH,17,206.7623,-5692.909,286.7447,0,0,0,0,100,0), +(@PATH,18,203.5123,-5696.159,286.7447,0,0,0,0,100,0), +(@PATH,19,198.4904,-5700.964,286.617,0,0,0,0,100,0), +(@PATH,20,192.7404,-5701.464,286.617,0,0,0,0,100,0), +(@PATH,21,190.7404,-5701.464,286.617,0,0,0,0,100,0), +(@PATH,22,180.7404,-5702.214,286.617,0,0,0,0,100,0), +(@PATH,23,178.9904,-5702.214,286.367,0,0,0,0,100,0), +(@PATH,24,150.003,-5703.872,285.9841,0,0,0,0,100,0), +(@PATH,25,153.253,-5703.872,285.9841,0,0,0,0,100,0), +(@PATH,26,156.503,-5703.622,285.7341,0,0,0,0,100,0), +(@PATH,27,164.503,-5703.372,285.7341,0,0,0,0,100,0), +(@PATH,28,166.003,-5703.122,285.7341,0,0,0,0,100,0), +(@PATH,29,173.2124,-5702.439,286.3379,0,0,0,0,100,0), +(@PATH,30,178.9624,-5702.189,286.3379,0,0,0,0,100,0), +(@PATH,31,180.4624,-5702.189,286.5879,0,0,0,0,100,0), +(@PATH,32,190.7124,-5701.689,286.5879,0,0,0,0,100,0), +(@PATH,33,192.7124,-5701.689,286.5879,0,0,0,0,100,0), +(@PATH,34,198.4325,-5701.038,286.6688,0,0,0,0,100,0), +(@PATH,35,203.4325,-5696.288,286.6688,0,0,0,0,100,0), +(@PATH,36,206.6825,-5692.788,286.6688,0,0,0,0,100,0), +(@PATH,37,209.1825,-5690.288,286.6688,0,0,0,0,100,0), +(@PATH,38,211.0664,-5688.54,287.0768,0,0,0,0,100,0), +(@PATH,39,244.3347,-5703.374,283.1249,0,0,0,0,100,0), +(@PATH,40,257.0847,-5707.874,281.6249,0,0,0,0,100,0), +(@PATH,41,258.5847,-5709.374,282.1249,0,0,0,0,100,0), +(@PATH,42,266.5847,-5712.374,281.6249,0,0,0,0,100,0), +(@PATH,43,272.5847,-5716.124,281.1249,0,0,0,0,100,0), +(@PATH,44,272.8347,-5716.374,281.1249,0,0,0,0,100,0), +(@PATH,45,275.0847,-5718.624,280.6249,0,0,0,0,100,0), +(@PATH,46,283.3347,-5720.624,280.1249,0,0,0,0,100,0), +(@PATH,47,283.5627,-5720.765,279.8456,0,0,0,0,100,0), +(@PATH,48,287.0627,-5721.265,280.0956,0,0,0,0,100,0), +(@PATH,49,289.3127,-5724.765,279.3456,0,0,0,0,100,0), +(@PATH,50,290.3127,-5726.265,278.5956,0,0,0,0,100,0), +(@PATH,51,291.3127,-5728.015,277.8456,0,0,0,0,100,0), +(@PATH,52,292.8127,-5730.515,275.8456,0,0,0,0,100,0), +(@PATH,53,293.8127,-5732.265,274.8456,0,0,0,0,100,0), +(@PATH,54,294.8127,-5733.765,273.3456,0,0,0,0,100,0), +(@PATH,55,296.0627,-5735.265,272.0956,0,0,0,0,100,0), +(@PATH,56,297.0627,-5737.015,271.3456,0,0,0,0,100,0), +(@PATH,57,298.0627,-5738.765,270.3456,0,0,0,0,100,0), +(@PATH,58,299.3127,-5740.515,269.8456,0,0,0,0,100,0), +(@PATH,59,301.3127,-5743.765,269.3456,0,0,0,0,100,0), +(@PATH,60,301.7428,-5743.971,269.0061,0,0,0,0,100,0), +(@PATH,61,302.7428,-5745.971,269.0061,0,0,0,0,100,0), +(@PATH,62,307.2428,-5749.971,268.5061,0,0,0,0,100,0), +(@PATH,63,309.9928,-5752.721,267.7561,0,0,0,0,100,0), +(@PATH,64,312.9928,-5755.721,267.5061,0,0,0,0,100,0), +(@PATH,65,328.4928,-5770.721,266.7561,0,0,0,0,100,0); + +SET @NPC := 115450; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=137.8599,`position_y`=-5750.369,`position_z`=36.78536 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,137.8599,-5750.369,36.78536,0,0,0,0,100,0), +(@PATH,2,140.1099,-5752.369,34.53536,0,0,0,0,100,0), +(@PATH,3,141.3599,-5753.869,33.28536,0,0,0,0,100,0), +(@PATH,4,142.1099,-5754.619,32.03536,0,0,0,0,100,0), +(@PATH,5,143.8599,-5756.619,30.03536,0,0,0,0,100,0), +(@PATH,6,146.1099,-5758.619,27.78536,0,0,0,0,100,0), +(@PATH,7,145.8599,-5758.369,27.78536,0,0,0,0,100,0), +(@PATH,8,144.3599,-5757.119,30.03536,0,0,0,0,100,0), +(@PATH,9,143.1099,-5755.619,31.03536,0,0,0,0,100,0), +(@PATH,10,142.3599,-5754.869,32.03536,0,0,0,0,100,0), +(@PATH,11,141.1099,-5753.619,33.28536,0,0,0,0,100,0), +(@PATH,12,140.6099,-5752.869,34.53536,0,0,0,0,100,0), +(@PATH,13,139.1099,-5751.619,35.78536,0,0,0,0,100,0), +(@PATH,14,138.3599,-5750.869,36.78536,0,0,0,0,100,0), +(@PATH,15,130.5795,-5750.106,38.92016,0,0,0,0,100,0), +(@PATH,16,129.3295,-5749.106,39.92016,0,0,0,0,100,0), +(@PATH,17,133.3295,-5749.356,38.92016,0,0,0,0,100,0), +(@PATH,18,135.0795,-5749.606,38.42016,0,0,0,0,100,0), +(@PATH,19,135.321,-5749.533,38.50644,0,0,0,0,100,0), +(@PATH,20,137.321,-5749.533,38.00644,0,0,0,0,100,0); + +SET @NPC := 115458; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=219.9613,`position_y`=-5839.253,`position_z`=17.05329 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,219.9613,-5839.253,17.05329,0,0,0,0,100,0), +(@PATH,2,219.2113,-5837.503,17.05329,0,0,0,0,100,0), +(@PATH,3,216.7113,-5831.753,17.05329,0,0,0,0,100,0), +(@PATH,4,215.9613,-5830.003,17.05329,0,0,0,0,100,0), +(@PATH,5,214.2113,-5826.253,19.55329,0,0,0,0,100,0), +(@PATH,6,212.4613,-5822.503,22.55329,0,0,0,0,100,0), +(@PATH,7,212.3707,-5822.154,22.7486,0,0,0,0,100,0), +(@PATH,8,212.1207,-5821.654,22.7486,0,0,0,0,100,0), +(@PATH,9,210.8707,-5817.904,22.7486,0,0,0,0,100,0), +(@PATH,10,209.1207,-5812.904,22.7486,0,0,0,0,100,0), +(@PATH,11,205.6207,-5802.404,29.9986,0,0,0,0,100,0), +(@PATH,12,205.7854,-5802.209,29.86267,0,0,0,0,100,0), +(@PATH,13,205.5354,-5801.709,30.11267,0,0,0,0,100,0), +(@PATH,14,206.2854,-5800.709,30.11267,0,0,0,0,100,0), +(@PATH,15,206.2,-5800.744,30.20782,0,0,0,0,100,0), +(@PATH,16,207.95,-5798.744,30.20782,0,0,0,0,100,0), +(@PATH,17,210.7,-5800.494,30.20782,0,0,0,0,100,0), +(@PATH,18,218.0537,-5805.39,29.74542,0,0,0,0,100,0), +(@PATH,19,221.8037,-5803.89,29.74542,0,0,0,0,100,0), +(@PATH,20,223.3037,-5803.39,29.74542,0,0,0,0,100,0), +(@PATH,21,228.5537,-5801.64,29.74542,0,0,0,0,100,0), +(@PATH,22,230.657,-5803.202,30.17958,0,0,0,0,100,0), +(@PATH,23,231.657,-5804.202,30.67958,0,0,0,0,100,0), +(@PATH,24,231.907,-5804.952,30.42958,0,0,0,0,100,0), +(@PATH,25,232.157,-5806.202,30.92958,0,0,0,0,100,0), +(@PATH,26,233.907,-5811.952,33.92958,0,0,0,0,100,0), +(@PATH,27,234.8766,-5814.844,35.80687,0,0,0,0,100,0), +(@PATH,28,239.3766,-5825.844,42.30687,0,0,0,0,100,0), +(@PATH,29,239.6192,-5826.252,41.11646,0,0,0,0,100,0), +(@PATH,30,243.3692,-5830.752,41.11646,0,0,0,0,100,0), +(@PATH,31,244.1192,-5831.502,41.11646,0,0,0,0,100,0), +(@PATH,32,246.6192,-5834.252,40.36646,0,0,0,0,100,0), +(@PATH,33,248.8373,-5836.398,40.56731,0,0,0,0,100,0), +(@PATH,34,247.5873,-5837.898,39.31731,0,0,0,0,100,0), +(@PATH,35,246.3373,-5839.648,38.31731,0,0,0,0,100,0), +(@PATH,36,244.5873,-5841.898,36.06731,0,0,0,0,100,0), +(@PATH,37,243.3373,-5843.398,35.31731,0,0,0,0,100,0), +(@PATH,38,242.0873,-5845.148,33.81731,0,0,0,0,100,0), +(@PATH,39,240.3373,-5847.148,32.31731,0,0,0,0,100,0), +(@PATH,40,239.3373,-5848.898,31.06731,0,0,0,0,100,0), +(@PATH,41,238.0873,-5850.398,30.06731,0,0,0,0,100,0), +(@PATH,42,236.3373,-5852.648,28.06731,0,0,0,0,100,0), +(@PATH,43,234.3373,-5855.148,26.06731,0,0,0,0,100,0), +(@PATH,44,234.0734,-5855.38,25.81997,0,0,0,0,100,0), +(@PATH,45,233.3234,-5856.38,25.31997,0,0,0,0,100,0), +(@PATH,46,231.5734,-5857.13,24.56997,0,0,0,0,100,0), +(@PATH,47,230.5734,-5857.38,23.31997,0,0,0,0,100,0), +(@PATH,48,228.8234,-5858.13,21.81997,0,0,0,0,100,0), +(@PATH,49,227.8234,-5858.38,21.06997,0,0,0,0,100,0), +(@PATH,50,226.8234,-5858.63,20.31997,0,0,0,0,100,0), +(@PATH,51,226.3234,-5858.88,19.31997,0,0,0,0,100,0), +(@PATH,52,224.3234,-5859.63,18.56997,0,0,0,0,100,0), +(@PATH,53,222.5734,-5860.38,17.81997,0,0,0,0,100,0), +(@PATH,54,221.5734,-5860.88,16.81997,0,0,0,0,100,0), +(@PATH,55,219.2016,-5861.626,16.09444,0,0,0,0,100,0), +(@PATH,56,218.4516,-5859.876,15.59444,0,0,0,0,100,0), +(@PATH,57,218.2016,-5858.876,14.84444,0,0,0,0,100,0), +(@PATH,58,217.7016,-5858.126,14.59444,0,0,0,0,100,0), +(@PATH,59,215.8016,-5853.367,13.55474,0,0,0,0,100,0), +(@PATH,60,217.8016,-5851.367,13.05474,0,0,0,0,100,0), +(@PATH,61,222.3978,-5845.064,13.14539,0,0,0,0,100,0), +(@PATH,62,219.8978,-5839.564,16.89539,0,0,0,0,100,0), +(@PATH,63,219.2414,-5837.49,16.91089,0,0,0,0,100,0), +(@PATH,64,216.7414,-5831.99,16.91089,0,0,0,0,100,0), +(@PATH,65,215.9914,-5829.99,16.91089,0,0,0,0,100,0), +(@PATH,66,214.2414,-5826.24,19.66089,0,0,0,0,100,0), +(@PATH,67,212.4914,-5822.49,22.66089,0,0,0,0,100,0), +(@PATH,68,212.165,-5822.061,22.73844,0,0,0,0,100,0), +(@PATH,69,211.915,-5821.561,22.73844,0,0,0,0,100,0), +(@PATH,70,210.665,-5817.811,22.73844,0,0,0,0,100,0), +(@PATH,71,209.165,-5813.061,22.73844,0,0,0,0,100,0), +(@PATH,72,205.665,-5802.561,29.98844,0,0,0,0,100,0), +(@PATH,73,205.6079,-5802.187,29.98102,0,0,0,0,100,0), +(@PATH,74,205.6079,-5801.687,30.23102,0,0,0,0,100,0), +(@PATH,75,206.3579,-5800.687,30.23102,0,0,0,0,100,0), +(@PATH,76,207.8428,-5798.708,30.2033,0,0,0,0,100,0), +(@PATH,77,210.5928,-5800.458,30.2033,0,0,0,0,100,0), +(@PATH,78,218.1125,-5805.275,29.70859,0,0,0,0,100,0), +(@PATH,79,221.8625,-5803.775,29.70859,0,0,0,0,100,0), +(@PATH,80,223.3625,-5803.525,29.70859,0,0,0,0,100,0), +(@PATH,81,228.6125,-5801.525,29.70859,0,0,0,0,100,0), +(@PATH,82,228.865,-5801.494,29.91413,0,0,0,0,100,0), +(@PATH,83,230.615,-5803.244,30.16413,0,0,0,0,100,0), +(@PATH,84,231.865,-5804.244,30.66413,0,0,0,0,100,0), +(@PATH,85,231.865,-5804.994,30.41413,0,0,0,0,100,0), +(@PATH,86,232.365,-5806.244,30.91413,0,0,0,0,100,0), +(@PATH,87,233.865,-5811.994,33.91413,0,0,0,0,100,0), +(@PATH,88,234.9124,-5814.839,35.62654,0,0,0,0,100,0), +(@PATH,89,239.4124,-5825.839,42.37654,0,0,0,0,100,0), +(@PATH,90,239.6938,-5826.081,42.31701,0,0,0,0,100,0), +(@PATH,91,239.6938,-5826.081,41.31701,0,0,0,0,100,0), +(@PATH,92,243.4438,-5830.831,41.06701,0,0,0,0,100,0), +(@PATH,93,243.9438,-5831.581,41.06701,0,0,0,0,100,0), +(@PATH,94,246.6938,-5834.331,40.56701,0,0,0,0,100,0), +(@PATH,95,246.8183,-5834.425,40.1871,0,0,0,0,100,0), +(@PATH,96,248.8183,-5836.425,40.6871,0,0,0,0,100,0), +(@PATH,97,247.5683,-5837.925,39.1871,0,0,0,0,100,0), +(@PATH,98,246.3183,-5839.675,38.4371,0,0,0,0,100,0), +(@PATH,99,244.5683,-5841.925,36.1871,0,0,0,0,100,0), +(@PATH,100,243.3183,-5843.425,35.1871,0,0,0,0,100,0), +(@PATH,101,242.0683,-5844.925,33.6871,0,0,0,0,100,0), +(@PATH,102,240.3183,-5847.175,32.4371,0,0,0,0,100,0), +(@PATH,103,239.3183,-5848.675,30.9371,0,0,0,0,100,0), +(@PATH,104,238.0683,-5850.425,30.1871,0,0,0,0,100,0), +(@PATH,105,236.3183,-5852.675,28.1871,0,0,0,0,100,0), +(@PATH,106,234.3183,-5855.175,26.1871,0,0,0,0,100,0), +(@PATH,107,234.1656,-5855.439,25.94194,0,0,0,0,100,0), +(@PATH,108,233.4156,-5856.189,25.19194,0,0,0,0,100,0), +(@PATH,109,231.6656,-5856.939,24.44194,0,0,0,0,100,0), +(@PATH,110,230.6656,-5857.439,23.19194,0,0,0,0,100,0), +(@PATH,111,228.6656,-5857.939,21.69194,0,0,0,0,100,0), +(@PATH,112,227.9156,-5858.189,21.19194,0,0,0,0,100,0), +(@PATH,113,227.1656,-5858.689,20.19194,0,0,0,0,100,0), +(@PATH,114,226.1656,-5858.939,19.19194,0,0,0,0,100,0), +(@PATH,115,224.4156,-5859.689,18.44194,0,0,0,0,100,0), +(@PATH,116,222.4156,-5860.439,17.69194,0,0,0,0,100,0), +(@PATH,117,221.6656,-5860.939,16.69194,0,0,0,0,100,0), +(@PATH,118,215.7691,-5853.435,13.38423,0,0,0,0,100,0), +(@PATH,119,217.7691,-5851.185,12.88423,0,0,0,0,100,0), +(@PATH,120,222.4627,-5845.12,13.12806,0,0,0,0,100,0); + +SET @NPC := 115460; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=287.6321,`position_y`=-5792.932,`position_z`=192.3525 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,287.6321,-5792.932,192.3525,0,0,0,0,100,0), +(@PATH,2,283.6321,-5790.682,189.6025,0,0,0,0,100,0), +(@PATH,3,280.1321,-5788.182,187.6025,0,0,0,0,100,0), +(@PATH,4,279.8365,-5787.79,187.2883,0,0,0,0,100,0), +(@PATH,5,278.3365,-5786.79,187.2883,0,0,0,0,100,0), +(@PATH,6,272.3365,-5780.29,187.2883,0,0,0,0,100,0), +(@PATH,7,272.1464,-5780.064,187.2455,0,0,0,0,100,0), +(@PATH,8,271.3964,-5779.564,187.2455,0,0,0,0,100,0), +(@PATH,9,263.6809,-5772.33,178.6529,0,0,0,0,100,0), +(@PATH,10,257.4781,-5765.213,178.404,0,0,0,0,100,0), +(@PATH,11,250.4781,-5758.963,170.404,0,0,0,0,100,0), +(@PATH,12,250.2842,-5758.825,170.3794,0,0,0,0,100,0), +(@PATH,13,250.0342,-5758.575,170.3794,0,0,0,0,100,0), +(@PATH,14,247.7842,-5753.825,170.3794,0,0,0,0,100,0), +(@PATH,15,246.5342,-5750.825,170.3794,0,0,0,0,100,0), +(@PATH,16,246.2589,-5750.45,170.0569,0,0,0,0,100,0), +(@PATH,17,245.7589,-5749.45,170.0569,0,0,0,0,100,0), +(@PATH,18,238.3877,-5742.882,162.0108,0,0,0,0,100,0), +(@PATH,19,235.8877,-5737.632,162.0108,0,0,0,0,100,0), +(@PATH,20,233.6377,-5733.382,162.0108,0,0,0,0,100,0), +(@PATH,21,233.5163,-5733.064,161.9026,0,0,0,0,100,0), +(@PATH,22,233.0163,-5732.314,161.9026,0,0,0,0,100,0), +(@PATH,23,228.2663,-5730.564,157.4026,0,0,0,0,100,0), +(@PATH,24,224.0644,-5728.735,153.6271,0,0,0,0,100,0), +(@PATH,25,213.6219,-5730.93,153.2694,0,0,0,0,100,0), +(@PATH,26,205.8719,-5726.68,146.0194,0,0,0,0,100,0), +(@PATH,27,203.8987,-5729.321,145.1488,0,0,0,0,100,0), +(@PATH,28,198.1487,-5726.071,145.1488,0,0,0,0,100,0), +(@PATH,29,196.8987,-5725.321,145.1488,0,0,0,0,100,0), +(@PATH,30,195.3987,-5724.571,145.1488,0,0,0,0,100,0), +(@PATH,31,194.1487,-5723.821,145.1488,0,0,0,0,100,0), +(@PATH,32,189.3987,-5721.571,144.8988,0,0,0,0,100,0), +(@PATH,33,187.6487,-5720.571,145.1488,0,0,0,0,100,0), +(@PATH,34,187.5118,-5720.427,144.7354,0,0,0,0,100,0), +(@PATH,35,189.5118,-5721.427,144.7354,0,0,0,0,100,0), +(@PATH,36,194.0118,-5723.927,144.7354,0,0,0,0,100,0), +(@PATH,37,195.0118,-5724.677,144.7354,0,0,0,0,100,0), +(@PATH,38,196.7618,-5725.427,144.9854,0,0,0,0,100,0), +(@PATH,39,198.0118,-5726.177,144.9854,0,0,0,0,100,0), +(@PATH,40,204.2883,-5729.523,145.2611,0,0,0,0,100,0), +(@PATH,41,205.0383,-5726.523,145.2611,0,0,0,0,100,0), +(@PATH,42,213.2883,-5730.523,153.5111,0,0,0,0,100,0), +(@PATH,43,213.5177,-5730.529,153.4881,0,0,0,0,100,0), +(@PATH,44,213.7677,-5730.779,153.2381,0,0,0,0,100,0), +(@PATH,45,224.3058,-5728.705,153.5377,0,0,0,0,100,0), +(@PATH,46,228.0558,-5730.455,157.5377,0,0,0,0,100,0), +(@PATH,47,232.9431,-5732.264,162.164,0,0,0,0,100,0), +(@PATH,48,235.4431,-5737.514,161.664,0,0,0,0,100,0), +(@PATH,49,238.584,-5743.291,162.0569,0,0,0,0,100,0), +(@PATH,50,245.334,-5749.291,170.5569,0,0,0,0,100,0), +(@PATH,51,245.717,-5749.404,170.5867,0,0,0,0,100,0), +(@PATH,52,245.967,-5749.654,170.0867,0,0,0,0,100,0), +(@PATH,53,246.467,-5750.904,170.0867,0,0,0,0,100,0), +(@PATH,54,247.717,-5753.654,170.0867,0,0,0,0,100,0), +(@PATH,55,250.1091,-5758.736,170.404,0,0,0,0,100,0), +(@PATH,56,256.8591,-5764.736,178.654,0,0,0,0,100,0), +(@PATH,57,257.8777,-5765.598,178.4319,0,0,0,0,100,0), +(@PATH,58,263.9311,-5772.561,178.7455,0,0,0,0,100,0), +(@PATH,59,270.9311,-5778.811,187.2455,0,0,0,0,100,0), +(@PATH,60,271.1609,-5779.249,187.4395,0,0,0,0,100,0), +(@PATH,61,271.6609,-5779.749,187.4395,0,0,0,0,100,0), +(@PATH,62,278.5372,-5787.154,187.7173,0,0,0,0,100,0), +(@PATH,63,280.0372,-5788.154,187.7173,0,0,0,0,100,0), +(@PATH,64,283.5372,-5790.404,189.7173,0,0,0,0,100,0), +(@PATH,65,287.506,-5793.222,192.441,0,0,0,0,100,0), +(@PATH,66,288.506,-5794.722,192.191,0,0,0,0,100,0), +(@PATH,67,288.506,-5795.722,192.441,0,0,0,0,100,0), +(@PATH,68,289.8208,-5807.587,192.2882,0,0,0,0,100,0), +(@PATH,69,294.3208,-5813.837,191.5382,0,0,0,0,100,0), +(@PATH,70,307.8186,-5829.16,195.0113,0,0,0,0,100,0), +(@PATH,71,305.8186,-5827.16,193.7613,0,0,0,0,100,0), +(@PATH,72,303.0686,-5824.41,192.2613,0,0,0,0,100,0), +(@PATH,73,287.7153,-5793.064,192.3696,0,0,0,0,100,0); + +SET @NPC := 115405; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=255.1411,`position_y`=-5819.032,`position_z`=69.82065 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,255.1411,-5819.032,69.82065,0,0,0,0,100,0), +(@PATH,2,228.1411,-5817.532,69.82065,0,0,0,0,100,0), +(@PATH,3,211.7659,-5816.324,69.97295,0,0,0,0,100,0), +(@PATH,4,211.5159,-5811.324,69.97295,0,0,0,0,100,0), +(@PATH,5,211.5159,-5806.074,70.47295,0,0,0,0,100,0), +(@PATH,6,211.2615,-5802.206,70.32089,0,0,0,0,100,0), +(@PATH,7,212.0115,-5797.456,67.57089,0,0,0,0,100,0), +(@PATH,8,212.2615,-5793.706,64.82089,0,0,0,0,100,0), +(@PATH,9,213.0389,-5789.515,64.62675,0,0,0,0,100,0), +(@PATH,10,227.0389,-5790.765,64.62675,0,0,0,0,100,0), +(@PATH,11,236.0606,-5791.326,64.78189,0,0,0,0,100,0), +(@PATH,12,239.8106,-5793.826,66.03189,0,0,0,0,100,0), +(@PATH,13,244.5606,-5796.326,67.28189,0,0,0,0,100,0), +(@PATH,14,244.8253,-5796.592,67.53802,0,0,0,0,100,0), +(@PATH,15,245.8253,-5797.092,67.53802,0,0,0,0,100,0), +(@PATH,16,246.8253,-5801.092,69.53802,0,0,0,0,100,0), +(@PATH,17,250.3253,-5811.092,74.28802,0,0,0,0,100,0), +(@PATH,18,250.7232,-5811.383,74.58054,0,0,0,0,100,0), +(@PATH,19,250.9732,-5812.633,75.33054,0,0,0,0,100,0), +(@PATH,20,251.2232,-5812.633,76.08054,0,0,0,0,100,0), +(@PATH,21,255.7232,-5817.633,79.33054,0,0,0,0,100,0), +(@PATH,22,260.4732,-5822.383,84.33054,0,0,0,0,100,0), +(@PATH,23,260.4797,-5822.664,84.30443,0,0,0,0,100,0), +(@PATH,24,261.4797,-5823.664,84.30443,0,0,0,0,100,0), +(@PATH,25,257.9797,-5834.414,84.30443,0,0,0,0,100,0), +(@PATH,26,254.2297,-5845.164,83.55443,0,0,0,0,100,0), +(@PATH,27,253.9797,-5845.914,83.55443,0,0,0,0,100,0), +(@PATH,28,257.9939,-5846.658,83.14531,0,0,0,0,100,0), +(@PATH,29,258.2439,-5850.158,83.14531,0,0,0,0,100,0), +(@PATH,30,258.4939,-5857.408,83.14531,0,0,0,0,100,0), +(@PATH,31,259.2439,-5866.408,83.14531,0,0,0,0,100,0), +(@PATH,32,254.65,-5852.131,56.96819,0,0,0,0,100,0), +(@PATH,33,254.9,-5850.131,56.21819,0,0,0,0,100,0), +(@PATH,34,252.9344,-5835.348,62.48116,0,0,0,0,100,0), +(@PATH,35,253.9344,-5828.098,65.73116,0,0,0,0,100,0), +(@PATH,36,255.207,-5819.25,69.76926,0,0,0,0,100,0); + +SET @NPC := 115406; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=227.7014,`position_y`=-5716.306,`position_z`=194.7286 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,227.7014,-5716.306,194.7286,0,0,0,0,100,0), +(@PATH,2,228.2014,-5716.556,193.4786,0,0,0,0,100,0), +(@PATH,3,222.9313,-5728.676,193.7948,0,0,0,0,100,0), +(@PATH,4,224.6813,-5729.676,193.7948,0,0,0,0,100,0), +(@PATH,5,232.1813,-5734.176,193.7948,0,0,0,0,100,0), +(@PATH,6,233.4313,-5734.926,194.2948,0,0,0,0,100,0), +(@PATH,7,232.3829,-5734.333,194.1157,0,0,0,0,100,0), +(@PATH,8,233.6329,-5735.083,194.3657,0,0,0,0,100,0), +(@PATH,9,234.1329,-5735.583,194.3657,0,0,0,0,100,0), +(@PATH,10,236.6329,-5737.833,194.3657,0,0,0,0,100,0), +(@PATH,11,243.1329,-5743.833,194.6157,0,0,0,0,100,0), +(@PATH,12,250.3829,-5750.583,194.6157,0,0,0,0,100,0), +(@PATH,13,250.6692,-5750.867,194.634,0,0,0,0,100,0), +(@PATH,14,251.6692,-5751.617,194.884,0,0,0,0,100,0), +(@PATH,15,257.9192,-5755.617,192.134,0,0,0,0,100,0), +(@PATH,16,263.6692,-5759.117,191.884,0,0,0,0,100,0), +(@PATH,17,271.5138,-5764.185,191.8001,0,0,0,0,100,0), +(@PATH,18,272.7638,-5767.185,191.3001,0,0,0,0,100,0), +(@PATH,19,275.2638,-5767.435,191.3001,0,0,0,0,100,0), +(@PATH,20,279.5138,-5769.435,192.0501,0,0,0,0,100,0), +(@PATH,21,281.5138,-5770.185,192.5501,0,0,0,0,100,0), +(@PATH,22,283.2638,-5770.935,193.3001,0,0,0,0,100,0), +(@PATH,23,281.6401,-5770.392,192.9582,0,0,0,0,100,0), +(@PATH,24,283.6401,-5771.142,193.4582,0,0,0,0,100,0), +(@PATH,25,284.6401,-5771.392,193.4582,0,0,0,0,100,0), +(@PATH,26,286.1401,-5772.642,193.9582,0,0,0,0,100,0), +(@PATH,27,289.6401,-5775.642,194.7082,0,0,0,0,100,0), +(@PATH,28,295.3911,-5780.221,195.1046,0,0,0,0,100,0), +(@PATH,29,298.3911,-5780.471,195.8546,0,0,0,0,100,0), +(@PATH,30,300.1411,-5780.471,196.1046,0,0,0,0,100,0), +(@PATH,31,304.1411,-5780.721,197.1046,0,0,0,0,100,0), +(@PATH,32,306.2016,-5781.156,197.6729,0,0,0,0,100,0), +(@PATH,33,305.2016,-5782.406,197.1729,0,0,0,0,100,0), +(@PATH,34,301.7016,-5790.156,204.6729,0,0,0,0,100,0), +(@PATH,35,301.4777,-5790.491,204.8195,0,0,0,0,100,0), +(@PATH,36,301.2277,-5790.741,204.5695,0,0,0,0,100,0), +(@PATH,37,300.2277,-5793.991,204.5695,0,0,0,0,100,0), +(@PATH,38,300.0298,-5793.949,204.6514,0,0,0,0,100,0), +(@PATH,39,300.2668,-5793.704,204.6047,0,0,0,0,100,0), +(@PATH,40,301.0168,-5791.204,204.6047,0,0,0,0,100,0), +(@PATH,41,301.5168,-5790.204,204.8547,0,0,0,0,100,0), +(@PATH,42,305.8412,-5781.836,197.0411,0,0,0,0,100,0), +(@PATH,43,302.8412,-5781.336,196.2911,0,0,0,0,100,0), +(@PATH,44,299.0912,-5781.086,195.7911,0,0,0,0,100,0), +(@PATH,45,296.0912,-5780.586,195.0411,0,0,0,0,100,0), +(@PATH,46,295.7578,-5780.462,194.7891,0,0,0,0,100,0), +(@PATH,47,295.0078,-5780.462,194.7891,0,0,0,0,100,0), +(@PATH,48,287.7578,-5774.212,194.2891,0,0,0,0,100,0), +(@PATH,49,284.1918,-5771.301,193.2889,0,0,0,0,100,0), +(@PATH,50,283.4418,-5771.551,193.0389,0,0,0,0,100,0), +(@PATH,51,282.1918,-5770.551,192.5389,0,0,0,0,100,0), +(@PATH,52,279.6918,-5768.801,192.0389,0,0,0,0,100,0), +(@PATH,53,279.1918,-5768.801,191.7889,0,0,0,0,100,0), +(@PATH,54,275.1918,-5767.801,191.2889,0,0,0,0,100,0), +(@PATH,55,271.9418,-5766.551,191.5389,0,0,0,0,100,0), +(@PATH,56,271.8291,-5766.23,191.5772,0,0,0,0,100,0), +(@PATH,57,271.3291,-5763.98,191.8272,0,0,0,0,100,0), +(@PATH,58,263.5791,-5759.48,192.3272,0,0,0,0,100,0), +(@PATH,59,258.0791,-5755.73,191.8272,0,0,0,0,100,0), +(@PATH,60,251.2296,-5751.457,194.8659,0,0,0,0,100,0), +(@PATH,61,250.4796,-5750.707,194.6159,0,0,0,0,100,0), +(@PATH,62,243.2296,-5743.957,194.6159,0,0,0,0,100,0), +(@PATH,63,236.9796,-5737.957,194.3659,0,0,0,0,100,0), +(@PATH,64,234.7296,-5735.957,194.3659,0,0,0,0,100,0), +(@PATH,65,234.5474,-5735.734,194.361,0,0,0,0,100,0), +(@PATH,66,234.0474,-5735.234,194.361,0,0,0,0,100,0), +(@PATH,67,232.5474,-5734.234,194.111,0,0,0,0,100,0), +(@PATH,68,224.5474,-5729.734,193.861,0,0,0,0,100,0), +(@PATH,69,223.7974,-5729.234,193.861,0,0,0,0,100,0), +(@PATH,70,223.618,-5728.915,193.8579,0,0,0,0,100,0), +(@PATH,71,222.868,-5728.415,193.8579,0,0,0,0,100,0), +(@PATH,72,223.118,-5727.665,193.8579,0,0,0,0,100,0), +(@PATH,73,223.368,-5725.165,193.6079,0,0,0,0,100,0), +(@PATH,74,224.618,-5717.165,193.8579,0,0,0,0,100,0), +(@PATH,75,224.3923,-5716.984,193.7416,0,0,0,0,100,0), +(@PATH,76,224.6423,-5715.234,194.2416,0,0,0,0,100,0), +(@PATH,77,215.0278,-5704.665,193.6219,0,0,0,0,100,0), +(@PATH,78,213.0278,-5704.415,193.3719,0,0,0,0,100,0), +(@PATH,79,200.1468,-5699.838,193.414,0,0,0,0,100,0), +(@PATH,80,194.8968,-5701.338,193.414,0,0,0,0,100,0), +(@PATH,81,193.6468,-5701.588,193.414,0,0,0,0,100,0), +(@PATH,82,183.2275,-5704.542,193.2986,0,0,0,0,100,0), +(@PATH,83,181.7275,-5704.792,193.2986,0,0,0,0,100,0), +(@PATH,84,173.7432,-5705.778,188.6798,0,0,0,0,100,0), +(@PATH,85,173.9932,-5707.278,188.9298,0,0,0,0,100,0), +(@PATH,86,173.4932,-5709.028,188.1798,0,0,0,0,100,0), +(@PATH,87,174.2432,-5710.278,188.4298,0,0,0,0,100,0), +(@PATH,88,171.5702,-5712.814,187.953,0,0,0,0,100,0), +(@PATH,89,170.3202,-5712.814,187.953,0,0,0,0,100,0), +(@PATH,90,168.8202,-5712.814,188.453,0,0,0,0,100,0), +(@PATH,91,165.8202,-5712.564,188.953,0,0,0,0,100,0), +(@PATH,92,159.0702,-5711.814,189.703,0,0,0,0,100,0), +(@PATH,93,152.0702,-5711.314,188.953,0,0,0,0,100,0), +(@PATH,94,148.0702,-5710.814,188.203,0,0,0,0,100,0), +(@PATH,95,150.4417,-5711.151,188.5248,0,0,0,0,100,0), +(@PATH,96,150.4417,-5711.151,188.5248,0.1987633,0,0,0,100,0), +(@PATH,97,152.4488,-5711.305,189.4782,0,0,0,0,100,0), +(@PATH,98,153.4488,-5711.305,189.4782,0,0,0,0,100,0), +(@PATH,99,151.4731,-5711.154,188.9846,0,0,0,0,100,0), +(@PATH,100,150.5885,-5711.407,188.7902,0,0,0,0,100,0), +(@PATH,101,153.5885,-5711.907,189.5402,0,0,0,0,100,0), +(@PATH,102,164.3385,-5713.407,188.7902,0,0,0,0,100,0), +(@PATH,103,166.3385,-5713.907,187.2902,0,0,0,0,100,0), +(@PATH,104,171.7018,-5712.837,187.8679,0,0,0,0,100,0), +(@PATH,105,173.9518,-5710.837,188.1179,0,0,0,0,100,0), +(@PATH,106,172.4518,-5707.337,187.8679,0,0,0,0,100,0), +(@PATH,107,174.1519,-5705.721,188.97,0,0,0,0,100,0), +(@PATH,108,181.6519,-5704.721,193.22,0,0,0,0,100,0), +(@PATH,109,181.9405,-5704.654,193.3114,0,0,0,0,100,0), +(@PATH,110,183.6905,-5704.404,193.3114,0,0,0,0,100,0), +(@PATH,111,193.6905,-5701.654,193.3114,0,0,0,0,100,0), +(@PATH,112,194.9405,-5701.404,193.3114,0,0,0,0,100,0), +(@PATH,113,200.2739,-5699.83,193.3035,0,0,0,0,100,0), +(@PATH,114,214.5239,-5706.08,193.8035,0,0,0,0,100,0), +(@PATH,115,215.4275,-5705.061,193.8293,0,0,0,0,100,0), +(@PATH,116,223.1775,-5713.561,194.0793,0,0,0,0,100,0), +(@PATH,117,227.4703,-5716.03,194.9438,0,0,0,0,100,0); + +UPDATE `creature` SET `spawndist`=10 WHERE `id`=24871 AND `MovementType`=1; + +-- Assistant Apothecary SAI +SET @GUID := -97863; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=24081; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@GUID,0,0,0,1,0,100,0,2000,2000,2000,2000,10,1,273,274,18,5,11,1,0,0,0,0,0,0,0,"Assistant Apothecary - Out of Combat - Play Random Emote (1, 273, 274, 18, 5, 11)"); + +-- Assistant Apothecary SAI +SET @GUID := -97872; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=24081; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@GUID,0,0,0,1,0,100,0,2000,2000,2000,2000,10,1,273,274,18,5,11,1,0,0,0,0,0,0,0,"Assistant Apothecary - Out of Combat - Play Random Emote (1, 273, 274, 18, 5, 11)"); + +-- Assistant Apothecary SAI +SET @GUID := -97862; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=24081; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@GUID,0,0,0,1,0,100,0,2000,2000,2000,2000,10,1,273,274,18,5,11,1,0,0,0,0,0,0,0,"Assistant Apothecary - Out of Combat - Play Random Emote (1, 273, 274, 18, 5, 11)"); + +-- Assistant Apothecary SAI +SET @GUID := -97869; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=24081; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@GUID AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@GUID,0,0,0,1,0,100,0,2000,2000,2000,2000,10,1,273,274,18,5,11,1,0,0,0,0,0,0,0,"Assistant Apothecary - Out of Combat - Play Random Emote (1, 273, 274, 18, 5, 11)"); + +SET @NPC := 97519; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1015.248,`position_y`=-4453.979,`position_z`=167.7645 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1015.248,-4453.979,167.7645,0,0,0,0,100,0), +(@PATH,2,1015.998,-4453.729,167.7645,0,0,0,0,100,0), +(@PATH,3,1018.248,-4451.479,168.2645,0,0,0,0,100,0), +(@PATH,4,1025.511,-4443.714,168.6004,0,0,0,0,100,0), +(@PATH,5,1039.257,-4432.38,168.4421,0,0,0,0,100,0), +(@PATH,6,1040.007,-4433.13,168.9421,0,0,0,0,100,0), +(@PATH,7,1040.257,-4433.88,168.9421,0,0,0,0,100,0), +(@PATH,8,1041.257,-4433.38,168.6921,0,0,0,0,100,0), +(@PATH,9,1044.757,-4432.13,168.4421,0,0,0,0,100,0), +(@PATH,10,1045.757,-4432.13,168.4421,0,0,0,0,100,0), +(@PATH,11,1050.007,-4431.13,168.4421,0,0,0,0,100,0), +(@PATH,12,1049.977,-4431.141,168.4401,0,0,0,0,100,0), +(@PATH,13,1045.727,-4433.391,168.6901,0,0,0,0,100,0), +(@PATH,14,1042.227,-4432.641,168.6901,0,0,0,0,100,0), +(@PATH,15,1040.477,-4431.641,168.4401,0,0,0,0,100,0), +(@PATH,16,1040.09,-4431.696,168.4902,0,0,0,0,100,0), +(@PATH,17,1039.09,-4432.446,168.4902,0,0,0,0,100,0), +(@PATH,18,1025.124,-4443.842,168.6566,0,0,0,0,100,0), +(@PATH,19,1016.624,-4453.342,167.9066,0,0,0,0,100,0), +(@PATH,20,1016.256,-4453.507,167.7006,0,0,0,0,100,0), +(@PATH,21,1015.756,-4454.007,167.7006,0,0,0,0,100,0), +(@PATH,22,1014.506,-4455.257,167.2006,0,0,0,0,100,0), +(@PATH,23,1012.506,-4455.257,166.9506,0,0,0,0,100,0), +(@PATH,24,1008.006,-4456.507,166.2006,0,0,0,0,100,0), +(@PATH,25,1003.674,-4461.948,167.2136,0,0,0,0,100,0), +(@PATH,26,1002.424,-4462.698,167.2136,0,0,0,0,100,0), +(@PATH,27,1000.924,-4463.448,167.2136,0,0,0,0,100,0), +(@PATH,28,999.9244,-4463.448,167.2136,0,0,0,0,100,0), +(@PATH,29,999.1744,-4466.448,167.7136,0,0,0,0,100,0), +(@PATH,30,997.4244,-4468.948,168.2136,0,0,0,0,100,0), +(@PATH,31,990.4841,-4474.846,167.9575,0,0,0,0,100,0), +(@PATH,32,989.9841,-4476.596,167.9575,0,0,0,0,100,0), +(@PATH,33,990.7341,-4479.096,167.4575,0,0,0,0,100,0), +(@PATH,34,990.7341,-4483.096,167.2075,0,0,0,0,100,0), +(@PATH,35,989.7341,-4484.846,167.4575,0,0,0,0,100,0), +(@PATH,36,981.9841,-4489.846,164.7075,0,0,0,0,100,0), +(@PATH,37,981.9841,-4491.346,164.9575,0,0,0,0,100,0), +(@PATH,38,979.9841,-4491.846,164.2075,0,0,0,0,100,0), +(@PATH,39,979.7715,-4491.001,163.8022,0,0,0,0,100,0), +(@PATH,40,977.7715,-4491.251,163.0522,0,0,0,0,100,0), +(@PATH,41,975.7715,-4491.501,162.5522,0,0,0,0,100,0), +(@PATH,42,974.2715,-4491.501,162.5522,0,0,0,0,100,0), +(@PATH,43,971.5215,-4491.751,161.8022,0,0,0,0,100,0), +(@PATH,44,971.3606,-4491.792,161.514,0,0,0,0,100,0), +(@PATH,45,969.3606,-4492.042,160.764,0,0,0,0,100,0), +(@PATH,46,964.1106,-4490.792,159.014,0,0,0,0,100,0), +(@PATH,47,962.8606,-4490.792,158.264,0,0,0,0,100,0), +(@PATH,48,960.6106,-4490.292,157.764,0,0,0,0,100,0), +(@PATH,49,958.6106,-4490.292,157.264,0,0,0,0,100,0), +(@PATH,50,957.3606,-4488.792,156.514,0,0,0,0,100,0), +(@PATH,51,955.3606,-4485.542,155.514,0,0,0,0,100,0), +(@PATH,52,954.9963,-4485.461,155.3227,0,0,0,0,100,0), +(@PATH,53,953.9963,-4483.961,154.8227,0,0,0,0,100,0), +(@PATH,54,952.4963,-4481.461,154.3227,0,0,0,0,100,0), +(@PATH,55,950.7463,-4478.961,153.5727,0,0,0,0,100,0), +(@PATH,56,948.9963,-4475.961,153.0727,0,0,0,0,100,0), +(@PATH,57,946.2463,-4471.711,152.5727,0,0,0,0,100,0), +(@PATH,58,943.9454,-4468.581,151.9754,0,0,0,0,100,0), +(@PATH,59,940.1954,-4469.581,151.2254,0,0,0,0,100,0), +(@PATH,60,937.1954,-4470.331,150.4754,0,0,0,0,100,0), +(@PATH,61,934.6954,-4470.831,149.7254,0,0,0,0,100,0), +(@PATH,62,931.6954,-4471.581,149.2254,0,0,0,0,100,0), +(@PATH,63,928.6954,-4472.081,148.4754,0,0,0,0,100,0), +(@PATH,64,928.8876,-4472.062,148.61,0,0,0,0,100,0), +(@PATH,65,930.8876,-4471.562,149.11,0,0,0,0,100,0), +(@PATH,66,933.6376,-4470.812,149.61,0,0,0,0,100,0), +(@PATH,67,935.3876,-4470.562,150.11,0,0,0,0,100,0), +(@PATH,68,939.3876,-4469.812,150.86,0,0,0,0,100,0), +(@PATH,69,942.1376,-4469.062,151.61,0,0,0,0,100,0), +(@PATH,70,942.5215,-4469.056,151.9583,0,0,0,0,100,0), +(@PATH,71,944.2715,-4468.556,152.2083,0,0,0,0,100,0), +(@PATH,72,947.7715,-4474.556,152.9583,0,0,0,0,100,0), +(@PATH,73,950.0215,-4477.556,153.2083,0,0,0,0,100,0), +(@PATH,74,951.5215,-4480.056,153.9583,0,0,0,0,100,0), +(@PATH,75,953.2715,-4482.556,154.7083,0,0,0,0,100,0), +(@PATH,76,953.3368,-4482.845,154.7652,0,0,0,0,100,0), +(@PATH,77,954.3368,-4484.345,155.0152,0,0,0,0,100,0), +(@PATH,78,956.0868,-4485.095,155.7652,0,0,0,0,100,0), +(@PATH,79,958.0868,-4485.595,156.2652,0,0,0,0,100,0), +(@PATH,80,958.5868,-4485.845,156.2652,0,0,0,0,100,0), +(@PATH,81,960.0868,-4486.345,157.0152,0,0,0,0,100,0), +(@PATH,82,967.9517,-4492.584,160.9392,0,0,0,0,100,0), +(@PATH,83,968.9517,-4493.084,160.9392,0,0,0,0,100,0), +(@PATH,84,971.2017,-4494.584,161.4392,0,0,0,0,100,0), +(@PATH,85,972.9517,-4494.584,162.1892,0,0,0,0,100,0), +(@PATH,86,974.9517,-4494.584,162.6892,0,0,0,0,100,0), +(@PATH,87,977.4517,-4493.084,163.4392,0,0,0,0,100,0), +(@PATH,88,977.9188,-4493.006,163.5088,0,0,0,0,100,0), +(@PATH,89,979.1688,-4492.006,164.0088,0,0,0,0,100,0), +(@PATH,90,980.4188,-4491.506,164.5088,0,0,0,0,100,0), +(@PATH,91,982.4188,-4488.756,165.2588,0,0,0,0,100,0), +(@PATH,92,989.1688,-4483.756,167.0088,0,0,0,0,100,0), +(@PATH,93,990.6688,-4479.256,167.5088,0,0,0,0,100,0), +(@PATH,94,990.1688,-4477.006,167.7588,0,0,0,0,100,0), +(@PATH,95,990.2711,-4476.904,167.666,0,0,0,0,100,0), +(@PATH,96,990.0211,-4475.404,168.166,0,0,0,0,100,0), +(@PATH,97,990.7711,-4475.154,168.166,0,0,0,0,100,0), +(@PATH,98,999.0211,-4469.904,167.916,0,0,0,0,100,0), +(@PATH,99,1000.021,-4469.904,167.916,0,0,0,0,100,0), +(@PATH,100,1003.021,-4466.654,167.916,0,0,0,0,100,0), +(@PATH,101,1003.021,-4464.154,167.666,0,0,0,0,100,0), +(@PATH,102,1003.911,-4461.639,167.1876,0,0,0,0,100,0), +(@PATH,103,1008.161,-4456.889,166.1876,0,0,0,0,100,0), +(@PATH,104,1012.161,-4455.389,166.9376,0,0,0,0,100,0); + +SET @NPC := 108040; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=956.1494,`position_y`=-4457.604,`position_z`=152.5576 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,956.1494,-4457.604,152.5576,0,0,0,0,100,0), +(@PATH,2,961.1494,-4449.354,152.3076,0,0,0,0,100,0), +(@PATH,3,961.1494,-4447.854,152.3076,0,0,0,0,100,0), +(@PATH,4,966.193,-4442.853,152.4677,0,0,0,0,100,0), +(@PATH,5,966.0477,-4443.138,152.2393,0,0,0,0,100,0), +(@PATH,6,966.0169,-4443.054,152.3164,0,0,0,0,100,0), +(@PATH,7,965.0169,-4445.804,152.3164,0,0,0,0,100,0), +(@PATH,8,965.7669,-4447.054,152.8164,0,0,0,0,100,0), +(@PATH,9,955.7,-4457.94,152.5095,0,0,0,0,100,0), +(@PATH,10,956.2,-4460.44,152.5095,0,0,0,0,100,0), +(@PATH,11,954.7,-4461.94,152.5095,0,0,0,0,100,0), +(@PATH,12,953.2,-4466.44,152.5095,0,0,0,0,100,0), +(@PATH,13,950.7,-4471.19,152.5095,0,0,0,0,100,0), +(@PATH,14,950.7,-4472.69,152.7595,0,0,0,0,100,0), +(@PATH,15,950.4084,-4472.972,152.9393,0,0,0,0,100,0), +(@PATH,16,950.1584,-4474.222,152.9393,0,0,0,0,100,0), +(@PATH,17,947.4084,-4479.472,153.6893,0,0,0,0,100,0), +(@PATH,18,945.9084,-4482.972,154.1893,0,0,0,0,100,0), +(@PATH,19,944.9084,-4484.722,155.1893,0,0,0,0,100,0), +(@PATH,20,942.6257,-4489.089,156.3307,0,0,0,0,100,0), +(@PATH,21,940.3757,-4493.089,156.8307,0,0,0,0,100,0), +(@PATH,22,938.3757,-4497.089,156.8307,0,0,0,0,100,0), +(@PATH,23,937.9882,-4497.383,157.1975,0,0,0,0,100,0), +(@PATH,24,936.7382,-4499.133,157.6975,0,0,0,0,100,0), +(@PATH,25,936.4882,-4499.883,158.1975,0,0,0,0,100,0), +(@PATH,26,935.9882,-4501.883,158.4475,0,0,0,0,100,0), +(@PATH,27,935.4882,-4502.883,158.1975,0,0,0,0,100,0), +(@PATH,28,934.4882,-4506.133,158.1975,0,0,0,0,100,0), +(@PATH,29,934.2382,-4506.883,158.1975,0,0,0,0,100,0), +(@PATH,30,932.9882,-4510.883,158.1975,0,0,0,0,100,0), +(@PATH,31,933.5935,-4508.443,158.2741,0,0,0,0,100,0), +(@PATH,32,933.8435,-4507.193,158.2741,0,0,0,0,100,0), +(@PATH,33,934.3435,-4506.193,158.2741,0,0,0,0,100,0), +(@PATH,34,935.3435,-4502.693,158.2741,0,0,0,0,100,0), +(@PATH,35,935.8435,-4501.943,158.5241,0,0,0,0,100,0), +(@PATH,36,936.3435,-4499.943,158.2741,0,0,0,0,100,0), +(@PATH,37,936.5914,-4499.837,158.0711,0,0,0,0,100,0), +(@PATH,38,936.5914,-4499.337,158.0711,0,0,0,0,100,0), +(@PATH,39,937.0914,-4498.837,157.5711,0,0,0,0,100,0), +(@PATH,40,938.8414,-4496.587,157.0711,0,0,0,0,100,0), +(@PATH,41,939.8414,-4496.087,157.0711,0,0,0,0,100,0), +(@PATH,42,942.0914,-4490.837,156.5711,0,0,0,0,100,0), +(@PATH,43,943.5914,-4487.337,156.0711,0,0,0,0,100,0), +(@PATH,44,943.7902,-4486.907,155.6844,0,0,0,0,100,0), +(@PATH,45,944.0402,-4486.657,155.6844,0,0,0,0,100,0), +(@PATH,46,945.2902,-4483.907,154.6844,0,0,0,0,100,0), +(@PATH,47,946.5402,-4481.407,154.1844,0,0,0,0,100,0), +(@PATH,48,947.7902,-4478.657,153.4344,0,0,0,0,100,0), +(@PATH,49,950.2281,-4473.951,152.6897,0,0,0,0,100,0), +(@PATH,50,950.7281,-4472.701,152.6897,0,0,0,0,100,0), +(@PATH,51,951.7281,-4470.951,152.6897,0,0,0,0,100,0), +(@PATH,52,957.2281,-4465.701,152.6897,0,0,0,0,100,0), +(@PATH,53,957.2281,-4464.701,152.6897,0,0,0,0,100,0), +(@PATH,54,957.2281,-4462.451,152.6897,0,0,0,0,100,0), +(@PATH,55,957.7281,-4458.951,152.6897,0,0,0,0,100,0); + +SET @NPC := 97530; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1024.085,`position_y`=-4388.786,`position_z`=155.0886 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1024.085,-4388.786,155.0886,0,0,0,0,100,0), +(@PATH,2,1026.585,-4388.786,155.8386,0,0,0,0,100,0), +(@PATH,3,1029.085,-4390.286,156.5886,0,0,0,0,100,0), +(@PATH,4,1030.585,-4391.286,157.0886,0,0,0,0,100,0), +(@PATH,5,1032.335,-4392.036,157.8386,0,0,0,0,100,0), +(@PATH,6,1035.085,-4393.286,158.5886,0,0,0,0,100,0), +(@PATH,7,1036.835,-4394.286,159.5886,0,0,0,0,100,0), +(@PATH,8,1034.852,-4393.112,158.7381,0,0,0,0,100,0), +(@PATH,9,1033.102,-4392.362,157.9881,0,0,0,0,100,0), +(@PATH,10,1031.602,-4391.612,157.4881,0,0,0,0,100,0), +(@PATH,11,1028.852,-4390.112,156.7381,0,0,0,0,100,0), +(@PATH,12,1027.102,-4389.112,155.9881,0,0,0,0,100,0), +(@PATH,13,1028.578,-4389.915,156.3259,0,0,0,0,100,0), +(@PATH,14,1026.828,-4389.165,155.5759,0,0,0,0,100,0), +(@PATH,15,1026.328,-4388.915,155.5759,0,0,0,0,100,0), +(@PATH,16,1025.078,-4389.415,155.0759,0,0,0,0,100,0), +(@PATH,17,1021.078,-4388.665,154.5759,0,0,0,0,100,0), +(@PATH,18,1019.078,-4387.915,154.0759,0,0,0,0,100,0), +(@PATH,19,1013.2,-4388.109,152.8829,0,0,0,0,100,0), +(@PATH,20,1000.7,-4388.859,151.1329,0,0,0,0,100,0), +(@PATH,21,1000.494,-4388.744,150.9521,0,0,0,0,100,0), +(@PATH,22,999.2443,-4387.994,150.7021,0,0,0,0,100,0), +(@PATH,23,997.4943,-4387.244,150.7021,0,0,0,0,100,0), +(@PATH,24,997.2443,-4386.744,150.7021,0,0,0,0,100,0), +(@PATH,25,991.3024,-4383.845,150.0998,0,0,0,0,100,0), +(@PATH,26,988.0524,-4382.595,149.0998,0,0,0,0,100,0), +(@PATH,27,983.3024,-4381.345,148.8498,0,0,0,0,100,0), +(@PATH,28,975.5524,-4377.345,148.3498,0,0,0,0,100,0), +(@PATH,29,970.8024,-4375.845,147.5998,0,0,0,0,100,0), +(@PATH,30,970.5043,-4375.663,147.2383,0,0,0,0,100,0), +(@PATH,31,970.7543,-4376.913,147.2383,0,0,0,0,100,0), +(@PATH,32,968.0043,-4377.163,146.7383,0,0,0,0,100,0), +(@PATH,33,961.2543,-4377.663,145.7383,0,0,0,0,100,0), +(@PATH,34,958.5043,-4377.913,145.4883,0,0,0,0,100,0), +(@PATH,35,951.996,-4379.422,144.7583,0,0,0,0,100,0), +(@PATH,36,947.996,-4382.172,144.0083,0,0,0,0,100,0), +(@PATH,37,944.496,-4383.922,143.7583,0,0,0,0,100,0), +(@PATH,38,939.0083,-4386.466,142.6643,0,0,0,0,100,0), +(@PATH,39,935.2583,-4387.716,141.6643,0,0,0,0,100,0), +(@PATH,40,929.7583,-4389.466,141.4143,0,0,0,0,100,0), +(@PATH,41,925.7583,-4390.966,140.6643,0,0,0,0,100,0), +(@PATH,42,921.2232,-4390.457,140.385,0,0,0,0,100,0), +(@PATH,43,906.9732,-4402.207,139.635,0,0,0,0,100,0), +(@PATH,44,904.4732,-4404.457,139.635,0,0,0,0,100,0), +(@PATH,45,902.9732,-4406.457,139.385,0,0,0,0,100,0), +(@PATH,46,902.9732,-4408.207,139.135,0,0,0,0,100,0), +(@PATH,47,903.6403,-4404.299,139.124,0,0,0,0,100,0), +(@PATH,48,905.1403,-4403.299,139.624,0,0,0,0,100,0), +(@PATH,49,921.5125,-4390.136,140.6507,0,0,0,0,100,0), +(@PATH,50,924.7625,-4389.886,140.9007,0,0,0,0,100,0), +(@PATH,51,930.0125,-4388.636,141.4007,0,0,0,0,100,0), +(@PATH,52,933.2625,-4387.386,141.6507,0,0,0,0,100,0), +(@PATH,53,938.2625,-4386.636,142.1507,0,0,0,0,100,0), +(@PATH,54,941.0632,-4386.008,143.1118,0,0,0,0,100,0), +(@PATH,55,944.5632,-4384.008,143.3618,0,0,0,0,100,0), +(@PATH,56,947.5632,-4382.008,144.1118,0,0,0,0,100,0), +(@PATH,57,951.0632,-4380.008,144.6118,0,0,0,0,100,0), +(@PATH,58,954.3835,-4378.908,145.3604,0,0,0,0,100,0), +(@PATH,59,960.1335,-4376.908,145.6104,0,0,0,0,100,0), +(@PATH,60,961.6335,-4377.158,145.8604,0,0,0,0,100,0), +(@PATH,61,966.3835,-4376.908,146.6104,0,0,0,0,100,0), +(@PATH,62,970.936,-4376.978,147.3131,0,0,0,0,100,0), +(@PATH,63,973.186,-4376.978,147.5631,0,0,0,0,100,0), +(@PATH,64,975.186,-4376.978,148.0631,0,0,0,0,100,0), +(@PATH,65,978.936,-4378.978,148.5631,0,0,0,0,100,0), +(@PATH,66,983.436,-4380.978,148.8131,0,0,0,0,100,0), +(@PATH,67,987.436,-4382.478,149.0631,0,0,0,0,100,0), +(@PATH,68,989.436,-4383.228,149.8131,0,0,0,0,100,0), +(@PATH,69,991.3464,-4384.043,150.0937,0,0,0,0,100,0), +(@PATH,70,997.3464,-4386.793,150.5937,0,0,0,0,100,0), +(@PATH,71,999.5955,-4388.054,151.1195,0,0,0,0,100,0), +(@PATH,72,1000.845,-4387.554,151.1195,0,0,0,0,100,0), +(@PATH,73,1001.095,-4387.054,151.3695,0,0,0,0,100,0), +(@PATH,74,1013.391,-4387.978,153.2294,0,0,0,0,100,0), +(@PATH,75,1019.891,-4388.228,153.9794,0,0,0,0,100,0); + +SET @NPC := 118191; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=792.4111,`position_y`=-4165.132,`position_z`=190.8517 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH, 100, 446.786, -4277.12, 233.767, 0, 0, 0, 0, 100, 0), +(@PATH, 99, 425.608, -4298.79, 234.072, 0, 0, 0, 0, 100, 0), +(@PATH, 98, 410.285, -4311.46, 232.44, 0, 0, 0, 0, 100, 0), +(@PATH, 97, 389.314, -4324.13, 235.243, 0, 0, 0, 0, 100, 0), +(@PATH, 96, 369.394, -4333.78, 235.957, 0, 0, 0, 0, 100, 0), +(@PATH, 95, 349.923, -4341.65, 239.105, 0, 0, 0, 0, 100, 0), +(@PATH, 94, 334.75, -4354.5, 238.383, 0, 0, 0, 0, 100, 0), +(@PATH, 93, 317.898, -4368.94, 237.277, 0, 0, 0, 0, 100, 0), +(@PATH, 92, 302.318, -4387.75, 238.375, 0, 0, 0, 0, 100, 0), +(@PATH, 91, 290.249, -4410.43, 240.571, 0, 0, 0, 0, 100, 0), +(@PATH, 90, 279.331, -4432.36, 243.73, 0, 0, 0, 0, 100, 0), +(@PATH, 89, 268.961, -4458.37, 243.58, 0, 0, 0, 0, 100, 0), +(@PATH, 88, 260.301, -4482.54, 244.505, 0, 0, 0, 0, 100, 0), +(@PATH, 87, 252.56, -4505.86, 246.941, 0, 0, 0, 0, 100, 0), +(@PATH, 86, 243.717, -4532.5, 249.368, 0, 0, 0, 0, 100, 0), +(@PATH, 85, 237.602, -4557.37, 247.954, 0, 0, 0, 0, 100, 0), +(@PATH, 84, 231.692, -4582.37, 245.274, 0, 0, 0, 0, 100, 0), +(@PATH, 83, 224.597, -4610.57, 242.436, 0, 0, 0, 0, 100, 0), +(@PATH, 82, 223.749, -4639.73, 241.363, 0, 0, 0, 0, 100, 0), +(@PATH, 81, 226.857, -4665.24, 243.623, 0, 0, 0, 0, 100, 0), +(@PATH, 80, 234.426, -4692.12, 247.553, 0, 0, 0, 0, 100, 0), +(@PATH, 79, 240.367, -4715.88, 245.166, 0, 0, 0, 0, 100, 0), +(@PATH, 78, 243.871, -4731.88, 247.359, 0, 0, 0, 0, 100, 0), +(@PATH, 77, 249.727, -4747.01, 246.8, 0, 0, 0, 0, 100, 0), +(@PATH, 76, 239.906, -4721.99, 247.035, 0, 0, 0, 0, 100, 0), +(@PATH, 75, 236.078, -4695.39, 247.607, 0, 0, 0, 0, 100, 0), +(@PATH, 74, 226.232, -4654.71, 242.514, 0, 0, 0, 0, 100, 0), +(@PATH, 73, 226.232, -4654.71, 242.514, 0, 0, 0, 0, 100, 0), +(@PATH, 72, 227.986, -4631.4, 240.001, 0, 0, 0, 0, 100, 0), +(@PATH, 71, 229.821, -4606.99, 240.997, 0, 0, 0, 0, 100, 0), +(@PATH, 70, 234.019, -4584.06, 244.052, 0, 0, 0, 0, 100, 0), +(@PATH, 69, 239.693, -4561.45, 246.739, 0, 0, 0, 0, 100, 0), +(@PATH, 68, 246.252, -4541.43, 247.69, 0, 0, 0, 0, 100, 0), +(@PATH, 67, 253.509, -4519.28, 247.936, 0, 0, 0, 0, 100, 0), +(@PATH, 66, 261.137, -4496, 246.019, 0, 0, 0, 0, 100, 0), +(@PATH, 65, 270.152, -4469.53, 243.519, 0, 0, 0, 0, 100, 0), +(@PATH, 64, 278.597, -4445.37, 243.805, 0, 0, 0, 0, 100, 0), +(@PATH, 63, 293.459, -4423.06, 240.422, 0, 0, 0, 0, 100, 0), +(@PATH, 62, 308.571, -4405.31, 237.038, 0, 0, 0, 0, 100, 0), +(@PATH, 61, 324.587, -4395.68, 236.46, 0, 0, 0, 0, 100, 0), +(@PATH, 60, 348.262, -4383.1, 233.491, 0, 0, 0, 0, 100, 0), +(@PATH, 59, 370.478, -4372.92, 230.56, 0, 0, 0, 0, 100, 0), +(@PATH, 58, 396.919, -4363.71, 226.727, 0, 0, 0, 0, 100, 0), +(@PATH, 57, 421.592, -4356.55, 224.012, 0, 0, 0, 0, 100, 0), +(@PATH, 56, 444.866, -4348.9, 218.926, 0, 0, 0, 0, 100, 0), +(@PATH, 55, 467.093, -4328.29, 219.978, 0, 0, 0, 0, 100, 0), +(@PATH, 54, 487.728, -4320.13, 216.692, 0, 0, 0, 0, 100, 0), +(@PATH, 53, 513.045, -4311.31, 213.394, 0, 0, 0, 0, 100, 0), +(@PATH, 52, 539.473, -4302.27, 210.214, 0, 0, 0, 0, 100, 0), +(@PATH, 51, 569.566, -4292.96, 208.345, 0, 0, 0, 0, 100, 0), +(@PATH, 50, 599.151, -4286.06, 211.228, 0, 0, 0, 0, 100, 0), +(@PATH, 49, 626.333, -4279.72, 207.41, 0, 0, 0, 0, 100, 0), +(@PATH, 48, 639.441, -4274.8, 204.5, 0, 0, 0, 0, 100, 0), +(@PATH, 47, 669.414, -4265.14, 201.057, 0, 0, 0, 0, 100, 0), +(@PATH, 46, 694.932, -4256.92, 197.339, 0, 0, 0, 0, 100, 0), +(@PATH, 45, 719.042, -4252.18, 194.113, 0, 0, 0, 0, 100, 0), +(@PATH, 44, 746.517, -4246.78, 190.165, 0, 0, 0, 0, 100, 0), +(@PATH, 43, 773.652, -4239.6, 185.035, 0, 0, 0, 0, 100, 0), +(@PATH, 42, 788.697, -4238.1, 183.884, 0, 0, 0, 0, 100, 0), +(@PATH, 41, 809.617, -4235.62, 178.696, 0, 0, 0, 0, 100, 0), +(@PATH, 40, 830.245, -4239.16, 176.606, 0, 0, 0, 0, 100, 0), +(@PATH, 39, 856.9, -4240.27, 173.761, 0, 0, 0, 0, 100, 0), +(@PATH, 38, 887.184, -4241.53, 172.174, 0, 0, 0, 0, 100, 0), +(@PATH, 37, 915.043, -4244.34, 169.077, 0, 0, 0, 0, 100, 0), +(@PATH, 36, 945.863, -4237.87, 164.815, 0, 0, 0, 0, 100, 0), +(@PATH, 35, 975.129, -4230.22, 161.842, 0, 0, 0, 0, 100, 0), +(@PATH, 34, 1002.35, -4223.36, 161.401, 0, 0, 0, 0, 100, 0), +(@PATH, 33, 1034.18, -4230.82, 163.087, 0, 0, 0, 0, 100, 0), +(@PATH, 32, 1062.48, -4241.65, 161.884, 0, 0, 0, 0, 100, 0), +(@PATH, 31, 1089.17, -4253.36, 157.158, 0, 0, 0, 0, 100, 0), +(@PATH, 30, 1111.77, -4265.56, 158.432, 0, 0, 0, 0, 100, 0), +(@PATH, 29, 1145.89, -4285.82, 159.868, 0, 0, 0, 0, 100, 0), +(@PATH, 28, 1121.21, -4266.25, 158.309, 0, 0, 0, 0, 100, 0), +(@PATH, 27, 1102.14, -4254.96, 156.27, 0, 0, 0, 0, 100, 0), +(@PATH, 26, 1073.58, -4236.91, 160.029, 0, 0, 0, 0, 100, 0), +(@PATH, 25, 1056.73, -4222.6, 161.806, 0, 0, 0, 0, 100, 0), +(@PATH, 24, 1039.45, -4200.56, 163.18, 0, 0, 0, 0, 100, 0), +(@PATH, 23, 1031.87, -4176.05, 162.161, 0, 0, 0, 0, 100, 0), +(@PATH, 22, 1016.34, -4163.74, 159.168, 0, 0, 0, 0, 100, 0), +(@PATH, 21, 987.273, -4161.04, 159.711, 0, 0, 0, 0, 100, 0), +(@PATH, 20, 961.659, -4160.48, 161.33, 0, 0, 0, 0, 100, 0), +(@PATH, 19, 933.212, -4166.9, 163.671, 0, 0, 0, 0, 100, 0), +(@PATH, 1, 475.035, -4278.07, 228.181, 0, 0, 0, 0, 100, 0), +(@PATH, 2, 502.505, -4287.72, 218.585, 0, 0, 0, 0, 100, 0), +(@PATH, 3, 526.723, -4296.29, 213.177, 0, 0, 0, 0, 100, 0), +(@PATH, 4, 555.716, -4299.68, 208.203, 0, 0, 0, 0, 100, 0), +(@PATH, 5, 588.967, -4306.18, 209.301, 0, 0, 0, 0, 100, 0), +(@PATH, 6, 612.82, -4293.98, 208.841, 0, 0, 0, 0, 100, 0), +(@PATH, 7, 635.626, -4282.17, 205.791, 0, 0, 0, 0, 100, 0), +(@PATH, 8, 662.86, -4275.82, 200.324, 0, 0, 0, 0, 100, 0), +(@PATH, 9, 683.811, -4263.12, 199.173, 0, 0, 0, 0, 100, 0), +(@PATH, 10, 707.863, -4246.58, 196.467, 0, 0, 0, 0, 100, 0), +(@PATH, 11, 726.315, -4239.22, 193.225, 0, 0, 0, 0, 100, 0), +(@PATH, 12, 753.136, -4237.44, 189.323, 0, 0, 0, 0, 100, 0), +(@PATH, 13, 773.723, -4233.31, 183.506, 0, 0, 0, 0, 100, 0), +(@PATH, 14, 793.134, -4216.48, 181.369, 0, 0, 0, 0, 100, 0), +(@PATH, 15, 815.803, -4200.09, 179.988, 0, 0, 0, 0, 100, 0), +(@PATH, 16, 841.911, -4190.02, 174.219, 0, 0, 0, 0, 100, 0), +(@PATH, 17, 879.845, -4183.46, 169.019, 0, 0, 0, 0, 100, 0), +(@PATH, 18, 907.268, -4173.66, 166.74, 0, 0, 0, 0, 100, 0); diff --git a/sql/updates/world/2015_05_31_05_world.sql b/sql/updates/world/2015_05_31_05_world.sql new file mode 100644 index 00000000000..bba678d60d6 --- /dev/null +++ b/sql/updates/world/2015_05_31_05_world.sql @@ -0,0 +1,207 @@ +-- Winterskorn Hunter +SET @CGUID := 16403; +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+3; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@CGUID+0, 26663, 571, 1, 1, 869.8931, -4221.893, 170.3676, 2.083399, 120, 0, 0), +(@CGUID+1, 24076, 571, 1, 1, 869.4127, -4231.234, 172.1629, 2.083083, 120, 0, 0), +(@CGUID+2, 26663, 571, 1, 1, 869.4127, -4231.234, 172.1629, 2.083083, 120, 0, 0), +(@CGUID+3, 24076, 571, 1, 1, 1010.354, -4123.357, 172.1629, 2.083083, 120, 0, 0); + +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@CGUID, @CGUID+2); +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES +(@CGUID, @CGUID, 0, 0, 2, 0, 0), +(@CGUID, @CGUID+1, 2, 90, 0, 0, 0), +(@CGUID+2, @CGUID+2, 0, 0, 2, 0, 0), +(@CGUID+2, @CGUID+3, 2, 90, 0, 0, 0); + +SET @NPC := @CGUID; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=864.7987,`position_y`=-4212.048,`position_z`=171.1561 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,864.7987,-4212.048,171.1561,0,0,0,0,100,0), +(@PATH,2,867.7987,-4194.548,170.6561,0,0,0,0,100,0), +(@PATH,3,869.3953,-4186.757,170.9983,0,0,0,0,100,0), +(@PATH,4,871.8953,-4182.507,171.2483,0,0,0,0,100,0), +(@PATH,5,872.6453,-4181.007,171.9983,0,0,0,0,100,0), +(@PATH,6,876.8981,-4172.719,172.1371,0,0,0,0,100,0), +(@PATH,7,886.1481,-4163.469,172.6371,0,0,0,0,100,0), +(@PATH,8,902.6481,-4146.469,172.1371,0,0,0,0,100,0), +(@PATH,9,902.7696,-4146.216,172.1291,0,0,0,0,100,0), +(@PATH,10,903.7696,-4145.216,171.8791,0,0,0,0,100,0), +(@PATH,11,905.7696,-4144.466,171.3791,0,0,0,0,100,0), +(@PATH,12,908.2696,-4143.216,170.6291,0,0,0,0,100,0), +(@PATH,13,910.2696,-4142.216,170.1291,0,0,0,0,100,0), +(@PATH,14,912.0196,-4141.466,169.3791,0,0,0,0,100,0), +(@PATH,15,913.7696,-4140.466,168.6291,0,0,0,0,100,0), +(@PATH,16,917.5196,-4138.716,168.3791,0,0,0,0,100,0), +(@PATH,17,920.0196,-4137.466,167.6291,0,0,0,0,100,0), +(@PATH,18,930.7696,-4132.466,167.1291,0,0,0,0,100,0), +(@PATH,19,938.0196,-4129.216,166.6291,0,0,0,0,100,0), +(@PATH,20,941.5196,-4127.466,165.8791,0,0,0,0,100,0), +(@PATH,21,904.5845,-4145.06,171.5024,0.4463101,5000,0,0,100,0), +(@PATH,22,906.6863,-4144.064,170.8976,0,0,0,0,100,0), +(@PATH,23,909.4363,-4142.564,170.3976,0,0,0,0,100,0), +(@PATH,24,911.1863,-4141.814,169.6476,0,0,0,0,100,0), +(@PATH,25,913.9363,-4140.564,168.6476,0,0,0,0,100,0), +(@PATH,26,917.4363,-4138.814,168.1476,0,0,0,0,100,0), +(@PATH,27,920.1863,-4137.564,167.6476,0,0,0,0,100,0), +(@PATH,28,930.6863,-4132.564,167.1476,0,0,0,0,100,0), +(@PATH,29,937.9363,-4129.064,166.6476,0,0,0,0,100,0), +(@PATH,30,940.6863,-4127.814,165.8976,0,0,0,0,100,0), +(@PATH,31,908.2701,-4143.178,170.7699,0,0,0,0,100,0), +(@PATH,32,909.1838,-4142.718,170.4703,0,0,0,0,100,0), +(@PATH,33,910.9338,-4141.718,169.7203,0,0,0,0,100,0), +(@PATH,34,914.6838,-4140.218,168.9703,0,0,0,0,100,0), +(@PATH,35,917.4338,-4138.718,168.2203,0,0,0,0,100,0), +(@PATH,36,920.1838,-4137.468,167.7203,0,0,0,0,100,0), +(@PATH,37,930.6838,-4132.718,166.9703,0,0,0,0,100,0), +(@PATH,38,937.9338,-4129.218,166.4703,0,0,0,0,100,0), +(@PATH,39,941.4338,-4127.468,165.9703,0,0,0,0,100,0), +(@PATH,40,909.7615,-4142.584,169.8862,0.4461821,5000,0,0,100,0), +(@PATH,41,911.8156,-4141.577,169.3572,0,0,0,0,100,0), +(@PATH,42,915.3156,-4139.827,168.6072,0,0,0,0,100,0), +(@PATH,43,918.0656,-4138.577,167.8572,0,0,0,0,100,0), +(@PATH,44,924.5656,-4135.577,167.3572,0,0,0,0,100,0), +(@PATH,45,935.0656,-4130.577,166.8572,0,0,0,0,100,0), +(@PATH,46,940.5656,-4128.077,166.1072,0,0,0,0,100,0), +(@PATH,47,943.0656,-4126.577,165.3572,0,0,0,0,100,0), +(@PATH,48,913.4222,-4140.722,169.1442,0,0,0,0,100,0), +(@PATH,49,915.3442,-4139.718,168.3767,0,0,0,0,100,0), +(@PATH,50,918.0942,-4138.468,167.6267,0,0,0,0,100,0), +(@PATH,51,924.3442,-4135.468,167.1267,0,0,0,0,100,0), +(@PATH,52,934.8442,-4130.468,166.8767,0,0,0,0,100,0), +(@PATH,53,940.3442,-4127.968,166.1267,0,0,0,0,100,0), +(@PATH,54,943.0942,-4126.718,165.3767,0,0,0,0,100,0), +(@PATH,55,914.8909,-4140.135,168.3818,0.4461821,5000,0,0,100,0), +(@PATH,56,919.6302,-4137.853,167.8549,0,0,0,0,100,0), +(@PATH,57,925.8802,-4134.853,167.1049,0,0,0,0,100,0), +(@PATH,58,934.6302,-4130.603,166.6049,0,0,0,0,100,0), +(@PATH,59,940.1302,-4128.103,166.1049,0,0,0,0,100,0), +(@PATH,60,942.8802,-4126.853,165.3549,0,0,0,0,100,0); + +SET @NPC := @CGUID+2; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1010.354,`position_y`=-4123.357,`position_z`=156.7801 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1010.354,-4123.357,156.7801,0,0,0,0,100,0), +(@PATH,2,1024.104,-4121.607,156.2801,0,0,0,0,100,0), +(@PATH,3,1031.805,-4120.534,156.5064,0,0,0,0,100,0), +(@PATH,4,1038.805,-4124.284,156.2564,0,0,0,0,100,0), +(@PATH,5,1049.638,-4130.334,156.4905,0,0,0,0,100,0), +(@PATH,6,1055.138,-4138.584,155.9905,0,0,0,0,100,0), +(@PATH,7,1056.388,-4141.084,155.2405,0,0,0,0,100,0), +(@PATH,8,1057.638,-4142.584,153.4905,0,0,0,0,100,0), +(@PATH,9,1058.638,-4144.334,152.7405,0,0,0,0,100,0), +(@PATH,10,1059.138,-4145.084,151.7405,0,0,0,0,100,0), +(@PATH,11,1060.138,-4146.834,150.7405,0,0,0,0,100,0), +(@PATH,12,1062.888,-4151.084,151.4905,0,0,0,0,100,0), +(@PATH,13,1064.638,-4153.584,152.4905,0,0,0,0,100,0), +(@PATH,14,1064.735,-4153.911,152.6306,0,0,0,0,100,0), +(@PATH,15,1066.735,-4156.911,153.6306,0,0,0,0,100,0), +(@PATH,16,1068.735,-4160.411,154.1306,0,0,0,0,100,0), +(@PATH,17,1078.735,-4179.661,154.6306,0,0,0,0,100,0), +(@PATH,18,1081.652,-4185.499,155.3617,0,0,0,0,100,0), +(@PATH,19,1081.902,-4189.499,155.8617,0,0,0,0,100,0), +(@PATH,20,1082.152,-4205.499,155.3617,0,0,0,0,100,0), +(@PATH,21,1082.402,-4220.249,155.8617,0,0,0,0,100,0), +(@PATH,22,1082.652,-4227.249,156.3617,0,0,0,0,100,0), +(@PATH,23,1082.652,-4232.249,157.1117,0,0,0,0,100,0), +(@PATH,24,1082.636,-4232.529,157.1391,0,0,0,0,100,0), +(@PATH,25,1082.636,-4234.279,157.3891,0,0,0,0,100,0), +(@PATH,26,1081.136,-4236.779,158.1391,0,0,0,0,100,0), +(@PATH,27,1078.636,-4240.029,158.8891,0,0,0,0,100,0), +(@PATH,28,1077.136,-4242.529,159.6391,0,0,0,0,100,0), +(@PATH,29,1074.636,-4245.779,160.3891,0,0,0,0,100,0), +(@PATH,30,1072.386,-4248.779,161.1391,0,0,0,0,100,0), +(@PATH,31,1069.386,-4253.529,161.6391,0,0,0,0,100,0), +(@PATH,32,1061.036,-4264.879,161.6266,0,0,0,0,100,0), +(@PATH,33,1059.286,-4262.629,162.3766,0,0,0,0,100,0), +(@PATH,34,1057.036,-4259.379,162.8766,0,0,0,0,100,0), +(@PATH,35,1051.786,-4252.379,163.3766,0,0,0,0,100,0), +(@PATH,36,1051.524,-4252.102,163.3611,0,0,0,0,100,0), +(@PATH,37,1051.024,-4251.102,163.6111,0,0,0,0,100,0), +(@PATH,38,1047.524,-4247.352,164.3611,0,0,0,0,100,0), +(@PATH,39,1035.274,-4233.352,163.6111,0,0,0,0,100,0), +(@PATH,40,1032.032,-4229.585,163.0954,0,0,0,0,100,0), +(@PATH,41,1022.532,-4224.085,162.5954,0,0,0,0,100,0), +(@PATH,42,1018.532,-4221.585,162.0954,0,0,0,0,100,0), +(@PATH,43,1015.032,-4219.585,161.5954,0,0,0,0,100,0), +(@PATH,44,1010.323,-4216.906,161.2029,0,0,0,0,100,0), +(@PATH,45,1005.323,-4216.656,161.7029,0,0,0,0,100,0), +(@PATH,46,1003.323,-4216.656,162.2029,0,0,0,0,100,0), +(@PATH,47,1000.573,-4216.406,162.9529,0,0,0,0,100,0), +(@PATH,48,996.5729,-4216.406,163.4529,0,0,0,0,100,0), +(@PATH,49,990.4298,-4216.181,163.648,0,0,0,0,100,0), +(@PATH,50,985.9298,-4218.431,162.898,0,0,0,0,100,0), +(@PATH,51,983.4298,-4219.681,162.648,0,0,0,0,100,0), +(@PATH,52,980.9298,-4220.931,161.898,0,0,0,0,100,0), +(@PATH,53,978.1798,-4221.931,161.148,0,0,0,0,100,0), +(@PATH,54,972.6798,-4224.431,161.898,0,0,0,0,100,0), +(@PATH,55,972.4193,-4224.729,162.0995,0,0,0,0,100,0), +(@PATH,56,970.9193,-4225.479,162.3495,0,0,0,0,100,0), +(@PATH,57,968.4193,-4228.479,162.8495,0,0,0,0,100,0), +(@PATH,58,965.4193,-4232.479,163.3495,0,0,0,0,100,0), +(@PATH,59,963.4193,-4234.479,163.8495,0,0,0,0,100,0), +(@PATH,60,959.4193,-4238.979,164.5995,0,0,0,0,100,0), +(@PATH,61,959.306,-4239.212,164.8905,0,0,0,0,100,0), +(@PATH,62,957.056,-4241.712,165.3905,0,0,0,0,100,0), +(@PATH,63,952.806,-4244.462,166.1405,0,0,0,0,100,0), +(@PATH,64,948.556,-4246.962,166.3905,0,0,0,0,100,0), +(@PATH,65,943.806,-4249.962,167.1405,0,0,0,0,100,0), +(@PATH,66,936.056,-4254.712,167.8905,0,0,0,0,100,0), +(@PATH,67,935.7786,-4254.604,167.9532,0,0,0,0,100,0), +(@PATH,68,934.2786,-4255.604,168.2032,0,0,0,0,100,0), +(@PATH,69,930.2786,-4254.604,168.9532,0,0,0,0,100,0), +(@PATH,70,926.5286,-4253.604,169.4532,0,0,0,0,100,0), +(@PATH,71,918.0286,-4251.354,170.2032,0,0,0,0,100,0), +(@PATH,72,914.2786,-4250.354,170.7032,0,0,0,0,100,0), +(@PATH,73,914.0798,-4250.134,171.0802,0,0,0,0,100,0), +(@PATH,74,912.3298,-4249.634,171.3302,0,0,0,0,100,0), +(@PATH,75,899.8298,-4246.134,171.5802,0,0,0,0,100,0), +(@PATH,76,895.3298,-4245.134,172.0802,0,0,0,0,100,0), +(@PATH,77,891.3298,-4244.134,172.8302,0,0,0,0,100,0), +(@PATH,78,880.7011,-4240.813,172.8416,0,0,0,0,100,0), +(@PATH,79,876.2011,-4233.063,172.3416,0,0,0,0,100,0), +(@PATH,80,873.7011,-4227.813,171.8416,0,0,0,0,100,0), +(@PATH,81,871.7011,-4224.563,171.3416,0,0,0,0,100,0), +(@PATH,82,869.7011,-4221.063,170.5916,0,0,0,0,100,0), +(@PATH,83,864.8547,-4212.148,171.1479,0,0,0,0,100,0), +(@PATH,84,867.8547,-4194.648,170.6479,0,0,0,0,100,0), +(@PATH,85,869.3699,-4186.896,170.9984,0,0,0,0,100,0), +(@PATH,86,871.8699,-4182.396,171.2484,0,0,0,0,100,0), +(@PATH,87,872.6199,-4180.896,171.9984,0,0,0,0,100,0), +(@PATH,88,877.054,-4172.754,172.1564,0,0,0,0,100,0), +(@PATH,89,886.054,-4163.504,172.6564,0,0,0,0,100,0), +(@PATH,90,902.554,-4146.504,172.1564,0,0,0,0,100,0), +(@PATH,91,902.903,-4146.336,172.1329,0,0,0,0,100,0), +(@PATH,92,903.903,-4145.336,171.8829,0,0,0,0,100,0), +(@PATH,93,905.653,-4144.336,171.3829,0,0,0,0,100,0), +(@PATH,94,908.403,-4143.086,170.6329,0,0,0,0,100,0), +(@PATH,95,910.153,-4142.336,170.1329,0,0,0,0,100,0), +(@PATH,96,911.903,-4141.336,169.3829,0,0,0,0,100,0), +(@PATH,97,913.903,-4140.586,168.6329,0,0,0,0,100,0), +(@PATH,98,917.403,-4138.836,168.3829,0,0,0,0,100,0), +(@PATH,99,920.153,-4137.586,167.6329,0,0,0,0,100,0), +(@PATH,100,930.653,-4132.586,167.1329,0,0,0,0,100,0), +(@PATH,101,937.903,-4129.086,166.6329,0,0,0,0,100,0), +(@PATH,102,941.403,-4127.336,165.8829,0,0,0,0,100,0), +(@PATH,103,944.5377,-4125.965,165.2894,0,0,0,0,100,0), +(@PATH,104,947.2877,-4124.965,164.5394,0,0,0,0,100,0), +(@PATH,105,960.2877,-4120.465,165.2894,0,0,0,0,100,0), +(@PATH,106,960.4887,-4120.598,165.3131,0,0,0,0,100,0), +(@PATH,107,961.2387,-4120.348,165.3131,0,0,0,0,100,0), +(@PATH,108,964.4887,-4124.098,164.8131,0,0,0,0,100,0), +(@PATH,109,966.9887,-4127.098,164.0631,0,0,0,0,100,0), +(@PATH,110,970.2387,-4131.098,163.5631,0,0,0,0,100,0), +(@PATH,111,971.9887,-4133.348,162.8131,0,0,0,0,100,0), +(@PATH,112,974.9887,-4136.848,162.0631,0,0,0,0,100,0), +(@PATH,113,977.4887,-4140.098,161.5631,0,0,0,0,100,0), +(@PATH,114,979.4887,-4142.348,161.0631,0,0,0,0,100,0), +(@PATH,115,980.7387,-4143.848,160.3131,0,0,0,0,100,0), +(@PATH,116,982.7387,-4146.098,159.5631,0,0,0,0,100,0); diff --git a/sql/updates/world/2015_06_01_00_world.sql b/sql/updates/world/2015_06_01_00_world.sql new file mode 100644 index 00000000000..8ba1d65ec52 --- /dev/null +++ b/sql/updates/world/2015_06_01_00_world.sql @@ -0,0 +1 @@ +ALTER TABLE `gameobject_addon` MODIFY `guid` int(10) unsigned NOT NULL DEFAULT '0'; diff --git a/sql/updates/world/2015_06_01_01_world.sql b/sql/updates/world/2015_06_01_01_world.sql new file mode 100644 index 00000000000..6edab0cd995 --- /dev/null +++ b/sql/updates/world/2015_06_01_01_world.sql @@ -0,0 +1,14 @@ +-- +DELETE FROM `creature` WHERE `guid` IN (45823, 45824, 45825, 45826); +INSERT INTO `creature` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `VerifiedBuild`) VALUES +(45823, 3855, 33, 0, 0, 1, 1, 657, 0, -194.644, 2289.77, 95.899, 2.57587, 7200, 3, 0, 1212, 912, 1, 0, 0, 0, 0), +(45824, 446, 0, 0, 0, 1, 1, 609, 1, -8936.93, -2315.47, 132.649, 3.19395, 300, 0, 0, 417, 0, 0, 0, 0, 0, 0), +(45825, 446, 0, 0, 0, 1, 1, 609, 1, -8947.99, -2335.42, 132.569, 4.33752, 300, 3, 0, 417, 0, 1, 0, 0, 0, 0), +(45826, 430, 0, 0, 0, 1, 1, 10789, 1, -9096.31, -2380.26, 123.354, 3.48563, 300, 5, 0, 354, 1020, 1, 0, 0, 0, 0); + +DELETE FROM `creature_addon` WHERE `guid` IN (45823, 45824, 45825, 45826); +INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES +(45823, 0, 0, 0, 4097, 0, ''), +(45824, 0, 0, 0, 4097, 0, ''), +(45825, 0, 0, 0, 4097, 0, ''), +(45826, 0, 0, 0, 4097, 0, ''); diff --git a/sql/updates/world/2015_06_02_00_world.sql b/sql/updates/world/2015_06_02_00_world.sql new file mode 100644 index 00000000000..671a776367f --- /dev/null +++ b/sql/updates/world/2015_06_02_00_world.sql @@ -0,0 +1,45 @@ +UPDATE `creature_template` SET `ainame`='SmartAI', `scriptname`='' WHERE `entry`in(20875); + +DELETE FROM `smart_scripts` WHERE `entryorguid`in(20875) AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(20875,0,0,0,4,0,100,0,0,0,0,0,11,36733,2,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Agro - Cast Elemental Response'), +(20875,0,1,0,9,0,100,0,0,8,12000,20000,11,13704,0,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Range - Cast Psychic Scream'), +(20875,0,2,0,0,2,100,0,15000,25000,15000,25000,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - IC (Phase 2) - Set Phase 1'), +(20875,0,3,0,4,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Agro - Set Phase 1'), +(20875,0,4,17,8,1,100,0,0,2,0,0,11,34336,2,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Spellhit (Holy) (Phase 1) - Cast Damage Reduction: Holy'), +(20875,0,5,18,8,1,100,0,0,4,0,0,11,34333,2,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Spellhit (Fire) (Phase 1) - Cast Damage Reduction: Fire'), +(20875,0,6,19,8,1,100,0,0,8,0,0,11,34335,2,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Spellhit (Nature)(Phase 1) - Cast Damage Reduction: Nature'), +(20875,0,7,20,8,1,100,0,0,16,0,0,11,34334,2,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Spellhit (Frost) (Phase 1) - Cast Damage Reduction: Frost'), +(20875,0,8,21,8,1,100,0,0,32,0,0,11,34338,2,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Spellhit (Shadow) (Phase 1) - Cast Damage Reduction: Shadow'), +(20875,0,9,22,8,1,100,0,0,64,0,0,11,34331,2,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Spellhit (Arcane) (Phase 1) - Cast Damage Reduction: Arcane'), +(20875,0,10,0,61,0,100,0,0,0,0,0,22,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - Link - Set Phase 2'), +(20875,0,11,0,0,2,100,0,0,0,3000,3500,11,36742,64,0,0,0,0,2,0,0,0,0,0,0,0,'Negaton Screamer - IC (Phase 2) - Cast Fireball Volley'), +(20875,0,12,0,0,2,100,0,0,0,3000,3500,11,36738,64,0,0,0,0,2,0,0,0,0,0,0,0,'Negaton Screamer - IC (Phase 2) - Cast Arcane Volley'), +(20875,0,13,0,0,2,100,0,0,0,3000,3500,11,36741,64,0,0,0,0,2,0,0,0,0,0,0,0,'Negaton Screamer - IC (Phase 2) - Cast Frostbolt Volley'), +(20875,0,14,0,0,2,100,0,0,0,3000,3500,11,36743,64,0,0,0,0,2,0,0,0,0,0,0,0,'Negaton Screamer - IC (Phase 2) - Cast Holy Bolt Volley'), +(20875,0,15,0,0,2,100,0,0,0,3000,3500,11,36740,64,0,0,0,0,2,0,0,0,0,0,0,0,'Negaton Screamer - IC (Phase 2) - Cast Lightning Bolt Volley'), +(20875,0,16,0,0,2,100,0,0,0,3000,3500,11,36736,64,0,0,0,0,2,0,0,0,0,0,0,0,'Negaton Screamer - IC (Phase 2) - Cast Shadow Bolt Volley'), +(20875,0,17,10,61,0,100,0,0,0,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Spellhit (Holy) (Phase 1) - Say'), +(20875,0,18,10,61,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Spellhit (Fire) (Phase 1) - Say'), +(20875,0,19,10,61,0,100,0,0,0,0,0,1,4,0,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Spellhit (Nature)(Phase 1) - Say'), +(20875,0,20,10,61,0,100,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Spellhit (Frost) (Phase 1) - Say'), +(20875,0,21,10,61,0,100,0,0,0,0,0,1,5,0,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Spellhit (Shadow) (Phase 1) - Say'), +(20875,0,22,10,61,0,100,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Spellhit (Arcane) (Phase 1) - Say'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry`=20875; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22, 12, 20875, 0, 0, 1, 1, 34333, 0, 0, 0, 0, 0, '', 'Negaton Screamer requires Damage Reduction: Fire to cast Fireball Volley'), +(22, 13, 20875, 0, 0, 1, 1, 34331, 0, 0, 0, 0, 0, '', 'Negaton Screamer requires Damage Reduction: Arcane to cast Arcane Volley'), +(22, 14, 20875, 0, 0, 1, 1, 34334, 0, 0, 0, 0, 0, '', 'Negaton Screamer requires Damage Reduction: Frost to cast Frostbolt Volley'), +(22, 15, 20875, 0, 0, 1, 1, 34336, 0, 0, 0, 0, 0, '', 'Negaton Screamer requires Damage Reduction: Holy to cast Holy Bolt Volley'), +(22, 16, 20875, 0, 0, 1, 1, 34335, 0, 0, 0, 0, 0, '', 'Negaton Screamer requires Damage Reduction: Nature to cast Lightning Bolt Volley'), +(22, 17, 20875, 0, 0, 1, 1, 34338, 0, 0, 0, 0, 0, '', 'Negaton Screamer requires Damage Reduction: Shadow to cast Shadow Bolt Volley'); + +DELETE FROM `creature_text` WHERE `entry`=20875; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`,`BroadcastTextID`) VALUES +(20875, 0, 0, '%s absorbs the fire energy of the attack.', 16, 0, 100, 0, 0, 0, 'Negaton Screamer',17105), +(20875, 1, 0, '%s absorbs the arcane energy of the attack.', 16, 0, 100, 0, 0, 0, 'Negaton Screamer',17109), +(20875, 2, 0, '%s absorbs the frost energy of the attack.', 16, 0, 100, 0, 0, 0, 'Negaton Screamer',17106), +(20875, 3, 0, '%s absorbs the holy energy of the attack.', 16, 0, 100, 0, 0, 0, 'Negaton Screamer',17110), +(20875, 4, 0, '%s absorbs the nature energy of the attack.', 16, 0, 100, 0, 0, 0, 'Negaton Screamer',17107), +(20875, 5, 0, '%s absorbs the shadow energy of the attack.', 16, 0, 100, 0, 0, 0, 'Negaton Screamer',17108); diff --git a/sql/updates/world/2015_06_03_00_world.sql b/sql/updates/world/2015_06_03_00_world.sql new file mode 100644 index 00000000000..31461906117 --- /dev/null +++ b/sql/updates/world/2015_06_03_00_world.sql @@ -0,0 +1,1292 @@ +-- Howling Fjord Movement + +UPDATE `creature` SET `spawndist`=10 WHERE `id`=23688; + +SET @NPC := 101946; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=927.8899,`position_y`=-3969.919,`position_z`=170.7422 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,927.8899,-3969.919,170.7422,0,0,0,0,100,0), +(@PATH,2,930.6399,-3968.669,169.9922,0,0,0,0,100,0), +(@PATH,3,934.3899,-3967.169,169.4922,0,0,0,0,100,0), +(@PATH,4,938.1399,-3965.669,168.9922,0,0,0,0,100,0), +(@PATH,5,943.3899,-3963.669,168.2422,0,0,0,0,100,0), +(@PATH,6,947.1399,-3962.169,167.7422,0,0,0,0,100,0), +(@PATH,7,950.8899,-3960.669,166.9922,0,0,0,0,100,0), +(@PATH,8,956.2105,-3958.292,166.6173,5.445427,5000,0,0,100,0), +(@PATH,9,947.8899,-3961.669,167.7422,0,0,0,0,100,0), +(@PATH,10,944.1399,-3963.169,168.2422,0,0,0,0,100,0), +(@PATH,11,941.3899,-3964.419,168.9922,0,0,0,0,100,0), +(@PATH,12,934.3899,-3967.169,169.4922,0,0,0,0,100,0), +(@PATH,13,930.6399,-3968.669,169.9922,0,0,0,0,100,0), +(@PATH,14,928.6399,-3969.419,170.7422,0,0,0,0,100,0), +(@PATH,15,925.1399,-3971.169,171.2422,0,0,0,0,100,0), +(@PATH,16,956.2105,-3958.292,166.6173,5.445427,5000,0,0,100,0); + +SET @NPC := 101951; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=979.7703,`position_y`=-3850.171,`position_z`=171.9575 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,979.7703,-3850.171,171.9575,0,0,0,0,100,0), +(@PATH,2,979.7703,-3848.671,171.9575,0,0,0,0,100,0), +(@PATH,3,978.7703,-3835.671,171.4575,0,0,0,0,100,0), +(@PATH,4,978.5203,-3824.171,171.2075,0,0,0,0,100,0), +(@PATH,5,981.0203,-3841.671,171.9575,0,0,0,0,100,0), +(@PATH,6,980.7703,-3847.421,171.9575,0,0,0,0,100,0), +(@PATH,7,982.0203,-3851.171,173.7075,0,0,0,0,100,0), +(@PATH,8,982.2703,-3851.421,173.7075,0,0,0,0,100,0), +(@PATH,9,979.7703,-3850.171,171.9575,0,0,0,0,100,0), +(@PATH,10,979.7703,-3848.671,171.9575,0,0,0,0,100,0), +(@PATH,11,978.7703,-3835.671,171.4575,0,0,0,0,100,0); + +SET @NPC := 101956; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1058.318,`position_y`=-3876.585,`position_z`=158.9284 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1058.318,-3876.585,158.9284,0,0,0,0,100,0), +(@PATH,2,1060.318,-3871.835,159.4284,0,0,0,0,100,0), +(@PATH,3,1063.068,-3865.335,159.6784,0,0,0,0,100,0), +(@PATH,4,1070.068,-3848.085,160.1784,0,0,0,0,100,0), +(@PATH,5,1071.568,-3844.335,160.9284,0,0,0,0,100,0), +(@PATH,6,1058.318,-3876.585,158.92,0,0,0,0,100,0); + +SET @NPC := 101945; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=975.5112,`position_y`=-3966.148,`position_z`=164.4601 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,975.5112,-3966.148,164.4601,0,0,0,0,100,0), +(@PATH,2,975.5112,-3962.148,164.7101,0,0,0,0,100,0), +(@PATH,3,975.5112,-3956.398,165.4601,0,0,0,0,100,0), +(@PATH,4,975.4099,-3952.235,165.9376,0,0,0,0,100,0), +(@PATH,5,972.9099,-3949.235,166.4376,0,0,0,0,100,0), +(@PATH,6,969.6599,-3945.485,166.9376,0,0,0,0,100,0), +(@PATH,7,966.6599,-3941.735,167.6876,0,0,0,0,100,0), +(@PATH,8,964.6599,-3939.485,168.1876,0,0,0,0,100,0), +(@PATH,9,964.4403,-3939.255,168.5444,0,0,0,0,100,0), +(@PATH,10,963.9403,-3938.255,168.5444,0,0,0,0,100,0), +(@PATH,11,962.1903,-3935.755,169.0444,0,0,0,0,100,0), +(@PATH,12,959.9403,-3932.505,169.5444,0,0,0,0,100,0), +(@PATH,13,958.4403,-3930.255,170.2944,0,0,0,0,100,0), +(@PATH,14,956.4403,-3927.005,171.0444,0,0,0,0,100,0), +(@PATH,15,954.1903,-3923.755,171.7944,0,0,0,0,100,0), +(@PATH,16,954.1,-3923.376,172.0369,0,0,0,0,100,0), +(@PATH,17,953.35,-3922.126,172.0369,0,0,0,0,100,0), +(@PATH,18,958.1,-3917.376,173.0369,0,0,0,0,100,0), +(@PATH,19,960.1,-3915.376,173.5369,0,0,0,0,100,0), +(@PATH,20,961.6,-3913.876,174.0369,0,0,0,0,100,0), +(@PATH,21,963.6,-3911.876,174.7869,0,0,0,0,100,0), +(@PATH,22,966.9103,-3920.505,174.0948,0,0,0,0,100,0), +(@PATH,23,967.1603,-3922.505,173.3448,0,0,0,0,100,0), +(@PATH,24,967.6603,-3924.505,172.3448,0,0,0,0,100,0), +(@PATH,25,967.9103,-3926.505,170.8448,0,0,0,0,100,0), +(@PATH,26,968.4103,-3928.255,169.8448,0,0,0,0,100,0), +(@PATH,27,968.9103,-3931.255,168.8448,0,0,0,0,100,0), +(@PATH,28,969.1603,-3933.255,167.8448,0,0,0,0,100,0), +(@PATH,29,970.1603,-3938.255,166.8448,0,0,0,0,100,0), +(@PATH,30,972.4103,-3951.755,166.3448,0,0,0,0,100,0), +(@PATH,31,973.6603,-3958.505,165.5948,0,0,0,0,100,0), +(@PATH,32,974.4103,-3962.505,165.0948,0,0,0,0,100,0), +(@PATH,33,975.1603,-3965.505,164.3448,0,0,0,0,100,0); + +SET @NPC := 101947; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1032.128,`position_y`=-3930.062,`position_z`=158.6895 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1032.128,-3930.062,158.6895,0,0,0,0,100,0), +(@PATH,2,1026.378,-3931.562,159.1895,0,0,0,0,100,0), +(@PATH,3,1020.378,-3933.062,159.6895,0,0,0,0,100,0), +(@PATH,4,999.4692,-3938.845,160.318,0,0,0,0,100,0), +(@PATH,5,996.7192,-3939.595,161.068,0,0,0,0,100,0), +(@PATH,6,992.7192,-3940.345,161.818,0,0,0,0,100,0), +(@PATH,7,988.9692,-3940.845,162.568,0,0,0,0,100,0), +(@PATH,8,985.9692,-3941.345,163.068,0,0,0,0,100,0), +(@PATH,9,982.9692,-3941.845,163.818,0,0,0,0,100,0), +(@PATH,10,980.2192,-3942.345,164.568,0,0,0,0,100,0), +(@PATH,11,979.8235,-3942.341,164.8509,0,0,0,0,100,0), +(@PATH,12,976.8235,-3942.841,165.6009,0,0,0,0,100,0), +(@PATH,13,973.3235,-3941.091,166.3509,0,0,0,0,100,0), +(@PATH,14,970.8235,-3939.841,166.6009,0,0,0,0,100,0), +(@PATH,15,967.3235,-3938.341,167.3509,0,0,0,0,100,0), +(@PATH,16,965.5735,-3937.341,167.8509,0,0,0,0,100,0), +(@PATH,17,962.8235,-3936.091,168.6009,0,0,0,0,100,0), +(@PATH,18,962.4893,-3935.881,168.7721,0,0,0,0,100,0), +(@PATH,19,960.9893,-3934.881,169.5221,0,0,0,0,100,0), +(@PATH,20,957.7393,-3932.631,170.2721,0,0,0,0,100,0), +(@PATH,21,956.4893,-3931.631,170.7721,0,0,0,0,100,0), +(@PATH,22,953.9893,-3929.881,171.2721,0,0,0,0,100,0), +(@PATH,23,950.7393,-3927.631,172.2721,0,0,0,0,100,0), +(@PATH,24,948.5079,-3926.027,172.644,0,0,0,0,100,0), +(@PATH,25,946.0079,-3913.527,173.394,0,0,0,0,100,0), +(@PATH,26,943.5978,-3902.703,173.2859,0,0,0,0,100,0), +(@PATH,27,946.8478,-3893.203,172.7859,0,0,0,0,100,0), +(@PATH,28,952.3478,-3876.453,173.0359,0,0,0,0,100,0), +(@PATH,29,952.748,-3876.235,173.0832,0,0,0,0,100,0), +(@PATH,30,953.248,-3874.985,173.0832,0,0,0,0,100,0), +(@PATH,31,962.498,-3857.735,172.5832,0,0,0,0,100,0), +(@PATH,32,966.998,-3849.735,172.3332,0,0,0,0,100,0), +(@PATH,33,969.6388,-3844.943,171.9659,0,0,0,0,100,0), +(@PATH,34,996.8723,-3834.379,171.2563,0,0,0,0,100,0), +(@PATH,35,1001.622,-3835.879,170.5063,0,0,0,0,100,0), +(@PATH,36,1006.372,-3837.629,170.0063,0,0,0,0,100,0), +(@PATH,37,1009.872,-3838.879,169.2563,0,0,0,0,100,0), +(@PATH,38,1013.622,-3839.879,168.7563,0,0,0,0,100,0), +(@PATH,39,1019.372,-3841.879,168.2563,0,0,0,0,100,0), +(@PATH,40,1021.935,-3842.818,167.5684,0,0,0,0,100,0), +(@PATH,41,1024.685,-3848.318,167.0684,0,0,0,0,100,0), +(@PATH,42,1026.435,-3851.818,166.3184,0,0,0,0,100,0), +(@PATH,43,1027.935,-3855.068,165.5684,0,0,0,0,100,0), +(@PATH,44,1029.185,-3857.818,165.0684,0,0,0,0,100,0), +(@PATH,45,1030.685,-3860.568,164.5684,0,0,0,0,100,0), +(@PATH,46,1032.435,-3864.068,163.5684,0,0,0,0,100,0), +(@PATH,47,1033.685,-3866.818,162.8184,0,0,0,0,100,0), +(@PATH,48,1034.036,-3867.004,162.5863,0,0,0,0,100,0), +(@PATH,49,1034.536,-3868.004,162.5863,0,0,0,0,100,0), +(@PATH,50,1035.036,-3871.004,161.8363,0,0,0,0,100,0), +(@PATH,51,1035.786,-3874.754,161.3363,0,0,0,0,100,0), +(@PATH,52,1036.786,-3878.754,160.5863,0,0,0,0,100,0), +(@PATH,53,1037.286,-3882.754,160.0863,0,0,0,0,100,0), +(@PATH,54,1037.786,-3885.254,159.3363,0,0,0,0,100,0), +(@PATH,55,1039.036,-3890.254,158.8363,0,0,0,0,100,0), +(@PATH,56,1041.24,-3901.999,158.2805,0,0,0,0,100,0); + +SET @NPC := 101952; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1009.311,`position_y`=-3977.181,`position_z`=159.2175 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1009.311,-3977.181,159.2175,0,0,0,0,100,0), +(@PATH,2,1006.561,-3977.931,159.9675,0,0,0,0,100,0), +(@PATH,3,1004.561,-3978.681,160.4675,0,0,0,0,100,0), +(@PATH,4,999.8114,-3980.181,160.9675,0,0,0,0,100,0), +(@PATH,5,995.0614,-3981.681,160.4675,0,0,0,0,100,0), +(@PATH,6,993.0614,-3982.181,159.7175,0,0,0,0,100,0), +(@PATH,7,977.0614,-3986.931,160.7175,0,0,0,0,100,0), +(@PATH,8,975.3114,-3987.431,161.2175,0,0,0,0,100,0), +(@PATH,9,972.3114,-3988.431,162.2175,0,0,0,0,100,0), +(@PATH,10,969.5614,-3989.181,162.9675,0,0,0,0,100,0), +(@PATH,11,966.5614,-3990.181,163.4675,0,0,0,0,100,0), +(@PATH,12,966.4469,-3990.32,163.3618,0,0,0,0,100,0), +(@PATH,13,920.9092,-3981.829,168.1994,0,0,0,0,100,0), +(@PATH,14,910.6589,-3959.608,175.5765,0,0,0,0,100,0), +(@PATH,15,909.9501,-3956.44,176.6253,0,0,0,0,100,0), +(@PATH,16,908.9501,-3951.44,177.1253,0,0,0,0,100,0), +(@PATH,17,907.4501,-3942.94,177.8753,0,0,0,0,100,0), +(@PATH,18,906.4501,-3938.19,178.1253,0,0,0,0,100,0), +(@PATH,19,905.7001,-3935.19,178.8753,0,0,0,0,100,0), +(@PATH,20,905.2001,-3933.19,179.6253,0,0,0,0,100,0), +(@PATH,21,904.1555,-3929.11,180.5247,0,0,0,0,100,0), +(@PATH,22,903.9055,-3927.11,181.0247,0,0,0,0,100,0), +(@PATH,23,903.1555,-3920.11,181.5247,0,0,0,0,100,0), +(@PATH,24,900.5728,-3898.769,181.7251,0,0,0,0,100,0), +(@PATH,25,900.5728,-3892.769,181.2251,0,0,0,0,100,0), +(@PATH,26,900.5728,-3881.019,181.7251,0,0,0,0,100,0), +(@PATH,27,901.0697,-3865.9,181.5738,0,0,0,0,100,0), +(@PATH,28,903.5697,-3858.15,180.8238,0,0,0,0,100,0), +(@PATH,29,911.6938,-3832.919,180.3241,0,0,0,0,100,0), +(@PATH,30,915.1938,-3829.169,179.5741,0,0,0,0,100,0), +(@PATH,31,918.6938,-3825.419,179.0741,0,0,0,0,100,0), +(@PATH,32,922.6938,-3821.419,178.5741,0,0,0,0,100,0), +(@PATH,33,941.0022,-3801.417,177.5542,0,0,0,0,100,0), +(@PATH,34,949.5022,-3792.167,177.0542,0,0,0,0,100,0), +(@PATH,35,957.5022,-3783.417,177.5542,0,0,0,0,100,0), +(@PATH,36,961.7522,-3778.917,177.0542,0,0,0,0,100,0), +(@PATH,37,964.6654,-3775.584,176.2806,0,0,0,0,100,0), +(@PATH,38,967.4154,-3774.834,175.7806,0,0,0,0,100,0), +(@PATH,39,972.1654,-3773.334,175.0306,0,0,0,0,100,0), +(@PATH,40,977.1654,-3772.084,174.5306,0,0,0,0,100,0), +(@PATH,41,980.6654,-3771.084,173.7806,0,0,0,0,100,0), +(@PATH,42,983.4154,-3770.334,173.5306,0,0,0,0,100,0), +(@PATH,43,987.4154,-3769.084,172.7806,0,0,0,0,100,0), +(@PATH,44,991.1654,-3768.084,172.0306,0,0,0,0,100,0), +(@PATH,45,995.1654,-3766.834,171.2806,0,0,0,0,100,0), +(@PATH,46,995.1761,-3766.911,171.2581,0,0,0,0,100,0), +(@PATH,47,998.4261,-3765.911,170.7581,0,0,0,0,100,0), +(@PATH,48,1002.426,-3768.911,170.2581,0,0,0,0,100,0), +(@PATH,49,1007.926,-3773.161,169.7581,0,0,0,0,100,0), +(@PATH,50,1012.426,-3776.661,169.2581,0,0,0,0,100,0), +(@PATH,51,1021.532,-3783.58,168.6249,0,0,0,0,100,0), +(@PATH,52,1022.782,-3801.33,168.1249,0,0,0,0,100,0), +(@PATH,53,1023.032,-3805.33,167.3749,0,0,0,0,100,0), +(@PATH,54,1023.282,-3810.33,167.1249,0,0,0,0,100,0), +(@PATH,55,1023.89,-3814.808,166.4063,0,0,0,0,100,0), +(@PATH,56,1026.39,-3819.058,165.6563,0,0,0,0,100,0), +(@PATH,57,1030.64,-3826.058,164.9063,0,0,0,0,100,0), +(@PATH,58,1034.39,-3832.558,164.6563,0,0,0,0,100,0), +(@PATH,59,1037.64,-3837.558,163.9063,0,0,0,0,100,0), +(@PATH,60,1040.64,-3842.808,163.1563,0,0,0,0,100,0), +(@PATH,61,1040.951,-3842.979,162.8698,0,0,0,0,100,0), +(@PATH,62,1041.201,-3843.479,162.8698,0,0,0,0,100,0), +(@PATH,63,1043.201,-3845.979,162.3698,0,0,0,0,100,0), +(@PATH,64,1046.201,-3849.729,161.6198,0,0,0,0,100,0), +(@PATH,65,1049.451,-3853.729,161.1198,0,0,0,0,100,0), +(@PATH,66,1052.451,-3857.229,160.6198,0,0,0,0,100,0), +(@PATH,67,1058.701,-3864.979,159.8698,0,0,0,0,100,0), +(@PATH,68,1060.563,-3867.256,159.5396,0,0,0,0,100,0), +(@PATH,69,1073.106,-3885.358,159.802,0,0,0,0,100,0), +(@PATH,70,1073.606,-3892.358,159.302,0,0,0,0,100,0), +(@PATH,71,1073.606,-3897.358,158.552,0,0,0,0,100,0), +(@PATH,72,1073.856,-3900.108,158.052,0,0,0,0,100,0), +(@PATH,73,1073.856,-3903.108,157.302,0,0,0,0,100,0), +(@PATH,74,1074.106,-3906.108,156.552,0,0,0,0,100,0), +(@PATH,75,1074.356,-3912.108,156.052,0,0,0,0,100,0), +(@PATH,76,1074.392,-3912.441,155.8847,0,0,0,0,100,0), +(@PATH,77,1074.392,-3914.441,155.6347,0,0,0,0,100,0), +(@PATH,78,1072.642,-3920.191,156.6347,0,0,0,0,100,0), +(@PATH,79,1071.642,-3924.191,157.3847,0,0,0,0,100,0), +(@PATH,80,1070.142,-3929.691,156.6347,0,0,0,0,100,0), +(@PATH,81,1069.642,-3931.691,155.8847,0,0,0,0,100,0), +(@PATH,82,1069.142,-3933.441,155.6347,0,0,0,0,100,0), +(@PATH,83,1066.642,-3942.191,155.8847,0,0,0,0,100,0), +(@PATH,84,1066.515,-3942.463,156.21,0,0,0,0,100,0), +(@PATH,85,1066.015,-3943.963,155.96,0,0,0,0,100,0), +(@PATH,86,1062.765,-3946.463,155.21,0,0,0,0,100,0), +(@PATH,87,1060.515,-3948.213,154.71,0,0,0,0,100,0), +(@PATH,88,1055.015,-3952.213,155.21,0,0,0,0,100,0), +(@PATH,89,1052.015,-3954.713,155.96,0,0,0,0,100,0), +(@PATH,90,1048.015,-3957.713,156.21,0,0,0,0,100,0), +(@PATH,91,1043.265,-3961.463,156.96,0,0,0,0,100,0); + +DELETE FROM `creature_formations` WHERE `leaderGUID`=99047; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES +(99047, 99047, 0, 0, 2, 0, 0), +(99047, 99046, 3, 90, 2, 0, 0); + +SET @NPC := 99047; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1352.596,`position_y`=-3317.135,`position_z`=175.7527 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1352.596,-3317.135,175.7527,0,0,0,0,100,0), +(@PATH,2,1352.846,-3318.135,175.5027,0,0,0,0,100,0), +(@PATH,3,1355.096,-3321.385,175.0027,0,0,0,0,100,0), +(@PATH,4,1361.346,-3331.921,174.2863,0,0,0,0,100,0), +(@PATH,5,1368.772,-3335.16,174.379,0,0,0,0,100,0), +(@PATH,6,1371.772,-3332.91,173.629,0,0,0,0,100,0), +(@PATH,7,1372.086,-3332.915,173.6307,0,0,0,0,100,0), +(@PATH,8,1375.086,-3330.665,173.1307,0,0,0,0,100,0), +(@PATH,9,1376.586,-3327.165,172.6307,0,0,0,0,100,0), +(@PATH,10,1377.336,-3325.665,171.8807,0,0,0,0,100,0), +(@PATH,11,1378.336,-3323.665,171.6307,0,0,0,0,100,0), +(@PATH,12,1379.586,-3321.165,170.8807,0,0,0,0,100,0), +(@PATH,13,1380.336,-3319.165,170.1307,0,0,0,0,100,0), +(@PATH,14,1379.744,-3320.841,170.706,0,0,0,0,100,0), +(@PATH,15,1380.744,-3319.091,169.956,0,0,0,0,100,0), +(@PATH,16,1380.994,-3318.091,169.706,0,0,0,0,100,0), +(@PATH,17,1382.744,-3315.591,169.206,0,0,0,0,100,0), +(@PATH,18,1383.994,-3313.341,168.706,0,0,0,0,100,0), +(@PATH,19,1385.994,-3309.841,167.956,0,0,0,0,100,0), +(@PATH,20,1386.362,-3309.63,167.6397,0,0,0,0,100,0), +(@PATH,21,1387.362,-3307.88,166.8897,0,0,0,0,100,0), +(@PATH,22,1388.612,-3304.38,166.6397,0,0,0,0,100,0), +(@PATH,23,1390.362,-3299.63,166.1397,0,0,0,0,100,0), +(@PATH,24,1390.417,-3299.402,165.8224,0,0,0,0,100,0), +(@PATH,25,1390.917,-3297.652,165.5724,0,0,0,0,100,0), +(@PATH,26,1389.917,-3291.902,165.0724,0,0,0,0,100,0), +(@PATH,27,1389.167,-3287.152,164.8224,0,0,0,0,100,0), +(@PATH,28,1388.186,-3282.564,164.0677,0,0,0,0,100,0), +(@PATH,29,1385.936,-3277.064,163.3177,0,0,0,0,100,0), +(@PATH,30,1383.686,-3270.814,163.0677,0,0,0,0,100,0), +(@PATH,31,1382.133,-3267.18,162.5711,0,0,0,0,100,0), +(@PATH,32,1378.133,-3258.18,162.0711,0,0,0,0,100,0), +(@PATH,33,1376.566,-3255.339,161.3748,0,0,0,0,100,0), +(@PATH,34,1372.202,-3242.191,161.2437,0,0,0,0,100,0), +(@PATH,35,1374.132,-3234.525,161.0977,0,0,0,0,100,0), +(@PATH,36,1378.753,-3225.88,160.9582,0,0,0,0,100,0), +(@PATH,37,1385.115,-3220.81,160.7566,0,0,0,0,100,0), +(@PATH,38,1394.127,-3217.729,161.1154,0,0,0,0,100,0), +(@PATH,39,1403.856,-3222.575,161.4398,0,0,0,0,100,0), +(@PATH,40,1411.606,-3232.575,161.6898,0,0,0,0,100,0), +(@PATH,41,1414.666,-3236.515,162.3234,0,0,0,0,100,0), +(@PATH,42,1414.666,-3247.265,162.8234,0,0,0,0,100,0), +(@PATH,43,1414.771,-3252.424,163.2726,0,0,0,0,100,0), +(@PATH,44,1414.021,-3258.174,164.0226,0,0,0,0,100,0), +(@PATH,45,1414.021,-3262.174,164.5226,0,0,0,0,100,0), +(@PATH,46,1413.521,-3265.174,165.2726,0,0,0,0,100,0), +(@PATH,47,1413.733,-3262.417,164.6622,0,0,0,0,100,0), +(@PATH,48,1413.233,-3265.417,165.1622,0,0,0,0,100,0), +(@PATH,49,1413.233,-3265.917,165.4122,0,0,0,0,100,0), +(@PATH,50,1411.233,-3269.417,165.9122,0,0,0,0,100,0), +(@PATH,51,1405.778,-3279.358,166.6208,0,0,0,0,100,0), +(@PATH,52,1404.778,-3288.358,167.1208,0,0,0,0,100,0), +(@PATH,53,1403.408,-3298.71,167.5344,0,0,0,0,100,0), +(@PATH,54,1406.908,-3305.46,167.7844,0,0,0,0,100,0), +(@PATH,55,1408.95,-3309.012,168.17,0,0,0,0,100,0), +(@PATH,56,1408.2,-3316.762,168.67,0,0,0,0,100,0), +(@PATH,57,1408.067,-3316.934,169.0204,0,0,0,0,100,0), +(@PATH,58,1407.817,-3319.934,169.0204,0,0,0,0,100,0), +(@PATH,59,1401.817,-3329.684,169.5204,0,0,0,0,100,0), +(@PATH,60,1401.465,-3330.132,169.6485,0,0,0,0,100,0), +(@PATH,61,1400.465,-3331.882,169.8985,0,0,0,0,100,0), +(@PATH,62,1398.465,-3332.632,170.6485,0,0,0,0,100,0), +(@PATH,63,1396.715,-3333.382,171.3985,0,0,0,0,100,0), +(@PATH,64,1394.715,-3333.882,171.8985,0,0,0,0,100,0), +(@PATH,65,1392.215,-3334.882,172.6485,0,0,0,0,100,0), +(@PATH,66,1390.465,-3335.632,173.3985,0,0,0,0,100,0), +(@PATH,67,1388.465,-3336.382,174.1485,0,0,0,0,100,0), +(@PATH,68,1385.107,-3337.809,174.7894,0,0,0,0,100,0), +(@PATH,69,1364.671,-3338.77,175.1342,0,0,0,0,100,0), +(@PATH,70,1360.421,-3336.52,174.6342,0,0,0,0,100,0), +(@PATH,71,1341.321,-3326.252,174.5247,0,0,0,0,100,0), +(@PATH,72,1330.708,-3317.201,174.4075,0,0,0,0,100,0), +(@PATH,73,1327.478,-3307.686,174.2973,0,0,0,0,100,0), +(@PATH,74,1335.477,-3296.597,174.7568,0,0,0,0,100,0), +(@PATH,75,1345.069,-3297.623,175.08,0,0,0,0,100,0), +(@PATH,76,1348.569,-3303.373,175.33,0,0,0,0,100,0); + +SET @NPC := 105163; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1314.033,`position_y`=-3284.895,`position_z`=177.2863 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1314.033,-3284.895,177.2863,0,0,0,0,100,0), +(@PATH,2,1316.033,-3285.895,177.2863,0,0,0,0,100,0), +(@PATH,3,1320.642,-3287.875,177.2982,0,0,0,0,100,0), +(@PATH,4,1320.985,-3287.746,177.2938,0,0,0,0,100,0), +(@PATH,5,1323.485,-3286.746,177.2938,0,0,0,0,100,0), +(@PATH,6,1323.367,-3286.639,177.2937,0,0,0,0,100,0), +(@PATH,7,1322.867,-3284.389,177.2937,0,0,0,0,100,0), +(@PATH,8,1322.852,-3284.283,177.303,0,0,0,0,100,0), +(@PATH,9,1320.102,-3282.033,177.303,0,0,0,0,100,0), +(@PATH,10,1320.102,-3280.283,177.303,0,0,0,0,100,0), +(@PATH,11,1319.962,-3280.097,177.1187,0,0,0,0,100,0), +(@PATH,12,1319.962,-3278.597,177.1187,0,0,0,0,100,0), +(@PATH,13,1323.462,-3275.097,177.3687,0,0,0,0,100,0), +(@PATH,14,1323.749,-3275.225,177.2502,0,0,0,0,100,0), +(@PATH,15,1325.999,-3272.975,177.2502,0,0,0,0,100,0), +(@PATH,16,1326.999,-3273.225,177.2502,0,0,0,0,100,0), +(@PATH,17,1328.249,-3273.725,178.0002,0,0,0,0,100,0), +(@PATH,18,1329.499,-3273.975,177.5002,0,0,0,0,100,0), +(@PATH,19,1331.643,-3274.349,176.4724,0,0,0,0,100,0), +(@PATH,20,1331.893,-3274.849,176.4724,0,0,0,0,100,0), +(@PATH,21,1334.272,-3278.162,175.0519,0,0,0,0,100,0), +(@PATH,22,1335.352,-3285.597,174.7435,0,0,0,0,100,0), +(@PATH,23,1332.486,-3294.855,174.5798,0,0,0,0,100,0), +(@PATH,24,1326.069,-3300.929,174.3962,0,0,0,0,100,0), +(@PATH,25,1318.966,-3298.954,174.0869,0,0,0,0,100,0), +(@PATH,26,1320.198,-3299.569,174.0601,0.9072711,5000,0,0,100,0), +(@PATH,27,1313.834,-3295.061,174.0218,0,0,0,0,100,0), +(@PATH,28,1313.781,-3294.923,174.2718,0,0,0,0,100,0), +(@PATH,29,1306.196,-3291.011,174.1353,0,0,0,0,100,0), +(@PATH,30,1301.449,-3287.75,174.3227,0,0,0,0,100,0), +(@PATH,31,1298.332,-3283.436,174.3493,0,0,0,0,100,0), +(@PATH,32,1298.582,-3281.936,174.3493,0,0,0,0,100,0), +(@PATH,33,1298.582,-3280.936,174.3493,0,0,0,0,100,0), +(@PATH,34,1298.582,-3279.186,174.3493,0,0,0,0,100,0), +(@PATH,35,1298.582,-3278.186,174.3493,0,0,0,0,100,0), +(@PATH,36,1298.582,-3277.186,174.3493,0,0,0,0,100,0), +(@PATH,37,1298.582,-3276.186,175.5993,0,0,0,0,100,0), +(@PATH,38,1299.332,-3275.436,178.0993,0,0,0,0,100,0), +(@PATH,39,1300.332,-3275.436,177.3493,0,0,0,0,100,0), +(@PATH,40,1301.082,-3275.436,177.5993,0,0,0,0,100,0), +(@PATH,41,1300.295,-3275.392,177.3847,0,0,0,0,100,0), +(@PATH,42,1301.295,-3275.392,177.6347,0,0,0,0,100,0), +(@PATH,43,1301.795,-3273.642,177.6347,0,0,0,0,100,0), +(@PATH,44,1301.795,-3272.642,177.6347,0,0,0,0,100,0), +(@PATH,45,1301.295,-3270.892,178.6347,0,0,0,0,100,0), +(@PATH,46,1301.795,-3270.142,177.8847,0,0,0,0,100,0), +(@PATH,47,1302.295,-3269.142,177.1347,0,0,0,0,100,0), +(@PATH,48,1302.547,-3268.979,177.2808,0,0,0,0,100,0), +(@PATH,49,1304.297,-3266.479,176.7808,0,0,0,0,100,0), +(@PATH,50,1305.547,-3265.479,176.5308,0,0,0,0,100,0), +(@PATH,51,1304.049,-3266.798,176.6253,5.449048,5000,0,0,100,0), +(@PATH,52,1305.677,-3265.212,176.3015,0,0,0,0,100,0), +(@PATH,53,1308.03,-3262.957,176.0556,0,0,0,0,100,0), +(@PATH,54,1314.182,-3259.36,176.238,0,0,0,0,100,0), +(@PATH,55,1318.634,-3256.955,176.1925,0,0,0,0,100,0), +(@PATH,56,1323.134,-3258.455,175.6925,0,0,0,0,100,0), +(@PATH,57,1327.647,-3259.723,175.6314,0,0,0,0,100,0), +(@PATH,58,1333.397,-3263.223,176.1314,0,0,0,0,100,0), +(@PATH,59,1333.772,-3263.517,176.2016,0,0,0,0,100,0), +(@PATH,60,1334.772,-3264.017,176.2016,0,0,0,0,100,0), +(@PATH,61,1335.772,-3266.767,175.7016,0,0,0,0,100,0), +(@PATH,62,1337.677,-3270.589,175.1142,0,0,0,0,100,0), +(@PATH,63,1335.98,-3273.271,175.1552,0,0,0,0,100,0), +(@PATH,64,1331.23,-3272.271,177.6552,0,0,0,0,100,0), +(@PATH,65,1331.09,-3271.938,177.6541,0,0,0,0,100,0), +(@PATH,66,1329.34,-3271.438,178.1541,0,0,0,0,100,0), +(@PATH,67,1328.09,-3271.188,178.1541,0,0,0,0,100,0), +(@PATH,68,1325.09,-3270.438,177.4041,0,0,0,0,100,0), +(@PATH,69,1324.764,-3270.557,177.2338,0,0,0,0,100,0), +(@PATH,70,1322.764,-3270.057,177.2338,0,0,0,0,100,0), +(@PATH,71,1317.514,-3277.307,177.2338,0,0,0,0,100,0), +(@PATH,72,1317.209,-3277.242,177.3359,0,0,0,0,100,0), +(@PATH,73,1316.709,-3277.992,177.3359,0,0,0,0,100,0), +(@PATH,74,1314.959,-3277.992,177.3359,0,0,0,0,100,0), +(@PATH,75,1313.459,-3277.992,177.3359,0,0,0,0,100,0), +(@PATH,76,1310.157,-3278.081,177.2867,0,0,0,0,100,0), +(@PATH,77,1308.601,-3281.318,177.0479,0,0,0,0,100,0), +(@PATH,78,1312.434,-3284.332,177.2719,0,0,0,0,100,0); + +SET @NPC := 99206; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1443.603,`position_y`=-3374.807,`position_z`=202.0124 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1443.603,-3374.807,202.0124,0,0,0,0,100,0), +(@PATH,2,1431.073,-3376.094,202.083,0,0,0,0,100,0), +(@PATH,3,1428.323,-3375.844,202.083,0,0,0,0,100,0), +(@PATH,4,1425.073,-3375.844,202.083,0,0,0,0,100,0), +(@PATH,5,1417.573,-3375.844,202.083,0,0,0,0,100,0), +(@PATH,6,1417.619,-3376.065,202.0903,0,0,0,0,100,0), +(@PATH,7,1425.119,-3376.065,202.0903,0,0,0,0,100,0), +(@PATH,8,1428.119,-3376.065,202.0903,0,0,0,0,100,0), +(@PATH,9,1428.388,-3376.034,202.0217,0,0,0,0,100,0), +(@PATH,10,1431.138,-3376.034,202.0217,0,0,0,0,100,0), +(@PATH,11,1443.388,-3374.784,202.0217,0,0,0,0,100,0), +(@PATH,12,1443.603,-3374.807,202.0124,0,0,0,0,100,0); + +SET @NPC := 99211; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1327.88,`position_y`=-3352.442,`position_z`=206.6393 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1327.88,-3352.442,206.6393,0,0,0,0,100,0), +(@PATH,2,1313.845,-3345.21,206.7096,0,0,0,0,100,0), +(@PATH,3,1312.095,-3343.71,206.7096,0,0,0,0,100,0), +(@PATH,4,1305.595,-3337.46,206.7096,0,0,0,0,100,0), +(@PATH,5,1305.601,-3337.328,206.7189,0,0,0,0,100,0), +(@PATH,6,1312.101,-3343.578,206.7189,0,0,0,0,100,0), +(@PATH,7,1313.601,-3345.078,206.4689,0,0,0,0,100,0), +(@PATH,8,1313.91,-3345.258,206.6446,0,0,0,0,100,0), +(@PATH,9,1314.16,-3345.508,206.6446,0,0,0,0,100,0), +(@PATH,10,1327.91,-3352.258,206.6446,0,0,0,0,100,0), +(@PATH,11,1327.88,-3352.442,206.6393,0,0,0,0,100,0); + +DELETE FROM `creature_addon` WHERE `guid`=23967; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(23967,0,0,0,1,28, ''); + +SET @NPC := 110877; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1532.944,`position_y`=-3279.357,`position_z`=71.67763 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1532.944,-3279.357,71.67763,0,0,0,0,100,0), +(@PATH,2,1532.944,-3275.857,71.92763,0,0,0,0,100,0), +(@PATH,3,1533.694,-3260.607,72.92763,0,0,0,0,100,0), +(@PATH,4,1533.569,-3260.329,72.7189,0,0,0,0,100,0), +(@PATH,5,1533.819,-3259.579,72.9689,0,0,0,0,100,0), +(@PATH,6,1532.569,-3253.829,73.7189,0,0,0,0,100,0), +(@PATH,7,1530.569,-3244.579,73.4689,0,0,0,0,100,0), +(@PATH,8,1529.518,-3240.977,73.08253,0,0,0,0,100,0), +(@PATH,9,1526.518,-3238.477,73.08253,0,0,0,0,100,0), +(@PATH,10,1518.018,-3230.977,72.83253,0,0,0,0,100,0), +(@PATH,11,1516.748,-3229.776,72.58502,0,0,0,0,100,0), +(@PATH,12,1511.498,-3218.776,71.33502,0,0,0,0,100,0), +(@PATH,13,1508.998,-3214.026,71.08502,0,0,0,0,100,0), +(@PATH,14,1508.758,-3213.916,70.89909,0,0,0,0,100,0), +(@PATH,15,1507.508,-3211.166,70.39909,0,0,0,0,100,0), +(@PATH,16,1507.008,-3209.916,70.39909,0,0,0,0,100,0), +(@PATH,17,1504.008,-3199.916,70.39909,0,0,0,0,100,0), +(@PATH,18,1504.023,-3199.926,70.09482,0,0,0,0,100,0), +(@PATH,19,1507.023,-3209.926,70.09482,0,0,0,0,100,0), +(@PATH,20,1507.378,-3210.156,70.4521,0,0,0,0,100,0), +(@PATH,21,1507.878,-3211.406,70.7021,0,0,0,0,100,0), +(@PATH,22,1509.128,-3214.156,71.2021,0,0,0,0,100,0), +(@PATH,23,1511.378,-3218.906,71.4521,0,0,0,0,100,0), +(@PATH,24,1517.049,-3230.168,72.55661,0,0,0,0,100,0), +(@PATH,25,1518.049,-3230.918,72.55661,0,0,0,0,100,0), +(@PATH,26,1526.549,-3238.418,73.05661,0,0,0,0,100,0), +(@PATH,27,1529.843,-3241.093,73.03035,0,0,0,0,100,0), +(@PATH,28,1530.343,-3244.593,73.53035,0,0,0,0,100,0), +(@PATH,29,1532.343,-3253.843,73.53035,0,0,0,0,100,0), +(@PATH,30,1533.649,-3259.643,72.98861,0,0,0,0,100,0), +(@PATH,31,1533.149,-3275.893,72.23861,0,0,0,0,100,0), +(@PATH,32,1532.815,-3279.69,71.46254,0,0,0,0,100,0), +(@PATH,33,1531.565,-3281.94,71.21254,0,0,0,0,100,0), +(@PATH,34,1529.565,-3285.44,70.46254,0,0,0,0,100,0), +(@PATH,35,1526.815,-3290.19,69.71254,0,0,0,0,100,0), +(@PATH,36,1524.315,-3294.94,69.21254,0,0,0,0,100,0), +(@PATH,37,1522.168,-3298.133,67.94553,0,0,0,0,100,0), +(@PATH,38,1520.618,-3300.794,67.22211,0,0,0,0,100,0), +(@PATH,39,1524.261,-3294.749,69.24005,0,0,0,0,100,0), +(@PATH,40,1526.761,-3290.249,69.74005,0,0,0,0,100,0), +(@PATH,41,1529.511,-3285.499,70.49005,0,0,0,0,100,0), +(@PATH,42,1531.761,-3281.749,71.24005,0,0,0,0,100,0); + +SET @NPC := 110924; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1747.995,`position_y`=-3324.951,`position_z`=79.9406 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1747.995,-3324.951,79.9406,0,0,0,0,100,0), +(@PATH,2,1750.995,-3327.201,79.9406,0,0,0,0,100,0), +(@PATH,3,1755.311,-3330.136,80.52805,0,0,0,0,100,0), +(@PATH,4,1760.811,-3331.386,80.52805,0,0,0,0,100,0), +(@PATH,5,1765.561,-3332.386,81.27805,0,0,0,0,100,0), +(@PATH,6,1765.592,-3332.358,81.09067,0,0,0,0,100,0), +(@PATH,7,1761.092,-3331.608,80.59067,0,0,0,0,100,0), +(@PATH,8,1755.189,-3329.974,80.26764,0,0,0,0,100,0), +(@PATH,9,1751.189,-3327.224,80.01764,0,0,0,0,100,0), +(@PATH,10,1747.701,-3324.876,80.04713,0,0,0,0,100,0), +(@PATH,11,1733.692,-3319.658,79.812,0,0,0,0,100,0), +(@PATH,12,1728.442,-3317.408,79.812,0,0,0,0,100,0), +(@PATH,13,1724.692,-3315.658,80.062,0,0,0,0,100,0), +(@PATH,14,1724.233,-3315.486,80.27322,0,0,0,0,100,0), +(@PATH,15,1723.483,-3315.236,80.27322,0,0,0,0,100,0), +(@PATH,16,1714.733,-3307.736,80.77322,0,0,0,0,100,0), +(@PATH,17,1711.983,-3306.986,80.77322,0,0,0,0,100,0), +(@PATH,18,1709.983,-3306.236,81.02322,0,0,0,0,100,0), +(@PATH,19,1709.764,-3305.991,80.91532,0,0,0,0,100,0), +(@PATH,20,1708.764,-3305.491,80.91532,0,0,0,0,100,0), +(@PATH,21,1708.014,-3304.741,80.91532,0,0,0,0,100,0), +(@PATH,22,1706.264,-3303.241,80.66532,0,0,0,0,100,0), +(@PATH,23,1704.514,-3302.241,80.66532,0,0,0,0,100,0), +(@PATH,24,1703.514,-3301.991,80.66532,0,0,0,0,100,0), +(@PATH,25,1702.764,-3301.491,80.66532,0,0,0,0,100,0), +(@PATH,26,1702.425,-3301.247,80.54251,0,0,0,0,100,0), +(@PATH,27,1700.675,-3300.247,80.29251,0,0,0,0,100,0), +(@PATH,28,1700.675,-3299.747,80.04251,0,0,0,0,100,0), +(@PATH,29,1697.925,-3297.997,79.79251,0,0,0,0,100,0), +(@PATH,30,1696.425,-3296.997,79.79251,0,0,0,0,100,0), +(@PATH,31,1694.175,-3299.747,79.79251,0,0,0,0,100,0), +(@PATH,32,1693.17,-3294.564,79.41473,0,0,0,0,100,0), +(@PATH,33,1685.018,-3288.416,78.21511,0,0,0,0,100,0), +(@PATH,34,1682.018,-3285.916,77.71511,0,0,0,0,100,0), +(@PATH,35,1682.137,-3285.877,77.78119,0,0,0,0,100,0), +(@PATH,36,1682.398,-3286.077,78.10577,0,0,0,0,100,0), +(@PATH,37,1685.148,-3288.577,78.35577,0,0,0,0,100,0), +(@PATH,38,1693.437,-3294.908,79.48956,0,0,0,0,100,0), +(@PATH,39,1694.187,-3299.658,79.73956,0,0,0,0,100,0), +(@PATH,40,1695.937,-3301.158,79.73956,0,0,0,0,100,0), +(@PATH,41,1699.437,-3301.158,79.98956,0,0,0,0,100,0), +(@PATH,42,1699.437,-3301.158,80.48956,0,0,0,0,100,0), +(@PATH,43,1699.633,-3301.397,80.22903,0,0,0,0,100,0), +(@PATH,44,1699.633,-3301.397,80.47903,0,0,0,0,100,0), +(@PATH,45,1701.133,-3300.397,80.22903,0,0,0,0,100,0), +(@PATH,46,1702.133,-3301.647,80.22903,0,0,0,0,100,0), +(@PATH,47,1703.633,-3302.397,80.47903,0,0,0,0,100,0), +(@PATH,48,1705.383,-3303.647,80.72903,0,0,0,0,100,0), +(@PATH,49,1707.133,-3304.897,80.72903,0,0,0,0,100,0), +(@PATH,50,1707.361,-3304.945,80.66975,0,0,0,0,100,0), +(@PATH,51,1709.111,-3305.695,80.91975,0,0,0,0,100,0), +(@PATH,52,1711.361,-3306.695,80.66975,0,0,0,0,100,0), +(@PATH,53,1723.781,-3315.333,80.1368,0,0,0,0,100,0), +(@PATH,54,1728.281,-3317.333,79.8868,0,0,0,0,100,0), +(@PATH,55,1733.924,-3319.916,80.03304,0,0,0,0,100,0); + +SET @NPC := 42567; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1764.984,`position_y`=-3311.021,`position_z`=82.75208 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1764.984,-3311.021,82.75208,0,0,0,0,100,0), +(@PATH,2,1759.484,-3309.771,80.75208,0,0,0,0,100,0), +(@PATH,3,1753.234,-3308.021,80.00208,0,0,0,0,100,0), +(@PATH,4,1752.877,-3308.15,79.73831,0,0,0,0,100,0), +(@PATH,5,1751.877,-3307.65,79.73831,0,0,0,0,100,0), +(@PATH,6,1745.627,-3308.4,79.73831,0,0,0,0,100,0), +(@PATH,7,1737.196,-3308.978,79.92158,0,0,0,0,100,0), +(@PATH,8,1731.446,-3308.728,79.92158,0,0,0,0,100,0), +(@PATH,9,1723.946,-3308.978,80.67158,0,0,0,0,100,0), +(@PATH,10,1723.75,-3309.052,80.54651,0,0,0,0,100,0), +(@PATH,11,1723.25,-3310.302,80.29651,0,0,0,0,100,0), +(@PATH,12,1721.75,-3312.052,80.29651,0,0,0,0,100,0), +(@PATH,13,1718.432,-3313.127,80.07133,0,0,0,0,100,0), +(@PATH,14,1716.085,-3319.896,80.40611,0,0,0,0,100,0), +(@PATH,15,1718.247,-3325.298,80.40811,0,0,0,0,100,0), +(@PATH,16,1720.997,-3329.798,80.40811,0,0,0,0,100,0), +(@PATH,17,1721.247,-3330.135,80.58556,0,0,0,0,100,0), +(@PATH,18,1723.247,-3332.885,80.83556,0,0,0,0,100,0), +(@PATH,19,1729.361,-3337.677,81.0408,0,0,0,0,100,0), +(@PATH,20,1740.568,-3343.237,81.03386,0,0,0,0,100,0), +(@PATH,21,1745.818,-3344.737,80.78386,0,0,0,0,100,0), +(@PATH,22,1747.97,-3345.551,80.95126,0,0,0,0,100,0), +(@PATH,23,1757.114,-3346.23,81.44904,0,0,0,0,100,0), +(@PATH,24,1762.364,-3346.23,81.44904,0,0,0,0,100,0), +(@PATH,25,1764.114,-3346.23,81.19904,0,0,0,0,100,0), +(@PATH,26,1765.864,-3346.23,81.19904,0,0,0,0,100,0), +(@PATH,27,1766.225,-3345.948,81.37701,0,0,0,0,100,0), +(@PATH,28,1767.475,-3345.948,81.12701,0,0,0,0,100,0), +(@PATH,29,1768.725,-3345.698,81.12701,0,0,0,0,100,0), +(@PATH,30,1775.63,-3344.304,81.77198,0,0,0,0,100,0), +(@PATH,31,1776.63,-3343.304,82.02198,0,0,0,0,100,0), +(@PATH,32,1780.293,-3339.242,82.59848,0,0,0,0,100,0), +(@PATH,33,1780.793,-3337.242,82.59848,0,0,0,0,100,0), +(@PATH,34,1781.293,-3335.992,82.59848,0,0,0,0,100,0), +(@PATH,35,1781.543,-3334.992,82.84848,0,0,0,0,100,0), +(@PATH,36,1782.297,-3331.92,83.63911,0,0,0,0,100,0), +(@PATH,37,1778.345,-3324.543,84.56404,0,0,0,0,100,0), +(@PATH,38,1773.951,-3316.386,85.19916,0,0,0,0,100,0), +(@PATH,39,1767.701,-3312.886,83.69916,0,0,0,0,100,0), +(@PATH,40,1767.525,-3312.49,83.45465,0,0,0,0,100,0); + +SET @NPC := 111927; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1625.405,`position_y`=-3351.762,`position_z`=79.90934 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1625.405,-3351.762,79.90934,0,0,0,0,100,0), +(@PATH,2,1626.155,-3341.262,79.65934,0,0,0,0,100,0), +(@PATH,3,1626.155,-3336.512,79.65934,0,0,0,0,100,0), +(@PATH,4,1626.013,-3336.39,79.50584,0,0,0,0,100,0), +(@PATH,5,1625.763,-3341.14,79.50584,0,0,0,0,100,0), +(@PATH,6,1625.278,-3352.029,80.04063,0,0,0,0,100,0), +(@PATH,7,1626.528,-3358.529,80.54063,0,0,0,0,100,0), +(@PATH,8,1627.028,-3360.779,80.29063,0,0,0,0,100,0), +(@PATH,9,1626.906,-3360.891,80.39478,0,0,0,0,100,0), +(@PATH,10,1626.656,-3358.641,80.39478,0,0,0,0,100,0), +(@PATH,11,1625.402,-3351.743,79.908,0,0,0,0,100,0); + +SET @NPC := 110915; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1576.441,`position_y`=-3394.182,`position_z`=83.59334 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1576.441,-3394.182,83.59334,0,0,0,0,100,0), +(@PATH,2,1581.441,-3391.682,81.34334,0,0,0,0,100,0), +(@PATH,3,1585.441,-3390.182,80.09334,0,0,0,0,100,0), +(@PATH,4,1588.941,-3388.182,78.59334,0,0,0,0,100,0), +(@PATH,5,1592.691,-3386.432,77.34334,0,0,0,0,100,0), +(@PATH,6,1596.497,-3384.609,76.62447,0,0,0,0,100,0), +(@PATH,7,1600.247,-3383.359,76.62447,0,0,0,0,100,0), +(@PATH,8,1602.997,-3382.109,76.62447,0,0,0,0,100,0), +(@PATH,9,1604.497,-3381.609,76.62447,0,0,0,0,100,0), +(@PATH,10,1604.767,-3381.405,76.77443,0,0,0,0,100,0), +(@PATH,11,1606.267,-3380.655,76.77443,0,0,0,0,100,0), +(@PATH,12,1609.017,-3379.655,77.52443,0,0,0,0,100,0), +(@PATH,13,1609.145,-3379.514,77.45844,0,0,0,0,100,0), +(@PATH,14,1605.929,-3381.065,76.94609,0,0,0,0,100,0), +(@PATH,15,1604.679,-3381.565,76.69609,0,0,0,0,100,0), +(@PATH,16,1603.179,-3382.065,76.69609,0,0,0,0,100,0), +(@PATH,17,1600.929,-3382.815,76.69609,0,0,0,0,100,0), +(@PATH,18,1596.929,-3384.565,76.44609,0,0,0,0,100,0), +(@PATH,19,1596.631,-3384.638,76.41851,0,0,0,0,100,0), +(@PATH,20,1596.131,-3384.888,76.41851,0,0,0,0,100,0), +(@PATH,21,1592.881,-3386.388,77.41851,0,0,0,0,100,0), +(@PATH,22,1589.381,-3388.138,78.41851,0,0,0,0,100,0), +(@PATH,23,1586.131,-3389.638,79.91851,0,0,0,0,100,0), +(@PATH,24,1582.131,-3391.388,80.91851,0,0,0,0,100,0), +(@PATH,25,1575.993,-3394.561,84.05369,0,0,0,0,100,0), +(@PATH,26,1574.493,-3395.811,84.80369,0,0,0,0,100,0), +(@PATH,27,1571.743,-3397.811,86.55369,0,0,0,0,100,0), +(@PATH,28,1567.993,-3400.811,89.55369,0,0,0,0,100,0), +(@PATH,29,1563.929,-3404.071,92.78562,0,0,0,0,100,0), +(@PATH,30,1562.679,-3405.321,93.78562,0,0,0,0,100,0), +(@PATH,31,1559.929,-3408.071,95.78562,0,0,0,0,100,0), +(@PATH,32,1557.679,-3409.321,96.78562,0,0,0,0,100,0), +(@PATH,33,1555.679,-3410.571,97.28562,0,0,0,0,100,0), +(@PATH,34,1553.679,-3410.571,97.28562,0,0,0,0,100,0), +(@PATH,35,1557.305,-3409.208,96.69448,0,0,0,0,100,0), +(@PATH,36,1559.305,-3407.708,95.94448,0,0,0,0,100,0), +(@PATH,37,1560.805,-3406.458,94.94448,0,0,0,0,100,0), +(@PATH,38,1562.055,-3405.458,94.44448,0,0,0,0,100,0), +(@PATH,39,1562.177,-3405.297,94.26689,0,0,0,0,100,0), +(@PATH,40,1564.177,-3403.797,92.76689,0,0,0,0,100,0), +(@PATH,41,1567.427,-3401.297,90.01689,0,0,0,0,100,0), +(@PATH,42,1571.177,-3398.297,86.76689,0,0,0,0,100,0), +(@PATH,43,1574.177,-3396.047,85.01689,0,0,0,0,100,0), +(@PATH,44,1574.342,-3395.708,84.81064,0,0,0,0,100,0); + +SET @NPC := 110899; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1549.184,`position_y`=-3410.032,`position_z`=98.73938 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1549.184,-3410.032,98.73938,0,0,0,0,100,0), +(@PATH,2,1549.934,-3411.282,98.48938,0,0,0,0,100,0), +(@PATH,3,1551.464,-3414.331,98.43894,0,0,0,0,100,0), +(@PATH,4,1551.964,-3415.831,98.43894,0,0,0,0,100,0), +(@PATH,5,1553.964,-3422.581,98.18894,0,0,0,0,100,0), +(@PATH,6,1554.464,-3423.581,98.18894,0,0,0,0,100,0), +(@PATH,7,1555.795,-3427.275,98.44226,0,0,0,0,100,0), +(@PATH,8,1556.295,-3429.775,98.44226,0,0,0,0,100,0), +(@PATH,9,1556.795,-3432.275,98.69226,0,0,0,0,100,0), +(@PATH,10,1558.295,-3441.275,99.69226,0,0,0,0,100,0), +(@PATH,11,1558.795,-3445.275,99.94226,0,0,0,0,100,0), +(@PATH,12,1559.295,-3448.025,100.1923,0,0,0,0,100,0), +(@PATH,13,1562.292,-3465.172,102.3143,0,0,0,0,100,0), +(@PATH,14,1563.292,-3471.672,102.8143,0,0,0,0,100,0), +(@PATH,15,1564.042,-3476.672,103.3143,0,0,0,0,100,0), +(@PATH,16,1565.292,-3485.922,103.8143,0,0,0,0,100,0), +(@PATH,17,1565.386,-3485.937,103.8012,0,0,0,0,100,0), +(@PATH,18,1564.136,-3476.687,103.3012,0,0,0,0,100,0), +(@PATH,19,1563.386,-3471.687,103.0512,0,0,0,0,100,0), +(@PATH,20,1562.085,-3464.858,102.1178,0,0,0,0,100,0), +(@PATH,21,1559.335,-3448.108,100.1178,0,0,0,0,100,0), +(@PATH,22,1559.085,-3445.358,99.86781,0,0,0,0,100,0), +(@PATH,23,1558.335,-3441.358,99.61781,0,0,0,0,100,0), +(@PATH,24,1556.835,-3432.358,98.61781,0,0,0,0,100,0), +(@PATH,25,1556.335,-3429.608,98.36781,0,0,0,0,100,0), +(@PATH,26,1555.558,-3427.184,98.11308,0,0,0,0,100,0), +(@PATH,27,1554.308,-3423.434,98.11308,0,0,0,0,100,0), +(@PATH,28,1554.058,-3422.434,98.36308,0,0,0,0,100,0), +(@PATH,29,1552.058,-3415.934,98.36308,0,0,0,0,100,0), +(@PATH,30,1551.558,-3414.684,98.36308,0,0,0,0,100,0), +(@PATH,31,1551.663,-3415.686,98.44431,0,0,0,0,100,0), +(@PATH,32,1551.413,-3414.436,98.44431,0,0,0,0,100,0), +(@PATH,33,1551.163,-3413.936,98.44431,0,0,0,0,100,0), +(@PATH,34,1550.163,-3411.686,98.44431,0,0,0,0,100,0), +(@PATH,35,1549.163,-3409.936,98.69431,0,0,0,0,100,0), +(@PATH,36,1547.913,-3406.686,98.94431,0,0,0,0,100,0), +(@PATH,37,1546.413,-3403.436,98.94431,0,0,0,0,100,0), +(@PATH,38,1546.323,-3403.457,98.95697,0,0,0,0,100,0), +(@PATH,39,1547.823,-3406.707,98.95697,0,0,0,0,100,0), +(@PATH,40,1549.323,-3409.957,98.70697,0,0,0,0,100,0); + +SET @NPC := 110934; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1588.477,`position_y`=-3154.809,`position_z`=1.040982 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1588.477,-3154.809,1.040982,0,0,0,0,100,0), +(@PATH,2,1586.727,-3151.059,1.540982,0,0,0,0,100,0), +(@PATH,3,1583.977,-3145.059,2.040982,0,0,0,0,100,0), +(@PATH,4,1582.477,-3142.559,2.790982,0,0,0,0,100,0), +(@PATH,5,1583.477,-3144.371,2.203365,0,0,0,0,100,0), +(@PATH,6,1585.477,-3148.621,1.703365,0,0,0,0,100,0), +(@PATH,7,1587.727,-3153.121,1.203365,0,0,0,0,100,0), +(@PATH,8,1588.014,-3153.393,1.018376,0,0,0,0,100,0), +(@PATH,9,1588.514,-3154.893,1.018376,0,0,0,0,100,0), +(@PATH,10,1589.764,-3165.643,1.268376,0,0,0,0,100,0), +(@PATH,11,1590.353,-3170.328,1.823887,0,0,0,0,100,0), +(@PATH,12,1585.555,-3186.668,1.854707,0,0,0,0,100,0), +(@PATH,13,1584.555,-3197.418,1.354707,0,0,0,0,100,0), +(@PATH,14,1584.837,-3203.387,1.349868,0,0,0,0,100,0), +(@PATH,15,1580.337,-3217.387,-0.6501324,0,0,0,0,100,0), +(@PATH,16,1580.337,-3216.387,-0.6501324,0,0,0,0,100,0), +(@PATH,17,1581.587,-3215.387,-0.6501324,0,0,0,0,100,0), +(@PATH,18,1583.587,-3215.387,1.849868,0,0,0,0,100,0), +(@PATH,19,1590.212,-3216.132,2.20363,0,0,0,0,100,0), +(@PATH,20,1592.962,-3220.382,2.45363,0,0,0,0,100,0), +(@PATH,21,1600.439,-3232.153,3.074192,0,0,0,0,100,0), +(@PATH,22,1608.439,-3246.903,3.574192,0,0,0,0,100,0), +(@PATH,23,1607.651,-3245.534,3.11465,0,0,0,0,100,0), +(@PATH,24,1600.145,-3231.887,2.961977,0,0,0,0,100,0), +(@PATH,25,1592.395,-3219.637,2.211977,0,0,0,0,100,0), +(@PATH,26,1589.94,-3215.791,1.852561,0,0,0,0,100,0), +(@PATH,27,1584.19,-3204.541,1.352561,0,0,0,0,100,0), +(@PATH,28,1584.364,-3204.471,1.401658,0,0,0,0,100,0), +(@PATH,29,1583.864,-3203.721,1.401658,0,0,0,0,100,0), +(@PATH,30,1584.864,-3195.971,1.651658,0,0,0,0,100,0), +(@PATH,31,1585.114,-3192.971,2.401658,0,0,0,0,100,0), +(@PATH,32,1584.439,-3196.701,1.488584,0,0,0,0,100,0), +(@PATH,33,1585.011,-3193.408,2.344659,0,0,0,0,100,0), +(@PATH,34,1585.938,-3186.306,1.765427,0,0,0,0,100,0), +(@PATH,35,1590.225,-3170.116,1.798501,0,0,0,0,100,0), +(@PATH,36,1589.725,-3165.116,1.048501,0,0,0,0,100,0); + +SET @NPC := 110893; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1675.334,`position_y`=-3437.228,`position_z`=79.58514 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1675.334,-3437.228,79.58514,0,0,0,0,100,0), +(@PATH,2,1674.584,-3436.978,79.08514,0,0,0,0,100,0), +(@PATH,3,1672.703,-3436.403,78.31236,0,0,0,0,100,0), +(@PATH,4,1669.953,-3436.153,77.56236,0,0,0,0,100,0), +(@PATH,5,1668.203,-3436.153,77.06236,0,0,0,0,100,0), +(@PATH,6,1668.12,-3435.942,77.07675,0,0,0,0,100,0), +(@PATH,7,1670.12,-3436.192,77.32675,0,0,0,0,100,0), +(@PATH,8,1670.281,-3436.421,77.67787,0,0,0,0,100,0), +(@PATH,9,1673.031,-3436.671,78.42787,0,0,0,0,100,0), +(@PATH,10,1674.531,-3437.171,78.92787,0,0,0,0,100,0), +(@PATH,11,1675.281,-3437.171,79.17787,0,0,0,0,100,0), +(@PATH,12,1687.281,-3438.421,85.92787,0,0,0,0,100,0), +(@PATH,13,1687.531,-3438.421,86.17787,0,0,0,0,100,0), +(@PATH,14,1674.401,-3436.937,78.70284,0,0,0,0,100,0), +(@PATH,15,1672.651,-3436.437,78.20284,0,0,0,0,100,0), +(@PATH,16,1670.151,-3436.187,77.70284,0,0,0,0,100,0), +(@PATH,17,1668.401,-3436.187,77.20284,0,0,0,0,100,0), +(@PATH,18,1668.12,-3435.942,77.07675,0,0,0,0,100,0), +(@PATH,19,1670.12,-3436.192,77.32675,0,0,0,0,100,0); + +SET @NPC := 110862; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1566.858,`position_y`=-3412.7,`position_z`=55.30537 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1566.858,-3412.7,55.30537,0,0,0,0,100,0), +(@PATH,2,1566.391,-3410.429,55.70556,0,0,0,0,100,0), +(@PATH,3,1561.641,-3400.929,56.70556,0,0,0,0,100,0), +(@PATH,4,1558.141,-3393.929,58.70556,0,0,0,0,100,0), +(@PATH,5,1555.141,-3388.179,58.45556,0,0,0,0,100,0), +(@PATH,6,1545.77,-3369.756,57.64226,0,0,0,0,100,0), +(@PATH,7,1539.77,-3362.506,57.89226,0,0,0,0,100,0), +(@PATH,8,1536.27,-3358.006,57.64226,0,0,0,0,100,0), +(@PATH,9,1522.27,-3340.756,58.64226,0,0,0,0,100,0), +(@PATH,10,1519.02,-3336.506,58.89226,0,0,0,0,100,0), +(@PATH,11,1518.27,-3335.756,59.14226,0,0,0,0,100,0), +(@PATH,12,1517.604,-3335.188,59.35161,0,0,0,0,100,0), +(@PATH,13,1518.854,-3336.688,58.85161,0,0,0,0,100,0), +(@PATH,14,1522.354,-3340.688,58.60161,0,0,0,0,100,0), +(@PATH,15,1536.104,-3357.938,57.60161,0,0,0,0,100,0), +(@PATH,16,1539.854,-3362.438,57.85161,0,0,0,0,100,0), +(@PATH,17,1525.985,-3345.615,58.16137,0,0,0,0,100,0), +(@PATH,18,1536.084,-3358.031,57.73196,0,0,0,0,100,0), +(@PATH,19,1539.834,-3362.531,57.73196,0,0,0,0,100,0), +(@PATH,20,1546.023,-3370.014,57.50838,0,0,0,0,100,0), +(@PATH,21,1554.773,-3388.014,58.25838,0,0,0,0,100,0), +(@PATH,22,1558.023,-3394.014,58.50838,0,0,0,0,100,0), +(@PATH,23,1561.523,-3401.014,56.75838,0,0,0,0,100,0), +(@PATH,24,1566.746,-3410.737,55.40793,0,0,0,0,100,0); + +SET @NPC := 110876; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1618.827,`position_y`=-3366.002,`position_z`=13.78367 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1618.827,-3366.002,13.78367,0,0,0,0,100,0), +(@PATH,2,1617.327,-3362.002,12.78367,0,0,0,0,100,0), +(@PATH,3,1615.077,-3355.252,11.03367,0,0,0,0,100,0), +(@PATH,4,1612.076,-3347.354,9.581163,0,0,0,0,100,0), +(@PATH,5,1608.38,-3336.774,8.200773,0,0,0,0,100,0), +(@PATH,6,1608.742,-3336.418,8.342894,0,0,0,0,100,0), +(@PATH,7,1608.742,-3334.668,8.092894,0,0,0,0,100,0), +(@PATH,8,1608.742,-3328.168,7.842894,0,0,0,0,100,0), +(@PATH,9,1608.992,-3320.418,8.092894,0,0,0,0,100,0), +(@PATH,10,1608.796,-3310.79,6.280064,0,0,0,0,100,0), +(@PATH,11,1608.796,-3306.04,5.280064,0,0,0,0,100,0), +(@PATH,12,1608.796,-3293.04,3.780064,0,0,0,0,100,0), +(@PATH,13,1609.15,-3288.422,3.226425,0,0,0,0,100,0), +(@PATH,14,1609.65,-3279.172,2.976425,0,0,0,0,100,0), +(@PATH,15,1609.9,-3277.422,2.976425,0,0,0,0,100,0), +(@PATH,16,1609.896,-3277.512,2.889059,0,0,0,0,100,0), +(@PATH,17,1609.646,-3278.762,2.889059,0,0,0,0,100,0), +(@PATH,18,1608.915,-3288.683,3.626873,0,0,0,0,100,0), +(@PATH,19,1608.915,-3292.183,3.626873,0,0,0,0,100,0), +(@PATH,20,1608.915,-3305.933,5.376873,0,0,0,0,100,0), +(@PATH,21,1608.915,-3310.183,6.376873,0,0,0,0,100,0), +(@PATH,22,1608.87,-3310.375,6.640759,0,0,0,0,100,0), +(@PATH,23,1608.87,-3310.875,6.640759,0,0,0,0,100,0), +(@PATH,24,1608.62,-3320.375,8.140759,0,0,0,0,100,0), +(@PATH,25,1608.62,-3328.375,7.890759,0,0,0,0,100,0), +(@PATH,26,1608.62,-3334.625,8.140759,0,0,0,0,100,0), +(@PATH,27,1608.565,-3336.654,8.539102,0,0,0,0,100,0), +(@PATH,28,1615.065,-3355.404,10.7891,0,0,0,0,100,0), +(@PATH,29,1617.315,-3361.904,12.7891,0,0,0,0,100,0), +(@PATH,30,1619.09,-3366.434,14.01098,0,0,0,0,100,0), +(@PATH,31,1620.34,-3370.434,15.01098,0,0,0,0,100,0), +(@PATH,32,1621.59,-3374.684,16.01098,0,0,0,0,100,0), +(@PATH,33,1625.84,-3388.684,19.26098,0,0,0,0,100,0), +(@PATH,34,1626.84,-3391.684,20.01098,0,0,0,0,100,0), +(@PATH,35,1628.288,-3396.142,21.0691,0,0,0,0,100,0), +(@PATH,36,1629.038,-3412.892,24.8191,0,0,0,0,100,0), +(@PATH,37,1629.538,-3418.392,26.0691,0,0,0,0,100,0), +(@PATH,38,1629.346,-3418.374,26.0432,0,0,0,0,100,0), +(@PATH,39,1629.096,-3412.874,24.7932,0,0,0,0,100,0); + +SET @NPC := 110927; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1619.016,`position_y`=-3329.799,`position_z`=78.38254 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1619.016,-3329.799,78.38254,0,0,0,0,100,0), +(@PATH,2,1621.016,-3317.299,78.38254,0,0,0,0,100,0), +(@PATH,3,1621.766,-3314.049,78.13254,0,0,0,0,100,0), +(@PATH,4,1631.373,-3295.402,77.71893,0,0,0,0,100,0), +(@PATH,5,1639.373,-3285.152,76.71893,0,0,0,0,100,0), +(@PATH,6,1630.263,-3292.619,76.90758,0,0,0,0,100,0), +(@PATH,7,1635.763,-3284.619,76.15758,0,0,0,0,100,0), +(@PATH,8,1637.656,-3281.988,75.80133,0,0,0,0,100,0), +(@PATH,9,1639.656,-3284.738,76.55133,0,0,0,0,100,0), +(@PATH,10,1639.571,-3284.723,76.64397,0,0,0,0,100,0), +(@PATH,11,1637.43,-3282.384,76.09854,0,0,0,0,100,0), +(@PATH,12,1635.68,-3284.634,76.34854,0,0,0,0,100,0), +(@PATH,13,1629.832,-3292.752,76.97553,0,0,0,0,100,0), +(@PATH,14,1629.582,-3294.252,77.22553,0,0,0,0,100,0), +(@PATH,15,1628.582,-3299.002,77.72553,0,0,0,0,100,0), +(@PATH,16,1625.332,-3316.752,78.97553,0,0,0,0,100,0), +(@PATH,17,1623.294,-3305.816,78.05945,0,0,0,0,100,0), +(@PATH,18,1621.544,-3314.066,78.30945,0,0,0,0,100,0), +(@PATH,19,1621.294,-3317.316,78.30945,0,0,0,0,100,0), +(@PATH,20,1618.962,-3330.063,78.4706,0,0,0,0,100,0), +(@PATH,21,1619.212,-3335.563,78.7206,0,0,0,0,100,0), +(@PATH,22,1619.296,-3336.268,78.72385,0,0,0,0,100,0), +(@PATH,23,1619.016,-3329.807,78.38277,0,0,0,0,100,0); + +SET @NPC := 110893; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1670.294,`position_y`=-3436.423,`position_z`=77.68137 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1670.294,-3436.423,77.68137,0,0,0,0,100,0), +(@PATH,2,1672.794,-3436.673,78.43137,0,0,0,0,100,0), +(@PATH,3,1674.544,-3437.173,78.93137,0,0,0,0,100,0), +(@PATH,4,1675.294,-3437.173,79.18137,0,0,0,0,100,0), +(@PATH,5,1687.294,-3438.423,85.93137,0,0,0,0,100,0), +(@PATH,6,1687.544,-3438.423,86.18137,0,0,0,0,100,0), +(@PATH,7,1680.161,-3437.809,81.70387,0,0,0,0,100,0), +(@PATH,8,1687.298,-3438.658,86.04021,0,0,0,0,100,0), +(@PATH,9,1694.645,-3439.627,90.70386,0,0,0,0,100,0), +(@PATH,10,1696.645,-3439.627,91.95386,0,0,0,0,100,0), +(@PATH,11,1709.645,-3441.377,100.2039,0,0,0,0,100,0), +(@PATH,12,1723.395,-3442.877,108.4539,0,0,0,0,100,0), +(@PATH,13,1723.612,-3443.172,108.6327,0,0,0,0,100,0), +(@PATH,14,1725.112,-3443.422,109.3827,0,0,0,0,100,0), +(@PATH,15,1732.612,-3443.422,111.8827,0,0,0,0,100,0), +(@PATH,16,1738.112,-3443.422,113.6327,0,0,0,0,100,0), +(@PATH,17,1752.563,-3443.961,119.4772,0,0,0,0,100,0), +(@PATH,18,1756.563,-3443.711,121.2272,0,0,0,0,100,0), +(@PATH,19,1758.563,-3443.711,121.9772,0,0,0,0,100,0), +(@PATH,20,1760.313,-3443.711,122.7272,0,0,0,0,100,0), +(@PATH,21,1762.313,-3443.961,123.4772,0,0,0,0,100,0), +(@PATH,22,1764.313,-3443.961,124.2272,0,0,0,0,100,0), +(@PATH,23,1766.313,-3443.961,124.9772,0,0,0,0,100,0), +(@PATH,24,1766.697,-3443.734,124.5211,0,0,0,0,100,0), +(@PATH,25,1763.697,-3443.234,123.7711,0,0,0,0,100,0), +(@PATH,26,1761.697,-3442.984,123.2711,0,0,0,0,100,0), +(@PATH,27,1759.947,-3442.734,122.2711,0,0,0,0,100,0), +(@PATH,28,1757.947,-3442.484,121.5211,0,0,0,0,100,0), +(@PATH,29,1755.947,-3442.234,121.0211,0,0,0,0,100,0), +(@PATH,30,1754.947,-3442.234,120.7711,0,0,0,0,100,0), +(@PATH,31,1752.246,-3443.656,119.3673,0,0,0,0,100,0), +(@PATH,32,1738.746,-3443.406,114.1173,0,0,0,0,100,0), +(@PATH,33,1732.496,-3443.406,112.1173,0,0,0,0,100,0), +(@PATH,34,1731.348,-3443.525,111.246,0,0,0,0,100,0), +(@PATH,35,1724.794,-3443.419,108.9501,0,0,0,0,100,0), +(@PATH,36,1724.731,-3443.243,109.0672,0,0,0,0,100,0), +(@PATH,37,1723.731,-3442.993,108.8172,0,0,0,0,100,0), +(@PATH,38,1710.481,-3441.493,100.8172,0,0,0,0,100,0), +(@PATH,39,1696.481,-3439.743,92.06723,0,0,0,0,100,0), +(@PATH,40,1696.261,-3439.524,91.66846,0,0,0,0,100,0), +(@PATH,41,1694.511,-3439.274,90.41846,0,0,0,0,100,0), +(@PATH,42,1687.761,-3438.274,86.16846,0,0,0,0,100,0), +(@PATH,43,1687.261,-3438.524,86.41846,0,0,0,0,100,0), +(@PATH,44,1687.011,-3439.024,86.16846,0,0,0,0,100,0), +(@PATH,45,1675.261,-3437.274,79.41846,0,0,0,0,100,0), +(@PATH,46,1674.511,-3437.024,78.91846,0,0,0,0,100,0), +(@PATH,47,1672.542,-3436.419,78.12367,0,0,0,0,100,0), +(@PATH,48,1670.042,-3436.169,77.62367,0,0,0,0,100,0), +(@PATH,49,1668.292,-3436.169,77.12367,0,0,0,0,100,0), +(@PATH,50,1668.12,-3435.942,77.07675,0,0,0,0,100,0), +(@PATH,51,1670.12,-3436.192,77.32675,0,0,0,0,100,0), +(@PATH,52,1670.301,-3436.423,77.68327,0,0,0,0,100,0), +(@PATH,53,1672.801,-3436.673,78.43327,0,0,0,0,100,0), +(@PATH,54,1674.551,-3437.173,78.93327,0,0,0,0,100,0), +(@PATH,55,1675.301,-3437.173,79.18327,0,0,0,0,100,0), +(@PATH,56,1687.301,-3438.423,85.93327,0,0,0,0,100,0), +(@PATH,57,1687.551,-3438.423,86.18327,0,0,0,0,100,0); + +SET @NPC := 110865; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1549.116,`position_y`=-3621.641,`position_z`=114.1717 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1549.116,-3621.641,114.1717,0,0,0,0,100,0), +(@PATH,2,1550.616,-3624.141,114.9217,0,0,0,0,100,0), +(@PATH,3,1552.616,-3627.641,115.9217,0,0,0,0,100,0), +(@PATH,4,1553.616,-3629.391,116.6717,0,0,0,0,100,0), +(@PATH,5,1555.116,-3631.891,117.4217,0,0,0,0,100,0), +(@PATH,6,1555.366,-3632.641,117.9217,0,0,0,0,100,0), +(@PATH,7,1556.366,-3634.391,118.6717,0,0,0,0,100,0), +(@PATH,8,1557.366,-3636.141,119.4217,0,0,0,0,100,0), +(@PATH,9,1558.366,-3637.891,120.1717,0,0,0,0,100,0), +(@PATH,10,1558.866,-3638.641,120.9217,0,0,0,0,100,0), +(@PATH,11,1559.866,-3640.391,121.9217,0,0,0,0,100,0), +(@PATH,12,1561.366,-3643.141,122.9217,0,0,0,0,100,0), +(@PATH,13,1560.809,-3642.022,122.439,0,0,0,0,100,0), +(@PATH,14,1559.809,-3640.272,121.439,0,0,0,0,100,0), +(@PATH,15,1558.809,-3638.522,120.939,0,0,0,0,100,0), +(@PATH,16,1558.309,-3637.772,120.189,0,0,0,0,100,0), +(@PATH,17,1557.309,-3636.022,119.189,0,0,0,0,100,0), +(@PATH,18,1555.809,-3633.272,118.189,0,0,0,0,100,0), +(@PATH,19,1555.059,-3631.772,117.439,0,0,0,0,100,0), +(@PATH,20,1554.059,-3630.022,116.689,0,0,0,0,100,0), +(@PATH,21,1552.559,-3627.522,115.939,0,0,0,0,100,0), +(@PATH,22,1551.559,-3625.772,115.189,0,0,0,0,100,0), +(@PATH,23,1549.559,-3622.272,114.439,0,0,0,0,100,0), +(@PATH,24,1549.242,-3622.044,114.1625,0,0,0,0,100,0), +(@PATH,25,1548.992,-3621.294,113.9125,0,0,0,0,100,0), +(@PATH,26,1547.123,-3597.936,112.9313,0,0,0,0,100,0), +(@PATH,27,1551.751,-3587.696,113.621,0,0,0,0,100,0), +(@PATH,28,1560.001,-3574.946,114.621,0,0,0,0,100,0), +(@PATH,29,1562.119,-3571.924,114.2751,0,0,0,0,100,0), +(@PATH,30,1563.619,-3569.174,114.0251,0,0,0,0,100,0), +(@PATH,31,1566.869,-3562.924,113.5251,0,0,0,0,100,0), +(@PATH,32,1567.369,-3561.924,113.2751,0,0,0,0,100,0), +(@PATH,33,1569.119,-3558.674,113.2751,0,0,0,0,100,0), +(@PATH,34,1570.48,-3555.766,112.344,0,0,0,0,100,0), +(@PATH,35,1571.23,-3540.266,110.094,0,0,0,0,100,0), +(@PATH,36,1571.48,-3532.766,109.344,0,0,0,0,100,0), +(@PATH,37,1570.308,-3556.526,112.3496,0,0,0,0,100,0), +(@PATH,38,1571.144,-3540.282,110.0654,0,0,0,0,100,0), +(@PATH,39,1571.394,-3532.782,109.3154,0,0,0,0,100,0), +(@PATH,40,1571.537,-3532.766,109.4981,0,0,0,0,100,0), +(@PATH,41,1571.037,-3540.266,109.9981,0,0,0,0,100,0), +(@PATH,42,1570.541,-3556.09,112.5109,0,0,0,0,100,0), +(@PATH,43,1569.041,-3558.84,113.0109,0,0,0,0,100,0), +(@PATH,44,1567.541,-3561.84,113.2609,0,0,0,0,100,0), +(@PATH,45,1566.791,-3563.09,113.5109,0,0,0,0,100,0), +(@PATH,46,1563.791,-3569.09,114.0109,0,0,0,0,100,0), +(@PATH,47,1551.551,-3587.917,113.4886,0,0,0,0,100,0), +(@PATH,48,1547.551,-3597.167,113.2386,0,0,0,0,100,0), +(@PATH,49,1547.051,-3599.667,113.4886,0,0,0,0,100,0), +(@PATH,50,1548.915,-3621.554,113.8082,0,0,0,0,100,0); + +SET @NPC := 110894; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1652.062,`position_y`=-3643.016,`position_z`=131.1049 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1652.062,-3643.016,131.1049,0,0,0,0,100,0), +(@PATH,2,1651.312,-3641.266,129.3549,0,0,0,0,100,0), +(@PATH,3,1651.312,-3639.266,127.8549,0,0,0,0,100,0), +(@PATH,4,1651.062,-3637.516,126.6049,0,0,0,0,100,0), +(@PATH,5,1650.562,-3634.516,125.6049,0,0,0,0,100,0), +(@PATH,6,1650.706,-3634.303,125.308,0,0,0,0,100,0), +(@PATH,7,1650.456,-3632.803,124.558,0,0,0,0,100,0), +(@PATH,8,1650.706,-3631.803,123.808,0,0,0,0,100,0), +(@PATH,9,1650.956,-3630.803,123.058,0,0,0,0,100,0), +(@PATH,10,1651.206,-3629.803,122.308,0,0,0,0,100,0), +(@PATH,11,1651.956,-3627.053,121.558,0,0,0,0,100,0), +(@PATH,12,1652.206,-3626.303,120.808,0,0,0,0,100,0), +(@PATH,13,1652.456,-3625.303,120.308,0,0,0,0,100,0), +(@PATH,14,1652.706,-3624.303,119.808,0,0,0,0,100,0), +(@PATH,15,1652.706,-3623.303,119.058,0,0,0,0,100,0), +(@PATH,16,1652.956,-3622.553,118.308,0,0,0,0,100,0), +(@PATH,17,1653.206,-3621.553,117.808,0,0,0,0,100,0), +(@PATH,18,1653.456,-3620.553,116.808,0,0,0,0,100,0), +(@PATH,19,1653.706,-3619.553,116.058,0,0,0,0,100,0), +(@PATH,20,1653.956,-3618.553,115.308,0,0,0,0,100,0), +(@PATH,21,1654.456,-3616.553,114.058,0,0,0,0,100,0), +(@PATH,22,1654.417,-3617.11,114.68,0,0,0,0,100,0), +(@PATH,23,1654.167,-3618.11,115.43,0,0,0,0,100,0), +(@PATH,24,1653.917,-3619.11,116.18,0,0,0,0,100,0), +(@PATH,25,1653.667,-3620.11,116.93,0,0,0,0,100,0), +(@PATH,26,1653.417,-3620.86,117.68,0,0,0,0,100,0), +(@PATH,27,1653.167,-3621.86,118.43,0,0,0,0,100,0), +(@PATH,28,1652.667,-3623.86,118.93,0,0,0,0,100,0), +(@PATH,29,1652.417,-3624.61,119.43,0,0,0,0,100,0), +(@PATH,30,1652.417,-3625.61,120.18,0,0,0,0,100,0), +(@PATH,31,1652.167,-3626.61,120.93,0,0,0,0,100,0), +(@PATH,32,1651.917,-3627.61,121.43,0,0,0,0,100,0), +(@PATH,33,1651.667,-3628.36,122.18,0,0,0,0,100,0), +(@PATH,34,1651.167,-3630.36,123.18,0,0,0,0,100,0), +(@PATH,35,1650.917,-3631.36,123.68,0,0,0,0,100,0), +(@PATH,36,1650.417,-3632.36,124.43,0,0,0,0,100,0), +(@PATH,37,1651.11,-3630.556,123.4477,0,0,0,0,100,0), +(@PATH,38,1650.86,-3631.556,123.9477,0,0,0,0,100,0), +(@PATH,39,1650.61,-3632.556,124.6977,0,0,0,0,100,0), +(@PATH,40,1650.36,-3633.056,124.6977,0,0,0,0,100,0), +(@PATH,41,1650.86,-3635.806,125.9477,0,0,0,0,100,0), +(@PATH,42,1651.11,-3637.806,127.1977,0,0,0,0,100,0), +(@PATH,43,1651.11,-3638.806,127.6977,0,0,0,0,100,0), +(@PATH,44,1651.11,-3639.806,128.6977,0,0,0,0,100,0), +(@PATH,45,1651.361,-3638.892,128.1586,0,0,0,0,100,0), +(@PATH,46,1651.361,-3639.892,128.9086,0,0,0,0,100,0), +(@PATH,47,1651.611,-3640.892,129.6586,0,0,0,0,100,0), +(@PATH,48,1651.861,-3641.892,130.4086,0,0,0,0,100,0), +(@PATH,49,1652.361,-3642.892,130.9086,0,0,0,0,100,0), +(@PATH,50,1652.611,-3643.392,131.9086,0,0,0,0,100,0), +(@PATH,51,1653.111,-3645.392,132.6586,0,0,0,0,100,0), +(@PATH,52,1653.611,-3646.392,133.4086,0,0,0,0,100,0), +(@PATH,53,1653.452,-3645.578,132.91,0,0,0,0,100,0), +(@PATH,54,1653.952,-3646.578,133.66,0,0,0,0,100,0), +(@PATH,55,1654.702,-3648.328,134.91,0,0,0,0,100,0), +(@PATH,56,1655.452,-3651.078,135.91,0,0,0,0,100,0), +(@PATH,57,1656.452,-3653.828,136.91,0,0,0,0,100,0), +(@PATH,58,1657.202,-3655.578,137.66,0,0,0,0,100,0), +(@PATH,59,1657.284,-3655.998,137.8962,0,0,0,0,100,0), +(@PATH,60,1658.034,-3658.248,139.1462,0,0,0,0,100,0), +(@PATH,61,1658.284,-3660.248,139.8962,0,0,0,0,100,0), +(@PATH,62,1658.284,-3661.998,140.8962,0,0,0,0,100,0), +(@PATH,63,1658.534,-3662.998,141.6462,0,0,0,0,100,0), +(@PATH,64,1658.534,-3664.998,142.6462,0,0,0,0,100,0), +(@PATH,65,1658.817,-3663.134,141.7131,0,0,0,0,100,0), +(@PATH,66,1658.817,-3665.134,142.7131,0,0,0,0,100,0), +(@PATH,67,1659.067,-3665.884,143.2131,0,0,0,0,100,0), +(@PATH,68,1660.067,-3667.634,143.7131,0,0,0,0,100,0), +(@PATH,69,1660.817,-3669.134,144.4631,0,0,0,0,100,0), +(@PATH,70,1661.817,-3670.884,145.7131,0,0,0,0,100,0), +(@PATH,71,1661.707,-3670.829,145.7333,0,0,0,0,100,0), +(@PATH,72,1660.457,-3668.579,144.2333,0,0,0,0,100,0), +(@PATH,73,1658.996,-3665.685,142.871,0,0,0,0,100,0), +(@PATH,74,1658.746,-3663.685,142.121,0,0,0,0,100,0), +(@PATH,75,1658.496,-3661.935,141.121,0,0,0,0,100,0), +(@PATH,76,1658.496,-3659.935,140.121,0,0,0,0,100,0), +(@PATH,77,1658.246,-3658.935,139.371,0,0,0,0,100,0), +(@PATH,78,1658.085,-3659.677,139.8403,0,0,0,0,100,0), +(@PATH,79,1658.085,-3658.677,139.0903,0,0,0,0,100,0), +(@PATH,80,1658.085,-3657.927,138.8403,0,0,0,0,100,0), +(@PATH,81,1657.085,-3655.177,137.5903,0,0,0,0,100,0), +(@PATH,82,1656.335,-3653.677,137.0903,0,0,0,0,100,0), +(@PATH,83,1655.835,-3651.677,136.0903,0,0,0,0,100,0), +(@PATH,84,1655.085,-3649.927,135.3403,0,0,0,0,100,0), +(@PATH,85,1655.593,-3651.333,135.922,0,0,0,0,100,0), +(@PATH,86,1654.843,-3649.583,135.172,0,0,0,0,100,0), +(@PATH,87,1654.593,-3648.333,134.422,0,0,0,0,100,0), +(@PATH,88,1654.093,-3647.333,133.922,0,0,0,0,100,0), +(@PATH,89,1653.093,-3644.833,132.672,0,0,0,0,100,0), +(@PATH,90,1652.343,-3643.083,131.422,0,0,0,0,100,0); + +SET @NPC := 110867; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1568.781,`position_y`=-3682.135,`position_z`=141.1008 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1568.781,-3682.135,141.1008,0,0,0,0,100,0), +(@PATH,2,1568.781,-3682.885,141.6008,0,0,0,0,100,0), +(@PATH,3,1568.531,-3684.635,142.3508,0,0,0,0,100,0), +(@PATH,4,1568.405,-3687.933,142.1319,0,0,0,0,100,0), +(@PATH,5,1570.405,-3689.933,141.6319,0,0,0,0,100,0), +(@PATH,6,1571.405,-3691.433,140.8819,0,0,0,0,100,0), +(@PATH,7,1571.542,-3691.665,140.7311,0,0,0,0,100,0), +(@PATH,8,1573.042,-3693.415,139.7311,0,0,0,0,100,0), +(@PATH,9,1573.542,-3695.415,139.4811,0,0,0,0,100,0), +(@PATH,10,1574.042,-3698.415,138.7311,0,0,0,0,100,0), +(@PATH,11,1574.792,-3701.165,138.2311,0,0,0,0,100,0), +(@PATH,12,1575.292,-3702.915,137.7311,0,0,0,0,100,0), +(@PATH,13,1575.792,-3705.915,136.9811,0,0,0,0,100,0), +(@PATH,14,1576.292,-3707.915,136.2311,0,0,0,0,100,0), +(@PATH,15,1577.292,-3711.665,135.4811,0,0,0,0,100,0), +(@PATH,16,1577.371,-3712.005,135.1614,0,0,0,0,100,0), +(@PATH,17,1577.621,-3712.255,135.4114,0,0,0,0,100,0), +(@PATH,18,1578.371,-3715.255,133.9114,0,0,0,0,100,0), +(@PATH,19,1579.121,-3717.255,133.1614,0,0,0,0,100,0), +(@PATH,20,1579.371,-3719.005,132.4114,0,0,0,0,100,0), +(@PATH,21,1580.121,-3721.755,131.6614,0,0,0,0,100,0), +(@PATH,22,1581.121,-3724.505,131.1614,0,0,0,0,100,0), +(@PATH,23,1581.621,-3726.505,130.4114,0,0,0,0,100,0), +(@PATH,24,1581.503,-3726.593,130.2319,0,0,0,0,100,0), +(@PATH,25,1582.003,-3728.343,129.7319,0,0,0,0,100,0), +(@PATH,26,1581.003,-3725.343,130.7319,0,0,0,0,100,0), +(@PATH,27,1580.253,-3722.593,131.7319,0,0,0,0,100,0), +(@PATH,28,1579.003,-3719.093,132.7319,0,0,0,0,100,0), +(@PATH,29,1578.503,-3717.093,133.2319,0,0,0,0,100,0), +(@PATH,30,1577.253,-3713.343,135.2319,0,0,0,0,100,0), +(@PATH,31,1576.932,-3713.202,135.5007,0,0,0,0,100,0), +(@PATH,32,1576.682,-3712.452,135.7507,0,0,0,0,100,0), +(@PATH,33,1575.932,-3709.452,136.2507,0,0,0,0,100,0), +(@PATH,34,1575.182,-3705.702,137.0007,0,0,0,0,100,0), +(@PATH,35,1574.932,-3704.702,137.5007,0,0,0,0,100,0), +(@PATH,36,1574.432,-3701.952,138.2507,0,0,0,0,100,0), +(@PATH,37,1573.682,-3698.952,139.0007,0,0,0,0,100,0), +(@PATH,38,1573.182,-3696.202,139.5007,0,0,0,0,100,0), +(@PATH,39,1572.74,-3695.968,139.6564,0,0,0,0,100,0), +(@PATH,40,1572.49,-3694.218,140.1564,0,0,0,0,100,0), +(@PATH,41,1570.49,-3692.468,140.9064,0,0,0,0,100,0), +(@PATH,42,1568.99,-3691.218,141.6564,0,0,0,0,100,0), +(@PATH,43,1568.49,-3690.468,142.4064,0,0,0,0,100,0), +(@PATH,44,1568.145,-3690.411,142.5955,0,0,0,0,100,0), +(@PATH,45,1567.645,-3690.161,142.5955,0,0,0,0,100,0), +(@PATH,46,1565.145,-3692.411,143.0955,0,0,0,0,100,0), +(@PATH,47,1564.663,-3692.634,143.4413,0,0,0,0,100,0), +(@PATH,48,1563.913,-3693.884,143.9413,0,0,0,0,100,0), +(@PATH,49,1563.413,-3696.884,144.6913,0,0,0,0,100,0), +(@PATH,50,1563.163,-3698.884,145.1913,0,0,0,0,100,0), +(@PATH,51,1562.913,-3700.634,145.9413,0,0,0,0,100,0), +(@PATH,52,1562.413,-3703.384,146.4413,0,0,0,0,100,0), +(@PATH,53,1562.163,-3705.384,147.1913,0,0,0,0,100,0), +(@PATH,54,1562.282,-3705.127,147.1324,0,0,0,0,100,0), +(@PATH,55,1562.532,-3703.127,146.6324,0,0,0,0,100,0), +(@PATH,56,1562.532,-3700.377,145.8824,0,0,0,0,100,0), +(@PATH,57,1563.032,-3698.627,145.3824,0,0,0,0,100,0), +(@PATH,58,1563.282,-3696.627,144.6324,0,0,0,0,100,0), +(@PATH,59,1563.532,-3694.627,144.1324,0,0,0,0,100,0), +(@PATH,60,1563.753,-3694.233,143.727,0,0,0,0,100,0), +(@PATH,61,1563.753,-3693.483,143.727,0,0,0,0,100,0), +(@PATH,62,1565.253,-3692.483,143.227,0,0,0,0,100,0), +(@PATH,63,1567.878,-3689.968,142.6124,0,0,0,0,100,0), +(@PATH,64,1569.378,-3691.468,141.8624,0,0,0,0,100,0), +(@PATH,65,1569.878,-3692.218,141.1124,0,0,0,0,100,0), +(@PATH,66,1572.128,-3693.968,140.1124,0,0,0,0,100,0), +(@PATH,67,1572.214,-3694.074,139.9068,0,0,0,0,100,0), +(@PATH,68,1572.714,-3694.574,139.9068,0,0,0,0,100,0), +(@PATH,69,1573.214,-3696.574,139.1568,0,0,0,0,100,0), +(@PATH,70,1573.714,-3700.324,138.6568,0,0,0,0,100,0), +(@PATH,71,1574.214,-3702.324,137.9068,0,0,0,0,100,0), +(@PATH,72,1574.964,-3705.074,137.4068,0,0,0,0,100,0), +(@PATH,73,1575.214,-3706.074,136.9068,0,0,0,0,100,0), +(@PATH,74,1575.964,-3709.824,135.9068,0,0,0,0,100,0), +(@PATH,75,1576.406,-3710.099,135.5516,0,0,0,0,100,0), +(@PATH,76,1576.906,-3712.599,135.3016,0,0,0,0,100,0), +(@PATH,77,1577.656,-3714.599,134.8016,0,0,0,0,100,0), +(@PATH,78,1578.406,-3717.349,133.3016,0,0,0,0,100,0), +(@PATH,79,1578.906,-3719.099,132.5516,0,0,0,0,100,0), +(@PATH,80,1580.156,-3722.849,131.3016,0,0,0,0,100,0), +(@PATH,81,1581.406,-3726.599,130.3016,0,0,0,0,100,0), +(@PATH,82,1581.613,-3726.697,130.2634,0,0,0,0,100,0), +(@PATH,83,1582.113,-3728.197,129.7634,0,0,0,0,100,0), +(@PATH,84,1581.363,-3725.447,130.7634,0,0,0,0,100,0), +(@PATH,85,1580.363,-3722.447,131.5134,0,0,0,0,100,0), +(@PATH,86,1579.613,-3719.697,132.2634,0,0,0,0,100,0), +(@PATH,87,1579.113,-3717.947,132.7634,0,0,0,0,100,0), +(@PATH,88,1578.613,-3716.197,133.5134,0,0,0,0,100,0), +(@PATH,89,1578.113,-3714.197,134.7634,0,0,0,0,100,0), +(@PATH,90,1578.442,-3716.037,133.8488,0,0,0,0,100,0), +(@PATH,91,1578.192,-3714.287,134.5988,0,0,0,0,100,0), +(@PATH,92,1577.843,-3714.012,134.9969,0,0,0,0,100,0), +(@PATH,93,1577.343,-3712.012,135.4969,0,0,0,0,100,0), +(@PATH,94,1576.093,-3707.262,136.2469,0,0,0,0,100,0), +(@PATH,95,1576.093,-3706.262,136.7469,0,0,0,0,100,0), +(@PATH,96,1575.593,-3703.512,137.4969,0,0,0,0,100,0), +(@PATH,97,1575.093,-3701.762,138.2469,0,0,0,0,100,0), +(@PATH,98,1574.593,-3699.762,138.7469,0,0,0,0,100,0), +(@PATH,99,1573.843,-3695.762,139.4969,0,0,0,0,100,0), +(@PATH,100,1568.976,-3688.636,142.5653,0,0,0,0,100,0), +(@PATH,101,1568.226,-3687.636,142.3153,0,0,0,0,100,0), +(@PATH,102,1569.063,-3682.779,141.6766,0,0,0,0,100,0), +(@PATH,103,1569.063,-3680.779,140.6766,0,0,0,0,100,0), +(@PATH,104,1569.313,-3678.779,139.9266,0,0,0,0,100,0), +(@PATH,105,1569.313,-3676.779,138.9266,0,0,0,0,100,0), +(@PATH,106,1569.313,-3675.779,138.1766,0,0,0,0,100,0), +(@PATH,107,1569.563,-3675.029,137.6766,0,0,0,0,100,0), +(@PATH,108,1569.813,-3672.029,136.6766,0,0,0,0,100,0), +(@PATH,109,1569.813,-3671.029,135.6766,0,0,0,0,100,0), +(@PATH,110,1569.813,-3670.029,134.9266,0,0,0,0,100,0), +(@PATH,111,1570.063,-3669.029,134.1766,0,0,0,0,100,0), +(@PATH,112,1570.063,-3668.029,133.6766,0,0,0,0,100,0), +(@PATH,113,1570.063,-3667.029,132.9266,0,0,0,0,100,0), +(@PATH,114,1570.313,-3666.029,132.4266,0,0,0,0,100,0), +(@PATH,115,1570.069,-3667.037,132.9397,0,0,0,0,100,0), +(@PATH,116,1570.069,-3668.037,133.6897,0,0,0,0,100,0), +(@PATH,117,1570.069,-3669.037,134.1897,0,0,0,0,100,0), +(@PATH,118,1569.819,-3670.037,134.9397,0,0,0,0,100,0), +(@PATH,119,1569.819,-3671.037,135.6897,0,0,0,0,100,0), +(@PATH,120,1569.819,-3672.037,136.4397,0,0,0,0,100,0); diff --git a/sql/updates/world/2015_06_03_01_world.sql b/sql/updates/world/2015_06_03_01_world.sql new file mode 100644 index 00000000000..6315df93149 --- /dev/null +++ b/sql/updates/world/2015_06_03_01_world.sql @@ -0,0 +1,126 @@ +UPDATE `creature_template` SET `ainame`='SmartAI', `scriptname`='' WHERE `entry`in(20875); + +DELETE FROM `smart_scripts` WHERE `entryorguid`in(20875) AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(20875,0,0,0,4,0,100,0,0,0,0,0,11,36733,2,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Agro - Cast Elemental Response'), +(20875,0,1,0,9,0,100,0,0,8,12000,20000,11,13704,0,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Range - Cast Psychic Scream'), +(20875,0,2,0,0,2,100,0,15000,25000,15000,25000,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - IC (Phase 2) - Set Phase 1'), +(20875,0,3,0,4,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Agro - Set Phase 1'), +(20875,0,4,17,8,1,100,0,0,2,0,0,11,34336,2,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Spellhit (Holy) (Phase 1) - Cast Damage Reduction: Holy'), +(20875,0,5,18,8,1,100,0,0,4,0,0,11,34333,2,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Spellhit (Fire) (Phase 1) - Cast Damage Reduction: Fire'), +(20875,0,6,19,8,1,100,0,0,8,0,0,11,34335,2,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Spellhit (Nature)(Phase 1) - Cast Damage Reduction: Nature'), +(20875,0,7,20,8,1,100,0,0,16,0,0,11,34334,2,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Spellhit (Frost) (Phase 1) - Cast Damage Reduction: Frost'), +(20875,0,8,21,8,1,100,0,0,32,0,0,11,34338,2,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Spellhit (Shadow) (Phase 1) - Cast Damage Reduction: Shadow'), +(20875,0,9,22,8,1,100,0,0,64,0,0,11,34331,2,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Spellhit (Arcane) (Phase 1) - Cast Damage Reduction: Arcane'), +(20875,0,10,0,61,0,100,0,0,0,0,0,22,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - Link - Set Phase 2'), +(20875,0,11,0,0,2,100,2,0,0,3000,3500,11,36742,64,0,0,0,0,2,0,0,0,0,0,0,0,'Negaton Screamer - IC (Phase 2) - Cast Fireball Volley (Normal Dungeon)'), +(20875,0,12,0,0,2,100,2,0,0,3000,3500,11,36738,64,0,0,0,0,2,0,0,0,0,0,0,0,'Negaton Screamer - IC (Phase 2) - Cast Arcane Volley (Normal Dungeon)'), +(20875,0,13,0,0,2,100,2,0,0,3000,3500,11,36741,64,0,0,0,0,2,0,0,0,0,0,0,0,'Negaton Screamer - IC (Phase 2) - Cast Frostbolt Volley (Normal Dungeon)'), +(20875,0,14,0,0,2,100,2,0,0,3000,3500,11,36743,64,0,0,0,0,2,0,0,0,0,0,0,0,'Negaton Screamer - IC (Phase 2) - Cast Holy Bolt Volley (Normal Dungeon)'), +(20875,0,15,0,0,2,100,2,0,0,3000,3500,11,36740,64,0,0,0,0,2,0,0,0,0,0,0,0,'Negaton Screamer - IC (Phase 2) - Cast Lightning Bolt Volley (Normal Dungeon)'), +(20875,0,16,0,0,2,100,2,0,0,3000,3500,11,36736,64,0,0,0,0,2,0,0,0,0,0,0,0,'Negaton Screamer - IC (Phase 2) - Cast Shadow Bolt Volley (Normal Dungeon)'), +(20875,0,17,10,61,0,100,0,0,0,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Spellhit (Holy) (Phase 1) - Say'), +(20875,0,18,10,61,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Spellhit (Fire) (Phase 1) - Say'), +(20875,0,19,10,61,0,100,0,0,0,0,0,1,4,0,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Spellhit (Nature)(Phase 1) - Say'), +(20875,0,20,10,61,0,100,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Spellhit (Frost) (Phase 1) - Say'), +(20875,0,21,10,61,0,100,0,0,0,0,0,1,5,0,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Spellhit (Shadow) (Phase 1) - Say'), +(20875,0,22,10,61,0,100,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Negaton Screamer - On Spellhit (Arcane) (Phase 1) - Say'), +(20875,0,23,0,0,2,100,4,0,0,3000,3500,11,38836,64,0,0,0,0,2,0,0,0,0,0,0,0,'Negaton Screamer - IC (Phase 2) - Cast Fireball Volley (Heroic Dungeon)'), +(20875,0,24,0,0,2,100,4,0,0,3000,3500,11,38835,64,0,0,0,0,2,0,0,0,0,0,0,0,'Negaton Screamer - IC (Phase 2) - Cast Arcane Volley (Heroic Dungeon)'), +(20875,0,25,0,0,2,100,4,0,0,3000,3500,11,38837,64,0,0,0,0,2,0,0,0,0,0,0,0,'Negaton Screamer - IC (Phase 2) - Cast Frostbolt Volley (Heroic Dungeon)'), +(20875,0,26,0,0,2,100,4,0,0,3000,3500,11,38838,64,0,0,0,0,2,0,0,0,0,0,0,0,'Negaton Screamer - IC (Phase 2) - Cast Holy Bolt Volley (Heroic Dungeon)'), +(20875,0,27,0,0,2,100,4,0,0,3000,3500,11,38839,64,0,0,0,0,2,0,0,0,0,0,0,0,'Negaton Screamer - IC (Phase 2) - Cast Lightning Bolt Volley (Heroic Dungeon)'), +(20875,0,28,0,0,2,100,4,0,0,3000,3500,11,38840,64,0,0,0,0,2,0,0,0,0,0,0,0,'Negaton Screamer - IC (Phase 2) - Cast Shadow Bolt Volley (Heroic Dungeon)'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry`=20875; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22, 12, 20875, 0, 0, 1, 1, 34333, 0, 0, 0, 0, 0, '', 'Negaton Screamer requires Damage Reduction: Fire to cast Fireball Volley (Normal)'), +(22, 13, 20875, 0, 0, 1, 1, 34331, 0, 0, 0, 0, 0, '', 'Negaton Screamer requires Damage Reduction: Arcane to cast Arcane Volley (Normal)'), +(22, 14, 20875, 0, 0, 1, 1, 34334, 0, 0, 0, 0, 0, '', 'Negaton Screamer requires Damage Reduction: Frost to cast Frostbolt Volley (Normal)'), +(22, 15, 20875, 0, 0, 1, 1, 34336, 0, 0, 0, 0, 0, '', 'Negaton Screamer requires Damage Reduction: Holy to cast Holy Bolt Volley (Normal)'), +(22, 16, 20875, 0, 0, 1, 1, 34335, 0, 0, 0, 0, 0, '', 'Negaton Screamer requires Damage Reduction: Nature to cast Lightning Bolt Volley (Normal)'), +(22, 17, 20875, 0, 0, 1, 1, 34338, 0, 0, 0, 0, 0, '', 'Negaton Screamer requires Damage Reduction: Shadow to cast Shadow Bolt Volley (Normal)'), +(22, 24, 20875, 0, 0, 1, 1, 34333, 0, 0, 0, 0, 0, '', 'Negaton Screamer requires Damage Reduction: Fire to cast Fireball Volley (Heroic)'), +(22, 25, 20875, 0, 0, 1, 1, 34331, 0, 0, 0, 0, 0, '', 'Negaton Screamer requires Damage Reduction: Arcane to cast Arcane Volley (Heroic)'), +(22, 26, 20875, 0, 0, 1, 1, 34334, 0, 0, 0, 0, 0, '', 'Negaton Screamer requires Damage Reduction: Frost to cast Frostbolt Volley (Heroic)'), +(22, 27, 20875, 0, 0, 1, 1, 34336, 0, 0, 0, 0, 0, '', 'Negaton Screamer requires Damage Reduction: Holy to cast Holy Bolt Volley (Heroic)'), +(22, 28, 20875, 0, 0, 1, 1, 34335, 0, 0, 0, 0, 0, '', 'Negaton Screamer requires Damage Reduction: Nature to cast Lightning Bolt Volley (Heroic)'), +(22, 29, 20875, 0, 0, 1, 1, 34338, 0, 0, 0, 0, 0, '', 'Negaton Screamer requires Damage Reduction: Shadow to cast Shadow Bolt Volley (Heroic)'); + +DELETE FROM `creature_text` WHERE `entry`=20875; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`,`BroadcastTextID`) VALUES +(20875, 0, 0, '%s absorbs the fire energy of the attack.', 16, 0, 100, 0, 0, 0, 'Negaton Screamer',17105), +(20875, 1, 0, '%s absorbs the arcane energy of the attack.', 16, 0, 100, 0, 0, 0, 'Negaton Screamer',17109), +(20875, 2, 0, '%s absorbs the frost energy of the attack.', 16, 0, 100, 0, 0, 0, 'Negaton Screamer',17106), +(20875, 3, 0, '%s absorbs the holy energy of the attack.', 16, 0, 100, 0, 0, 0, 'Negaton Screamer',17110), +(20875, 4, 0, '%s absorbs the nature energy of the attack.', 16, 0, 100, 0, 0, 0, 'Negaton Screamer',17107), +(20875, 5, 0, '%s absorbs the shadow energy of the attack.', 16, 0, 100, 0, 0, 0, 'Negaton Screamer',17108); + +DELETE FROM `waypoints` where `entry`IN(14323,14321); +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(14323, 1, 558.6339, 549.9158, -25.39908, 'Guard Slip kik'), +(14323, 2, 550.9423, 528.1198, -25.40169, 'Guard Slip kik'), +(14323, 3, 558.6339, 549.9158, -25.39908, 'Guard Slip kik'), +(14323, 4, 573.5057, 563.2197, -25.40176, 'Guard Slip kik'), +(14323, 5, 573.2263, 586.457, -25.40273, 'Guard Slip kik'), +(14323, 6, 524.0547, 587.0665, -25.40254, 'Guard Slip kik'), +(14323, 7, 510.3508, 606.5667, -25.40364, 'Guard Slip kik'), +(14323, 8, 486.8481, 606.4826, -25.40477, 'Guard Slip kik'), +(14323, 9, 478.1636, 594.9525, -25.40531, 'Guard Slip kik'), +(14323, 10, 477.4341, 579.6123, -25.4021, 'Guard Slip kik'), +(14323, 11, 504.7797, 574.7651, -25.40086, 'Guard Slip kik'), +(14323, 12, 477.4341, 579.6123, -25.4021, 'Guard Slip kik'), +(14323, 13, 486.8481, 606.4826, -25.40477, 'Guard Slip kik'), +(14323, 14, 510.3508, 606.5667, -25.40364, 'Guard Slip kik'), +(14323, 15, 524.0547, 587.0665, -25.40254, 'Guard Slip kik'), +(14323, 16, 573.2263, 586.457, -25.40273, 'Guard Slip kik'), +(14323, 17, 573.5057, 563.2197, -25.40176, 'Guard Slip kik'), +(14321, 1, 390.7901, 340.0213, 2.865798, 'Guard Fengus'), +(14321, 2, 386.5863, 316.9394, 10.87668, 'Guard Fengus'), +(14321, 3, 385.826, 281.0563, 12.23588, 'Guard Fengus'), +(14321, 4, 385.6659, 260.2018, 11.43955, 'Guard Fengus'), +(14321, 5, 407.447, 256.0239, 12.23423, 'Guard Fengus'), +(14321, 6, 444.0919, 255.3879, 11.20982, 'Guard Fengus'), +(14321, 7, 407.4797, 258.508, 12.23421, 'Guard Fengus'), +(14321, 8, 384.6136, 256.412, 11.43955, 'Guard Fengus'), +(14321, 9, 358.8656, 258.3085, 12.23409, 'Guard Fengus'), +(14321, 10, 316.5439, 258.2672, 11.22405, 'Guard Fengus'), +(14321, 11, 287.7441, 260.7287, 2.869437, 'Guard Fengus'), +(14321, 12, 290.6053, 280.1005, 2.848812, 'Guard Fengus'), +(14321, 13, 289.7671, 310.0473, 2.853041, 'Guard Fengus'), +(14321, 14, 300.0063, 328.7043, 2.852961, 'Guard Fengus'), +(14321, 15, 294.1508, 290.1005, 2.849759, 'Guard Fengus'), +(14321, 16, 288.6681, 260.1472, 2.870163, 'Guard Fengus'), +(14321, 17, 318.0658, 258.1307, 11.22347, 'Guard Fengus'), +(14321, 18, 352.2249, 259.8816, 11.20577, 'Guard Fengus'), +(14321, 19, 379.2898, 259.8564, 11.43955, 'Guard Fengus'), +(14321, 20, 383.1255, 280.3708, 12.23591, 'Guard Fengus'), +(14321, 21, 384.3981, 315.2444, 11.21198, 'Guard Fengus'), +(14321, 22, 385.5048, 342.4915, 2.862235, 'Guard Fengus'), +(14321, 23, 350.4333, 341.1977, 2.853369, 'Guard Fengus'), +(14321, 24, 313.9085, 338.8922, 2.852938, 'Guard Fengus'), +(14321, 25, 356.01, 342.2071, 2.853216, 'Guard Fengus'), +(14321, 26, 388.9794, 340.4667, 2.864845, 'Guard Fengus'), +(14321, 27, 423.3712, 340.0448, 2.853797, 'Guard Fengus'), +(14321, 28, 454.4482, 336.7815, 2.855228, 'Guard Fengus'), +(14321, 29, 417.1513, 339.7217, 2.853512, 'Guard Fengus'); + +UPDATE `smart_scripts` SET `event_param1`=3, `comment`='Guard Slip\'kik - On Reached WP3 (Phase 2) - Stop WP' WHERE `entryorguid`=14323 AND `source_type`=0 AND `id`=9 AND `link`=10; +UPDATE `smart_scripts` SET `link`=14 WHERE `entryorguid`=14325 AND `source_type`=0 AND `id`=11 AND `link`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=14321 AND `source_type`=0 AND `id`=6 AND `link`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=14323 AND `source_type`=0 AND `id`=6 AND `link`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=14323 AND `source_type`=0 AND `id`=6 AND `link`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=14324 AND `source_type`=0 AND `id`=28 AND `link`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=14321 AND `source_type`=0 AND `id` in(8,9); +DELETE FROM `smart_scripts` WHERE `entryorguid`=14323 AND `source_type`=0 AND `id`=14; +UPDATE `smart_scripts` SET `link`=15 WHERE `entryorguid`=14325 AND `source_type`=0 AND `id`=13 AND `link`=0; + +DELETE FROM `smart_scripts` WHERE `entryorguid`=14325 AND `source_type`=0 AND `id`>13; + +DELETE FROM `smart_scripts` WHERE `entryorguid`=14325 AND `source_type`=0 AND `id`=14; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(14325, 0, 14, 0, 61, 0, 100, 0, 0, 0, 0, 0, 2, 45, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Captain Kromcrush - On Gossip Option Selected - Set Faction'), +(14325, 0, 15, 0, 61, 0, 100, 0, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Captain Kromcrush - On Reached WP2 - Set Npc Flags'), +(14321, 0, 8, 0, 11, 0, 100, 0, 0, 0, 0, 0, 53, 0, 14321, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 'Guard Fengus - On Spawn - Start WP'), +(14321, 0, 9, 0, 64, 0, 100, 0, 0, 0, 0, 0, 54, 30000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Guard Fengus - On Gossip Hello - Pause WP'), +(14323, 0, 14, 0, 64, 0, 100, 0, 0, 0, 0, 0, 54, 30000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Guard Slip Kik - On Gossip Hello - Pause WP'); diff --git a/sql/updates/world/2015_06_04_00_world.sql b/sql/updates/world/2015_06_04_00_world.sql new file mode 100644 index 00000000000..da4814af332 --- /dev/null +++ b/sql/updates/world/2015_06_04_00_world.sql @@ -0,0 +1,5 @@ +-- +SET @SPELL_ATTR0_CU_ALLOW_INFLIGHT_TARGET := 262144; +DELETE FROM `spell_custom_attr` WHERE `entry`=43138; +INSERT INTO `spell_custom_attr` (`entry`, `attributes`) VALUES +(43138, @SPELL_ATTR0_CU_ALLOW_INFLIGHT_TARGET); diff --git a/sql/updates/world/2015_06_04_01_world.sql b/sql/updates/world/2015_06_04_01_world.sql new file mode 100644 index 00000000000..e70f226f5f4 --- /dev/null +++ b/sql/updates/world/2015_06_04_01_world.sql @@ -0,0 +1,7 @@ +-- +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceGroup`=1 AND `SourceEntry` IN (72260, 72278, 72279, 72280); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, 72260, 0, 0, 31, 0, 3, 37813, 0, 0, 0, 0, '', 'Deathbringer Saurfang - Mark of the Fallen Champion heal'), +(13, 1, 72278, 0, 0, 31, 0, 3, 37813, 0, 0, 0, 0, '', 'Deathbringer Saurfang - Mark of the Fallen Champion heal'), +(13, 1, 72279, 0, 0, 31, 0, 3, 37813, 0, 0, 0, 0, '', 'Deathbringer Saurfang - Mark of the Fallen Champion heal'), +(13, 1, 72280, 0, 0, 31, 0, 3, 37813, 0, 0, 0, 0, '', 'Deathbringer Saurfang - Mark of the Fallen Champion heal'); diff --git a/sql/updates/world/2015_06_06_00_world.sql b/sql/updates/world/2015_06_06_00_world.sql new file mode 100644 index 00000000000..ba065a944bf --- /dev/null +++ b/sql/updates/world/2015_06_06_00_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature_template` SET `Unit_Flags`=4104 WHERE `entry`=17551; diff --git a/sql/updates/world/2015_06_06_01_world_335.sql b/sql/updates/world/2015_06_06_01_world_335.sql new file mode 100644 index 00000000000..b8dc057cf34 --- /dev/null +++ b/sql/updates/world/2015_06_06_01_world_335.sql @@ -0,0 +1,40 @@ +-- +DELETE FROM `creature_formations` WHERE `leaderGUID`=79720; +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`) VALUES +(79720,79720,4,0,2), +(79720,79721,4,0,2); + +DELETE FROM `waypoint_data` WHERE `id`=797210; +DELETE FROM `waypoint_scripts` WHERE `id` BETWEEN 229 AND 270; +UPDATE `waypoint_data` SET `action`=0 WHERE `id`=797200; +UPDATE `creature_template` SET `MovementType` = 0 WHERE `entry` = 2532; +UPDATE `creature_addon` SET `path_id` = 0 WHERE `guid` = 79721; +UPDATE `waypoint_data` SET `move_type`=1 WHERE `id`=797200; +UPDATE `creature` SET `movementtype`=0 WHERE `guid`=79721; + +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=2533; +DELETE FROM `smart_scripts` WHERE `entryorguid`=2533 AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=253300 AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(2533,0,0,0,1,0,100,0,10000,10000,30000,30000,80,253300,0,0,0,0,0,1,0,0,0,0,0,0,0,'William - ooc - action list'), +(253300,9,0,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'William - action list - talk1'), +(253300,9,1,0,0,0,100,0,4000,4000,0,0,1,0,0,0,0,0,0,19,2532,50,0,0,0,0,0,'William - action list - talk1 for Donna'); + +DELETE FROM `creature_text` WHERE `entry` IN (2533, 2532); +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`, `BroadcastTextId`) VALUES +(2533,0,0,'Ha ha! I have Betsy!',12,7,100,0,0,0,'William', 693), +(2533,0,1,'I wonder if your dolly can swim!',12,7,100,0,0,0,'William', 705), +(2533,0,2,'I have your dolly! Nyah nyah!',12,7,100,0,0,0,'William', 706), +(2533,0,3,'What happens when I do this?!',12,7,100,0,0,0,'William', 707), +(2533,0,4,'If you want her back you''re gonna have to beg!',12,7,100,0,0,0,'William', 708), +(2533,0,5,'Crybaby! Crybaby!',12,7,100,0,0,0,'William', 709), +(2533,0,6,'Baby wants her dolly!',12,7,100,0,0,0,'William', 710), +(2533,0,7,'Oops!',12,7,100,0,0,0,'William', 711), +(2532,0,0,'Gimme my dolly!!',12,7,100,0,0,0,'Donna', 694), +(2532,0,1,'Betsy! Give me Betsy back!',12,7,100,0,0,0,'Donna', 695), +(2532,0,2,'Don''t hurt Betsy, you meanie!',12,7,100,0,0,0,'Donna', 696), +(2532,0,3,'WAAAHHH!!!',12,7,100,0,0,0,'Donna', 697), +(2532,0,4,'I''m telling Mommy!',12,7,100,0,0,0,'Donna', 698), +(2532,0,5,'Stop pulling her hair out!',12,7,100,0,0,0,'Donna', 699), +(2532,0,6,'You''re hurting her!',12,7,100,0,0,0,'Donna', 700), +(2532,0,7,'Stop! You''ll pull her head off!',12,7,100,0,0,0,'Donna', 701); diff --git a/sql/updates/world/2015_06_06_02_world.sql b/sql/updates/world/2015_06_06_02_world.sql new file mode 100644 index 00000000000..509fe6a33b0 --- /dev/null +++ b/sql/updates/world/2015_06_06_02_world.sql @@ -0,0 +1,14 @@ +-- +DELETE FROM `waypoints` WHERE `entry` IN (14121); +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(14121, 1, 44.334, 1180.138, -121.573, 'Deeprun Diver'), +(14121, 2, 33.919, 1141.767, -122.757, 'Deeprun Diver'), +(14121, 3, 45.891, 1193.066, -121.714, 'Deeprun Diver'), +(14121, 4, 55.744, 1206.163, -121.63, 'Deeprun Diver'); +UPDATE `creature` SET `MovementType`=0, `spawndist`=0 WHERE `guid`=53790; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (14121); +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (-53790) AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(-53790, 0, 0, 0, 1, 0, 100, 1, 1, 1, 0, 0, 53, 0, 14121, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Deeprun Diver - ooc no repeat - Start wp'), +(-53790, 0, 1, 2, 40, 0, 100, 0, 4, 14121, 0, 0, 54, 10000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,0,'Deeprun Diver - On wp reached - pause wp'), +(-53790, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 20, 179345, 10, 0, 0, 0, 0,0,'Deeprun Diver - On wp reached - activate object'); diff --git a/sql/updates/world/2015_06_06_03_world.sql b/sql/updates/world/2015_06_06_03_world.sql new file mode 100644 index 00000000000..641217fffc0 --- /dev/null +++ b/sql/updates/world/2015_06_06_03_world.sql @@ -0,0 +1,2 @@ +-- +DELETE FROM `creature` WHERE `id` IN (22337, 22339); diff --git a/sql/updates/world/2015_06_06_04_world.sql b/sql/updates/world/2015_06_06_04_world.sql new file mode 100644 index 00000000000..8cb198d4c6f --- /dev/null +++ b/sql/updates/world/2015_06_06_04_world.sql @@ -0,0 +1,24 @@ +-- +DELETE FROM `spell_scripts` WHERE `id`=38173; +INSERT INTO `spell_scripts` (`id`, `effIndex`, `delay`, `command`, `datalong`, `datalong2`, `dataint`, `x`, `y`, `z`, `o`) VALUES +(38173, 0, 0, 10, 22023, 12000, 0, 0, 0, 0, 0); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry` IN (38173); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13,1,38173,0,0, 31,0,3,22160,0,0,0,'','Summon Spirit require Bloodmaul Taskmaster'), +(13,1,38173,0,0, 29,0,22384,15,0,0,0,'','Summon Spirit if Bloodmaul Soothsayer is around'); + +UPDATE `creature_template` SET `flags_extra`=2, `AIName`='SmartAI' WHERE `Entry`=22023; +DELETE FROM `smart_scripts` WHERE `entryorguid`=22023 AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=2202300 AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(22023, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 80, 2202300, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Spirit - Just summoned - action list'), +(2202300, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 19, 22160, 50, 0, 0, 0, 0, 0, 'Spirit - action list - move to pos'), +(2202300, 9, 1, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 69, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Spirit - action list - move to pos'), +(2202300, 9, 2, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 85, 39074, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Spirit - action list - Cast credit spell'); + +DELETE FROM `smart_scripts` WHERE `entryorguid`=22160 AND `source_type`=0 AND `id`=4; +DELETE FROM `smart_scripts` WHERE `entryorguid`=22384 AND `source_type`=0 AND `id`=6; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(22160, 0, 4, 0, 1, 0, 100, 0, 5000, 5000, 3000, 5000, 10, 1, 11, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bloodmaul Taskmaster - Out of Combat - play random emotes'), +(22384, 0, 6, 0, 1, 0, 100, 0, 5000, 5000, 3000, 5000, 10, 1, 11, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bloodmaul Soothsayer - Out of Combat - play random emotes'); diff --git a/sql/updates/world/2015_06_06_05_world.sql b/sql/updates/world/2015_06_06_05_world.sql new file mode 100644 index 00000000000..463b5c8e76a --- /dev/null +++ b/sql/updates/world/2015_06_06_05_world.sql @@ -0,0 +1,2 @@ +-- +DELETE FROM `creature` WHERE `guid` IN (150187, 152167); diff --git a/sql/updates/world/2015_06_06_06_world.sql b/sql/updates/world/2015_06_06_06_world.sql new file mode 100644 index 00000000000..374ace5e9f6 --- /dev/null +++ b/sql/updates/world/2015_06_06_06_world.sql @@ -0,0 +1,8 @@ +-- +UPDATE `smart_scripts` SET `action_param1`=58955, `action_param2`=0, `target_type`=7, `Comment`="Dying Soldier - On Spell hit - Cast 'Alliance Quest Aura'" WHERE `entryorguid`=31304 AND `source_type`=0 AND `id`=6; +UPDATE `smart_scripts` SET `action_param1`=3240, `action_param2`=2, `target_type`=1, `Comment`="Dying Soldier - On Spellhit 'Finish It' - Cast 'Bloody Explosion'" WHERE `entryorguid`=31304 AND `source_type`=0 AND `id`=7; +UPDATE `smart_scripts` SET `action_param1`=0 WHERE `entryorguid`=31304 AND `source_type`=0 AND `id`=9; + +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (31273) AND `source_type`=0 AND `id`=1; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(31273, 0, 1, 0, 25, 0, 100, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Dying Berserker - On Reset - set react passif'); diff --git a/sql/updates/world/2015_06_06_07_world.sql b/sql/updates/world/2015_06_06_07_world.sql new file mode 100644 index 00000000000..c5132143a5b --- /dev/null +++ b/sql/updates/world/2015_06_06_07_world.sql @@ -0,0 +1,9 @@ +-- +UPDATE `smart_scripts` SET `event_flags`= 1 WHERE `entryorguid` = 27003 AND `source_type` = 0 AND `id` = 2; +UPDATE `smart_scripts` SET `event_param1`= 5000, `event_param2` = 5000 WHERE `entryorguid` = 2700300 AND `source_type` = 9 AND `id` IN (7, 6); +UPDATE `smart_scripts` SET `action_type`= 20, `Comment`="Dregmar Runebrand - Stop Attack" WHERE `entryorguid`=2700300 AND `source_type` = 9 AND `id` = 1; +UPDATE `smart_scripts` SET `action_type`= 20, `action_param1`= 1, `Comment`='Dregmar Runebrand - Start Attack' WHERE `entryorguid`= 2700300 AND `source_type` = 9 AND `id` = 8; +DELETE FROM `smart_scripts` WHERE `entryorguid` = 2700300 AND `source_type` = 9 AND `id` IN (9, 10); +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(2700300,9,9,0,0,0,100,0,0,0,0,0,21,1,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Dregmar Runebrand - enable movement'), +(2700300,9,10,0,0,0,100,0,0,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Dregmar Runebrand - force despawn'); diff --git a/sql/updates/world/2015_06_06_08_world.sql b/sql/updates/world/2015_06_06_08_world.sql new file mode 100644 index 00000000000..6e11c906871 --- /dev/null +++ b/sql/updates/world/2015_06_06_08_world.sql @@ -0,0 +1,40 @@ +-- +UPDATE `creature_text` SET `BroadcastTextId`=10537 WHERE `entry`= 14875 AND `groupid`= 1 AND `id`= 0; +UPDATE `creature_text` SET `BroadcastTextId`=10601 WHERE `entry`= 11380 AND `groupid`= 0 AND `id`= 0; +UPDATE `creature_text` SET `BroadcastTextId`=16206 WHERE `entry`= 19172 AND `groupid`= 0 AND `id`= 2; +UPDATE `creature_text` SET `BroadcastTextId`=16211 WHERE `entry`= 19177 AND `groupid`= 0 AND `id`= 2; +UPDATE `creature_text` SET `BroadcastTextId`=16463 WHERE `entry`= 20102 AND `groupid`= 8 AND `id`= 2; +UPDATE `creature_text` SET `BroadcastTextId`=23175 WHERE `entry`= 23863 AND `groupid`= 2 AND `id`= 0; +UPDATE `creature_text` SET `BroadcastTextId`=23176 WHERE `entry`= 23863 AND `groupid`= 3 AND `id`= 0; +UPDATE `creature_text` SET `BroadcastTextId`=23177 WHERE `entry`= 23863 AND `groupid`= 4 AND `id`= 0; +UPDATE `creature_text` SET `BroadcastTextId`=23178 WHERE `entry`= 23863 AND `groupid`= 5 AND `id`= 0; +UPDATE `creature_text` SET `BroadcastTextId`=23179 WHERE `entry`= 23863 AND `groupid`= 6 AND `id`= 0; +UPDATE `creature_text` SET `BroadcastTextId`=23181 WHERE `entry`= 23863 AND `groupid`= 8 AND `id`= 0; +UPDATE `creature_text` SET `BroadcastTextId`=23182 WHERE `entry`= 23863 AND `groupid`= 8 AND `id`= 1; +UPDATE `creature_text` SET `BroadcastTextId`=23183 WHERE `entry`= 23863 AND `groupid`= 9 AND `id`= 0; +UPDATE `creature_text` SET `BroadcastTextId`=24340 WHERE `entry`= 19173 AND `groupid`= 8 AND `id`= 4; +UPDATE `creature_text` SET `BroadcastTextId`=24351 WHERE `entry`= 19148 AND `groupid`= 0 AND `id`= 2; +UPDATE `creature_text` SET `BroadcastTextId`=28844 WHERE `entry`= 29 AND `groupid`= 1 AND `id`= 0; +UPDATE `creature_text` SET `BroadcastTextId`=29304 WHERE `entry`= 22515 AND `groupid`= 6 AND `id`= 0; +UPDATE `creature_text` SET `BroadcastTextId`=29305 WHERE `entry`= 22515 AND `groupid`= 7 AND `id`= 0; +UPDATE `creature_text` SET `BroadcastTextId`=29306 WHERE `entry`= 22515 AND `groupid`= 8 AND `id`= 0; +UPDATE `creature_text` SET `BroadcastTextId`=29307 WHERE `entry`= 22515 AND `groupid`= 9 AND `id`= 0; +UPDATE `creature_text` SET `BroadcastTextId`=29308 WHERE `entry`= 22515 AND `groupid`= 10 AND `id`= 0; +UPDATE `creature_text` SET `BroadcastTextId`=37650, `Sound`=17073 WHERE `entry`= 37893 AND `groupid`= 0 AND `id`= 0; +UPDATE `creature_text` SET `text`="The Devourer awaits...", `BroadcastTextId`=38487 WHERE `entry`= 36497 AND `groupid`= 2 AND `id`= 0; +UPDATE `creature_text` SET `BroadcastTextId`=6198 WHERE `entry`= 3977 AND `groupid`= 1 AND `id`= 0; +UPDATE `creature_text` SET `BroadcastTextId`=19407 WHERE `entry`= 21699 AND `groupid`= 1 AND `id`= 0; +UPDATE `creature_text` SET `text`="Alright, let's go.", `BroadcastTextId`=5227 WHERE `entry`= 3692 AND `groupid`= 0 AND `id`= 0; +UPDATE `creature_text` SET `text`="Oh no! Here they come!", `BroadcastTextId`=3744 WHERE `entry`= 3692 AND `groupid`= 1 AND `id`= 0; +UPDATE `creature_text` SET `text`="Thank you again, $n. I'll make my way to the road now. When you can, find Terenthis and let him know we escaped.", `BroadcastTextId`=1236 WHERE `entry`= 3692 AND `groupid`= 2 AND `id`= 0; +UPDATE `creature_text` SET `text`="We made it, my friend. Remember to find Terenthis and let him know we're safe. Thank you again.", `BroadcastTextId`=1243 WHERE `entry`= 3692 AND `groupid`= 3 AND `id`= 0; +UPDATE `creature_text` SET `text`="Grimclaw?! Easy there, my friend... where is your master Volcor?", `BroadcastTextId`=1227 WHERE `entry`= 3693 AND `groupid`= 1 AND `id`= 0; +UPDATE `creature_text` SET `text`="I understand, my friend. I shall find someone to help your master. Go back to him now, or at least stay close.", `BroadcastTextId`=1232 WHERE `entry`= 3693 AND `groupid`= 2 AND `id`= 0; +UPDATE `creature_text` SET `text`="What is happening?", `BroadcastTextId`=13848 WHERE `entry`= 3693 AND `groupid`= 3 AND `id`= 0; +UPDATE `creature_text` SET `text`="Grimclaw?! Easy there, my friend... where is your master Volcor?", `BroadcastTextId`=1227 WHERE `entry`= 3693 AND `groupid`= 4 AND `id`= 0; +UPDATE `creature_text` SET `text`="There... that should help. Now, tell me what's happened, Grimclaw.", `BroadcastTextId`=1230 WHERE `entry`= 3693 AND `groupid`= 5 AND `id`= 0; +UPDATE `creature_text` SET `text`="Whoa, whoa there, my friend. One moment...", `BroadcastTextId`=1229 WHERE `entry`= 3693 AND `groupid`= 6 AND `id`= 0; +UPDATE `creature_text` SET `text`="I understand, my friend. I shall find someone to help your master. Go back to him now, or at least stay close.", `BroadcastTextId`=1232 WHERE `entry`= 3693 AND `groupid`= 7 AND `id`= 0; +UPDATE `creature_text` SET `text`="Now you're gonna get it good, $n!", `BroadcastTextId`=1961 WHERE `entry`= 4961 AND `groupid`= 0 AND `id`= 0; +UPDATE `creature_text` SET `text`="Interesting...", `BroadcastTextId`=19066 WHERE `entry`= 7207 AND `groupid`= 0 AND `id`= 0; +UPDATE `creature_text` SET `text`="That makes sense!", `BroadcastTextId`=65162 WHERE `entry`= 9117 AND `groupid`= 0 AND `id`= 0; diff --git a/sql/updates/world/2015_06_06_09_world.sql b/sql/updates/world/2015_06_06_09_world.sql new file mode 100644 index 00000000000..388541fa522 --- /dev/null +++ b/sql/updates/world/2015_06_06_09_world.sql @@ -0,0 +1,862 @@ +-- +UPDATE `gossip_menu_option` SET `OptionBroadcastTextID`=31225 WHERE `menu_id`=9928; +UPDATE `npc_text` SET `text0_0`= "Greetings, $n.", `text0_1`= "Greetings, $n.", `BroadcastTextId0`=50429 WHERE `id` IN (4732, 68, 384, 328); +UPDATE `npc_text` SET `text0_1`= "Greetings, $n.", `BroadcastTextId0`=50429 WHERE `id` IN (1); +UPDATE `npc_text` SET `text0_0`= "Greetings, $n.", `text0_1`= "Greetings, $n.", `BroadcastTextId0`=50429, `text1_0`= "Greetings, $n.", `text1_1`= "Greetings, $n.", `BroadcastTextId1`=50429,`text2_0`= "Greetings, $n.", `text2_1`= "Greetings, $n.", `BroadcastTextId2`=50429, `text3_0`= "Greetings, $n.", `text3_1`= "Greetings, $n.", `BroadcastTextId3`=50429, `text4_0`= "Greetings, $n.", `text4_1`= "Greetings, $n.", `BroadcastTextId4`=50429, `text5_0`= "Greetings, $n.", `text5_1`= "Greetings, $n.", `BroadcastTextId5`=50429, `text6_0`= "Greetings, $n.", `text6_1`= "Greetings, $n.", `BroadcastTextId6`=50429, `text7_0`= "Greetings, $n.", `text7_1`= "Greetings, $n.", `BroadcastTextId7`=50429 WHERE `id` IN (16777215); +UPDATE `npc_text` SET `text0_0`= "Greetings, $n.", `BroadcastTextId0`=50429 WHERE `id` IN (1569, 1228, 9296, 4258); +UPDATE `npc_text` SET `BroadcastTextId0`=9981 WHERE `id`= 7242; +UPDATE `npc_text` SET `BroadcastTextId0`=3144 WHERE `id`= 1039; +UPDATE `npc_text` SET `BroadcastTextId0`=11068 WHERE `id`= 7903; +UPDATE `npc_text` SET `BroadcastTextId0`=28081 WHERE `id`= 13238; +UPDATE `npc_text` SET `BroadcastTextId0`=10572 WHERE `id`= 7697; +UPDATE `npc_text` SET `BroadcastTextId0`=10766 WHERE `id`= 15296; +UPDATE `npc_text` SET `BroadcastTextId0`=7827 WHERE `id`= 5143; +UPDATE `npc_text` SET `BroadcastTextId0`=10732 WHERE `id`= 7764; +UPDATE `npc_text` SET `BroadcastTextId0`=40591 WHERE `id`= 15906; +UPDATE `npc_text` SET `BroadcastTextId0`=45370 WHERE `id`= 16783; +UPDATE `npc_text` SET `BroadcastTextId0`=10583 WHERE `id`= 7708; +UPDATE `npc_text` SET `BroadcastTextId0`=16460 WHERE `id`= 9780; +UPDATE `npc_text` SET `BroadcastTextId0`=15845 WHERE `id`= 9544; +UPDATE `npc_text` SET `BroadcastTextId0`=4959 WHERE `id`= 10547; +UPDATE `npc_text` SET `BroadcastTextId0`=4901 WHERE `id`= 2606; +UPDATE `npc_text` SET `BroadcastTextId0`=5800 WHERE `id`= 3470; +UPDATE `npc_text` SET `BroadcastTextId0`=10566 WHERE `id`= 7691; +UPDATE `npc_text` SET `BroadcastTextId0`=7852 WHERE `id`= 5168; +UPDATE `npc_text` SET `BroadcastTextId0`=53037 WHERE `id`= 18286; +UPDATE `npc_text` SET `BroadcastTextId0`=7834 WHERE `id`= 5150; +UPDATE `npc_text` SET `BroadcastTextId0`=8131 WHERE `id`= 10557; +UPDATE `npc_text` SET `BroadcastTextId0`=39402 WHERE `id`= 15603; +UPDATE `npc_text` SET `BroadcastTextId0`=45373 WHERE `id`= 16784; +UPDATE `npc_text` SET `BroadcastTextId0`=19802 WHERE `id`= 10601; +UPDATE `npc_text` SET `BroadcastTextId0`=40430 WHERE `id`= 15858; +UPDATE `npc_text` SET `BroadcastTextId0`=51263 WHERE `id`= 17950; +UPDATE `npc_text` SET `BroadcastTextId0`=6268 WHERE `id`= 3795; +UPDATE `npc_text` SET `BroadcastTextId0`=32365 WHERE `id`= 14053; +UPDATE `npc_text` SET `BroadcastTextId0`=13771 WHERE `id`= 8880; +UPDATE `npc_text` SET `BroadcastTextId0`=19134 WHERE `id`= 10365; +UPDATE `npc_text` SET `BroadcastTextId0`=51958 WHERE `id`= 18070; +UPDATE `npc_text` SET `BroadcastTextId0`=8217 WHERE `id`= 401; +UPDATE `npc_text` SET `BroadcastTextId0`=37025 WHERE `id`= 15134; +UPDATE `npc_text` SET `BroadcastTextId0`=11833 WHERE `id`= 8312; +UPDATE `npc_text` SET `BroadcastTextId0`=23450 WHERE `id`= 12085; +UPDATE `npc_text` SET `BroadcastTextId0`=40432 WHERE `id`= 15859; +UPDATE `npc_text` SET `BroadcastTextId0`=2927 WHERE `id`= 906; +UPDATE `npc_text` SET `BroadcastTextId0`=47987 WHERE `id`= 17312; +UPDATE `npc_text` SET `BroadcastTextId0`=4250 WHERE `id`= 1815; +UPDATE `npc_text` SET `BroadcastTextId0`=9337 WHERE `id`= 6870; +UPDATE `npc_text` SET `BroadcastTextId0`=53194 WHERE `id`= 18331; +UPDATE `npc_text` SET `BroadcastTextId0`=11943 WHERE `id`= 8353; +UPDATE `npc_text` SET `BroadcastTextId0`=18178 WHERE `id`= 10058; +UPDATE `npc_text` SET `BroadcastTextId0`=13738 WHERE `id`= 8870; +UPDATE `npc_text` SET `BroadcastTextId0`=4309 WHERE `id`= 1853; +UPDATE `npc_text` SET `BroadcastTextId0`=22226 WHERE `id`= 11256; +UPDATE `npc_text` SET `BroadcastTextId0`=4645 WHERE `id`= 2314; +UPDATE `npc_text` SET `BroadcastTextId0`=56179 WHERE `id`= 18880; +UPDATE `npc_text` SET `BroadcastTextId0`=56178 WHERE `id`= 18879; +UPDATE `npc_text` SET `BroadcastTextId0`=51948 WHERE `id`= 18064; +UPDATE `npc_text` SET `BroadcastTextId0`=52056 WHERE `id`= 18093; +UPDATE `npc_text` SET `BroadcastTextId0`=7832 WHERE `id`= 5148; +UPDATE `npc_text` SET `BroadcastTextId0`=6088 WHERE `id`= 3664; +UPDATE `npc_text` SET `BroadcastTextId0`=6869 WHERE `id`= 4134; +UPDATE `npc_text` SET `BroadcastTextId0`=10595 WHERE `id`= 7712; +UPDATE `npc_text` SET `BroadcastTextId0`=7931 WHERE `id`= 5242; +UPDATE `npc_text` SET `BroadcastTextId0`=41664 WHERE `id`= 16108; +UPDATE `npc_text` SET `BroadcastTextId0`=13654 WHERE `id`= 8855; +UPDATE `npc_text` SET `BroadcastTextId0`=6229 WHERE `id`= 3753; +UPDATE `npc_text` SET `BroadcastTextId0`=4957 WHERE `id`= 2638; +UPDATE `npc_text` SET `BroadcastTextId0`=27467 WHERE `id`= 13062; +UPDATE `npc_text` SET `BroadcastTextId0`=50266 WHERE `id`= 17731; +UPDATE `npc_text` SET `BroadcastTextId0`=46435 WHERE `id`= 17016; +UPDATE `npc_text` SET `BroadcastTextId0`=50695 WHERE `id`= 17816; +UPDATE `npc_text` SET `BroadcastTextId0`=17472 WHERE `id`= 9933; +UPDATE `npc_text` SET `BroadcastTextId0`=7674 WHERE `id`= 5012; +UPDATE `npc_text` SET `BroadcastTextId0`=44644 WHERE `id`= 16624; +UPDATE `npc_text` SET `BroadcastTextId0`=26260 WHERE `id`= 12751; +UPDATE `npc_text` SET `BroadcastTextId0`=35221 WHERE `id`= 14672; +UPDATE `npc_text` SET `BroadcastTextId0`=10717 WHERE `id`= 7757; +UPDATE `npc_text` SET `BroadcastTextId0`=10577 WHERE `id`= 7702; +UPDATE `npc_text` SET `BroadcastTextId0`=46113 WHERE `id`= 16952; +UPDATE `npc_text` SET `BroadcastTextId0`=10781 WHERE `id`= 7797; +UPDATE `npc_text` SET `BroadcastTextId0`=6729 WHERE `id`= 4074; +UPDATE `npc_text` SET `BroadcastTextId0`=21463 WHERE `id`= 10945; +UPDATE `npc_text` SET `BroadcastTextId0`=31208 WHERE `id`= 13797; +UPDATE `npc_text` SET `BroadcastTextId0`=11338 WHERE `id`= 8071; +UPDATE `npc_text` SET `BroadcastTextId0`=10600 WHERE `id`= 7714; +UPDATE `npc_text` SET `BroadcastTextId0`=11941 WHERE `id`= 8351; +UPDATE `npc_text` SET `BroadcastTextId0`=19271 WHERE `id`= 10409; +UPDATE `npc_text` SET `BroadcastTextId0`=22321 WHERE `id`= 11313; +UPDATE `npc_text` SET `BroadcastTextId0`=10562 WHERE `id`= 7687; +UPDATE `npc_text` SET `BroadcastTextId0`=29536 WHERE `id`= 12916; +UPDATE `npc_text` SET `BroadcastTextId0`=10563 WHERE `id`= 7688; +UPDATE `npc_text` SET `BroadcastTextId0`=9927 WHERE `id`= 7212; +UPDATE `npc_text` SET `BroadcastTextId0`=5972 WHERE `id`= 3561; +UPDATE `npc_text` SET `BroadcastTextId0`=4248 WHERE `id`= 1814; +UPDATE `npc_text` SET `BroadcastTextId0`=27454 WHERE `id`= 13056; +UPDATE `npc_text` SET `BroadcastTextId0`=11610 WHERE `id`= 8202; +UPDATE `npc_text` SET `BroadcastTextId0`=26185 WHERE `id`= 12739; +UPDATE `npc_text` SET `BroadcastTextId0`=46179 WHERE `id`= 16974; +UPDATE `npc_text` SET `BroadcastTextId0`=48457 WHERE `id`= 17445; +UPDATE `npc_text` SET `BroadcastTextId0`=56957 WHERE `id`= 19024; +UPDATE `npc_text` SET `BroadcastTextId0`=9930 WHERE `id`= 7214; +UPDATE `npc_text` SET `BroadcastTextId0`=34546 WHERE `id`= 14531; +UPDATE `npc_text` SET `BroadcastTextId0`=33650 WHERE `id`= 14368; +UPDATE `npc_text` SET `BroadcastTextId0`=23377 WHERE `id`= 12076; +UPDATE `npc_text` SET `BroadcastTextId0`=27288 WHERE `id`= 13002; +UPDATE `npc_text` SET `BroadcastTextId0`=32089 WHERE `id`= 13969; +UPDATE `npc_text` SET `BroadcastTextId0`=7938 WHERE `id`= 5249; +UPDATE `npc_text` SET `BroadcastTextId0`=3483 WHERE `id`= 1334; +UPDATE `npc_text` SET `BroadcastTextId0`=47996 WHERE `id`= 17318; +UPDATE `npc_text` SET `BroadcastTextId0`=32139 WHERE `id`= 13994; +UPDATE `npc_text` SET `BroadcastTextId0`=4255 WHERE `id`= 1817; +UPDATE `npc_text` SET `BroadcastTextId0`=10565 WHERE `id`= 7690; +UPDATE `npc_text` SET `BroadcastTextId0`=9301 WHERE `id`= 6844; +UPDATE `npc_text` SET `BroadcastTextId0`=41700 WHERE `id`= 16125; +UPDATE `npc_text` SET `BroadcastTextId0`=8037 WHERE `id`= 5373; +UPDATE `npc_text` SET `BroadcastTextId0`=42527 WHERE `id`= 16275; +UPDATE `npc_text` SET `BroadcastTextId0`=32096 WHERE `id`= 13972; +UPDATE `npc_text` SET `BroadcastTextId0`=28080 WHERE `id`= 13237; +UPDATE `npc_text` SET `BroadcastTextId0`=3305 WHERE `id`= 1160; +UPDATE `npc_text` SET `BroadcastTextId0`=5124 WHERE `id`= 2798; +UPDATE `npc_text` SET `BroadcastTextId0`=7584 WHERE `id`= 4933; +UPDATE `npc_text` SET `BroadcastTextId0`=12109 WHERE `id`= 8434; +UPDATE `npc_text` SET `BroadcastTextId0`=12180 WHERE `id`= 8471; +UPDATE `npc_text` SET `BroadcastTextId0`=12284 WHERE `id`= 8518; +UPDATE `npc_text` SET `BroadcastTextId0`=33918 WHERE `id`= 14424; +UPDATE `npc_text` SET `BroadcastTextId0`=24297 WHERE `id`= 12335; +UPDATE `npc_text` SET `BroadcastTextId0`=11395 WHERE `id`= 8115; +UPDATE `npc_text` SET `BroadcastTextId0`=11396 WHERE `id`= 8116; +UPDATE `npc_text` SET `BroadcastTextId0`=9955 WHERE `id`= 7230; +UPDATE `npc_text` SET `BroadcastTextId0`=10585 WHERE `id`= 7709; +UPDATE `npc_text` SET `BroadcastTextId0`=2602 WHERE `id`= 638; +UPDATE `npc_text` SET `BroadcastTextId0`=54224 WHERE `id`= 18550; +UPDATE `npc_text` SET `BroadcastTextId0`=12435 WHERE `id`= 8573; +UPDATE `npc_text` SET `BroadcastTextId0`=24458 WHERE `id`= 12373; +UPDATE `npc_text` SET `BroadcastTextId0`=5189 WHERE `id`= 2835; +UPDATE `npc_text` SET `BroadcastTextId0`=21801 WHERE `id`= 11057; +UPDATE `npc_text` SET `BroadcastTextId0`=9920 WHERE `id`= 7207; +UPDATE `npc_text` SET `BroadcastTextId0`=9941 WHERE `id`= 7220; +UPDATE `npc_text` SET `BroadcastTextId0`=16151 WHERE `id`= 9662; +UPDATE `npc_text` SET `BroadcastTextId0`=10582 WHERE `id`= 7706; +UPDATE `npc_text` SET `BroadcastTextId0`=11942 WHERE `id`= 8352; +UPDATE `npc_text` SET `BroadcastTextId0`=4260 WHERE `id`= 1819; +UPDATE `npc_text` SET `BroadcastTextId0`=29541 WHERE `id`= 13469; +UPDATE `npc_text` SET `BroadcastTextId0`=17750 WHERE `id`= 9986; +UPDATE `npc_text` SET `BroadcastTextId0`=11961 WHERE `id`= 8363; +UPDATE `npc_text` SET `BroadcastTextId0`=4479 WHERE `id`= 1999; +UPDATE `npc_text` SET `BroadcastTextId0`=44385 WHERE `id`= 16537; +UPDATE `npc_text` SET `BroadcastTextId0`=41698 WHERE `id`= 16122; +UPDATE `npc_text` SET `BroadcastTextId0`=47513 WHERE `id`= 17203; +UPDATE `npc_text` SET `BroadcastTextId0`=47503 WHERE `id`= 17200; +UPDATE `npc_text` SET `BroadcastTextId0`=23969 WHERE `id`= 12221; +UPDATE `npc_text` SET `BroadcastTextId0`=2957 WHERE `id`= 923; +UPDATE `npc_text` SET `BroadcastTextId0`=6345 WHERE `id`= 3815; +UPDATE `npc_text` SET `BroadcastTextId0`=7458 WHERE `id`= 4781; +UPDATE `npc_text` SET `BroadcastTextId0`=3521 WHERE `id`= 1351; +UPDATE `npc_text` SET `BroadcastTextId0`=31559 WHERE `id`= 13889; +UPDATE `npc_text` SET `BroadcastTextId0`=2750, `BroadcastTextId1`=44595 WHERE `id`= 764; +UPDATE `npc_text` SET `BroadcastTextId0`=10661 WHERE `id`= 7738; +UPDATE `npc_text` SET `BroadcastTextId0`=6879 WHERE `id`= 4193; +UPDATE `npc_text` SET `BroadcastTextId0`=5098 WHERE `id`= 2771; +UPDATE `npc_text` SET `BroadcastTextId0`=35536 WHERE `id`= 14737; +UPDATE `npc_text` SET `BroadcastTextId0`=41132 WHERE `id`= 15997; +UPDATE `npc_text` SET `BroadcastTextId0`=14432 WHERE `id`= 9082; +UPDATE `npc_text` SET `BroadcastTextId0`=11295 WHERE `id`= 11295; +UPDATE `npc_text` SET `BroadcastTextId0`=4943 WHERE `id`= 2635; +UPDATE `npc_text` SET `BroadcastTextId0`=40940 WHERE `id`= 15963; +UPDATE `npc_text` SET `BroadcastTextId0`=12775 WHERE `id`= 8669; +UPDATE `npc_text` SET `BroadcastTextId0`=4620 WHERE `id`= 2277; +UPDATE `npc_text` SET `BroadcastTextId0`=10576 WHERE `id`= 7701; +UPDATE `npc_text` SET `BroadcastTextId0`=14591 WHERE `id`= 9121; +UPDATE `npc_text` SET `BroadcastTextId0`=47141 WHERE `id`= 17138; +UPDATE `npc_text` SET `BroadcastTextId0`=16028 WHERE `id`= 10725; +UPDATE `npc_text` SET `BroadcastTextId0`=56598 WHERE `id`= 18958; +UPDATE `npc_text` SET `BroadcastTextId0`=15816 WHERE `id`= 9530; +UPDATE `npc_text` SET `BroadcastTextId0`=52044 WHERE `id`= 18086; +UPDATE `npc_text` SET `BroadcastTextId0`=28644 WHERE `id`= 13324; +UPDATE `npc_text` SET `BroadcastTextId0`=40428 WHERE `id`= 15857; +UPDATE `npc_text` SET `BroadcastTextId0`=3474 WHERE `id`= 1303; +UPDATE `npc_text` SET `BroadcastTextId0`=5018 WHERE `id`= 2718; +UPDATE `npc_text` SET `BroadcastTextId0`=33162 WHERE `id`= 14296; +UPDATE `npc_text` SET `BroadcastTextId0`=16444 WHERE `id`= 9962; +UPDATE `npc_text` SET `BroadcastTextId0`=7377 WHERE `id`= 10550; +UPDATE `npc_text` SET `BroadcastTextId0`=15221 WHERE `id`= 9323; +UPDATE `npc_text` SET `BroadcastTextId0`=47132 WHERE `id`= 17130; +UPDATE `npc_text` SET `BroadcastTextId0`=32123 WHERE `id`= 13982; +UPDATE `npc_text` SET `BroadcastTextId0`=9911 WHERE `id`= 7201; +UPDATE `npc_text` SET `BroadcastTextId0`=14631 WHERE `id`= 9139; +UPDATE `npc_text` SET `BroadcastTextId0`=24247 WHERE `id`= 12309; +UPDATE `npc_text` SET `BroadcastTextId0`=16654 WHERE `id`= 9805; +UPDATE `npc_text` SET `BroadcastTextId0`=4749 WHERE `id`= 2482; +UPDATE `npc_text` SET `BroadcastTextId0`=2463 WHERE `id`= 520; +UPDATE `npc_text` SET `BroadcastTextId0`=24306 WHERE `id`= 12342; +UPDATE `npc_text` SET `BroadcastTextId0`=28091 WHERE `id`= 13254; +UPDATE `npc_text` SET `BroadcastTextId0`=20641 WHERE `id`= 22932; +UPDATE `npc_text` SET `BroadcastTextId0`=5991 WHERE `id`= 3574; +UPDATE `npc_text` SET `BroadcastTextId0`=7555 WHERE `id`= 4889; +UPDATE `npc_text` SET `BroadcastTextId0`=9881 WHERE `id`= 7183; +UPDATE `npc_text` SET `BroadcastTextId0`=9871 WHERE `id`= 7177; +UPDATE `npc_text` SET `BroadcastTextId0`=7833 WHERE `id`= 5149; +UPDATE `npc_text` SET `BroadcastTextId0`=19427 WHERE `id`= 10452; +UPDATE `npc_text` SET `BroadcastTextId0`=47129 WHERE `id`= 17127; +UPDATE `npc_text` SET `BroadcastTextId0`=32113 WHERE `id`= 13977; +UPDATE `npc_text` SET `BroadcastTextId0`=40426 WHERE `id`= 15856; +UPDATE `npc_text` SET `BroadcastTextId0`=9220 WHERE `id`= 6795; +UPDATE `npc_text` SET `BroadcastTextId0`=47597 WHERE `id`= 17225; +UPDATE `npc_text` SET `BroadcastTextId0`=29626 WHERE `id`= 13474; +UPDATE `npc_text` SET `BroadcastTextId0`=7457 WHERE `id`= 4780; +UPDATE `npc_text` SET `BroadcastTextId0`=19656 WHERE `id`= 10529; +UPDATE `npc_text` SET `BroadcastTextId0`=17490 WHERE `id`= 9941; +UPDATE `npc_text` SET `BroadcastTextId0`=42230 WHERE `id`= 16215; +UPDATE `npc_text` SET `BroadcastTextId0`=9998 WHERE `id`= 7252; +UPDATE `npc_text` SET `BroadcastTextId0`=9950 WHERE `id`= 7226; +UPDATE `npc_text` SET `BroadcastTextId0`=9892 WHERE `id`= 7187; +UPDATE `npc_text` SET `BroadcastTextId0`=9939 WHERE `id`= 7219; +UPDATE `npc_text` SET `BroadcastTextId0`=8106 WHERE `id`= 10555; +UPDATE `npc_text` SET `BroadcastTextId0`=7893 WHERE `id`= 5206; +UPDATE `npc_text` SET `BroadcastTextId0`=22323 WHERE `id`= 11314; +UPDATE `npc_text` SET `BroadcastTextId0`=51906 WHERE `id`= 18050; +UPDATE `npc_text` SET `BroadcastTextId0`=46117 WHERE `id`= 16956; +UPDATE `npc_text` SET `BroadcastTextId0`=44574 WHERE `id`= 16596; +UPDATE `npc_text` SET `BroadcastTextId0`=4963 WHERE `id`= 10552; +UPDATE `npc_text` SET `BroadcastTextId0`=13547 WHERE `id`= 8823; +UPDATE `npc_text` SET `BroadcastTextId0`=3009 WHERE `id`= 940; +UPDATE `npc_text` SET `BroadcastTextId0`=47989 WHERE `id`= 17313; +UPDATE `npc_text` SET `BroadcastTextId0`=54045 WHERE `id`= 18508; +UPDATE `npc_text` SET `BroadcastTextId0`=7860 WHERE `id`= 5176; +UPDATE `npc_text` SET `BroadcastTextId0`=2660 WHERE `id`= 698; +UPDATE `npc_text` SET `BroadcastTextId0`=16039 WHERE `id`= 9630; +UPDATE `npc_text` SET `BroadcastTextId0`=41665 WHERE `id`= 16109; +UPDATE `npc_text` SET `BroadcastTextId0`=4653 WHERE `id`= 2318; +UPDATE `npc_text` SET `BroadcastTextId0`=22184 WHERE `id`= 11234; +UPDATE `npc_text` SET `BroadcastTextId0`=33412 WHERE `id`= 14334; +UPDATE `npc_text` SET `BroadcastTextId0`=33409 WHERE `id`= 14332; +UPDATE `npc_text` SET `BroadcastTextId0`=33413 WHERE `id`= 14333; +UPDATE `npc_text` SET `BroadcastTextId0`=33408 WHERE `id`= 14326; +UPDATE `npc_text` SET `BroadcastTextId0`=47131 WHERE `id`= 17129; +UPDATE `npc_text` SET `BroadcastTextId0`=8918 WHERE `id`= 6334; +UPDATE `npc_text` SET `BroadcastTextId0`=25563 WHERE `id`= 12607; +UPDATE `npc_text` SET `BroadcastTextId0`=48578 WHERE `id`= 17461; +UPDATE `npc_text` SET `BroadcastTextId0`=53704 WHERE `id`= 18430; +UPDATE `npc_text` SET `BroadcastTextId0`=5083 WHERE `id`= 2762; +UPDATE `npc_text` SET `BroadcastTextId0`=52074 WHERE `id`= 18106; +UPDATE `npc_text` SET `BroadcastTextId0`=52053 WHERE `id`= 18090; +UPDATE `npc_text` SET `BroadcastTextId0`=30433 WHERE `id`= 13615; +UPDATE `npc_text` SET `BroadcastTextId0`=9914 WHERE `id`= 7203; +UPDATE `npc_text` SET `BroadcastTextId0`=10734 WHERE `id`= 7765; +UPDATE `npc_text` SET `BroadcastTextId0`=14851 WHERE `id`= 9220; +UPDATE `npc_text` SET `BroadcastTextId0`=2977 WHERE `id`= 934; +UPDATE `npc_text` SET `BroadcastTextId0`=47140 WHERE `id`= 17137; +UPDATE `npc_text` SET `BroadcastTextId0`=47139 WHERE `id`= 17136; +UPDATE `npc_text` SET `BroadcastTextId0`=9905 WHERE `id`= 7199; +UPDATE `npc_text` SET `BroadcastTextId0`=33651 WHERE `id`= 14369; +UPDATE `npc_text` SET `BroadcastTextId0`=9331 WHERE `id`= 6867; +UPDATE `npc_text` SET `BroadcastTextId0`=10715 WHERE `id`= 7756; +UPDATE `npc_text` SET `BroadcastTextId0`=14514 WHERE `id`= 9102; +UPDATE `npc_text` SET `BroadcastTextId0`=8296 WHERE `id`= 5719; +UPDATE `npc_text` SET `BroadcastTextId0`=17412 WHERE `id`= 9921; +UPDATE `npc_text` SET `BroadcastTextId0`=5582 WHERE `id`= 3308; +UPDATE `npc_text` SET `BroadcastTextId0`=6299, `BroadcastTextId1`=6368 WHERE `id`= 3834; +UPDATE `npc_text` SET `BroadcastTextId0`=18736 WHERE `id`= 21024; +UPDATE `npc_text` SET `BroadcastTextId0`=46516 WHERE `id`= 17027; +UPDATE `npc_text` SET `BroadcastTextId0`=25028 WHERE `id`= 12485; +UPDATE `npc_text` SET `BroadcastTextId0`=47138 WHERE `id`= 17135; +UPDATE `npc_text` SET `BroadcastTextId0`=27743 WHERE `id`= 13126; +UPDATE `npc_text` SET `BroadcastTextId0`=9903 WHERE `id`= 7198; +UPDATE `npc_text` SET `BroadcastTextId0`=9299 WHERE `id`= 6843; +UPDATE `npc_text` SET `BroadcastTextId0`=41575 WHERE `id`= 16097; +UPDATE `npc_text` SET `BroadcastTextId0`=46267 WHERE `id`= 17204; +UPDATE `npc_text` SET `BroadcastTextId0`=15246 WHERE `id`= 10724; +UPDATE `npc_text` SET `BroadcastTextId0`=9470 WHERE `id`= 6923; +UPDATE `npc_text` SET `BroadcastTextId0`=19498 WHERE `id`= 10474; +UPDATE `npc_text` SET `BroadcastTextId0`=2955 WHERE `id`= 921; +UPDATE `npc_text` SET `BroadcastTextId0`=44660 WHERE `id`= 16633; +UPDATE `npc_text` SET `BroadcastTextId0`=46115 WHERE `id`= 16954; +UPDATE `npc_text` SET `BroadcastTextId0`=44821 WHERE `id`= 16665; +UPDATE `npc_text` SET `BroadcastTextId0`=40421 WHERE `id`= 15853; +UPDATE `npc_text` SET `BroadcastTextId0`=53700 WHERE `id`= 18429; +UPDATE `npc_text` SET `BroadcastTextId0`=10812 WHERE `id`= 7810; +UPDATE `npc_text` SET `BroadcastTextId0`=23856 WHERE `id`= 12189; +UPDATE `npc_text` SET `BroadcastTextId0`=40012 WHERE `id`= 15779; +UPDATE `npc_text` SET `BroadcastTextId0`=24305 WHERE `id`= 12341; +UPDATE `npc_text` SET `BroadcastTextId0`=52070 WHERE `id`= 18104; +UPDATE `npc_text` SET `BroadcastTextId0`=23782 WHERE `id`= 12165; +UPDATE `npc_text` SET `BroadcastTextId0`=11811 WHERE `id`= 8303; +UPDATE `npc_text` SET `BroadcastTextId0`=7914 WHERE `id`= 5225; +UPDATE `npc_text` SET `BroadcastTextId0`=18942 WHERE `id`= 10316; +UPDATE `npc_text` SET `BroadcastTextId0`=14428 WHERE `id`= 9079; +UPDATE `npc_text` SET `BroadcastTextId0`=14377 WHERE `id`= 9060; +UPDATE `npc_text` SET `BroadcastTextId0`=14431 WHERE `id`= 9081; +UPDATE `npc_text` SET `BroadcastTextId0`=51960 WHERE `id`= 18072; +UPDATE `npc_text` SET `BroadcastTextId0`=22169 WHERE `id`= 12080; +UPDATE `npc_text` SET `BroadcastTextId0`=9399 WHERE `id`= 6906; +UPDATE `npc_text` SET `BroadcastTextId0`=54122 WHERE `id`= 18514; +UPDATE `npc_text` SET `BroadcastTextId0`=47272 WHERE `id`= 17160; +UPDATE `npc_text` SET `BroadcastTextId0`=6132 WHERE `id`= 3675; +UPDATE `npc_text` SET `BroadcastTextId0`=52060 WHERE `id`= 18096; +UPDATE `npc_text` SET `BroadcastTextId0`=18256 WHERE `id`= 20551; +UPDATE `npc_text` SET `BroadcastTextId0`=18844 WHERE `id`= 10284; +UPDATE `npc_text` SET `BroadcastTextId0`=9993 WHERE `id`= 7249; +UPDATE `npc_text` SET `BroadcastTextId0`=18360 WHERE `id`= 10106; +UPDATE `npc_text` SET `BroadcastTextId0`=5980 WHERE `id`= 3565; +UPDATE `npc_text` SET `BroadcastTextId0`=19132 WHERE `id`= 10363; +UPDATE `npc_text` SET `BroadcastTextId0`=4637 WHERE `id`= 2286; +UPDATE `npc_text` SET `BroadcastTextId0`=8765 WHERE `id`= 6179; +UPDATE `npc_text` SET `BroadcastTextId0`=47105 WHERE `id`= 17125; +UPDATE `npc_text` SET `BroadcastTextId0`=51896 WHERE `id`= 18046; +UPDATE `npc_text` SET `BroadcastTextId0`=7644 WHERE `id`= 4996; +UPDATE `npc_text` SET `BroadcastTextId0`=10620 WHERE `id`= 2818; +UPDATE `npc_text` SET `BroadcastTextId0`=18849 WHERE `id`= 10287; +UPDATE `npc_text` SET `BroadcastTextId0`=7904 WHERE `id`= 5215; +UPDATE `npc_text` SET `BroadcastTextId0`=34472 WHERE `id`= 14510; +UPDATE `npc_text` SET `BroadcastTextId0`=48164 WHERE `id`= 17369; +UPDATE `npc_text` SET `BroadcastTextId0`=10559 WHERE `id`= 7685; +UPDATE `npc_text` SET `BroadcastTextId0`=7829 WHERE `id`= 5145; +UPDATE `npc_text` SET `BroadcastTextId0`=25280 WHERE `id`= 8934; +UPDATE `npc_text` SET `BroadcastTextId0`=25280 WHERE `id`= 7530; +UPDATE `npc_text` SET `BroadcastTextId0`=8275 WHERE `id`= 2433; +UPDATE `npc_text` SET `BroadcastTextId0`=6267 WHERE `id`= 3794; +UPDATE `npc_text` SET `BroadcastTextId0`=45796 WHERE `id`= 16881; +UPDATE `npc_text` SET `BroadcastTextId0`=7376 WHERE `id`= 10551; +UPDATE `npc_text` SET `BroadcastTextId0`=7559 WHERE `id`= 4891; +UPDATE `npc_text` SET `BroadcastTextId0`=7590 WHERE `id`= 197; +UPDATE `npc_text` SET `BroadcastTextId0`=53824 WHERE `id`= 18472; +UPDATE `npc_text` SET `BroadcastTextId0`=47130 WHERE `id`= 17128; +UPDATE `npc_text` SET `BroadcastTextId0`=31214 WHERE `id`= 31023; +UPDATE `npc_text` SET `BroadcastTextId0`=5435 WHERE `id`= 3096; +UPDATE `npc_text` SET `BroadcastTextId0`=47269 WHERE `id`= 17159; +UPDATE `npc_text` SET `BroadcastTextId0`=6250 WHERE `id`= 3763; +UPDATE `npc_text` SET `BroadcastTextId0`=2930 WHERE `id`= 908; +UPDATE `npc_text` SET `BroadcastTextId0`=46469 WHERE `id`= 17020; +UPDATE `npc_text` SET `BroadcastTextId0`=2525 WHERE `id`= 558; +UPDATE `npc_text` SET `BroadcastTextId0`=38810 WHERE `id`= 15447; +UPDATE `npc_text` SET `BroadcastTextId0`=38813 WHERE `id`= 15451; +UPDATE `npc_text` SET `BroadcastTextId0`=38809 WHERE `id`= 15446; +UPDATE `npc_text` SET `BroadcastTextId0`=38816 WHERE `id`= 15454; +UPDATE `npc_text` SET `BroadcastTextId0`=38814 WHERE `id`= 15452; +UPDATE `npc_text` SET `BroadcastTextId0`=38815 WHERE `id`= 15453; +UPDATE `npc_text` SET `BroadcastTextId0`=32550 WHERE `id`= 14084; +UPDATE `npc_text` SET `BroadcastTextId0`=32548 WHERE `id`= 14083; +UPDATE `npc_text` SET `BroadcastTextId0`=32552 WHERE `id`= 14086; +UPDATE `npc_text` SET `BroadcastTextId0`=32551 WHERE `id`= 14085; +UPDATE `npc_text` SET `BroadcastTextId0`=5179 WHERE `id`= 2816; +UPDATE `npc_text` SET `BroadcastTextId0`=2530 WHERE `id`= 565; +UPDATE `npc_text` SET `BroadcastTextId0`=11421 WHERE `id`= 8132; +UPDATE `npc_text` SET `BroadcastTextId0`=11422 WHERE `id`= 8133; +UPDATE `npc_text` SET `BroadcastTextId0`=11416 WHERE `id`= 8128; +UPDATE `npc_text` SET `BroadcastTextId0`=11420 WHERE `id`= 8127; +UPDATE `npc_text` SET `BroadcastTextId0`=11418 WHERE `id`= 8130; +UPDATE `npc_text` SET `BroadcastTextId0`=11419 WHERE `id`= 8131; +UPDATE `npc_text` SET `BroadcastTextId0`=11415 WHERE `id`= 8126; +UPDATE `npc_text` SET `BroadcastTextId0`=4550 WHERE `id`= 2133; +UPDATE `npc_text` SET `BroadcastTextId0`=4552 WHERE `id`= 2134; +UPDATE `npc_text` SET `BroadcastTextId0`=5871 WHERE `id`= 3532; +UPDATE `npc_text` SET `BroadcastTextId0`=51969 WHERE `id`= 18076; +UPDATE `npc_text` SET `BroadcastTextId0`=27617 WHERE `id`= 13101; +UPDATE `npc_text` SET `BroadcastTextId0`=47108 WHERE `id`= 17126; +UPDATE `npc_text` SET `BroadcastTextId0`=14983 WHERE `id`= 9271; +UPDATE `npc_text` SET `BroadcastTextId0`=9884 WHERE `id`= 7185; +UPDATE `npc_text` SET `BroadcastTextId0`=21872 WHERE `id`= 11076; +UPDATE `npc_text` SET `BroadcastTextId0`=21871 WHERE `id`= 11075; +UPDATE `npc_text` SET `BroadcastTextId0`=24898 WHERE `id`= 12456; +UPDATE `npc_text` SET `BroadcastTextId0`=24537 WHERE `id`= 12381; +UPDATE `npc_text` SET `BroadcastTextId0`=19861 WHERE `id`= 10612; +UPDATE `npc_text` SET `BroadcastTextId0`=16930 WHERE `id`= 9835; +UPDATE `npc_text` SET `BroadcastTextId0`=10578 WHERE `id`= 7703; +UPDATE `npc_text` SET `BroadcastTextId0`=44572 WHERE `id`= 16595; +UPDATE `npc_text` SET `BroadcastTextId0`=4411 WHERE `id`= 1922; +UPDATE `npc_text` SET `BroadcastTextId0`=47137 WHERE `id`= 17134; +UPDATE `npc_text` SET `BroadcastTextId0`=47136 WHERE `id`= 17133; +UPDATE `npc_text` SET `BroadcastTextId0`=11562 WHERE `id`= 8179; +UPDATE `npc_text` SET `BroadcastTextId0`=11587 WHERE `id`= 8190; +UPDATE `npc_text` SET `BroadcastTextId0`=11581 WHERE `id`= 8187; +UPDATE `npc_text` SET `BroadcastTextId0`=11579 WHERE `id`= 8186; +UPDATE `npc_text` SET `BroadcastTextId0`=11551 WHERE `id`= 8174; +UPDATE `npc_text` SET `BroadcastTextId0`=31273 WHERE `id`= 13811; +UPDATE `npc_text` SET `BroadcastTextId0`=47991 WHERE `id`= 17314; +UPDATE `npc_text` SET `BroadcastTextId0`=9917 WHERE `id`= 7205; +UPDATE `npc_text` SET `BroadcastTextId0`=3486 WHERE `id`= 1337; +UPDATE `npc_text` SET `BroadcastTextId0`=15964 WHERE `id`= 10726; +UPDATE `npc_text` SET `BroadcastTextId0`=9846 WHERE `id`= 7134; +UPDATE `npc_text` SET `BroadcastTextId0`=5139 WHERE `id`= 2804; +UPDATE `npc_text` SET `BroadcastTextId0`=4735 WHERE `id`= 2475; +UPDATE `npc_text` SET `BroadcastTextId0`=5606 WHERE `id`= 3321; +UPDATE `npc_text` SET `BroadcastTextId0`=40016 WHERE `id`= 15781; +UPDATE `npc_text` SET `BroadcastTextId0`=5574 WHERE `id`= 3304; +UPDATE `npc_text` SET `BroadcastTextId0`=46055 WHERE `id`= 16938; +UPDATE `npc_text` SET `BroadcastTextId0`=15288 WHERE `id`= 9355; +UPDATE `npc_text` SET `BroadcastTextId0`=9923 WHERE `id`= 7209; +UPDATE `npc_text` SET `BroadcastTextId0`=7015 WHERE `id`= 7015; +UPDATE `npc_text` SET `BroadcastTextId0`=7376 WHERE `id`= 4697; +UPDATE `npc_text` SET `BroadcastTextId0`=13766 WHERE `id`= 8876; +UPDATE `npc_text` SET `BroadcastTextId0`=11865 WHERE `id`= 6595; +UPDATE `npc_text` SET `BroadcastTextId0`=44611 WHERE `id`= 16609; +UPDATE `npc_text` SET `BroadcastTextId0`=22224 WHERE `id`= 11258; +UPDATE `npc_text` SET `BroadcastTextId0`=27165 WHERE `id`= 12977; +UPDATE `npc_text` SET `BroadcastTextId0`=47134 WHERE `id`= 17132; +UPDATE `npc_text` SET `BroadcastTextId0`=28428 WHERE `id`= 13268; +UPDATE `npc_text` SET `BroadcastTextId0`=26952 WHERE `id`= 12917; +UPDATE `npc_text` SET `BroadcastTextId0`=22229 WHERE `id`= 11257; +UPDATE `npc_text` SET `BroadcastTextId0`=12292 WHERE `id`= 8522; +UPDATE `npc_text` SET `BroadcastTextId0`=3146 WHERE `id`= 1040; +UPDATE `npc_text` SET `BroadcastTextId0`=10719 WHERE `id`= 7758; +UPDATE `npc_text` SET `BroadcastTextId0`=46266 WHERE `id`= 16983; +UPDATE `npc_text` SET `BroadcastTextId0`=18249 WHERE `id`= 20564; +UPDATE `npc_text` SET `BroadcastTextId0`=54226 WHERE `id`= 18551; +UPDATE `npc_text` SET `BroadcastTextId0`=7752 WHERE `id`= 5088; +UPDATE `npc_text` SET `BroadcastTextId0`=7748 WHERE `id`= 5084; +UPDATE `npc_text` SET `BroadcastTextId0`=15260 WHERE `id`= 9342; +UPDATE `npc_text` SET `BroadcastTextId0`=28092 WHERE `id`= 13256; +UPDATE `npc_text` SET `BroadcastTextId0`=33040 WHERE `id`= 14194; +UPDATE `npc_text` SET `BroadcastTextId0`=53290 WHERE `id`= 18347; +UPDATE `npc_text` SET `BroadcastTextId0`=47133 WHERE `id`= 17131; +UPDATE `npc_text` SET `BroadcastTextId0`=43700 WHERE `id`= 17029; +UPDATE `npc_text` SET `BroadcastTextId0`=7916 WHERE `id`= 5227; +UPDATE `npc_text` SET `BroadcastTextId0`=5101 WHERE `id`= 2772; +UPDATE `npc_text` SET `BroadcastTextId0`=19850 WHERE `id`= 10608; +UPDATE `npc_text` SET `BroadcastTextId0`=17483 WHERE `id`= 9938; +UPDATE `npc_text` SET `BroadcastTextId0`=18246 WHERE `id`= 10065; +UPDATE `npc_text` SET `BroadcastTextId0`=32674 WHERE `id`= 14108; +UPDATE `npc_text` SET `BroadcastTextId0`=53079 WHERE `id`= 18301; +UPDATE `npc_text` SET `BroadcastTextId0`=10706 WHERE `id`= 7774; +UPDATE `npc_text` SET `BroadcastTextId0`=10706 WHERE `id`= 18092; +UPDATE `npc_text` SET `BroadcastTextId0`=7672 WHERE `id`= 5011; +UPDATE `npc_text` SET `BroadcastTextId0`=25095 WHERE `id`= 12606; +UPDATE `npc_text` SET `BroadcastTextId0`=5154 WHERE `id`= 2812; +UPDATE `npc_text` SET `BroadcastTextId0`=5155 WHERE `id`= 2813; +UPDATE `npc_text` SET `BroadcastTextId0`=5153 WHERE `id`= 2811; +UPDATE `npc_text` SET `BroadcastTextId0`=44453 WHERE `id`= 16557; +UPDATE `npc_text` SET `BroadcastTextId0`=33161 WHERE `id`= 14295; +UPDATE `npc_text` SET `BroadcastTextId0`=20428 WHERE `id`= 10719; +UPDATE `npc_text` SET `BroadcastTextId0`=19243 WHERE `id`= 10528; +UPDATE `npc_text` SET `BroadcastTextId0`=52897 WHERE `id`= 17713; +UPDATE `npc_text` SET `BroadcastTextId0`=15290 WHERE `id`= 9356; +UPDATE `npc_text` SET `BroadcastTextId0`=15328 WHERE `id`= 9368; +UPDATE `npc_text` SET `BroadcastTextId0`=5970 WHERE `id`= 3560; +UPDATE `npc_text` SET `BroadcastTextId0`=33157 WHERE `id`= 14291; +UPDATE `npc_text` SET `BroadcastTextId0`=33150 WHERE `id`= 14299; +UPDATE `npc_text` SET `BroadcastTextId0`=5608 WHERE `id`= 3334; +UPDATE `npc_text` SET `BroadcastTextId0`=7944 WHERE `id`= 5255; +UPDATE `npc_text` SET `BroadcastTextId0`=18925 WHERE `id`= 10305; +UPDATE `npc_text` SET `BroadcastTextId0`=5171 WHERE `id`= 2817; +UPDATE `npc_text` SET `BroadcastTextId0`=51955 WHERE `id`= 18067; +UPDATE `npc_text` SET `BroadcastTextId0`=8178 WHERE `id`= 5557; +UPDATE `npc_text` SET `BroadcastTextId0`=7878 WHERE `id`= 5191; +UPDATE `npc_text` SET `BroadcastTextId0`=7933 WHERE `id`= 5244; +UPDATE `npc_text` SET `BroadcastTextId0`=36370 WHERE `id`= 107; +UPDATE `npc_text` SET `BroadcastTextId0`=51653 WHERE `id`= 18015; +UPDATE `npc_text` SET `BroadcastTextId0`=34473 WHERE `id`= 14511; +UPDATE `npc_text` SET `BroadcastTextId0`=3561 WHERE `id`= 1371; +UPDATE `npc_text` SET `BroadcastTextId0`=10817 WHERE `id`= 7812; +UPDATE `npc_text` SET `BroadcastTextId0`=29581 WHERE `id`= 13472; +UPDATE `npc_text` SET `BroadcastTextId0`=29562 WHERE `id`= 13470; +UPDATE `npc_text` SET `BroadcastTextId0`=27269 WHERE `id`= 12994; +UPDATE `npc_text` SET `BroadcastTextId0`=6870 WHERE `id`= 4135; +UPDATE `npc_text` SET `BroadcastTextId0`=10768 WHERE `id`= 7789; +UPDATE `npc_text` SET `BroadcastTextId0`=10671 WHERE `id`= 7740; +UPDATE `npc_text` SET `BroadcastTextId0`=24118 WHERE `id`= 12270; +UPDATE `npc_text` SET `BroadcastTextId0`=26518 WHERE `id`= 12823; +UPDATE `npc_text` SET `BroadcastTextId0`=11904 WHERE `id`= 8333; +UPDATE `npc_text` SET `BroadcastTextId0`=51586 WHERE `id`= 18004; +UPDATE `npc_text` SET `BroadcastTextId0`=38390 WHERE `id`= 15343; +UPDATE `npc_text` SET `BroadcastTextId0`=34758 WHERE `id`= 14561; +UPDATE `npc_text` SET `BroadcastTextId0`=2843 WHERE `id`= 838; +UPDATE `npc_text` SET `BroadcastTextId0`=4604 WHERE `id`= 2236; +UPDATE `npc_text` SET `BroadcastTextId0`=5192 WHERE `id`= 2834; +UPDATE `npc_text` SET `BroadcastTextId0`=5206 WHERE `id`= 2843; +UPDATE `npc_text` SET `BroadcastTextId0`=6114 WHERE `id`= 3669; +UPDATE `npc_text` SET `BroadcastTextId0`=6296 WHERE `id`= 3807; +UPDATE `npc_text` SET `BroadcastTextId0`=6656 WHERE `id`= 4047; +UPDATE `npc_text` SET `BroadcastTextId0`=8039 WHERE `id`= 5375; +UPDATE `npc_text` SET `BroadcastTextId0`=6018 WHERE `id`= 3584; +UPDATE `npc_text` SET `BroadcastTextId0`=8343 WHERE `id`= 5797; +UPDATE `npc_text` SET `BroadcastTextId0`=22527 WHERE `id`= 11472; +UPDATE `npc_text` SET `BroadcastTextId0`=9656 WHERE `id`= 7010; +UPDATE `npc_text` SET `BroadcastTextId0`=9659 WHERE `id`= 7011; +UPDATE `npc_text` SET `BroadcastTextId0`=39480 WHERE `id`= 15622; +UPDATE `npc_text` SET `BroadcastTextId0`=9383 WHERE `id`= 6898; +UPDATE `npc_text` SET `BroadcastTextId0`=10584 WHERE `id`= 7707; +UPDATE `npc_text` SET `BroadcastTextId0`=27102 WHERE `id`= 12952; +UPDATE `npc_text` SET `BroadcastTextId0`=27091 WHERE `id`= 12949; +UPDATE `npc_text` SET `BroadcastTextId0`=40424 WHERE `id`= 15855; +UPDATE `npc_text` SET `BroadcastTextId0`=50314 WHERE `id`= 17743; +UPDATE `npc_text` SET `BroadcastTextId0`=39668 WHERE `id`= 15704; +UPDATE `npc_text` SET `BroadcastTextId0`=39737 WHERE `id`= 15715; +UPDATE `npc_text` SET `BroadcastTextId0`=34892 WHERE `id`= 14584; +UPDATE `npc_text` SET `BroadcastTextId0`=22611 WHERE `id`= 11582; +UPDATE `npc_text` SET `BroadcastTextId0`=10770 WHERE `id`= 7790; +UPDATE `npc_text` SET `BroadcastTextId0`=25771 WHERE `id`= 12649; +UPDATE `npc_text` SET `BroadcastTextId0`=18927 WHERE `id`= 10307; +UPDATE `npc_text` SET `BroadcastTextId0`=9510 WHERE `id`= 6940; +UPDATE `npc_text` SET `BroadcastTextId0`=13757 WHERE `id`= 8874; +UPDATE `npc_text` SET `BroadcastTextId0`=12247 WHERE `id`=8507; +UPDATE `npc_text` SET `BroadcastTextId0`=42495 WHERE `id`= 16270; +UPDATE `npc_text` SET `BroadcastTextId0`=15268 WHERE `id`= 9346; +UPDATE `npc_text` SET `BroadcastTextId0`=10811 WHERE `id`= 7808; +UPDATE `npc_text` SET `BroadcastTextId0`=34627 WHERE `id`= 14545; +UPDATE `npc_text` SET `BroadcastTextId0`=23769 WHERE `id`= 12163; +UPDATE `npc_text` SET `BroadcastTextId0`=34515 WHERE `id`= 14526; +UPDATE `npc_text` SET `BroadcastTextId0`=37116 WHERE `id`= 15152; +UPDATE `npc_text` SET `BroadcastTextId0`=10385 WHERE `id`= 7496; +UPDATE `npc_text` SET `BroadcastTextId0`=41320 WHERE `id`= 16040; +UPDATE `npc_text` SET `BroadcastTextId0`=27267 WHERE `id`= 12993; +UPDATE `npc_text` SET `BroadcastTextId0`=51946 WHERE `id`= 18063; +UPDATE `npc_text` SET `BroadcastTextId0`=34512 WHERE `id`= 14524; +UPDATE `npc_text` SET `BroadcastTextId0`=44807 WHERE `id`= 16659; +UPDATE `npc_text` SET `BroadcastTextId0`=30824 WHERE `id`= 13695; +UPDATE `npc_text` SET `BroadcastTextId0`=13143 WHERE `id`= 8713; +UPDATE `npc_text` SET `BroadcastTextId0`=27265 WHERE `id`= 12992; +UPDATE `npc_text` SET `BroadcastTextId0`=29578 WHERE `id`= 13471; +UPDATE `npc_text` SET `BroadcastTextId0`=10776 WHERE `id`= 7794; +UPDATE `npc_text` SET `BroadcastTextId0`=28636 WHERE `id`= 13321; +UPDATE `npc_text` SET `BroadcastTextId0`=10571 WHERE `id`= 7696; +UPDATE `npc_text` SET `BroadcastTextId0`=28093 WHERE `id`= 13258; +UPDATE `npc_text` SET `BroadcastTextId0`=12232 WHERE `id`= 8500; +UPDATE `npc_text` SET `BroadcastTextId0`=12229 WHERE `id`= 8499; +UPDATE `npc_text` SET `BroadcastTextId0`=12236 WHERE `id`= 8503; +UPDATE `npc_text` SET `BroadcastTextId0`=12235 WHERE `id`= 8502; +UPDATE `npc_text` SET `BroadcastTextId0`=12227 WHERE `id`= 8498; +UPDATE `npc_text` SET `BroadcastTextId0`=28429 WHERE `id`= 13269; +UPDATE `npc_text` SET `BroadcastTextId0`=26949 WHERE `id`= 12915; +UPDATE `npc_text` SET `BroadcastTextId0`=27093 WHERE `id`= 12950; +UPDATE `npc_text` SET `BroadcastTextId0`=39736 WHERE `id`= 15714; +UPDATE `npc_text` SET `BroadcastTextId0`=10774 WHERE `id`= 7793; +UPDATE `npc_text` SET `BroadcastTextId0`=27471 WHERE `id`= 13059; +UPDATE `npc_text` SET `BroadcastTextId0`=15775 WHERE `id`= 9510; +UPDATE `npc_text` SET `BroadcastTextId0`=39727 WHERE `id`= 15712; +UPDATE `npc_text` SET `BroadcastTextId1`=30864 WHERE `id`= 48; +UPDATE `npc_text` SET `BroadcastTextId1`=41576 WHERE `id`= 225; +UPDATE `npc_text` SET `BroadcastTextId1`=7070 WHERE `id`= 4318; +UPDATE `npc_text` SET `BroadcastTextId1`=33543 WHERE `id`= 14346; +UPDATE `npc_text` SET `BroadcastTextId1`=33967 WHERE `id`= 14432; +UPDATE `npc_text` SET `BroadcastTextId1`=34711 WHERE `id`= 14555; +UPDATE `npc_text` SET `BroadcastTextId1`=35269 WHERE `id`= 14683; +UPDATE `npc_text` SET `BroadcastTextId1`=35885 WHERE `id`= 14766; +UPDATE `npc_text` SET `BroadcastTextId1`=36189 WHERE `id`= 14879; +UPDATE `npc_text` SET `BroadcastTextId1`=36966 WHERE `id`= 15117; +UPDATE `npc_text` SET `BroadcastTextId1`=37067 WHERE `id`= 15140; +UPDATE `npc_text` SET `BroadcastTextId1`=37099 WHERE `id`= 15148; +UPDATE `npc_text` SET `BroadcastTextId1`=38405 WHERE `id`= 15348; +UPDATE `npc_text` SET `BroadcastTextId1`=38753 WHERE `id`= 15435; +UPDATE `npc_text` SET `BroadcastTextId1`=39073 WHERE `id`= 15501; +UPDATE `npc_text` SET `BroadcastTextId1`=39173 WHERE `id`= 15531; +UPDATE `npc_text` SET `BroadcastTextId1`=39272 WHERE `id`= 15569; +UPDATE `npc_text` SET `BroadcastTextId1`=39626 WHERE `id`= 15696; +UPDATE `npc_text` SET `BroadcastTextId1`=39715 WHERE `id`= 15711; +UPDATE `npc_text` SET `BroadcastTextId1`=39769 WHERE `id`= 15733; +UPDATE `npc_text` SET `BroadcastTextId1`=40296 WHERE `id`= 15829; +UPDATE `npc_text` SET `BroadcastTextId1`=41197 WHERE `id`= 16015; +UPDATE `npc_text` SET `BroadcastTextId1`=41215 WHERE `id`= 16019; +UPDATE `npc_text` SET `BroadcastTextId1`=41299 WHERE `id`= 16032; +UPDATE `npc_text` SET `BroadcastTextId1`=41301 WHERE `id`= 16033; +UPDATE `npc_text` SET `BroadcastTextId1`=41418 WHERE `id`= 16078; +UPDATE `npc_text` SET `BroadcastTextId1`=41576 WHERE `id`= 16097; +UPDATE `npc_text` SET `BroadcastTextId1`=41583 WHERE `id`= 16099; +UPDATE `npc_text` SET `BroadcastTextId1`=41703 WHERE `id`= 16126; +UPDATE `npc_text` SET `BroadcastTextId1`=42366 WHERE `id`= 16250; +UPDATE `npc_text` SET `BroadcastTextId1`=42668 WHERE `id`= 16293; +UPDATE `npc_text` SET `BroadcastTextId1`=43505 WHERE `id`= 16425; +UPDATE `npc_text` SET `BroadcastTextId1`=43534 WHERE `id`= 16430; +UPDATE `npc_text` SET `BroadcastTextId1`=43701 WHERE `id`= 16465; +UPDATE `npc_text` SET `BroadcastTextId1`=43722 WHERE `id`= 16470; +UPDATE `npc_text` SET `BroadcastTextId1`=43729 WHERE `id`= 16471; +UPDATE `npc_text` SET `BroadcastTextId1`=44461 WHERE `id`= 16558; +UPDATE `npc_text` SET `BroadcastTextId1`=44465 WHERE `id`= 16560; +UPDATE `npc_text` SET `BroadcastTextId1`=8538 WHERE `id`= 16609; +UPDATE `npc_text` SET `BroadcastTextId1`=44667 WHERE `id`= 16635; +UPDATE `npc_text` SET `BroadcastTextId1`=44929 WHERE `id`= 16688; +UPDATE `npc_text` SET `BroadcastTextId1`=45258 WHERE `id`= 16744; +UPDATE `npc_text` SET `BroadcastTextId1`=45303 WHERE `id`= 16763; +UPDATE `npc_text` SET `BroadcastTextId1`=45361 WHERE `id`= 16780; +UPDATE `npc_text` SET `BroadcastTextId1`=45371 WHERE `id`= 16784; +UPDATE `npc_text` SET `BroadcastTextId1`=45619 WHERE `id`= 16851; +UPDATE `npc_text` SET `BroadcastTextId1`=46407 WHERE `id`= 17004; +UPDATE `npc_text` SET `BroadcastTextId1`=46726 WHERE `id`= 17057; +UPDATE `npc_text` SET `BroadcastTextId1`=47181 WHERE `id`= 17143; +UPDATE `npc_text` SET `BroadcastTextId1`=47284 WHERE `id`= 17167; +UPDATE `npc_text` SET `BroadcastTextId1`=47449 WHERE `id`= 17189; +UPDATE `npc_text` SET `BroadcastTextId1`=47462 WHERE `id`= 17192; +UPDATE `npc_text` SET `BroadcastTextId1`=47566 WHERE `id`= 17212; +UPDATE `npc_text` SET `BroadcastTextId1`=47605 WHERE `id`= 17227; +UPDATE `npc_text` SET `BroadcastTextId1`=47616 WHERE `id`= 17229; +UPDATE `npc_text` SET `BroadcastTextId1`=47633 WHERE `id`= 17235; +UPDATE `npc_text` SET `BroadcastTextId1`=47738 WHERE `id`= 17251; +UPDATE `npc_text` SET `BroadcastTextId1`=47979 WHERE `id`= 17307; +UPDATE `npc_text` SET `BroadcastTextId1`=47981 WHERE `id`= 17308; +UPDATE `npc_text` SET `BroadcastTextId1`=47998 WHERE `id`= 17319; +UPDATE `npc_text` SET `BroadcastTextId1`=48141 WHERE `id`= 17360; +UPDATE `npc_text` SET `BroadcastTextId1`=48404 WHERE `id`= 17433; +UPDATE `npc_text` SET `BroadcastTextId1`=48651 WHERE `id`= 17469; +UPDATE `npc_text` SET `BroadcastTextId1`=49216 WHERE `id`= 17552; +UPDATE `npc_text` SET `BroadcastTextId1`=50593 WHERE `id`= 17759; +UPDATE `npc_text` SET `BroadcastTextId1`=50825 WHERE `id`= 17856; +UPDATE `npc_text` SET `BroadcastTextId1`=51268 WHERE `id`= 17952; +UPDATE `npc_text` SET `BroadcastTextId1`=52352 WHERE `id`= 17986; +UPDATE `npc_text` SET `BroadcastTextId1`=51725 WHERE `id`= 18024; +UPDATE `npc_text` SET `BroadcastTextId1`=51858 WHERE `id`= 18037; +UPDATE `npc_text` SET `BroadcastTextId1`=53053 WHERE `id`= 18288; +UPDATE `npc_text` SET `BroadcastTextId1`=53126 WHERE `id`= 18317; +UPDATE `npc_text` SET `BroadcastTextId1`=54325 WHERE `id`= 18559; +UPDATE `npc_text` SET `BroadcastTextId1`=54327 WHERE `id`= 18560; +UPDATE `npc_text` SET `BroadcastTextId1`=54331 WHERE `id`= 18562; +UPDATE `npc_text` SET `BroadcastTextId1`=54333 WHERE `id`= 18563; +UPDATE `npc_text` SET `BroadcastTextId1`=10142 WHERE `id`= 7389; +UPDATE `npc_text` SET `BroadcastTextId1`=19020 WHERE `id`= 10339; +UPDATE `npc_text` SET `BroadcastTextId1`=52354 WHERE `id`= 18143; +UPDATE `npc_text` SET `BroadcastTextId1`=52224 WHERE `id`= 18124; +UPDATE `npc_text` SET `BroadcastTextId1`=34096 WHERE `id`= 14454; +UPDATE `npc_text` SET `BroadcastTextId1`=34993 WHERE `id`= 14549; +UPDATE `npc_text` SET `BroadcastTextId1`=35262 WHERE `id`= 14681; +UPDATE `npc_text` SET `BroadcastTextId1`=35891 WHERE `id`= 14767; +UPDATE `npc_text` SET `BroadcastTextId1`=36044 WHERE `id`= 14827; +UPDATE `npc_text` SET `BroadcastTextId1`=36193 WHERE `id`= 14880; +UPDATE `npc_text` SET `BroadcastTextId1`=40292 WHERE `id`= 15831; +UPDATE `npc_text` SET `BroadcastTextId1`=41059 WHERE `id`= 15982; +UPDATE `npc_text` SET `BroadcastTextId1`=46092 WHERE `id`= 16946; +UPDATE `npc_text` SET `BroadcastTextId1`=46095 WHERE `id`= 16947; +UPDATE `npc_text` SET `BroadcastTextId1`=46098 WHERE `id`= 16948; +UPDATE `npc_text` SET `BroadcastTextId1`=49175 WHERE `id`= 17549; +UPDATE `npc_text` SET `BroadcastTextId1`=49183 WHERE `id`= 17550; +UPDATE `npc_text` SET `BroadcastTextId1`=50973 WHERE `id`= 17890; +UPDATE `npc_text` SET `BroadcastTextId1`=52342 WHERE `id`= 18025; +UPDATE `npc_text` SET `BroadcastTextId1`=51872 WHERE `id`= 18041; +UPDATE `npc_text` SET `BroadcastTextId1`=51872 WHERE `id`= 18042; +UPDATE `npc_text` SET `BroadcastTextId1`=52342 WHERE `id`= 18165; +UPDATE `npc_text` SET `BroadcastTextId2`=30864 WHERE `id`= 48; +UPDATE `npc_text` SET `BroadcastTextId2`=33544 WHERE `id`= 14346; +UPDATE `npc_text` SET `BroadcastTextId2`=34712 WHERE `id`= 14555; +UPDATE `npc_text` SET `BroadcastTextId2`=35270 WHERE `id`= 14683; +UPDATE `npc_text` SET `BroadcastTextId2`=35886 WHERE `id`= 14766; +UPDATE `npc_text` SET `BroadcastTextId2`=36190 WHERE `id`= 14879; +UPDATE `npc_text` SET `BroadcastTextId2`=36968 WHERE `id`= 15117; +UPDATE `npc_text` SET `BroadcastTextId2`=37068 WHERE `id`= 15140; +UPDATE `npc_text` SET `BroadcastTextId2`=37100 WHERE `id`= 15148; +UPDATE `npc_text` SET `BroadcastTextId2`=10766 WHERE `id`= 15296; +UPDATE `npc_text` SET `BroadcastTextId2`=38406 WHERE `id`= 15348; +UPDATE `npc_text` SET `BroadcastTextId2`=38754 WHERE `id`= 15435; +UPDATE `npc_text` SET `BroadcastTextId2`=39074 WHERE `id`= 15501; +UPDATE `npc_text` SET `BroadcastTextId2`=39174 WHERE `id`= 15531; +UPDATE `npc_text` SET `BroadcastTextId2`=39273 WHERE `id`= 15569; +UPDATE `npc_text` SET `BroadcastTextId2`=39627 WHERE `id`= 15696; +UPDATE `npc_text` SET `BroadcastTextId2`=39716 WHERE `id`= 15711; +UPDATE `npc_text` SET `BroadcastTextId2`=39770 WHERE `id`= 15733; +UPDATE `npc_text` SET `BroadcastTextId2`=40297 WHERE `id`= 15829; +UPDATE `npc_text` SET `BroadcastTextId2`=41198 WHERE `id`= 16015; +UPDATE `npc_text` SET `BroadcastTextId2`=41216 WHERE `id`= 16019; +UPDATE `npc_text` SET `BroadcastTextId2`=41302 WHERE `id`= 16033; +UPDATE `npc_text` SET `BroadcastTextId2`=41419 WHERE `id`= 16078; +UPDATE `npc_text` SET `BroadcastTextId2`=41584 WHERE `id`= 16099; +UPDATE `npc_text` SET `BroadcastTextId2`=41704 WHERE `id`= 16126; +UPDATE `npc_text` SET `BroadcastTextId2`=42367 WHERE `id`= 16250; +UPDATE `npc_text` SET `BroadcastTextId2`=42669 WHERE `id`= 16293; +UPDATE `npc_text` SET `BroadcastTextId2`=43506 WHERE `id`= 16425; +UPDATE `npc_text` SET `BroadcastTextId2`=43535 WHERE `id`= 16430; +UPDATE `npc_text` SET `BroadcastTextId2`=43702 WHERE `id`= 16465; +UPDATE `npc_text` SET `BroadcastTextId2`=43723 WHERE `id`= 16470; +UPDATE `npc_text` SET `BroadcastTextId2`=43730 WHERE `id`= 16471; +UPDATE `npc_text` SET `BroadcastTextId2`=44462 WHERE `id`= 16558; +UPDATE `npc_text` SET `BroadcastTextId2`=44466 WHERE `id`= 16560; +UPDATE `npc_text` SET `BroadcastTextId2`=44668 WHERE `id`= 16635; +UPDATE `npc_text` SET `BroadcastTextId2`=44930 WHERE `id`= 16688; +UPDATE `npc_text` SET `BroadcastTextId2`=45259 WHERE `id`= 16744; +UPDATE `npc_text` SET `BroadcastTextId2`=45304 WHERE `id`= 16763; +UPDATE `npc_text` SET `BroadcastTextId2`=45362 WHERE `id`= 16780; +UPDATE `npc_text` SET `BroadcastTextId2`=45620 WHERE `id`= 16851; +UPDATE `npc_text` SET `BroadcastTextId2`=46408 WHERE `id`= 17004; +UPDATE `npc_text` SET `BroadcastTextId2`=46727 WHERE `id`= 17057; +UPDATE `npc_text` SET `BroadcastTextId2`=47182 WHERE `id`= 17143; +UPDATE `npc_text` SET `BroadcastTextId2`=47285 WHERE `id`= 17167; +UPDATE `npc_text` SET `BroadcastTextId2`=47446 WHERE `id`= 17189; +UPDATE `npc_text` SET `BroadcastTextId2`=47567 WHERE `id`= 17212; +UPDATE `npc_text` SET `BroadcastTextId2`=47606 WHERE `id`= 17227; +UPDATE `npc_text` SET `BroadcastTextId2`=47634 WHERE `id`= 17235; +UPDATE `npc_text` SET `BroadcastTextId2`=47966 WHERE `id`= 17307; +UPDATE `npc_text` SET `BroadcastTextId2`=47999 WHERE `id`= 17319; +UPDATE `npc_text` SET `BroadcastTextId2`=48142 WHERE `id`= 17360; +UPDATE `npc_text` SET `BroadcastTextId2`=48405 WHERE `id`= 17433; +UPDATE `npc_text` SET `BroadcastTextId2`=48652 WHERE `id`= 17469; +UPDATE `npc_text` SET `BroadcastTextId2`=49217 WHERE `id`= 17552; +UPDATE `npc_text` SET `BroadcastTextId2`=50826 WHERE `id`= 17856; +UPDATE `npc_text` SET `BroadcastTextId2`=51269 WHERE `id`= 17952; +UPDATE `npc_text` SET `BroadcastTextId2`=51859 WHERE `id`= 18037; +UPDATE `npc_text` SET `BroadcastTextId2`=53054 WHERE `id`= 18288; +UPDATE `npc_text` SET `BroadcastTextId2`=53127 WHERE `id`= 18317; +UPDATE `npc_text` SET `BroadcastTextId2`=34097 WHERE `id`= 14454; +UPDATE `npc_text` SET `BroadcastTextId2`=34994 WHERE `id`= 14549; +UPDATE `npc_text` SET `BroadcastTextId2`=35263 WHERE `id`= 14681; +UPDATE `npc_text` SET `BroadcastTextId2`=35892 WHERE `id`= 14767; +UPDATE `npc_text` SET `BroadcastTextId2`=36045 WHERE `id`= 14827; +UPDATE `npc_text` SET `BroadcastTextId2`=36194 WHERE `id`= 14880; +UPDATE `npc_text` SET `BroadcastTextId2`=40293 WHERE `id`= 15831; +UPDATE `npc_text` SET `BroadcastTextId2`=41060 WHERE `id`= 15982; +UPDATE `npc_text` SET `BroadcastTextId2`=46093 WHERE `id`= 16946; +UPDATE `npc_text` SET `BroadcastTextId2`=46096 WHERE `id`= 16947; +UPDATE `npc_text` SET `BroadcastTextId2`=46099 WHERE `id`= 16948; +UPDATE `npc_text` SET `BroadcastTextId2`=49176 WHERE `id`= 17549; +UPDATE `npc_text` SET `BroadcastTextId2`=49184 WHERE `id`= 17550; +UPDATE `npc_text` SET `BroadcastTextId2`=51707 WHERE `id`= 17890; +UPDATE `npc_text` SET `BroadcastTextId2`=51730 WHERE `id`= 18025; +UPDATE `npc_text` SET `BroadcastTextId2`=51873 WHERE `id`= 18041; +UPDATE `npc_text` SET `BroadcastTextId2`=51873 WHERE `id`= 18042; +UPDATE `npc_text` SET `BroadcastTextId2`=52225 WHERE `id`= 18124; +UPDATE `npc_text` SET `BroadcastTextId2`=52355 WHERE `id`= 18143; +UPDATE `npc_text` SET `BroadcastTextId2`=52400 WHERE `id`= 18165; +UPDATE `npc_text` SET `BroadcastTextId3`=4940 WHERE `id`= 2634; +UPDATE `npc_text` SET `BroadcastTextId3`=10766 WHERE `id`= 15296; +UPDATE `npc_text` SET `BroadcastTextId3`=34713 WHERE `id`= 14555; +UPDATE `npc_text` SET `BroadcastTextId3`=35271 WHERE `id`= 14683; +UPDATE `npc_text` SET `BroadcastTextId3`=35887 WHERE `id`= 14766; +UPDATE `npc_text` SET `BroadcastTextId3`=36191 WHERE `id`= 14879; +UPDATE `npc_text` SET `BroadcastTextId3`=36969 WHERE `id`= 15117; +UPDATE `npc_text` SET `BroadcastTextId3`=37069 WHERE `id`= 15140; +UPDATE `npc_text` SET `BroadcastTextId3`=37101 WHERE `id`= 15148; +UPDATE `npc_text` SET `BroadcastTextId3`=38407 WHERE `id`= 15348; +UPDATE `npc_text` SET `BroadcastTextId3`=38755 WHERE `id`= 15435; +UPDATE `npc_text` SET `BroadcastTextId3`=39075 WHERE `id`= 15501; +UPDATE `npc_text` SET `BroadcastTextId3`=39175 WHERE `id`= 15531; +UPDATE `npc_text` SET `BroadcastTextId3`=39628 WHERE `id`= 15696; +UPDATE `npc_text` SET `BroadcastTextId3`=39717 WHERE `id`= 15711; +UPDATE `npc_text` SET `BroadcastTextId3`=39771 WHERE `id`= 15733; +UPDATE `npc_text` SET `BroadcastTextId3`=40298 WHERE `id`= 15829; +UPDATE `npc_text` SET `BroadcastTextId3`=41217 WHERE `id`= 16019; +UPDATE `npc_text` SET `BroadcastTextId3`=41420 WHERE `id`= 16078; +UPDATE `npc_text` SET `BroadcastTextId3`=42368 WHERE `id`= 16250; +UPDATE `npc_text` SET `BroadcastTextId3`=43507 WHERE `id`= 16425; +UPDATE `npc_text` SET `BroadcastTextId3`=43536 WHERE `id`= 16430; +UPDATE `npc_text` SET `BroadcastTextId3`=43703 WHERE `id`= 16465; +UPDATE `npc_text` SET `BroadcastTextId3`=43724 WHERE `id`= 16470; +UPDATE `npc_text` SET `BroadcastTextId3`=43731 WHERE `id`= 16471; +UPDATE `npc_text` SET `BroadcastTextId3`=44467 WHERE `id`= 16560; +UPDATE `npc_text` SET `BroadcastTextId3`=44669 WHERE `id`= 16635; +UPDATE `npc_text` SET `BroadcastTextId3`=44931 WHERE `id`= 16688; +UPDATE `npc_text` SET `BroadcastTextId3`=45305 WHERE `id`= 16763; +UPDATE `npc_text` SET `BroadcastTextId3`=46409 WHERE `id`= 16780; +UPDATE `npc_text` SET `BroadcastTextId3`=46409 WHERE `id`= 17004; +UPDATE `npc_text` SET `BroadcastTextId3`=46728 WHERE `id`= 17057; +UPDATE `npc_text` SET `BroadcastTextId3`=47183 WHERE `id`= 17143; +UPDATE `npc_text` SET `BroadcastTextId3`=47447 WHERE `id`= 17189; +UPDATE `npc_text` SET `BroadcastTextId3`=47568 WHERE `id`= 17212; +UPDATE `npc_text` SET `BroadcastTextId3`=48000 WHERE `id`= 17319; +UPDATE `npc_text` SET `BroadcastTextId3`=49220 WHERE `id`= 17552; +UPDATE `npc_text` SET `BroadcastTextId3`=51270 WHERE `id`= 17952; +UPDATE `npc_text` SET `BroadcastTextId3`=53055 WHERE `id`= 18288; +UPDATE `npc_text` SET `BroadcastTextId3`=34098 WHERE `id`= 14454; +UPDATE `npc_text` SET `BroadcastTextId3`=34995 WHERE `id`= 14549; +UPDATE `npc_text` SET `BroadcastTextId3`=35264 WHERE `id`= 14681; +UPDATE `npc_text` SET `BroadcastTextId3`=35893 WHERE `id`= 14767; +UPDATE `npc_text` SET `BroadcastTextId3`=36195 WHERE `id`= 14880; +UPDATE `npc_text` SET `BroadcastTextId3`=40294 WHERE `id`= 15831; +UPDATE `npc_text` SET `BroadcastTextId3`=41061 WHERE `id`= 15982; +UPDATE `npc_text` SET `BroadcastTextId3`=49177 WHERE `id`= 17549; +UPDATE `npc_text` SET `BroadcastTextId3`=49185 WHERE `id`= 17550; +UPDATE `npc_text` SET `BroadcastTextId3`=51708 WHERE `id`= 17890; +UPDATE `npc_text` SET `BroadcastTextId3`=52344 WHERE `id`= 18025; +UPDATE `npc_text` SET `BroadcastTextId3`=51875 WHERE `id`= 18041; +UPDATE `npc_text` SET `BroadcastTextId3`=51874 WHERE `id`= 18042; +UPDATE `npc_text` SET `BroadcastTextId3`=52356 WHERE `id`= 18143; +UPDATE `npc_text` SET `BroadcastTextId3`=52401 WHERE `id`= 18165; +UPDATE `npc_text` SET `BroadcastTextId4`=4941 WHERE `id`= 2634; +UPDATE `npc_text` SET `BroadcastTextId4`=35272 WHERE `id`= 14683; +UPDATE `npc_text` SET `BroadcastTextId4`=35888 WHERE `id`= 14766; +UPDATE `npc_text` SET `BroadcastTextId4`=37070 WHERE `id`= 15140; +UPDATE `npc_text` SET `BroadcastTextId4`=37102 WHERE `id`= 15148; +UPDATE `npc_text` SET `BroadcastTextId4`=10766 WHERE `id`= 15296; +UPDATE `npc_text` SET `BroadcastTextId4`=39076 WHERE `id`= 15501; +UPDATE `npc_text` SET `BroadcastTextId4`=39629 WHERE `id`= 15696; +UPDATE `npc_text` SET `BroadcastTextId4`=39718 WHERE `id`= 15711; +UPDATE `npc_text` SET `BroadcastTextId4`=39772 WHERE `id`= 15733; +UPDATE `npc_text` SET `BroadcastTextId4`=41421 WHERE `id`= 16078; +UPDATE `npc_text` SET `BroadcastTextId4`=42369 WHERE `id`= 16250; +UPDATE `npc_text` SET `BroadcastTextId4`=43508 WHERE `id`= 16425; +UPDATE `npc_text` SET `BroadcastTextId4`=43537 WHERE `id`= 16430; +UPDATE `npc_text` SET `BroadcastTextId4`=43704 WHERE `id`= 16465; +UPDATE `npc_text` SET `BroadcastTextId4`=43725 WHERE `id`= 16470; +UPDATE `npc_text` SET `BroadcastTextId4`=43732 WHERE `id`= 16471; +UPDATE `npc_text` SET `BroadcastTextId4`=44468 WHERE `id`= 16560; +UPDATE `npc_text` SET `BroadcastTextId4`=44670 WHERE `id`= 16635; +UPDATE `npc_text` SET `BroadcastTextId4`=44932 WHERE `id`= 16688; +UPDATE `npc_text` SET `BroadcastTextId4`=46410 WHERE `id`= 17004; +UPDATE `npc_text` SET `BroadcastTextId4`=46729 WHERE `id`= 17057; +UPDATE `npc_text` SET `BroadcastTextId4`=47184 WHERE `id`= 17143; +UPDATE `npc_text` SET `BroadcastTextId4`=47448 WHERE `id`= 17189; +UPDATE `npc_text` SET `BroadcastTextId4`=48001 WHERE `id`= 17319; +UPDATE `npc_text` SET `BroadcastTextId4`=49224 WHERE `id`= 17552; +UPDATE `npc_text` SET `BroadcastTextId4`=51271 WHERE `id`= 17952; +UPDATE `npc_text` SET `BroadcastTextId4`=34099 WHERE `id`= 14454; +UPDATE `npc_text` SET `BroadcastTextId4`=34996 WHERE `id`= 14549; +UPDATE `npc_text` SET `BroadcastTextId4`=35265 WHERE `id`= 14681; +UPDATE `npc_text` SET `BroadcastTextId4`=35894 WHERE `id`= 14767; +UPDATE `npc_text` SET `BroadcastTextId4`=49178 WHERE `id`= 17549; +UPDATE `npc_text` SET `BroadcastTextId4`=49186 WHERE `id`= 17550; +UPDATE `npc_text` SET `BroadcastTextId4`=52345 WHERE `id`= 18025; +UPDATE `npc_text` SET `BroadcastTextId5`=35273 WHERE `id`= 14683; +UPDATE `npc_text` SET `BroadcastTextId5`=35889 WHERE `id`= 14766; +UPDATE `npc_text` SET `BroadcastTextId5`=37071 WHERE `id`= 15140; +UPDATE `npc_text` SET `BroadcastTextId5`=37103 WHERE `id`= 15148; +UPDATE `npc_text` SET `BroadcastTextId5`=10766 WHERE `id`= 15296; +UPDATE `npc_text` SET `BroadcastTextId5`=39077 WHERE `id`= 15501; +UPDATE `npc_text` SET `BroadcastTextId5`=39630 WHERE `id`= 15696; +UPDATE `npc_text` SET `BroadcastTextId5`=39719 WHERE `id`= 15711; +UPDATE `npc_text` SET `BroadcastTextId5`=39773 WHERE `id`= 15733; +UPDATE `npc_text` SET `BroadcastTextId5`=41422 WHERE `id`= 16078; +UPDATE `npc_text` SET `BroadcastTextId5`=43509 WHERE `id`= 16425; +UPDATE `npc_text` SET `BroadcastTextId5`=43538 WHERE `id`= 16430; +UPDATE `npc_text` SET `BroadcastTextId5`=43705 WHERE `id`= 16465; +UPDATE `npc_text` SET `BroadcastTextId5`=43726 WHERE `id`= 16470; +UPDATE `npc_text` SET `BroadcastTextId5`=43733 WHERE `id`= 16471; +UPDATE `npc_text` SET `BroadcastTextId5`=44469 WHERE `id`= 16560; +UPDATE `npc_text` SET `BroadcastTextId5`=44671 WHERE `id`= 16635; +UPDATE `npc_text` SET `BroadcastTextId5`=44933 WHERE `id`= 16688; +UPDATE `npc_text` SET `BroadcastTextId5`=46733 WHERE `id`= 17057; +UPDATE `npc_text` SET `BroadcastTextId5`=47185 WHERE `id`= 17143; +UPDATE `npc_text` SET `BroadcastTextId5`=47449 WHERE `id`= 17189; +UPDATE `npc_text` SET `BroadcastTextId5`=48002 WHERE `id`= 17319; +UPDATE `npc_text` SET `BroadcastTextId5`=49225 WHERE `id`= 17552; +UPDATE `npc_text` SET `BroadcastTextId5`=51272 WHERE `id`= 17952; +UPDATE `npc_text` SET `BroadcastTextId5`=34100 WHERE `id`= 14454; +UPDATE `npc_text` SET `BroadcastTextId5`=34997 WHERE `id`= 14549; +UPDATE `npc_text` SET `BroadcastTextId5`=35266 WHERE `id`= 14681; +UPDATE `npc_text` SET `BroadcastTextId5`=35895 WHERE `id`= 14767; +UPDATE `npc_text` SET `BroadcastTextId5`=49179 WHERE `id`= 17549; +UPDATE `npc_text` SET `BroadcastTextId5`=49187 WHERE `id`= 17550; +UPDATE `npc_text` SET `BroadcastTextId5`=52347 WHERE `id`= 18025; +UPDATE `npc_text` SET `BroadcastTextId6`=35275 WHERE `id`= 14683; +UPDATE `npc_text` SET `BroadcastTextId6`=37072 WHERE `id`= 15140; +UPDATE `npc_text` SET `BroadcastTextId6`=37104 WHERE `id`= 15148; +UPDATE `npc_text` SET `BroadcastTextId6`=10766 WHERE `id`= 15296; +UPDATE `npc_text` SET `BroadcastTextId6`=39631 WHERE `id`= 15696; +UPDATE `npc_text` SET `BroadcastTextId6`=39720 WHERE `id`= 15711; +UPDATE `npc_text` SET `BroadcastTextId6`=39774 WHERE `id`= 15733; +UPDATE `npc_text` SET `BroadcastTextId6`=41423 WHERE `id`= 16078; +UPDATE `npc_text` SET `BroadcastTextId6`=44470 WHERE `id`= 16560; +UPDATE `npc_text` SET `BroadcastTextId6`=44672 WHERE `id`= 16635; +UPDATE `npc_text` SET `BroadcastTextId6`=44934 WHERE `id`= 16688; +UPDATE `npc_text` SET `BroadcastTextId6`=47186 WHERE `id`= 17143; +UPDATE `npc_text` SET `BroadcastTextId6`=48003 WHERE `id`= 17319; +UPDATE `npc_text` SET `BroadcastTextId6`=49226 WHERE `id`= 17552; +UPDATE `npc_text` SET `BroadcastTextId6`=51273 WHERE `id`= 17952; +UPDATE `npc_text` SET `BroadcastTextId6`=34101 WHERE `id`= 14454; +UPDATE `npc_text` SET `BroadcastTextId6`=34998 WHERE `id`= 14549; +UPDATE `npc_text` SET `BroadcastTextId6`=35267 WHERE `id`= 14681; +UPDATE `npc_text` SET `BroadcastTextId6`=49180 WHERE `id`= 17549; +UPDATE `npc_text` SET `BroadcastTextId6`=49188 WHERE `id`= 17550; +UPDATE `npc_text` SET `BroadcastTextId6`=52348 WHERE `id`= 18025; +UPDATE `npc_text` SET `BroadcastTextId7`=10766 WHERE `id`= 15296; +UPDATE `npc_text` SET `BroadcastTextId7`=35276 WHERE `id`= 14683; +UPDATE `npc_text` SET `BroadcastTextId7`=37073 WHERE `id`= 15140; +UPDATE `npc_text` SET `BroadcastTextId7`=37106 WHERE `id`= 15148; +UPDATE `npc_text` SET `BroadcastTextId7`=39632 WHERE `id`= 15696; +UPDATE `npc_text` SET `BroadcastTextId7`=39721 WHERE `id`= 15711; +UPDATE `npc_text` SET `BroadcastTextId7`=39775 WHERE `id`= 15733; +UPDATE `npc_text` SET `BroadcastTextId7`=41424 WHERE `id`= 16078; +UPDATE `npc_text` SET `BroadcastTextId7`=44673 WHERE `id`= 16635; +UPDATE `npc_text` SET `BroadcastTextId7`=44935 WHERE `id`= 16688; +UPDATE `npc_text` SET `BroadcastTextId7`=47187 WHERE `id`= 17143; +UPDATE `npc_text` SET `BroadcastTextId7`=48004 WHERE `id`= 17319; +UPDATE `npc_text` SET `BroadcastTextId7`=49227 WHERE `id`= 17552; +UPDATE `npc_text` SET `BroadcastTextId7`=51274 WHERE `id`= 17952; +UPDATE `npc_text` SET `BroadcastTextId7`=34102 WHERE `id`= 14454; +UPDATE `npc_text` SET `BroadcastTextId7`=34999 WHERE `id`= 14549; +UPDATE `npc_text` SET `BroadcastTextId7`=35268 WHERE `id`= 14681; +UPDATE `npc_text` SET `BroadcastTextId7`=49181 WHERE `id`= 17549; +UPDATE `npc_text` SET `BroadcastTextId7`=49189 WHERE `id`= 17550; +UPDATE `npc_text` SET `BroadcastTextId7`=52349 WHERE `id`= 18025; diff --git a/sql/updates/world/2015_06_06_10_world.sql b/sql/updates/world/2015_06_06_10_world.sql new file mode 100644 index 00000000000..c1740acf6b4 --- /dev/null +++ b/sql/updates/world/2015_06_06_10_world.sql @@ -0,0 +1,4 @@ +-- +UPDATE `creature_template` SET `faction`=1668 WHERE `entry` IN (16580, 16582); +UPDATE `creature_template` SET `faction`=1671 WHERE `entry` IN (16831); +UPDATE `creature_template` SET `faction`=1666 WHERE `entry` IN (16842); diff --git a/sql/updates/world/2015_06_06_11_world.sql b/sql/updates/world/2015_06_06_11_world.sql new file mode 100644 index 00000000000..5edc822af3c --- /dev/null +++ b/sql/updates/world/2015_06_06_11_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `quest_template` SET `OfferRewardText`="Thanks for the done work!" WHERE `id`=787; diff --git a/sql/updates/world/2015_06_06_12_world.sql b/sql/updates/world/2015_06_06_12_world.sql new file mode 100644 index 00000000000..06ff734a74c --- /dev/null +++ b/sql/updates/world/2015_06_06_12_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature_template` SET `unit_flags`=4, `flags_extra`=2 WHERE `entry`=24210; diff --git a/sql/updates/world/2015_06_06_13_world_335.sql b/sql/updates/world/2015_06_06_13_world_335.sql new file mode 100644 index 00000000000..01801523945 --- /dev/null +++ b/sql/updates/world/2015_06_06_13_world_335.sql @@ -0,0 +1,4 @@ +-- +UPDATE `creature_template` SET `gossip_menu_id`=0 WHERE `entry`IN (23535, 5753, 5750, 5749, 16649, 16267, 15494, 5815, 6027, 12776, 6374, 5520, 6382, 6328, 6373, 6376); +UPDATE `creature_template` SET `npcflag`=0 WHERE `entry`IN (16267, 6328, 6373, 15494, 6374); +UPDATE `creature_template` SET `npcflag`=2 WHERE `entry`IN (6027, 5753, 5750, 5520, 6376, 6382, 12776, 5749, 5815, 16649, 23535); diff --git a/sql/updates/world/2015_06_08_00_world.sql b/sql/updates/world/2015_06_08_00_world.sql new file mode 100644 index 00000000000..c375b89aa72 --- /dev/null +++ b/sql/updates/world/2015_06_08_00_world.sql @@ -0,0 +1 @@ +UPDATE `creature_text` SET `BroadcastTextId`=24497 WHERE `entry`=25256 AND `groupid`=6 AND `id`=0; diff --git a/sql/updates/world/2015_06_11_00_world.sql b/sql/updates/world/2015_06_11_00_world.sql new file mode 100644 index 00000000000..2e5e4786c13 --- /dev/null +++ b/sql/updates/world/2015_06_11_00_world.sql @@ -0,0 +1,4 @@ +-- Set correct npcflag for NPC ID 21283, Megzeg Nukklebust +-- He is neither a vendor nor repair NPC +UPDATE `creature_template` SET `npcflag` = 3 WHERE `entry`= 21283; +UPDATE `creature_template_addon` SET `bytes2` = 257 WHERE `entry`= 21283; diff --git a/sql/updates/world/2015_06_12_00_world.sql b/sql/updates/world/2015_06_12_00_world.sql new file mode 100644 index 00000000000..2ed3766deae --- /dev/null +++ b/sql/updates/world/2015_06_12_00_world.sql @@ -0,0 +1,65 @@ +DELETE FROM `creature_formations` WHERE `leaderGUID`=101017; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(101017, 101017, 0, 0, 1), +(101017, 101016, 2, 45, 2); + +-- Pathing for Sunreaver Hawkrider Entry: 30265 'TDB FORMAT' +SET @NPC := 101017; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=5586.633,`position_y`=-658.4381,`position_z`=204.5775 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,28889,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,5586.633,-658.4381,204.5775,0,0,0,0,100,0), +(@PATH,2,5585.409,-655.815,203.7495,0,0,0,0,100,0), +(@PATH,3,5584.759,-647.1207,202.7112,0,0,0,0,100,0), +(@PATH,4,5589.797,-633.0928,200.7699,0,0,0,0,100,0), +(@PATH,5,5598.13,-621.1475,198.2848,0,0,0,0,100,0), +(@PATH,6,5592.634,-628.2191,199.8846,0,0,0,0,100,0), +(@PATH,7,5585.994,-641.5278,201.9498,0,0,0,0,100,0), +(@PATH,8,5584.441,-650.3018,203.0215,0,0,0,0,100,0); + +DELETE FROM `creature_formations` WHERE `leaderGUID`=100987; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(100987, 100987, 0, 0, 1), +(100987, 100986, 2, 45, 2); + +-- Pathing for Sunreaver Hawkrider Entry: 30265 'TDB FORMAT' +SET @NPC := 100987; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=5615.299,`position_y`=-711.0152,`position_z`=206.286 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,28889,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,5615.299,-711.0152,206.286,0,0,0,0,100,0), +(@PATH,2,5608.708,-695.2381,206.6548,0,0,0,0,100,0), +(@PATH,3,5598.26,-684.2681,206.6482,0,0,0,0,100,0), +(@PATH,4,5595.715,-675.8694,206.6474,0,0,0,0,100,0), +(@PATH,5,5589.645,-664.4355,205.7086,0,0,0,0,100,0), +(@PATH,6,5593.898,-670.5458,206.5087,0,0,0,0,100,0), +(@PATH,7,5596.294,-679.0742,206.6474,0,0,0,0,100,0), +(@PATH,8,5606.79,-693.2242,206.6536,0,0,0,0,100,0); + +DELETE FROM `creature_formations` WHERE `leaderGUID`=100984; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(100984, 100984, 0, 0, 1), +(100984, 100985, 2, 45, 2); + +-- Pathing for Sunreaver Hawkrider Entry: 30265 'TDB FORMAT' +SET @NPC := 100984; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=5603.461,`position_y`=-753.2111,`position_z`=198.3089 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,28889,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,5603.461,-753.2111,198.3089,0,0,0,0,100,0), +(@PATH,2,5609.75,-744.6108,201.4747,0,0,0,0,100,0), +(@PATH,3,5614.047,-736.9058,203.5394,0,0,0,0,100,0), +(@PATH,4,5617.86,-725.5508,204.9431,0,0,0,0,100,0), +(@PATH,5,5618.354,-717.699,205.5509,0,0,0,0,100,0), +(@PATH,6,5618.291,-721.7224,205.229,0,0,0,0,100,0), +(@PATH,7,5616.521,-730.5341,204.4404,0,0,0,0,100,0), +(@PATH,8,5613.125,-738.7379,203.1023,0,0,0,0,100,0); diff --git a/sql/updates/world/2015_06_13_00_world.sql b/sql/updates/world/2015_06_13_00_world.sql new file mode 100644 index 00000000000..b360ce4e3bc --- /dev/null +++ b/sql/updates/world/2015_06_13_00_world.sql @@ -0,0 +1,112 @@ +DELETE FROM `creature_formations` WHERE `leaderGUID`=100887; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(100887, 100887, 0, 0, 1), +(100887, 100888, 2, 90, 2); + +-- Pathing for Silver Covenant Horseman Entry: 30263 'TDB FORMAT' +SET @NPC := 100887; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=5067.709,`position_y`=-623.0535,`position_z`=216.2992 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,2410,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,5067.709,-623.0535,216.2992,0,0,0,0,100,0), -- 20:33:40 +(@PATH,2,5064.371,-619.6366,217.7106,0,0,0,0,100,0), -- 20:33:46 +(@PATH,3,5064.18,-607.0121,219.5005,0,0,0,0,100,0), -- 20:33:50 +(@PATH,4,5065.22,-602.5242,220.0495,0,0,0,0,100,0), -- 20:33:56 +(@PATH,5,5064.4,-593.0133,220.2778,0,0,0,0,100,0), -- 20:33:59 +(@PATH,6,5062.952,-571.7712,220.2518,0,0,0,0,100,0), -- 20:34:08 +(@PATH,7,5062.632,-572.1309,220.0737,0,0,0,0,100,0), -- 20:34:17 +(@PATH,8,5062.766,-572.0648,220.3171,0,0,0,0,100,0), -- 20:34:24 +(@PATH,9,5064.708,-593.1912,220.1846,0,0,0,0,100,0), -- 20:34:32 +(@PATH,10,5063.012,-612.4286,219.0811,0,0,0,0,100,0), -- 20:34:36 +(@PATH,11,5066.325,-621.582,216.7641,0,0,0,0,100,0), -- 20:34:42 +(@PATH,12,5067.825,-623.082,216.2641,0,0,0,0,100,0); -- 20:34:42 +-- 0x1C392447601D8DC000000C000077FF13 .go 5067.709 -623.0535 216.2992 + +DELETE FROM `creature_formations` WHERE `leaderGUID`=100898; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(100898, 100898, 0, 0, 1), +(100898, 100899, 2, 90, 2); + +-- Pathing for Silver Covenant Horseman Entry: 30263 'TDB FORMAT' +SET @NPC := 100898; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=5076.637,`position_y`=-639.3936,`position_z`=210.1455 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,2410,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,5076.637,-639.3936,210.1455,0,0,0,0,100,0), -- 11:59:49 +(@PATH,2,5079.917,-659.7036,200.968,0,0,0,0,100,0), -- 12:00:00 +(@PATH,3,5079.445,-679.8152,193.9069,0,0,0,0,100,0), -- 12:00:08 +(@PATH,4,5081.471,-688.5268,190.5579,0,0,0,0,100,0), -- 12:00:17 +(@PATH,5,5091.792,-703.2252,184.7582,0,0,0,0,100,0), -- 12:00:22 +(@PATH,6,5099.77,-708.3243,181.946,0,0,0,0,100,0), -- 12:00:29 +(@PATH,7,5094.969,-706.1178,183.7631,0,0,0,0,100,0), -- 12:00:34 +(@PATH,8,5082.577,-691.327,189.5212,0,0,0,0,100,0), -- 12:00:36 +(@PATH,9,5080.255,-683.3011,192.4193,0,0,0,0,100,0), -- 12:00:45 +(@PATH,10,5080.166,-662.0288,199.9953,0,0,0,0,100,0); -- 12:00:49 +-- 0x1C392447601D8DC000000C000077FF7B .go 5076.637 -639.3936 210.1455 + +DELETE FROM `creature_formations` WHERE `leaderGUID`=100889; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(100889, 100889, 0, 0, 1), +(100889, 100890, 2, 90, 2); + +-- Pathing for Silver Covenant Horseman Entry: 30263 'TDB FORMAT' +SET @NPC := 100889; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=5060.026,`position_y`=-538.408,`position_z`=220.0076 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,2410,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,5060.026,-538.408,220.0076,0,0,0,0,100,0), -- 12:00:56 +(@PATH,2,5059.559,-537.8341,220.0076,2.070161,0,0,0,100,0), -- 12:00:57 +(@PATH,3,5058.987,-537.1638,220.0076,0,0,0,0,100,0), -- 12:00:57 +(@PATH,4,5057.041,-534.8303,219.9673,0,0,0,0,100,0), -- 12:00:58 +(@PATH,5,5055.152,-532.5667,219.8454,0,0,0,0,100,0), -- 12:00:59 +(@PATH,6,5053.768,-528.5505,219.8488,0,0,0,0,100,0), -- 12:01:01 +(@PATH,7,5054.296,-525.5225,219.4218,0,0,0,0,100,0), -- 12:01:02 +(@PATH,8,5055.446,-521.4495,219.3181,0,0,0,0,100,0), -- 12:01:03 +(@PATH,9,5057.875,-519.7457,218.8674,0,0,0,0,100,0), -- 12:01:04 +(@PATH,10,5059.473,-518.8138,218.6286,0,0,0,0,100,0), -- 12:01:05 +(@PATH,11,5061.776,-517.084,217.916,0,0,0,0,100,0), -- 12:01:07 +(@PATH,12,5064.104,-515.4176,217.0972,0,0,0,0,100,0), -- 12:01:08 +(@PATH,13,5065.635,-514.3111,215.9073,0,0,0,0,100,0), -- 12:01:09 +(@PATH,14,5068.912,-512.2123,214.4262,0,0,0,0,100,0), -- 12:01:10 +(@PATH,15,5070.144,-511.1482,213.5484,0,0,0,0,100,0), -- 12:01:12 +(@PATH,16,5073.149,-509.0605,212.3315,0,0,0,0,100,0), -- 12:01:13 +(@PATH,17,5074.678,-507.9399,211.4917,0,0,0,0,100,0), -- 12:01:14 +(@PATH,18,5078.117,-505.9191,209.5764,0,0,0,0,100,0), -- 12:01:15 +(@PATH,19,5079.734,-505.1035,208.2059,0,0,0,0,100,0), -- 12:01:16 +(@PATH,20,5082.03,-503.8705,206.9615,0,0,0,0,100,0), -- 12:01:18 +(@PATH,21,5085.192,-502.0856,205.0636,0,0,0,0,100,0), -- 12:01:19 +(@PATH,22,5087.563,-500.825,203.5342,0,0,0,0,100,0), -- 12:01:20 +(@PATH,23,5088.891,-500.0888,202.8326,0,0,0,0,100,0), -- 12:01:21 +(@PATH,24,5090.603,-499.18,201.682,0,0,0,0,100,0), -- 12:01:23 +(@PATH,25,5090.519,-499.2244,201.7328,-2.536886,0,0,0,100,0), -- 12:01:23 +(@PATH,26,5089.623,-499.7004,202.2772,0,0,0,0,100,0), -- 12:01:24 +(@PATH,27,5088.674,-500.0867,202.9039,0,0,0,0,100,0), -- 12:01:25 +(@PATH,28,5085.627,-501.6739,204.7783,0,0,0,0,100,0), -- 12:01:26 +(@PATH,29,5083.288,-502.9158,206.4351,0,0,0,0,100,0), -- 12:01:27 +(@PATH,30,5081.008,-504.1263,207.5976,0,0,0,0,100,0), -- 12:01:29 +(@PATH,31,5078.845,-505.3429,208.9937,0,0,0,0,100,0), -- 12:01:30 +(@PATH,32,5076.814,-506.5785,210.2388,0,0,0,0,100,0), -- 12:01:31 +(@PATH,33,5073.882,-508.545,211.8869,0,0,0,0,100,0), -- 12:01:32 +(@PATH,34,5072.41,-509.5816,212.7734,0,0,0,0,100,0), -- 12:01:33 +(@PATH,35,5069.576,-511.4619,214.2128,0,0,0,0,100,0), -- 12:01:35 +(@PATH,36,5067.752,-512.8409,215.1404,0,0,0,0,100,0), -- 12:01:36 +(@PATH,37,5064.977,-514.6848,216.6034,0,0,0,0,100,0), -- 12:01:37 +(@PATH,38,5063.138,-516.0745,217.341,0,0,0,0,100,0), -- 12:01:38 +(@PATH,39,5060.213,-518.0273,218.5601,0,0,0,0,100,0), -- 12:01:40 +(@PATH,40,5056.744,-520.0189,219.1413,0,0,0,0,100,0), -- 12:01:41 +(@PATH,41,5054.522,-524.2232,219.3947,0,0,0,0,100,0), -- 12:01:42 +(@PATH,42,5053.996,-527.2253,219.6623,0,0,0,0,100,0), -- 12:01:43 +(@PATH,43,5053.982,-531.1642,219.9596,0,0,0,0,100,0), -- 12:01:44 +(@PATH,44,5056.037,-533.6272,219.9433,0,0,0,0,100,0), -- 12:01:46 +(@PATH,45,5058.094,-536.0921,219.9923,0,0,0,0,100,0), -- 12:01:47 +(@PATH,46,5060.026,-538.408,220.0076,0,0,0,0,100,0); -- 12:01:48 +-- 0x1C392447601D8DC000000C0000F7FF07 .go 5060.026 -538.408 220.0076 diff --git a/sql/updates/world/2015_06_13_01_world.sql b/sql/updates/world/2015_06_13_01_world.sql new file mode 100644 index 00000000000..d0833aca0c2 --- /dev/null +++ b/sql/updates/world/2015_06_13_01_world.sql @@ -0,0 +1,42 @@ +-- Rewards for Kael'Thas and the Verdant Sphere + +UPDATE `quest_template` SET +`RewardChoiceItemId1`=30018, -- Lord Sanguinar's Claim +`RewardChoiceItemId2`=30017, -- Telonicus' Pendant of Mayhem +`RewardChoiceItemId3`=30007, -- The Darkener's Grasp +`RewardChoiceItemId4`=30015, -- The Sun King's Talisman +`RewardChoiceItemCount1`=1, +`RewardChoiceItemCount2`=1, +`RewardChoiceItemCount3`=1, +`RewardChoiceItemCount4`=1 WHERE `Id`=11007; + +-- Rewards for The Cipher of Damnation + +UPDATE `quest_template` SET +`RewardItemId1`=31074, -- Amulet of the Torn-Heart +`RewardChoiceItemId1`=31073, -- Borak's Reminder +`RewardChoiceItemId2`=31071, -- Grom'tor's Charge +`RewardChoiceItemId3`=31072, -- Lohn'goron, Bow of the Torn-Heart +`RewardChoiceItemId4`=31036, -- Oronok's Ancient Scepter +`RewardChoiceItemId5`=31062, -- Torn-Heart Axe of Battle +`RewardChoiceItemId6`=31038, -- Staff of the Redeemer +`RewardItemCount1`=1, +`RewardChoiceItemCount1`=1, +`RewardChoiceItemCount2`=1, +`RewardChoiceItemCount3`=1, +`RewardChoiceItemCount4`=1, +`RewardChoiceItemCount5`=1, +`RewardChoiceItemCount6`=1 WHERE `Id`=10588; + +-- Voa Summon Stone + +SET @OGUID=35834; +DELETE FROM `gameobject` WHERE `id` IN (195013); +INSERT INTO `gameobject` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`, `rotation3`,`spawntimesecs`,`animprogress`,`state`) VALUES +(@OGUID,195013,571,1,65,5476.19,2861.76,418.675,0,1,300,255,1); + +UPDATE `creature` SET `position_x`=5407.84,`position_y`=2819.29, `position_z`=418.676,`orientation`=0.471239 WHERE `id`=32620; + +-- DB Error + +UPDATE `creature_template` SET `NpcFlag`=3 WHERE `entry`=14325; diff --git a/src/server/authserver/CMakeLists.txt b/src/server/authserver/CMakeLists.txt index edd87a5c347..7c76df5d06c 100644 --- a/src/server/authserver/CMakeLists.txt +++ b/src/server/authserver/CMakeLists.txt @@ -43,6 +43,8 @@ endif() include_directories( ${CMAKE_BINARY_DIR} + ${CMAKE_SOURCE_DIR}/dep/cppformat + ${CMAKE_SOURCE_DIR}/dep/process ${CMAKE_SOURCE_DIR}/src/server/shared ${CMAKE_SOURCE_DIR}/src/server/shared/Configuration ${CMAKE_SOURCE_DIR}/src/server/shared/Database @@ -53,6 +55,7 @@ include_directories( ${CMAKE_SOURCE_DIR}/src/server/shared/Logging ${CMAKE_SOURCE_DIR}/src/server/shared/Networking ${CMAKE_SOURCE_DIR}/src/server/shared/Threading + ${CMAKE_SOURCE_DIR}/src/server/shared/Updater ${CMAKE_SOURCE_DIR}/src/server/shared/Utilities ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/Authentication @@ -63,6 +66,8 @@ include_directories( ${VALGRIND_INCLUDE_DIR} ) +GroupSources(${CMAKE_CURRENT_SOURCE_DIR}) + add_executable(authserver ${authserver_SRCS} ${authserver_PCH_SRC} @@ -78,6 +83,7 @@ endif() target_link_libraries(authserver shared + format ${MYSQL_LIBRARY} ${OPENSSL_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} diff --git a/src/server/authserver/Main.cpp b/src/server/authserver/Main.cpp index c57f8254d9c..15ab1c38925 100644 --- a/src/server/authserver/Main.cpp +++ b/src/server/authserver/Main.cpp @@ -28,14 +28,13 @@ #include "Common.h" #include "Config.h" #include "DatabaseEnv.h" +#include "DatabaseLoader.h" #include "Log.h" #include "ProcessPriority.h" #include "RealmList.h" #include "SystemConfig.h" #include "Util.h" -#include <cstdlib> #include <iostream> -#include <boost/date_time/posix_time/posix_time.hpp> #include <boost/program_options.hpp> #include <openssl/opensslv.h> #include <openssl/crypto.h> @@ -47,25 +46,52 @@ using namespace boost::program_options; # define _TRINITY_REALM_CONFIG "authserver.conf" #endif +#if PLATFORM == PLATFORM_WINDOWS +#include "ServiceWin32.h" +char serviceName[] = "authserver"; +char serviceLongName[] = "TrinityCore auth service"; +char serviceDescription[] = "TrinityCore World of Warcraft emulator auth service"; +/* +* -1 - not in service mode +* 0 - stopped +* 1 - running +* 2 - paused +*/ +int m_ServiceStatus = -1; + +boost::asio::deadline_timer* _serviceStatusWatchTimer; +void ServiceStatusWatcher(boost::system::error_code const& error); +#endif + bool StartDB(); void StopDB(); void SignalHandler(const boost::system::error_code& error, int signalNumber); void KeepDatabaseAliveHandler(const boost::system::error_code& error); -variables_map GetConsoleArguments(int argc, char** argv, std::string& configFile); +variables_map GetConsoleArguments(int argc, char** argv, std::string& configFile, std::string& configService); -boost::asio::io_service _ioService; -boost::asio::deadline_timer _dbPingTimer(_ioService); +boost::asio::io_service* _ioService; +boost::asio::deadline_timer* _dbPingTimer; uint32 _dbPingInterval; LoginDatabaseWorkerPool LoginDatabase; -int mainImpl(int argc, char** argv) +int main(int argc, char** argv) { std::string configFile = _TRINITY_REALM_CONFIG; - auto vm = GetConsoleArguments(argc, argv, configFile); + std::string configService; + auto vm = GetConsoleArguments(argc, argv, configFile, configService); // exit if help is enabled if (vm.count("help")) return 0; +#if PLATFORM == PLATFORM_WINDOWS + if (configService.compare("install") == 0) + return WinServiceInstall() == true ? 0 : 1; + else if (configService.compare("uninstall") == 0) + return WinServiceUninstall() == true ? 0 : 1; + else if (configService.compare("run") == 0) + return WinServiceRun() ? 0 : 1; +#endif + std::string configError; if (!sConfigMgr->LoadInitial(configFile, configError)) { @@ -96,13 +122,16 @@ int mainImpl(int argc, char** argv) if (!StartDB()) return 1; + _ioService = new boost::asio::io_service(); + // Get the list of realms for the server - sRealmList->Initialize(_ioService, sConfigMgr->GetIntDefault("RealmsStateUpdateDelay", 20)); + sRealmList->Initialize(*_ioService, sConfigMgr->GetIntDefault("RealmsStateUpdateDelay", 20)); if (sRealmList->size() == 0) { TC_LOG_ERROR("server.authserver", "No valid realms specified."); StopDB(); + delete _ioService; return 1; } @@ -112,15 +141,16 @@ int mainImpl(int argc, char** argv) { TC_LOG_ERROR("server.authserver", "Specified port out of allowed range (1-65535)"); StopDB(); + delete _ioService; return 1; } std::string bindIp = sConfigMgr->GetStringDefault("BindIP", "0.0.0.0"); - sAuthSocketMgr.StartNetwork(_ioService, bindIp, port); + sAuthSocketMgr.StartNetwork(*_ioService, bindIp, port); // Set signal handlers - boost::asio::signal_set signals(_ioService, SIGINT, SIGTERM); + boost::asio::signal_set signals(*_ioService, SIGINT, SIGTERM); #if PLATFORM == PLATFORM_WINDOWS signals.add(SIGBREAK); #endif @@ -131,36 +161,36 @@ int mainImpl(int argc, char** argv) // Enabled a timed callback for handling the database keep alive ping _dbPingInterval = sConfigMgr->GetIntDefault("MaxPingTime", 30); - _dbPingTimer.expires_from_now(boost::posix_time::minutes(_dbPingInterval)); - _dbPingTimer.async_wait(KeepDatabaseAliveHandler); + _dbPingTimer = new boost::asio::deadline_timer(*_ioService); + _dbPingTimer->expires_from_now(boost::posix_time::minutes(_dbPingInterval)); + _dbPingTimer->async_wait(KeepDatabaseAliveHandler); + +#if PLATFORM == PLATFORM_WINDOWS + if (m_ServiceStatus != -1) + { + _serviceStatusWatchTimer = new boost::asio::deadline_timer(*_ioService); + _serviceStatusWatchTimer->expires_from_now(boost::posix_time::seconds(1)); + _serviceStatusWatchTimer->async_wait(ServiceStatusWatcher); + } +#endif // Start the io service worker loop - _ioService.run(); + _ioService->run(); + + _dbPingTimer->cancel(); + + sAuthSocketMgr.StopNetwork(); // Close the Database Pool and library StopDB(); TC_LOG_INFO("server.authserver", "Halting process..."); - return 0; -} -/// Launch the Trinity server -extern int main(int argc, char** argv) -{ - try - { - return mainImpl(argc, argv); - } - catch (std::exception& ex) - { - std::cerr << "Top-level exception caught:" << ex.what() << "\n"; + signals.cancel(); -#ifndef NDEBUG // rethrow exception for the debugger - throw; -#else - return 1; -#endif - } + delete _dbPingTimer; + delete _ioService; + return 0; } /// Initialize connection to the database @@ -168,33 +198,15 @@ bool StartDB() { MySQL::Library_Init(); - std::string dbstring = sConfigMgr->GetStringDefault("LoginDatabaseInfo", ""); - if (dbstring.empty()) - { - TC_LOG_ERROR("server.authserver", "Database not specified"); - return false; - } - - int32 worker_threads = sConfigMgr->GetIntDefault("LoginDatabase.WorkerThreads", 1); - if (worker_threads < 1 || worker_threads > 32) - { - TC_LOG_ERROR("server.authserver", "Improper value specified for LoginDatabase.WorkerThreads, defaulting to 1."); - worker_threads = 1; - } - - int32 synch_threads = sConfigMgr->GetIntDefault("LoginDatabase.SynchThreads", 1); - if (synch_threads < 1 || synch_threads > 32) - { - TC_LOG_ERROR("server.authserver", "Improper value specified for LoginDatabase.SynchThreads, defaulting to 1."); - synch_threads = 1; - } + // Load databases + // NOTE: While authserver is singlethreaded you should keep synch_threads == 1. + // Increasing it is just silly since only 1 will be used ever. + DatabaseLoader loader("server.authserver", DatabaseLoader::DATABASE_NONE); + loader + .AddDatabase(LoginDatabase, "Login"); - // NOTE: While authserver is singlethreaded you should keep synch_threads == 1. Increasing it is just silly since only 1 will be used ever. - if (!LoginDatabase.Open(dbstring, uint8(worker_threads), uint8(synch_threads))) - { - TC_LOG_ERROR("server.authserver", "Cannot connect to database"); + if (!loader.Load()) return false; - } TC_LOG_INFO("server.authserver", "Started auth database connection pool."); sLog->SetRealmId(0); // Enables DB appenders when realm is set. @@ -211,7 +223,7 @@ void StopDB() void SignalHandler(const boost::system::error_code& error, int /*signalNumber*/) { if (!error) - _ioService.stop(); + _ioService->stop(); } void KeepDatabaseAliveHandler(const boost::system::error_code& error) @@ -221,31 +233,58 @@ void KeepDatabaseAliveHandler(const boost::system::error_code& error) TC_LOG_INFO("server.authserver", "Ping MySQL to keep connection alive"); LoginDatabase.KeepAlive(); - _dbPingTimer.expires_from_now(boost::posix_time::minutes(_dbPingInterval)); - _dbPingTimer.async_wait(KeepDatabaseAliveHandler); + _dbPingTimer->expires_from_now(boost::posix_time::minutes(_dbPingInterval)); + _dbPingTimer->async_wait(KeepDatabaseAliveHandler); } } -variables_map GetConsoleArguments(int argc, char** argv, std::string& configFile) +#if PLATFORM == PLATFORM_WINDOWS +void ServiceStatusWatcher(boost::system::error_code const& error) +{ + if (!error) + { + if (m_ServiceStatus == 0) + { + _ioService->stop(); + delete _serviceStatusWatchTimer; + } + else + { + _serviceStatusWatchTimer->expires_from_now(boost::posix_time::seconds(1)); + _serviceStatusWatchTimer->async_wait(ServiceStatusWatcher); + } + } +} +#endif + +variables_map GetConsoleArguments(int argc, char** argv, std::string& configFile, std::string& configService) { options_description all("Allowed options"); all.add_options() ("help,h", "print usage message") ("config,c", value<std::string>(&configFile)->default_value(_TRINITY_REALM_CONFIG), "use <arg> as configuration file") ; +#if PLATFORM == PLATFORM_WINDOWS + options_description win("Windows platform specific options"); + win.add_options() + ("service,s", value<std::string>(&configService)->default_value(""), "Windows service options: [install | uninstall]") + ; + + all.add(win); +#endif variables_map variablesMap; try { store(command_line_parser(argc, argv).options(all).allow_unregistered().run(), variablesMap); notify(variablesMap); } - catch (std::exception& e) { + catch (std::exception& e) + { std::cerr << e.what() << "\n"; } - if (variablesMap.count("help")) { + if (variablesMap.count("help")) std::cout << all << "\n"; - } return variablesMap; } diff --git a/src/server/authserver/authserver.conf.dist b/src/server/authserver/authserver.conf.dist index b7dee9ac08b..ba9cb5b23b4 100644 --- a/src/server/authserver/authserver.conf.dist +++ b/src/server/authserver/authserver.conf.dist @@ -9,6 +9,7 @@ # EXAMPLE CONFIG # AUTH SERVER SETTINGS # MYSQL SETTINGS +# UPDATE SETTINGS # LOGGING SYSTEM SETTINGS # ################################################################################################### @@ -158,6 +159,89 @@ Wrong.Password.Login.Logging = 0 ################################################################################################### ################################################################################################### +# UPDATE SETTINGS +# +# Updates.EnableDatabases +# Description: A mask that describes which databases shall be updated. +# +# Following flags are available +# DATABASE_LOGIN = 1, // Auth database +# +# Default: 0 - (All Disabled) +# 1 - (All Enabled) + +Updates.EnableDatabases = 0 + +# +# Updates.SourcePath +# Description: The path to your TrinityCore source directory. +# If the path is left empty, built-in CMAKE_SOURCE_DIR is used. +# Example: "../TrinityCore" +# Default: "" + +Updates.SourcePath = "" + +# +# Updates.SourcePath +# Description: The path to your mysql cli binary. +# If the path is left empty, built-in path from cmake is used. +# Example: "C:/Program Files/MySQL/MySQL Server 5.6/bin/mysql.exe" +# "mysql.exe" +# "/usr/bin/mysql" +# Default: "" + +Updates.MySqlCLIPath = "" + +# +# Updates.AutoSetup +# Description: Auto populate empty databases. +# Default: 1 - (Enabled) +# 0 - (Disabled) + +Updates.AutoSetup = 1 + +# +# Updates.Redundancy +# Description: Perform data redundancy checks through hashing +# to detect changes on sql updates and reapply it. +# Default: 1 - (Enabled) +# 0 - (Disabled) + +Updates.Redundancy = 1 + +# +# Updates.ArchivedRedundancy +# Description: Check hashes of archived updates (slows down startup). +# Default: 0 - (Disabled) +# 1 - (Enabled) + +Updates.ArchivedRedundancy = 0 + +# +# Updates.AllowRehash +# Description: Inserts the current file hash in the database if it is left empty. +# Useful if you want to mark a file as applied but you don't know its hash. +# Default: 1 - (Enabled) +# 0 - (Disabled) + +Updates.AllowRehash = 1 + +# +# Updates.CleanDeadRefMaxCount +# Description: Cleans dead/ orphaned references that occur if an update was removed or renamed and edited in one step. +# It only starts the clean up if the count of the missing updates is below or equal the Updates.CleanDeadRefMaxCount value. +# This way prevents erasing of the update history due to wrong source directory state (maybe wrong branch or bad revision). +# Disable this if you want to know if the database is in a possible "dirty state". +# Default: 3 - (Enabled) +# 0 - (Disabled) +# -1 - (Enabled - unlimited) + +Updates.CleanDeadRefMaxCount = 3 + +# +################################################################################################### + +################################################################################################### # # LOGGING SYSTEM SETTINGS # diff --git a/src/server/collision/CMakeLists.txt b/src/server/collision/CMakeLists.txt index e3c77736d5e..f394fe791be 100644 --- a/src/server/collision/CMakeLists.txt +++ b/src/server/collision/CMakeLists.txt @@ -35,6 +35,7 @@ include_directories( ${CMAKE_SOURCE_DIR}/dep/g3dlite/include ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour/Include + ${CMAKE_SOURCE_DIR}/dep/cppformat ${CMAKE_SOURCE_DIR}/src/server/shared ${CMAKE_SOURCE_DIR}/src/server/shared/Configuration ${CMAKE_SOURCE_DIR}/src/server/shared/Debugging @@ -79,6 +80,8 @@ include_directories( ${VALGRIND_INCLUDE_DIR} ) +GroupSources(${CMAKE_CURRENT_SOURCE_DIR}) + add_library(collision STATIC ${collision_STAT_SRCS} ${collision_STAT_PCH_SRC} diff --git a/src/server/collision/Management/MMapManager.cpp b/src/server/collision/Management/MMapManager.cpp index 170350d4de4..847b7bbd001 100644 --- a/src/server/collision/Management/MMapManager.cpp +++ b/src/server/collision/Management/MMapManager.cpp @@ -73,7 +73,7 @@ namespace MMAP delete [] fileName; - TC_LOG_INFO("maps", "MMAP:loadMapData: Loaded %03i.mmap", mapId); + TC_LOG_DEBUG("maps", "MMAP:loadMapData: Loaded %03i.mmap", mapId); // store inside our map list MMapData* mmap_data = new MMapData(mesh); @@ -156,7 +156,7 @@ namespace MMAP { mmap->mmapLoadedTiles.insert(std::pair<uint32, dtTileRef>(packedGridPos, tileRef)); ++loadedTiles; - TC_LOG_INFO("maps", "MMAP:loadMap: Loaded mmtile %03i[%02i, %02i] into %03i[%02i, %02i]", mapId, x, y, mapId, header->x, header->y); + TC_LOG_DEBUG("maps", "MMAP:loadMap: Loaded mmtile %03i[%02i, %02i] into %03i[%02i, %02i]", mapId, x, y, mapId, header->x, header->y); return true; } else @@ -205,7 +205,7 @@ namespace MMAP { mmap->mmapLoadedTiles.erase(packedGridPos); --loadedTiles; - TC_LOG_INFO("maps", "MMAP:unloadMap: Unloaded mmtile %03i[%02i, %02i] from %03i", mapId, x, y, mapId); + TC_LOG_DEBUG("maps", "MMAP:unloadMap: Unloaded mmtile %03i[%02i, %02i] from %03i", mapId, x, y, mapId); return true; } @@ -232,13 +232,13 @@ namespace MMAP else { --loadedTiles; - TC_LOG_INFO("maps", "MMAP:unloadMap: Unloaded mmtile %03i[%02i, %02i] from %03i", mapId, x, y, mapId); + TC_LOG_DEBUG("maps", "MMAP:unloadMap: Unloaded mmtile %03i[%02i, %02i] from %03i", mapId, x, y, mapId); } } delete mmap; loadedMMaps.erase(mapId); - TC_LOG_INFO("maps", "MMAP:unloadMap: Unloaded %03i.mmap", mapId); + TC_LOG_DEBUG("maps", "MMAP:unloadMap: Unloaded %03i.mmap", mapId); return true; } @@ -264,7 +264,7 @@ namespace MMAP dtFreeNavMeshQuery(query); mmap->navMeshQueries.erase(instanceId); - TC_LOG_INFO("maps", "MMAP:unloadMapInstance: Unloaded mapId %03u instanceId %u", mapId, instanceId); + TC_LOG_DEBUG("maps", "MMAP:unloadMapInstance: Unloaded mapId %03u instanceId %u", mapId, instanceId); return true; } @@ -295,7 +295,7 @@ namespace MMAP return NULL; } - TC_LOG_INFO("maps", "MMAP:GetNavMeshQuery: created dtNavMeshQuery for mapId %03u instanceId %u", mapId, instanceId); + TC_LOG_DEBUG("maps", "MMAP:GetNavMeshQuery: created dtNavMeshQuery for mapId %03u instanceId %u", mapId, instanceId); mmap->navMeshQueries.insert(std::pair<uint32, dtNavMeshQuery*>(instanceId, query)); } diff --git a/src/server/collision/Management/VMapManager2.cpp b/src/server/collision/Management/VMapManager2.cpp index f85fceb7b39..f9fcff96ad2 100644 --- a/src/server/collision/Management/VMapManager2.cpp +++ b/src/server/collision/Management/VMapManager2.cpp @@ -236,9 +236,11 @@ namespace VMAP { floor = info.ground_Z; ASSERT(floor < std::numeric_limits<float>::max()); + ASSERT(info.hitModel); type = info.hitModel->GetLiquidType(); // entry from LiquidType.dbc if (reqLiquidType && !(GetLiquidFlagsPtr(type) & reqLiquidType)) return false; + ASSERT(info.hitInstance); if (info.hitInstance->GetLiquidLevel(pos, info, level)) return true; } diff --git a/src/server/collision/Maps/MapTree.cpp b/src/server/collision/Maps/MapTree.cpp index 72435594ad0..b493ec18f5f 100644 --- a/src/server/collision/Maps/MapTree.cpp +++ b/src/server/collision/Maps/MapTree.cpp @@ -386,13 +386,12 @@ namespace VMAP { if (!iLoadedSpawns.count(referencedVal)) { -#ifdef VMAP_DEBUG if (referencedVal > iNTreeValues) { - TC_LOG_DEBUG("maps", "StaticMapTree::LoadMapTile() : invalid tree element (%u/%u)", referencedVal, iNTreeValues); + VMAP_ERROR_LOG("maps", "StaticMapTree::LoadMapTile() : invalid tree element (%u/%u) referenced in tile %s", referencedVal, iNTreeValues, tilefile.c_str()); continue; } -#endif + iTreeValues[referencedVal] = ModelInstance(spawn, model); iLoadedSpawns[referencedVal] = 1; } diff --git a/src/server/collision/Maps/TileAssembler.cpp b/src/server/collision/Maps/TileAssembler.cpp index ee978211577..ec7b759f975 100644 --- a/src/server/collision/Maps/TileAssembler.cpp +++ b/src/server/collision/Maps/TileAssembler.cpp @@ -24,7 +24,6 @@ #include <set> #include <iomanip> #include <sstream> -#include <iomanip> using G3D::Vector3; using G3D::AABox; diff --git a/src/server/collision/Models/GameObjectModel.cpp b/src/server/collision/Models/GameObjectModel.cpp index 05bd5d360c6..0355d2e848c 100644 --- a/src/server/collision/Models/GameObjectModel.cpp +++ b/src/server/collision/Models/GameObjectModel.cpp @@ -24,8 +24,6 @@ #include "GameObjectModel.h" #include "Log.h" #include "GameObject.h" -#include "Creature.h" -#include "TemporarySummon.h" #include "Object.h" #include "DBCStores.h" #include "World.h" diff --git a/src/server/collision/Models/ModelInstance.cpp b/src/server/collision/Models/ModelInstance.cpp index 025352eeb58..45440a99666 100644 --- a/src/server/collision/Models/ModelInstance.cpp +++ b/src/server/collision/Models/ModelInstance.cpp @@ -19,7 +19,6 @@ #include "ModelInstance.h" #include "WorldModel.h" #include "MapTree.h" -#include "VMapDefinitions.h" using G3D::Vector3; using G3D::Ray; diff --git a/src/server/collision/Models/WorldModel.cpp b/src/server/collision/Models/WorldModel.cpp index 3af120045cb..86ab9366c71 100644 --- a/src/server/collision/Models/WorldModel.cpp +++ b/src/server/collision/Models/WorldModel.cpp @@ -17,7 +17,6 @@ */ #include "WorldModel.h" -#include "ModelInstance.h" #include "VMapDefinitions.h" #include "MapTree.h" diff --git a/src/server/game/AI/CoreAI/GuardAI.cpp b/src/server/game/AI/CoreAI/GuardAI.cpp index 14e5faaf723..7fd1493cbde 100644 --- a/src/server/game/AI/CoreAI/GuardAI.cpp +++ b/src/server/game/AI/CoreAI/GuardAI.cpp @@ -19,9 +19,6 @@ #include "GuardAI.h" #include "Errors.h" #include "Player.h" -#include "ObjectAccessor.h" -#include "World.h" -#include "CreatureAIImpl.h" int GuardAI::Permissible(Creature const* creature) { diff --git a/src/server/game/AI/CoreAI/PassiveAI.cpp b/src/server/game/AI/CoreAI/PassiveAI.cpp index fb16d39dab3..5c482120b21 100644 --- a/src/server/game/AI/CoreAI/PassiveAI.cpp +++ b/src/server/game/AI/CoreAI/PassiveAI.cpp @@ -18,7 +18,6 @@ #include "PassiveAI.h" #include "Creature.h" -#include "TemporarySummon.h" PassiveAI::PassiveAI(Creature* c) : CreatureAI(c) { me->SetReactState(REACT_PASSIVE); } PossessedAI::PossessedAI(Creature* c) : CreatureAI(c) { me->SetReactState(REACT_PASSIVE); } diff --git a/src/server/game/AI/CoreAI/PetAI.cpp b/src/server/game/AI/CoreAI/PetAI.cpp index f532e4cd862..2522c97de25 100644 --- a/src/server/game/AI/CoreAI/PetAI.cpp +++ b/src/server/game/AI/CoreAI/PetAI.cpp @@ -20,12 +20,11 @@ #include "Errors.h" #include "Pet.h" #include "Player.h" -#include "DBCStores.h" #include "Spell.h" #include "ObjectAccessor.h" +#include "SpellHistory.h" #include "SpellMgr.h" #include "Creature.h" -#include "World.h" #include "Util.h" #include "Group.h" #include "SpellInfo.h" @@ -148,15 +147,15 @@ void PetAI::UpdateAI(uint32 diff) if (!spellInfo) continue; - if (me->GetCharmInfo() && me->GetCharmInfo()->GetGlobalCooldownMgr().HasGlobalCooldown(spellInfo)) + if (me->GetCharmInfo() && me->GetSpellHistory()->HasGlobalCooldown(spellInfo)) continue; if (spellInfo->IsPositive()) { if (spellInfo->CanBeUsedInCombat()) { - // check spell cooldown - if (me->HasSpellCooldown(spellInfo->Id)) + // check spell cooldown & school lock + if (!me->GetSpellHistory()->IsReady(spellInfo)) continue; // Check if we're in combat or commanded to attack diff --git a/src/server/game/AI/CoreAI/ReactorAI.cpp b/src/server/game/AI/CoreAI/ReactorAI.cpp index ebb57038737..9ab86047dc8 100644 --- a/src/server/game/AI/CoreAI/ReactorAI.cpp +++ b/src/server/game/AI/CoreAI/ReactorAI.cpp @@ -18,10 +18,6 @@ #include "ByteBuffer.h" #include "ReactorAI.h" -#include "Errors.h" -#include "Log.h" -#include "ObjectAccessor.h" -#include "CreatureAIImpl.h" int ReactorAI::Permissible(const Creature* creature) { diff --git a/src/server/game/AI/CoreAI/TotemAI.cpp b/src/server/game/AI/CoreAI/TotemAI.cpp index 983e212b33c..57e926744e2 100644 --- a/src/server/game/AI/CoreAI/TotemAI.cpp +++ b/src/server/game/AI/CoreAI/TotemAI.cpp @@ -19,10 +19,8 @@ #include "TotemAI.h" #include "Totem.h" #include "Creature.h" -#include "DBCStores.h" #include "ObjectAccessor.h" #include "SpellMgr.h" - #include "GridNotifiers.h" #include "GridNotifiersImpl.h" #include "CellImpl.h" diff --git a/src/server/game/AI/CoreAI/UnitAI.cpp b/src/server/game/AI/CoreAI/UnitAI.cpp index e7d39d715eb..5aa6ea8ea7a 100644 --- a/src/server/game/AI/CoreAI/UnitAI.cpp +++ b/src/server/game/AI/CoreAI/UnitAI.cpp @@ -141,7 +141,7 @@ void UnitAI::DoCast(uint32 spellId) { if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId)) { - bool playerOnly = (spellInfo->AttributesEx3 & SPELL_ATTR3_ONLY_TARGET_PLAYERS) != 0; + bool playerOnly = spellInfo->HasAttribute(SPELL_ATTR3_ONLY_TARGET_PLAYERS); target = SelectTarget(SELECT_TARGET_RANDOM, 0, spellInfo->GetMaxRange(false), playerOnly); } break; @@ -156,7 +156,7 @@ void UnitAI::DoCast(uint32 spellId) { if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId)) { - bool playerOnly = (spellInfo->AttributesEx3 & SPELL_ATTR3_ONLY_TARGET_PLAYERS) != 0; + bool playerOnly = spellInfo->HasAttribute(SPELL_ATTR3_ONLY_TARGET_PLAYERS); float range = spellInfo->GetMaxRange(false); DefaultTargetSelector targetSelector(me, range, playerOnly, -(int32)spellId); @@ -213,7 +213,7 @@ void UnitAI::FillAISpellInfo() if (!spellInfo) continue; - if (spellInfo->Attributes & SPELL_ATTR0_CASTABLE_WHILE_DEAD) + if (spellInfo->HasAttribute(SPELL_ATTR0_CASTABLE_WHILE_DEAD)) AIInfo->condition = AICOND_DIE; else if (spellInfo->IsPassive() || spellInfo->GetDuration() == -1) AIInfo->condition = AICOND_AGGRO; diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h index 9eafcc30c81..efe55830b1b 100644 --- a/src/server/game/AI/CoreAI/UnitAI.h +++ b/src/server/game/AI/CoreAI/UnitAI.h @@ -128,7 +128,7 @@ class UnitAI virtual void InitializeAI() { if (!me->isDead()) Reset(); } - virtual void Reset() { }; + virtual void Reset() { } // Called when unit is charmed virtual void OnCharmed(bool apply) = 0; diff --git a/src/server/game/AI/CreatureAISelector.cpp b/src/server/game/AI/CreatureAISelector.cpp index 9d025e3c2e2..07bd49bdcc6 100644 --- a/src/server/game/AI/CreatureAISelector.cpp +++ b/src/server/game/AI/CreatureAISelector.cpp @@ -21,7 +21,6 @@ #include "PassiveAI.h" #include "MovementGenerator.h" -#include "Pet.h" #include "TemporarySummon.h" #include "CreatureAIFactory.h" #include "ScriptMgr.h" diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp index 135a0fcee93..aa7ec3b847f 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp @@ -17,14 +17,12 @@ */ #include "ScriptedCreature.h" -#include "Item.h" #include "Spell.h" #include "GridNotifiers.h" #include "GridNotifiersImpl.h" #include "Cell.h" #include "CellImpl.h" #include "ObjectMgr.h" -#include "TemporarySummon.h" // Spell summary for ScriptedAI::SelectSpell struct TSpellSummary diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 76f08952664..21a15fa4f99 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -21,11 +21,7 @@ #include "GridDefines.h" #include "GridNotifiers.h" #include "SpellMgr.h" -#include "GridNotifiersImpl.h" #include "Cell.h" -#include "CellImpl.h" -#include "InstanceScript.h" -#include "ScriptedCreature.h" #include "Group.h" #include "SmartAI.h" #include "ScriptMgr.h" @@ -585,7 +581,11 @@ void SmartAI::JustDied(Unit* killer) { GetScript()->ProcessEventsFor(SMART_EVENT_DEATH, killer); if (HasEscortState(SMART_ESCORT_ESCORTING)) + { EndPath(true); + me->StopMoving();//force stop + me->GetMotionMaster()->MoveIdle(); + } } void SmartAI::KilledUnit(Unit* victim) diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index e7e5f53f7a2..267c038faaf 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -35,7 +35,6 @@ #include "SmartScript.h" #include "SpellMgr.h" #include "Vehicle.h" -#include "MoveSplineInit.h" #include "GameEventMgr.h" SmartScript::SmartScript() @@ -61,6 +60,7 @@ SmartScript::~SmartScript() delete itr->second; delete mTargetStorage; + mCounterList.clear(); } void SmartScript::OnReset() @@ -77,6 +77,7 @@ void SmartScript::OnReset() } ProcessEventsFor(SMART_EVENT_RESET); mLastInvoker.Clear(); + mCounterList.clear(); } void SmartScript::ProcessEventsFor(SMART_EVENT e, Unit* unit, uint32 var0, uint32 var1, bool bvar, const SpellInfo* spell, GameObject* gob) @@ -1318,6 +1319,35 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u ENSURE_AI(SmartAI, me->AI())->SetSwim(e.action.setSwim.swim != 0); break; } + case SMART_ACTION_SET_COUNTER: + { + if (ObjectList* targets = GetTargets(e, unit)) + { + for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) + { + if (IsCreature(*itr)) + { + if (SmartAI* ai = CAST_AI(SmartAI, (*itr)->ToCreature()->AI())) + ai->GetScript()->StoreCounter(e.action.setCounter.counterId, e.action.setCounter.value, e.action.setCounter.reset); + else + TC_LOG_ERROR("sql.sql", "SmartScript: Action target for SMART_ACTION_SET_COUNTER is not using SmartAI, skipping"); + } + else if (IsGameObject(*itr)) + { + if (SmartGameObjectAI* ai = CAST_AI(SmartGameObjectAI, (*itr)->ToGameObject()->AI())) + ai->GetScript()->StoreCounter(e.action.setCounter.counterId, e.action.setCounter.value, e.action.setCounter.reset); + else + TC_LOG_ERROR("sql.sql", "SmartScript: Action target for SMART_ACTION_SET_COUNTER is not using SmartGameObjectAI, skipping"); + } + } + + delete targets; + } + else + StoreCounter(e.action.setCounter.counterId, e.action.setCounter.value, e.action.setCounter.reset); + + break; + } case SMART_ACTION_WP_START: { if (!IsSmart()) @@ -3167,7 +3197,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui std::list<Creature*> list; me->GetCreatureListWithEntryInGrid(list, e.event.distance.entry, (float)e.event.distance.dist); - if (list.size() > 0) + if (!list.empty()) creature = list.front(); } @@ -3198,7 +3228,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui std::list<GameObject*> list; me->GetGameObjectListWithEntryInGrid(list, e.event.distance.entry, (float)e.event.distance.dist); - if (list.size() > 0) + if (!list.empty()) gameobject = list.front(); } @@ -3207,6 +3237,10 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui break; } + case SMART_EVENT_COUNTER_SET: + if (GetCounterId(e.event.counter.id) != 0 && GetCounterValue(e.event.counter.id) == e.event.counter.value) + ProcessTimedAction(e, e.event.counter.cooldownMin, e.event.counter.cooldownMax); + break; default: TC_LOG_ERROR("sql.sql", "SmartScript::ProcessEvent: Unhandled Event type %u", e.GetEventType()); break; diff --git a/src/server/game/AI/SmartScripts/SmartScript.h b/src/server/game/AI/SmartScripts/SmartScript.h index ed1c63de207..a3d75f1889b 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.h +++ b/src/server/game/AI/SmartScripts/SmartScript.h @@ -145,6 +145,36 @@ class SmartScript return NULL; } + void StoreCounter(uint32 id, uint32 value, uint32 reset) + { + CounterMap::const_iterator itr = mCounterList.find(id); + if (itr != mCounterList.end()) + { + if (reset == 0) + value += GetCounterValue(id); + mCounterList.erase(id); + } + + mCounterList.insert(std::make_pair(id, value)); + ProcessEventsFor(SMART_EVENT_COUNTER_SET); + } + + uint32 GetCounterId(uint32 id) + { + CounterMap::iterator itr = mCounterList.find(id); + if (itr != mCounterList.end()) + return itr->first; + return 0; + } + + uint32 GetCounterValue(uint32 id) + { + CounterMap::iterator itr = mCounterList.find(id); + if (itr != mCounterList.end()) + return itr->second; + return 0; + } + GameObject* FindGameObjectNear(WorldObject* searchObject, uint32 guid) const { GameObject* gameObject = NULL; @@ -205,6 +235,8 @@ class SmartScript void SetScript9(SmartScriptHolder& e, uint32 entry); Unit* GetLastInvoker(); ObjectGuid mLastInvoker; + typedef std::unordered_map<uint32, uint32> CounterMap; + CounterMap mCounterList; private: void IncPhase(int32 p = 1) diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index becc3bd92cd..37187d9b04c 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -17,18 +17,12 @@ #include "DatabaseEnv.h" #include "ObjectMgr.h" -#include "ObjectDefines.h" #include "GridDefines.h" #include "GridNotifiers.h" #include "SpellMgr.h" -#include "GridNotifiersImpl.h" #include "Cell.h" -#include "CellImpl.h" -#include "InstanceScript.h" -#include "ScriptedCreature.h" #include "GameEventMgr.h" #include "CreatureTextMgr.h" -#include "SpellMgr.h" #include "SpellInfo.h" #include "SmartScriptMgr.h" @@ -695,6 +689,22 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) return false; } break; + case SMART_EVENT_COUNTER_SET: + if (!IsMinMaxValid(e, e.event.counter.cooldownMin, e.event.counter.cooldownMax)) + return false; + + if (e.event.counter.id == 0) + { + TC_LOG_ERROR("sql.sql", "SmartAIMgr: Event SMART_EVENT_COUNTER_SET using invalid counter id %u, skipped.", e.event.counter.id); + return false; + } + + if (e.event.counter.value == 0) + { + TC_LOG_ERROR("sql.sql", "SmartAIMgr: Event SMART_EVENT_COUNTER_SET using invalid value %u, skipped.", e.event.counter.value); + return false; + } + break; case SMART_EVENT_LINK: case SMART_EVENT_GO_STATE_CHANGED: case SMART_EVENT_GO_EVENT_INFORM: @@ -998,6 +1008,20 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) return false; } break; + case SMART_ACTION_SET_COUNTER: + if (e.action.setCounter.counterId == 0) + { + TC_LOG_ERROR("sql.sql", "SmartAIMgr: Entry %d SourceType %u Event %u Action %u uses wrong counterId %u, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.setCounter.counterId); + return false; + } + + if (e.action.setCounter.value == 0) + { + TC_LOG_ERROR("sql.sql", "SmartAIMgr: Entry %d SourceType %u Event %u Action %u uses wrong value %u, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.setCounter.value); + return false; + } + + break; case SMART_ACTION_INSTALL_AI_TEMPLATE: if (e.action.installTtemplate.id >= SMARTAI_TEMPLATE_END) { diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 0ed8542c72a..1f4891d6c24 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -167,8 +167,9 @@ enum SMART_EVENT SMART_EVENT_FRIENDLY_HEALTH_PCT = 74, // minHpPct, maxHpPct, repeatMin, repeatMax SMART_EVENT_DISTANCE_CREATURE = 75, // guid, entry, distance, repeat SMART_EVENT_DISTANCE_GAMEOBJECT = 76, // guid, entry, distance, repeat + SMART_EVENT_COUNTER_SET = 77, // id, value, cooldownMin, cooldownMax - SMART_EVENT_END = 77 + SMART_EVENT_END = 78 }; struct SmartEvent @@ -398,6 +399,14 @@ struct SmartEvent struct { + uint32 id; + uint32 value; + uint32 cooldownMin; + uint32 cooldownMax; + } counter; + + struct + { uint32 param1; uint32 param2; uint32 param3; @@ -479,7 +488,7 @@ enum SMART_ACTION SMART_ACTION_SET_FLY = 60, // 0/1 SMART_ACTION_SET_SWIM = 61, // 0/1 SMART_ACTION_TELEPORT = 62, // mapID, - // 63 unused + SMART_ACTION_SET_COUNTER = 63, // id, value, reset (0/1) SMART_ACTION_STORE_TARGET_LIST = 64, // varID, SMART_ACTION_WP_RESUME = 65, // none SMART_ACTION_SET_ORIENTATION = 66, // @@ -824,6 +833,13 @@ struct SmartAction struct { + uint32 counterId; + uint32 value; + uint32 reset; + } setCounter; + + struct + { uint32 id; uint32 number; } storeVar; @@ -1294,6 +1310,7 @@ const uint32 SmartAIEventMask[SMART_EVENT_END][2] = {SMART_EVENT_FRIENDLY_HEALTH_PCT, SMART_SCRIPT_TYPE_MASK_CREATURE }, {SMART_EVENT_DISTANCE_CREATURE, SMART_SCRIPT_TYPE_MASK_CREATURE }, {SMART_EVENT_DISTANCE_GAMEOBJECT, SMART_SCRIPT_TYPE_MASK_CREATURE }, + {SMART_EVENT_COUNTER_SET, SMART_SCRIPT_TYPE_MASK_CREATURE + SMART_SCRIPT_TYPE_MASK_GAMEOBJECT } }; enum SmartEventFlags diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index 8f9db8d5a27..339788dee01 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -802,6 +802,7 @@ class RBACData * @return Success or failure (with reason) to grant the permission * * Example Usage: + * @code * // previously defined "RBACData* rbac" with proper initialization * uint32 permissionId = 2; * if (rbac->GrantRole(permissionId) == RBAC_IN_DENIED_LIST) @@ -825,6 +826,7 @@ class RBACData * @return Success or failure (with reason) to deny the permission * * Example Usage: + * @code * // previously defined "RBACData* rbac" with proper initialization * uint32 permissionId = 2; * if (rbac->DenyRole(permissionId) == RBAC_ID_DOES_NOT_EXISTS) @@ -849,6 +851,7 @@ class RBACData * @return Success or failure (with reason) to remove the permission * * Example Usage: + * @code * // previously defined "RBACData* rbac" with proper initialization * uint32 permissionId = 2; * if (rbac->RevokeRole(permissionId) == RBAC_OK) @@ -939,9 +942,6 @@ class RBACData * * Given a list of permissions, gets all the inherited permissions * @param permissions The list of permissions to expand - * - * @return new list of permissions containing original permissions and - * all other pemissions that are linked to the original ones */ void ExpandPermissions(RBACPermissionContainer& permissions); diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index 4f4302f823c..51106d7cfe1 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -1508,7 +1508,7 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement) if (achievement->flags & ACHIEVEMENT_FLAG_COUNTER || HasAchieved(achievement->ID)) return; - TC_LOG_INFO("achievement", "AchievementMgr::CompletedAchievement(%u). Player: %s (%u)", + TC_LOG_DEBUG("achievement", "AchievementMgr::CompletedAchievement(%u). Player: %s (%u)", achievement->ID, m_player->GetName().c_str(), m_player->GetGUIDLow()); SendAchievementEarned(achievement); diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp index e8c91479cc2..16d5f4b6959 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp @@ -30,7 +30,6 @@ #include "Item.h" #include "Language.h" #include "Log.h" -#include <vector> enum eAuctionHouse { @@ -440,8 +439,6 @@ bool AuctionHouseObject::RemoveAuction(AuctionEntry* auction) // we need to delete the entry, it is not referenced any more delete auction; - auction = NULL; - return wasInMap; } diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp b/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp index bd5defe2bc3..64463948574 100644 --- a/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp +++ b/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp @@ -64,7 +64,7 @@ void AuctionBotBuyer::LoadConfig() } } -void AuctionBotBuyer::LoadBuyerValues(BuyerConfiguration& config) +void AuctionBotBuyer::LoadBuyerValues(BuyerConfiguration& /* config */) { } diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp index ba52c8db2f5..a22db18fa7e 100644 --- a/src/server/game/Battlefield/Battlefield.cpp +++ b/src/server/game/Battlefield/Battlefield.cpp @@ -21,7 +21,6 @@ #include "CellImpl.h" #include "CreatureTextMgr.h" #include "GridNotifiers.h" -#include "GridNotifiersImpl.h" #include "Group.h" #include "GroupMgr.h" #include "Map.h" diff --git a/src/server/game/Battlefield/BattlefieldMgr.cpp b/src/server/game/Battlefield/BattlefieldMgr.cpp index 066588aa6e8..0060cf4f304 100644 --- a/src/server/game/Battlefield/BattlefieldMgr.cpp +++ b/src/server/game/Battlefield/BattlefieldMgr.cpp @@ -17,7 +17,6 @@ #include "BattlefieldMgr.h" #include "BattlefieldWG.h" -#include "ObjectMgr.h" #include "Player.h" BattlefieldMgr::BattlefieldMgr() diff --git a/src/server/game/Battlegrounds/ArenaTeam.cpp b/src/server/game/Battlegrounds/ArenaTeam.cpp index 7ed05205f39..3b7e9ac3f33 100644 --- a/src/server/game/Battlegrounds/ArenaTeam.cpp +++ b/src/server/game/Battlegrounds/ArenaTeam.cpp @@ -179,7 +179,7 @@ bool ArenaTeam::AddMember(ObjectGuid playerGuid) player->SetArenaTeamInfoField(GetSlot(), ARENA_TEAM_MEMBER, 1); } - TC_LOG_INFO("bg.arena", "Player: %s [%s] joined arena team type: %u [Id: %u, Name: %s].", playerName.c_str(), playerGuid.ToString().c_str(), GetType(), GetId(), GetName().c_str()); + TC_LOG_DEBUG("bg.arena", "Player: %s [%s] joined arena team type: %u [Id: %u, Name: %s].", playerName.c_str(), playerGuid.ToString().c_str(), GetType(), GetId(), GetName().c_str()); return true; } diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index e091df160a3..3e9b68d4611 100644 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -26,12 +26,10 @@ #include "Formulas.h" #include "GridNotifiersImpl.h" #include "Group.h" -#include "MapManager.h" #include "Object.h" #include "ObjectMgr.h" #include "Player.h" #include "ReputationMgr.h" -#include "SpellAuraEffects.h" #include "SpellAuras.h" #include "Util.h" #include "WorldPacket.h" @@ -510,7 +508,7 @@ inline void Battleground::_ProcessJoin(uint32 diff) if (!aura->IsPermanent() && aura->GetDuration() <= 30*IN_MILLISECONDS && aurApp->IsPositive() - && (!(aura->GetSpellInfo()->Attributes & SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY)) + && (!aura->GetSpellInfo()->HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY)) && (!aura->HasEffectType(SPELL_AURA_MOD_INVISIBILITY))) player->RemoveAura(iter); else diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp index e98cf979cb6..95a51f6d915 100644 --- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp +++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp @@ -22,7 +22,6 @@ #include "World.h" #include "WorldPacket.h" -#include "ArenaTeam.h" #include "BattlegroundMgr.h" #include "BattlegroundAV.h" #include "BattlegroundAB.h" @@ -37,7 +36,6 @@ #include "BattlegroundIC.h" #include "Chat.h" #include "Map.h" -#include "MapInstanced.h" #include "MapManager.h" #include "Player.h" #include "GameEventMgr.h" diff --git a/src/server/game/Battlegrounds/BattlegroundQueue.cpp b/src/server/game/Battlegrounds/BattlegroundQueue.cpp index 05bcc08f433..43b7acde925 100644 --- a/src/server/game/Battlegrounds/BattlegroundQueue.cpp +++ b/src/server/game/Battlegrounds/BattlegroundQueue.cpp @@ -24,8 +24,8 @@ #include "Group.h" #include "Log.h" #include "Language.h" -#include "ObjectMgr.h" #include "Player.h" +#include "ObjectAccessor.h" /*********************************************************/ /*** BATTLEGROUND QUEUE SYSTEM ***/ @@ -889,7 +889,8 @@ void BattlegroundQueue::BattlegroundQueueUpdate(uint32 /*diff*/, BattlegroundTyp // (after what time the ratings aren't taken into account when making teams) then // the discard time is current_time - time_to_discard, teams that joined after that, will have their ratings taken into account // else leave the discard time on 0, this way all ratings will be discarded - uint32 discardTime = getMSTime() - sBattlegroundMgr->GetRatingDiscardTimer(); + // this has to be signed value - when the server starts, this value would be negative and thus overflow + int32 discardTime = getMSTime() - sBattlegroundMgr->GetRatingDiscardTimer(); // we need to find 2 teams which will play next game GroupsQueueType::iterator itr_teams[BG_TEAMS_COUNT]; @@ -905,7 +906,7 @@ void BattlegroundQueue::BattlegroundQueueUpdate(uint32 /*diff*/, BattlegroundTyp // if group match conditions, then add it to pool if (!(*itr2)->IsInvitedToBGInstanceGUID && (((*itr2)->ArenaMatchmakerRating >= arenaMinRating && (*itr2)->ArenaMatchmakerRating <= arenaMaxRating) - || (*itr2)->JoinTime < discardTime)) + || (int32)(*itr2)->JoinTime < discardTime)) { itr_teams[found++] = itr2; team = i; @@ -923,7 +924,7 @@ void BattlegroundQueue::BattlegroundQueueUpdate(uint32 /*diff*/, BattlegroundTyp { if (!(*itr3)->IsInvitedToBGInstanceGUID && (((*itr3)->ArenaMatchmakerRating >= arenaMinRating && (*itr3)->ArenaMatchmakerRating <= arenaMaxRating) - || (*itr3)->JoinTime < discardTime) + || (int32)(*itr3)->JoinTime < discardTime) && (*itr_teams[0])->ArenaTeamId != (*itr3)->ArenaTeamId) { itr_teams[found++] = itr3; diff --git a/src/server/game/Battlegrounds/BattlegroundQueue.h b/src/server/game/Battlegrounds/BattlegroundQueue.h index b0adaa4078d..7e8debfd24d 100644 --- a/src/server/game/Battlegrounds/BattlegroundQueue.h +++ b/src/server/game/Battlegrounds/BattlegroundQueue.h @@ -106,7 +106,7 @@ class BattlegroundQueue class SelectionPool { public: - SelectionPool(): PlayerCount(0) { }; + SelectionPool(): PlayerCount(0) { } void Init(); bool AddGroup(GroupQueueInfo* ginfo, uint32 desiredCount); bool KickGroup(uint32 size); diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp index 2aec542effb..00b6862369d 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp @@ -17,9 +17,7 @@ */ #include "BattlegroundAB.h" -#include "World.h" #include "WorldPacket.h" -#include "ObjectMgr.h" #include "BattlegroundMgr.h" #include "Creature.h" #include "Language.h" diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp index b6569a9f52d..a92cda0817b 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp @@ -26,7 +26,6 @@ #include "Language.h" #include "Player.h" #include "ScriptedCreature.h" -#include "SpellAuras.h" #include "WorldSession.h" BattlegroundAV::BattlegroundAV() diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp index 92f5c72fdae..ef2e2b15411 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp @@ -18,7 +18,6 @@ #include "BattlegroundEY.h" #include "ObjectMgr.h" -#include "World.h" #include "WorldPacket.h" #include "BattlegroundMgr.h" #include "Creature.h" diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp index ef5a604c509..3432c740c1f 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp @@ -25,7 +25,6 @@ #include "ObjectMgr.h" #include "Vehicle.h" #include "Transport.h" -#include "WorldSession.h" #include "ScriptedCreature.h" BattlegroundIC::BattlegroundIC() diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp index cbc0c0e445d..f267bf7c6c6 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp @@ -23,7 +23,6 @@ #include "Player.h" #include "ScriptedCreature.h" #include "WorldPacket.h" -#include "WorldSession.h" BattlegroundSA::BattlegroundSA() { @@ -100,7 +99,7 @@ bool BattlegroundSA::ResetObjs() for (uint8 i = BG_SA_MAXNPC; i < BG_SA_MAXNPC + BG_SA_MAX_GY; i++) DelCreature(i); - for (uint8 i = 0; i < 6; i++) + for (uint8 i = 0; i < MAX_GATES; ++i) GateStatus[i] = BG_SA_GATE_OK; if (!AddCreature(BG_SA_NpcEntries[BG_SA_NPC_KANRETHAD], BG_SA_NPC_KANRETHAD, BG_SA_NpcSpawnlocs[BG_SA_NPC_KANRETHAD])) @@ -180,9 +179,6 @@ bool BattlegroundSA::ResetObjs() GetBGObject(BG_SA_TITAN_RELIC)->SetFaction(atF); GetBGObject(BG_SA_TITAN_RELIC)->Refresh(); - for (uint8 i = 0; i <= 5; i++) - GateStatus[i] = BG_SA_GATE_OK; - TotalTime = 0; ShipsStarted = false; @@ -222,6 +218,8 @@ bool BattlegroundSA::ResetObjs() GetBGObject(i)->SetFaction(atF); } + UpdateObjectInteractionFlags(); + for (uint8 i = BG_SA_BOMB; i < BG_SA_MAXOBJ; i++) { if (!AddObject(i, BG_SA_ObjEntries[BG_SA_BOMB], BG_SA_ObjSpawnlocs[i], 0, 0, 0, 0, RESPAWN_ONE_DAY)) @@ -482,28 +480,7 @@ void BattlegroundSA::AddPlayer(Player* player) SendTransportInit(player); - if (!ShipsStarted) - { - if (player->GetTeamId() == Attackers) - { - player->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT); - - if (urand(0, 1)) - player->TeleportTo(607, 2682.936f, -830.368f, 15.0f, 2.895f, 0); - else - player->TeleportTo(607, 2577.003f, 980.261f, 15.0f, 0.807f, 0); - - } - else - player->TeleportTo(607, 1209.7f, -65.16f, 70.1f, 0.0f, 0); - } - else - { - if (player->GetTeamId() == Attackers) - player->TeleportTo(607, 1600.381f, -106.263f, 8.8745f, 3.78f, 0); - else - player->TeleportTo(607, 1209.7f, -65.16f, 70.1f, 0.0f, 0); - } + TeleportToEntrancePosition(player); } void BattlegroundSA::RemovePlayer(Player* /*player*/, ObjectGuid /*guid*/, uint32 /*team*/) { } @@ -534,23 +511,31 @@ void BattlegroundSA::TeleportPlayers() player->ResetAllPowers(); player->CombatStopWithPets(true); - for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) - if (Player* p = ObjectAccessor::FindPlayer(itr->first)) - p->CastSpell(p, SPELL_PREPARATION, true); + player->CastSpell(player, SPELL_PREPARATION, true); - if (player->GetTeamId() == Attackers) - { - player->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT); + TeleportToEntrancePosition(player); + } + } +} - if (urand(0, 1)) - player->TeleportTo(607, 2682.936f, -830.368f, 15.0f, 2.895f, 0); - else - player->TeleportTo(607, 2577.003f, 980.261f, 15.0f, 0.807f, 0); - } +void BattlegroundSA::TeleportToEntrancePosition(Player* player) +{ + if (player->GetTeamId() == Attackers) + { + if (!ShipsStarted) + { + player->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT); + + if (urand(0, 1)) + player->TeleportTo(607, 2682.936f, -830.368f, 15.0f, 2.895f, 0); else - player->TeleportTo(607, 1209.7f, -65.16f, 70.1f, 0.0f, 0); + player->TeleportTo(607, 2577.003f, 980.261f, 15.0f, 0.807f, 0); } + else + player->TeleportTo(607, 1600.381f, -106.263f, 8.8745f, 3.78f, 0); } + else + player->TeleportTo(607, 1209.7f, -65.16f, 70.1f, 0.0f, 0); } void BattlegroundSA::ProcessEvent(WorldObject* obj, uint32 eventId, WorldObject* invoker /*= NULL*/) @@ -629,6 +614,8 @@ void BattlegroundSA::ProcessEvent(WorldObject* obj, uint32 eventId, WorldObject* } } } + + UpdateObjectInteractionFlags(); } else break; @@ -712,7 +699,7 @@ WorldSafeLocsEntry const* BattlegroundSA::GetClosestGraveYard(Player* player) safeloc = BG_SA_GYEntries[BG_SA_DEFENDER_LAST_GY]; closest = sWorldSafeLocsStore.LookupEntry(safeloc); - nearest = std::sqrt((closest->x - x)*(closest->x - x) + (closest->y - y)*(closest->y - y) + (closest->z - z)*(closest->z - z)); + nearest = player->GetExactDistSq(closest->x, closest->y, closest->z); for (uint8 i = BG_SA_RIGHT_CAPTURABLE_GY; i < BG_SA_MAX_GY; i++) { @@ -720,7 +707,7 @@ WorldSafeLocsEntry const* BattlegroundSA::GetClosestGraveYard(Player* player) continue; ret = sWorldSafeLocsStore.LookupEntry(BG_SA_GYEntries[i]); - dist = std::sqrt((ret->x - x)*(ret->x - x) + (ret->y - y)*(ret->y - y) + (ret->z - z)*(ret->z - z)); + dist = player->GetExactDistSq(ret->x, ret->y, ret->z); if (dist < nearest) { closest = ret; @@ -739,23 +726,66 @@ void BattlegroundSA::SendTime() UpdateWorldState(BG_SA_TIMER_SEC_DECS, ((end_of_round%60000)%10000)/1000); } +bool BattlegroundSA::CanInteractWithObject(uint32 objectId) +{ + switch (objectId) + { + case BG_SA_TITAN_RELIC: + if (GateStatus[BG_SA_ANCIENT_GATE] != BG_SA_GATE_DESTROYED || GateStatus[BG_SA_YELLOW_GATE] != BG_SA_GATE_DESTROYED) + return false; + // no break + case BG_SA_CENTRAL_FLAG: + if (GateStatus[BG_SA_RED_GATE] != BG_SA_GATE_DESTROYED && GateStatus[BG_SA_PURPLE_GATE] != BG_SA_GATE_DESTROYED) + return false; + // no break + case BG_SA_LEFT_FLAG: + case BG_SA_RIGHT_FLAG: + if (GateStatus[BG_SA_GREEN_GATE] != BG_SA_GATE_DESTROYED && GateStatus[BG_SA_BLUE_GATE] != BG_SA_GATE_DESTROYED) + return false; + break; + default: + ASSERT(false); + break; + } + + return true; +} + +void BattlegroundSA::UpdateObjectInteractionFlags(uint32 objectId) +{ + if (GameObject* go = GetBGObject(objectId)) + { + if (CanInteractWithObject(objectId)) + go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + else + go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + } +} + +void BattlegroundSA::UpdateObjectInteractionFlags() +{ + for (uint8 i = BG_SA_CENTRAL_FLAG; i <= BG_SA_LEFT_FLAG; ++i) + UpdateObjectInteractionFlags(i); + UpdateObjectInteractionFlags(BG_SA_TITAN_RELIC); +} + void BattlegroundSA::EventPlayerClickedOnFlag(Player* source, GameObject* go) { switch (go->GetEntry()) { case 191307: case 191308: - if (GateStatus[BG_SA_GREEN_GATE] == BG_SA_GATE_DESTROYED || GateStatus[BG_SA_BLUE_GATE] == BG_SA_GATE_DESTROYED) + if (CanInteractWithObject(BG_SA_LEFT_FLAG)) CaptureGraveyard(BG_SA_LEFT_CAPTURABLE_GY, source); break; case 191305: case 191306: - if (GateStatus[BG_SA_GREEN_GATE] == BG_SA_GATE_DESTROYED || GateStatus[BG_SA_BLUE_GATE] == BG_SA_GATE_DESTROYED) + if (CanInteractWithObject(BG_SA_RIGHT_FLAG)) CaptureGraveyard(BG_SA_RIGHT_CAPTURABLE_GY, source); break; case 191310: case 191309: - if ((GateStatus[BG_SA_GREEN_GATE] == BG_SA_GATE_DESTROYED || GateStatus[BG_SA_BLUE_GATE] == BG_SA_GATE_DESTROYED) && (GateStatus[BG_SA_RED_GATE] == BG_SA_GATE_DESTROYED || GateStatus[BG_SA_PURPLE_GATE] == BG_SA_GATE_DESTROYED)) + if (CanInteractWithObject(BG_SA_CENTRAL_FLAG)) CaptureGraveyard(BG_SA_CENTRAL_CAPTURABLE_GY, source); break; default: @@ -857,10 +887,7 @@ void BattlegroundSA::TitanRelicActivated(Player* clicker) if (!clicker) return; - if (GateStatus[BG_SA_ANCIENT_GATE] == BG_SA_GATE_DESTROYED && - GateStatus[BG_SA_YELLOW_GATE] == BG_SA_GATE_DESTROYED && - (GateStatus[BG_SA_PURPLE_GATE] == BG_SA_GATE_DESTROYED || GateStatus[BG_SA_RED_GATE] == BG_SA_GATE_DESTROYED) && - (GateStatus[BG_SA_GREEN_GATE] == BG_SA_GATE_DESTROYED || GateStatus[BG_SA_BLUE_GATE] == BG_SA_GATE_DESTROYED)) + if (CanInteractWithObject(BG_SA_TITAN_RELIC)) { if (clicker->GetTeamId() == Attackers) { diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h index 7f9a656c979..118cea41a7b 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h @@ -620,6 +620,7 @@ class BattlegroundSA : public Battleground * -Teleport all players to good location */ void TeleportPlayers(); + void TeleportToEntrancePosition(Player* player); /** * \brief Called on start and between the two round * -Update faction of all vehicle @@ -627,6 +628,11 @@ class BattlegroundSA : public Battleground void OverrideGunFaction(); /// Set selectable or not demolisher, called on battle start, when boats arrive to dock void DemolisherStartState(bool start); + /// Checks if a player can interact with the given object + bool CanInteractWithObject(uint32 objectId); + /// Updates interaction flags of specific objects + void UpdateObjectInteractionFlags(uint32 objectId); + void UpdateObjectInteractionFlags(); /** * \brief Called when a gate is destroy * -Give honor to player witch destroy it diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp index 1fff334a27c..378ce22ba3e 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp @@ -17,14 +17,12 @@ */ #include "BattlegroundWS.h" -#include "Creature.h" #include "GameObject.h" #include "Language.h" #include "Object.h" #include "ObjectMgr.h" #include "BattlegroundMgr.h" #include "Player.h" -#include "World.h" #include "WorldPacket.h" // these variables aren't used outside of this file, so declare them only here diff --git a/src/server/game/CMakeLists.txt b/src/server/game/CMakeLists.txt index eb8627efa44..91380b085ea 100644 --- a/src/server/game/CMakeLists.txt +++ b/src/server/game/CMakeLists.txt @@ -110,6 +110,7 @@ include_directories( ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Recast/Include ${CMAKE_SOURCE_DIR}/dep/g3dlite/include ${CMAKE_SOURCE_DIR}/dep/SFMT + ${CMAKE_SOURCE_DIR}/dep/cppformat ${CMAKE_SOURCE_DIR}/dep/zlib ${CMAKE_SOURCE_DIR}/src/server/collision ${CMAKE_SOURCE_DIR}/src/server/collision/Management @@ -128,6 +129,7 @@ include_directories( ${CMAKE_SOURCE_DIR}/src/server/shared/Networking ${CMAKE_SOURCE_DIR}/src/server/shared/Packets ${CMAKE_SOURCE_DIR}/src/server/shared/Threading + ${CMAKE_SOURCE_DIR}/src/server/shared/Updater ${CMAKE_SOURCE_DIR}/src/server/shared/Utilities ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/Accounts @@ -206,6 +208,8 @@ include_directories( ${VALGRIND_INCLUDE_DIR} ) +GroupSources(${CMAKE_CURRENT_SOURCE_DIR}) + add_library(game STATIC ${game_STAT_SRCS} ${game_STAT_PCH_SRC} diff --git a/src/server/game/Chat/Channels/Channel.h b/src/server/game/Chat/Channels/Channel.h index 9b9c2f1e514..0f2a940e3b4 100644 --- a/src/server/game/Chat/Channels/Channel.h +++ b/src/server/game/Chat/Channels/Channel.h @@ -184,7 +184,7 @@ class Channel void DeVoice(ObjectGuid guid1, ObjectGuid guid2); void JoinNotify(ObjectGuid guid); // invisible notify void LeaveNotify(ObjectGuid guid); // invisible notify - void SetOwnership(bool ownership) { _ownership = ownership; }; + void SetOwnership(bool ownership) { _ownership = ownership; } static void CleanOldChannelsInDB(); private: diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp index 44df1097dd4..1716aa73525 100644 --- a/src/server/game/Chat/Chat.cpp +++ b/src/server/game/Chat/Chat.cpp @@ -32,7 +32,6 @@ #include "Opcodes.h" #include "Player.h" #include "UpdateMask.h" -#include "SpellMgr.h" #include "ScriptMgr.h" #include "ChatLink.h" @@ -104,17 +103,6 @@ ChatCommand* ChatHandler::getCommandTable() return commandTableCache; } -std::string ChatHandler::PGetParseString(uint32 entry, ...) const -{ - const char *format = GetTrinityString(entry); - char str[1024]; - va_list ap; - va_start(ap, entry); - vsnprintf(str, 1024, format, ap); - va_end(ap); - return std::string(str); -} - char const* ChatHandler::GetTrinityString(uint32 entry) const { return m_session->GetTrinityString(entry); @@ -258,27 +246,6 @@ void ChatHandler::SendSysMessage(uint32 entry) SendSysMessage(GetTrinityString(entry)); } -void ChatHandler::PSendSysMessage(uint32 entry, ...) -{ - const char *format = GetTrinityString(entry); - va_list ap; - char str [2048]; - va_start(ap, entry); - vsnprintf(str, 2048, format, ap); - va_end(ap); - SendSysMessage(str); -} - -void ChatHandler::PSendSysMessage(const char *format, ...) -{ - va_list ap; - char str [2048]; - va_start(ap, format); - vsnprintf(str, 2048, format, ap); - va_end(ap); - SendSysMessage(str); -} - bool ChatHandler::ExecuteCommandInTable(ChatCommand* table, const char* text, std::string const& fullcmd) { char const* oldtext = text; diff --git a/src/server/game/Chat/Chat.h b/src/server/game/Chat/Chat.h index d712740bd7d..ba59245cdaa 100644 --- a/src/server/game/Chat/Chat.h +++ b/src/server/game/Chat/Chat.h @@ -20,6 +20,7 @@ #define TRINITYCORE_CHAT_H #include "SharedDefines.h" +#include "StringFormat.h" #include "WorldSession.h" #include "RBAC.h" @@ -68,9 +69,24 @@ class ChatHandler virtual void SendSysMessage(char const* str); void SendSysMessage(uint32 entry); - void PSendSysMessage(char const* format, ...) ATTR_PRINTF(2, 3); - void PSendSysMessage(uint32 entry, ...); - std::string PGetParseString(uint32 entry, ...) const; + + template<typename... Args> + void PSendSysMessage(const char* fmt, Args const&... args) + { + SendSysMessage(Trinity::StringFormat(fmt, args...).c_str()); + } + + template<typename... Args> + void PSendSysMessage(uint32 entry, Args const&... args) + { + SendSysMessage(PGetParseString(entry, args...).c_str()); + } + + template<typename... Args> + std::string PGetParseString(uint32 entry, Args const&... args) const + { + return Trinity::StringFormat(GetTrinityString(entry), args...); + } bool ParseCommands(const char* text); diff --git a/src/server/game/Chat/ChatLink.cpp b/src/server/game/Chat/ChatLink.cpp index 1eb330cc9e1..732a770645b 100644 --- a/src/server/game/Chat/ChatLink.cpp +++ b/src/server/game/Chat/ChatLink.cpp @@ -285,7 +285,7 @@ bool SpellChatLink::ValidateName(char* buffer, const char* context) ChatLink::ValidateName(buffer, context); // spells with that flag have a prefix of "$PROFESSION: " - if (_spell->Attributes & SPELL_ATTR0_TRADESPELL) + if (_spell->HasAttribute(SPELL_ATTR0_TRADESPELL)) { SkillLineAbilityMapBounds bounds = sSpellMgr->GetSkillLineAbilityMapBounds(_spell->Id); if (bounds.first == bounds.second) diff --git a/src/server/game/Combat/HostileRefManager.cpp b/src/server/game/Combat/HostileRefManager.cpp index 85afdf64607..245cc77eec3 100644 --- a/src/server/game/Combat/HostileRefManager.cpp +++ b/src/server/game/Combat/HostileRefManager.cpp @@ -20,7 +20,6 @@ #include "ThreatManager.h" #include "Unit.h" #include "DBCStructure.h" -#include "SpellMgr.h" #include "SpellInfo.h" HostileRefManager::~HostileRefManager() diff --git a/src/server/game/Combat/ThreatManager.cpp b/src/server/game/Combat/ThreatManager.cpp index 43057409b9b..2ec84c946f6 100644 --- a/src/server/game/Combat/ThreatManager.cpp +++ b/src/server/game/Combat/ThreatManager.cpp @@ -19,8 +19,6 @@ #include "ThreatManager.h" #include "Unit.h" #include "Creature.h" -#include "CreatureAI.h" -#include "Map.h" #include "Player.h" #include "ObjectAccessor.h" #include "UnitEvents.h" @@ -79,7 +77,7 @@ bool ThreatCalcHelper::isValidProcess(Unit* hatedUnit, Unit* hatingUnit, SpellIn return false; // spell not causing threat - if (threatSpell && threatSpell->AttributesEx & SPELL_ATTR1_NO_THREAT) + if (threatSpell && threatSpell->HasAttribute(SPELL_ATTR1_NO_THREAT)) return false; ASSERT(hatingUnit->GetTypeId() == TYPEID_UNIT); diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index eb3d1708675..25fbef2ca86 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -99,7 +99,9 @@ ConditionMgr::ConditionTypeInfo const ConditionMgr::StaticConditionTypeData[COND { "Distance", true, true, true }, { "Alive", false, false, false }, { "Health Value", true, true, false }, - { "Health Pct", true, true, false } + { "Health Pct", true, true, false }, + { "Realm Achievement", true, false, false }, + { "In Water", false, false, false } }; // Checks if object meets the condition @@ -416,6 +418,19 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) condMeets = creature->GetCreatureTemplate()->type == ConditionValue1; break; } + case CONDITION_REALM_ACHIEVEMENT: + { + AchievementEntry const* achievement = sAchievementMgr->GetAchievement(ConditionValue1); + if (achievement && sAchievementMgr->IsRealmCompleted(achievement, std::numeric_limits<uint32>::max())) + condMeets = true; + break; + } + case CONDITION_IN_WATER: + { + if (Unit* unit = object->ToUnit()) + condMeets = unit->IsInWater(); + break; + } default: condMeets = false; break; @@ -580,6 +595,12 @@ uint32 Condition::GetSearcherTypeMaskForCondition() case CONDITION_CREATURE_TYPE: mask |= GRID_MAP_TYPE_MASK_CREATURE; break; + case CONDITION_REALM_ACHIEVEMENT: + mask |= GRID_MAP_TYPE_MASK_ALL; + break; + case CONDITION_IN_WATER: + mask |= GRID_MAP_TYPE_MASK_CREATURE | GRID_MAP_TYPE_MASK_PLAYER; + break; default: ASSERT(false && "Condition::GetSearcherTypeMaskForCondition - missing condition handling!"); break; @@ -2056,6 +2077,18 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond) case CONDITION_PHASEMASK: case CONDITION_ALIVE: break; + case CONDITION_REALM_ACHIEVEMENT: + { + AchievementEntry const* achievement = sAchievementMgr->GetAchievement(cond->ConditionValue1); + if (!achievement) + { + TC_LOG_ERROR("sql.sql", "%s has non existing realm first achivement id (%u), skipped.", cond->ToString(true).c_str(), cond->ConditionValue1); + return false; + } + break; + } + case CONDITION_IN_WATER: + break; default: break; } diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h index 4ca27f0d986..27983782bdc 100644 --- a/src/server/game/Conditions/ConditionMgr.h +++ b/src/server/game/Conditions/ConditionMgr.h @@ -72,7 +72,9 @@ enum ConditionTypes CONDITION_ALIVE = 36, // 0 0 0 true if unit is alive CONDITION_HP_VAL = 37, // hpVal ComparisonType 0 true if unit's hp matches given value CONDITION_HP_PCT = 38, // hpPct ComparisonType 0 true if unit's hp matches given pct - CONDITION_MAX = 39 // MAX + CONDITION_REALM_ACHIEVEMENT = 39, // achievement_id 0 0 true if realm achievement is complete + CONDITION_IN_WATER = 40, // 0 0 0 true if unit in water + CONDITION_MAX = 41 // MAX }; /*! Documentation on implementing a new ConditionSourceType: diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp index 4dd38face72..5cd9b363ae0 100644 --- a/src/server/game/DataStores/DBCStores.cpp +++ b/src/server/game/DataStores/DBCStores.cpp @@ -48,6 +48,7 @@ struct WMOAreaTableTripple }; typedef std::map<WMOAreaTableTripple, WMOAreaTableEntry const*> WMOAreaInfoByTripple; +typedef std::multimap<uint32, CharSectionsEntry const*> CharSectionsMap; DBCStorage <AreaTableEntry> sAreaStore(AreaTableEntryfmt); DBCStorage <AreaGroupEntry> sAreaGroupStore(AreaGroupEntryfmt); @@ -67,6 +68,8 @@ DBCStorage <BattlemasterListEntry> sBattlemasterListStore(BattlemasterListEntryf DBCStorage <BarberShopStyleEntry> sBarberShopStyleStore(BarberShopStyleEntryfmt); DBCStorage <CharStartOutfitEntry> sCharStartOutfitStore(CharStartOutfitEntryfmt); std::map<uint32, CharStartOutfitEntry const*> sCharStartOutfitMap; +DBCStorage <CharSectionsEntry> sCharSectionsStore(CharSectionsEntryfmt); +CharSectionsMap sCharSectionMap; DBCStorage <CharTitlesEntry> sCharTitlesStore(CharTitlesEntryfmt); DBCStorage <ChatChannelsEntry> sChatChannelsStore(ChatChannelsEntryfmt); DBCStorage <ChrClassesEntry> sChrClassesStore(ChrClassesEntryfmt); @@ -305,6 +308,12 @@ void LoadDBCStores(const std::string& dataPath) if (CharStartOutfitEntry const* outfit = sCharStartOutfitStore.LookupEntry(i)) sCharStartOutfitMap[outfit->Race | (outfit->Class << 8) | (outfit->Gender << 16)] = outfit; + LoadDBC(availableDbcLocales, bad_dbc_files, sCharSectionsStore, dbcPath, "CharSections.dbc"); + for (uint32 i = 0; i < sCharSectionsStore.GetNumRows(); ++i) + if (CharSectionsEntry const* entry = sCharSectionsStore.LookupEntry(i)) + if (entry->Race && ((1 << (entry->Race - 1)) & RACEMASK_ALL_PLAYABLE) != 0) //ignore Nonplayable races + sCharSectionMap.insert({ entry->GenType | (entry->Gender << 8) | (entry->Race << 16), entry }); + LoadDBC(availableDbcLocales, bad_dbc_files, sCharTitlesStore, dbcPath, "CharTitles.dbc"); LoadDBC(availableDbcLocales, bad_dbc_files, sChatChannelsStore, dbcPath, "ChatChannels.dbc"); LoadDBC(availableDbcLocales, bad_dbc_files, sChrClassesStore, dbcPath, "ChrClasses.dbc"); @@ -551,8 +560,8 @@ void LoadDBCStores(const std::string& dataPath) for (uint32 i = 1; i < sTaxiPathNodeStore.GetNumRows(); ++i) if (TaxiPathNodeEntry const* entry = sTaxiPathNodeStore.LookupEntry(i)) { - if (pathLength[entry->path] < entry->index + 1) - pathLength[entry->path] = entry->index + 1; + if (pathLength[entry->PathID] < entry->NodeIndex + 1) + pathLength[entry->PathID] = entry->NodeIndex + 1; } // Set path length sTaxiPathNodesByPath.resize(pathCount); // 0 and some other indexes not used @@ -561,7 +570,7 @@ void LoadDBCStores(const std::string& dataPath) // fill data for (uint32 i = 1; i < sTaxiPathNodeStore.GetNumRows(); ++i) if (TaxiPathNodeEntry const* entry = sTaxiPathNodeStore.LookupEntry(i)) - sTaxiPathNodesByPath[entry->path].set(entry->index, entry); + sTaxiPathNodesByPath[entry->PathID].set(entry->NodeIndex, entry); // Initialize global taxinodes mask // include existed nodes that have at least single not spell base (scripted) path @@ -945,6 +954,18 @@ CharStartOutfitEntry const* GetCharStartOutfitEntry(uint8 race, uint8 class_, ui return itr->second; } +CharSectionsEntry const* GetCharSectionEntry(uint8 race, CharSectionType genType, uint8 gender, uint8 type, uint8 color) +{ + std::pair<CharSectionsMap::const_iterator, CharSectionsMap::const_iterator> eqr = sCharSectionMap.equal_range(uint32(genType) | uint32(gender << 8) | uint32(race << 16)); + for (CharSectionsMap::const_iterator itr = eqr.first; itr != eqr.second; ++itr) + { + if (itr->second->Type == type && itr->second->Color == color) + return itr->second; + } + + return NULL; +} + /// Returns LFGDungeonEntry for a specific map and difficulty. Will return first found entry if multiple dungeons use the same map (such as Scarlet Monastery) LFGDungeonEntry const* GetLFGDungeon(uint32 mapId, Difficulty difficulty) { diff --git a/src/server/game/DataStores/DBCStores.h b/src/server/game/DataStores/DBCStores.h index 655de86b7e1..d955e9581ab 100644 --- a/src/server/game/DataStores/DBCStores.h +++ b/src/server/game/DataStores/DBCStores.h @@ -69,6 +69,7 @@ PvPDifficultyEntry const* GetBattlegroundBracketByLevel(uint32 mapid, uint32 lev PvPDifficultyEntry const* GetBattlegroundBracketById(uint32 mapid, BattlegroundBracketId id); CharStartOutfitEntry const* GetCharStartOutfitEntry(uint8 race, uint8 class_, uint8 gender); +CharSectionsEntry const* GetCharSectionEntry(uint8 race, CharSectionType genType, uint8 gender, uint8 type, uint8 color); LFGDungeonEntry const* GetLFGDungeon(uint32 mapId, Difficulty difficulty); @@ -91,6 +92,7 @@ extern DBCStorage <BarberShopStyleEntry> sBarberShopStyleStore; extern DBCStorage <BattlemasterListEntry> sBattlemasterListStore; extern DBCStorage <ChatChannelsEntry> sChatChannelsStore; extern DBCStorage <CharStartOutfitEntry> sCharStartOutfitStore; +extern DBCStorage <CharSectionsEntry> sCharSectionsStore; extern DBCStorage <CharTitlesEntry> sCharTitlesStore; extern DBCStorage <ChrClassesEntry> sChrClassesStore; extern DBCStorage <ChrRacesEntry> sChrRacesStore; diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h index 1e6c8218489..5ccd5d2b7e5 100644 --- a/src/server/game/DataStores/DBCStructure.h +++ b/src/server/game/DataStores/DBCStructure.h @@ -30,13 +30,7 @@ #include <vector> // Structures using to access raw DBC data and required packing to portability - -// GCC have alternative #pragma pack(N) syntax and old gcc version not support pack(push, N), also any gcc version not support it at some platform -#if defined(__GNUC__) -#pragma pack(1) -#else #pragma pack(push, 1) -#endif struct AchievementEntry { @@ -647,6 +641,33 @@ struct CharStartOutfitEntry //int32 ItemInventorySlot[MAX_OUTFIT_ITEMS]; // 53-76 not required at server side }; +enum CharSectionFlags +{ + SECTION_FLAG_PLAYER = 0x01, + SECTION_FLAG_DEATH_KNIGHT = 0x04 +}; + +enum CharSectionType +{ + SECTION_TYPE_SKIN = 0, + SECTION_TYPE_FACE = 1, + SECTION_TYPE_FACIAL_HAIR = 2, + SECTION_TYPE_HAIR = 3, + SECTION_TYPE_UNDERWEAR = 4 +}; + +struct CharSectionsEntry +{ + //uint32 Id; + uint32 Race; + uint32 Gender; + uint32 GenType; + //char* TexturePath[3]; + uint32 Flags; + uint32 Type; + uint32 Color; +}; + struct CharTitlesEntry { uint32 ID; // 0, title ids, for example in Quest::GetCharTitleId() @@ -1521,9 +1542,9 @@ struct ScalingStatValuesEntry return 0; } - uint32 getFeralBonus(uint32 mask) const // removed in 3.2.x? + uint32 getFeralBonus(uint32 /*mask*/) const // removed in 3.2.x? { - if (mask & 0x00010000) return 0; // not used? + //if (mask & 0x00010000) return 0; // not used? return 0; } }; @@ -1912,17 +1933,17 @@ struct TaxiPathEntry struct TaxiPathNodeEntry { - // 0 m_ID - uint32 path; // 1 m_PathID - uint32 index; // 2 m_NodeIndex - uint32 mapid; // 3 m_ContinentID - float x; // 4 m_LocX - float y; // 5 m_LocY - float z; // 6 m_LocZ - uint32 actionFlag; // 7 m_flags - uint32 delay; // 8 m_delay - uint32 arrivalEventID; // 9 m_arrivalEventID - uint32 departureEventID; // 10 m_departureEventID + // 0 ID + uint32 PathID; // 1 + uint32 NodeIndex; // 2 + uint32 MapID; // 3 + float LocX; // 4 + float LocY; // 5 + float LocZ; // 6 + uint32 Flags; // 7 + uint32 Delay; // 8 + uint32 ArrivalEventID; // 9 + uint32 DepartureEventID; // 10 }; struct TeamContributionPointsEntry @@ -2150,12 +2171,7 @@ struct WorldStateUI }; */ -// GCC have alternative #pragma pack() syntax and old gcc version not support pack(pop), also any gcc version not support it at some platform -#if defined(__GNUC__) -#pragma pack() -#else #pragma pack(pop) -#endif // Structures not used for casting to loaded DBC data and not required then packing struct MapDifficulty diff --git a/src/server/game/DataStores/DBCfmt.h b/src/server/game/DataStores/DBCfmt.h index 44db2a35d73..5c24e6f938a 100644 --- a/src/server/game/DataStores/DBCfmt.h +++ b/src/server/game/DataStores/DBCfmt.h @@ -33,6 +33,7 @@ char const BannedAddOnsfmt[] = "nxxxxxxxxxx"; char const BarberShopStyleEntryfmt[] = "nixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiii"; char const BattlemasterListEntryfmt[] = "niiiiiiiiixssssssssssssssssxiixx"; char const CharStartOutfitEntryfmt[] = "dbbbXiiiiiiiiiiiiiiiiiiiiiiiixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; +char const CharSectionsEntryfmt[] = "diiixxxiii"; char const CharTitlesEntryfmt[] = "nxssssssssssssssssxssssssssssssssssxi"; char const ChatChannelsEntryfmt[] = "nixssssssssssssssssxxxxxxxxxxxxxxxxxx"; char const ChrClassesEntryfmt[] = "nxixssssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxixii"; diff --git a/src/server/game/DungeonFinding/LFG.cpp b/src/server/game/DungeonFinding/LFG.cpp index ab06eff7148..8ec638128d8 100644 --- a/src/server/game/DungeonFinding/LFG.cpp +++ b/src/server/game/DungeonFinding/LFG.cpp @@ -91,9 +91,6 @@ std::string GetStateString(LfgState state) case LFG_STATE_DUNGEON: entry = LANG_LFG_STATE_DUNGEON; break; - case LFG_STATE_BOOT: - entry = LANG_LFG_STATE_BOOT; - break; case LFG_STATE_FINISHED_DUNGEON: entry = LANG_LFG_STATE_FINISHED_DUNGEON; break; diff --git a/src/server/game/DungeonFinding/LFG.h b/src/server/game/DungeonFinding/LFG.h index 6145a2324b1..84a25ee49ad 100644 --- a/src/server/game/DungeonFinding/LFG.h +++ b/src/server/game/DungeonFinding/LFG.h @@ -64,8 +64,8 @@ enum LfgState LFG_STATE_ROLECHECK, // Rolecheck active LFG_STATE_QUEUED, // Queued LFG_STATE_PROPOSAL, // Proposal active - LFG_STATE_BOOT, // Vote kick active - LFG_STATE_DUNGEON, // In LFG Group, in a Dungeon + //LFG_STATE_BOOT, // Vote kick active + LFG_STATE_DUNGEON = 5, // In LFG Group, in a Dungeon LFG_STATE_FINISHED_DUNGEON, // In LFG Group, in a finished Dungeon LFG_STATE_RAIDBROWSER // Using Raid finder }; diff --git a/src/server/game/DungeonFinding/LFGGroupData.cpp b/src/server/game/DungeonFinding/LFGGroupData.cpp index 2ab1e0b1e7e..aa6916a39a4 100644 --- a/src/server/game/DungeonFinding/LFGGroupData.cpp +++ b/src/server/game/DungeonFinding/LFGGroupData.cpp @@ -22,7 +22,7 @@ namespace lfg { LfgGroupData::LfgGroupData(): m_State(LFG_STATE_NONE), m_OldState(LFG_STATE_NONE), - m_Leader(), m_Dungeon(0), m_KicksLeft(LFG_GROUP_MAX_KICKS) + m_Leader(), m_Dungeon(0), m_KicksLeft(LFG_GROUP_MAX_KICKS), m_VoteKickActive(false) { } LfgGroupData::~LfgGroupData() @@ -126,4 +126,14 @@ uint8 LfgGroupData::GetKicksLeft() const return m_KicksLeft; } +void LfgGroupData::SetVoteKick(bool active) +{ + m_VoteKickActive = active; +} + +bool LfgGroupData::IsVoteKickActive() const +{ + return m_VoteKickActive; +} + } // namespace lfg diff --git a/src/server/game/DungeonFinding/LFGGroupData.h b/src/server/game/DungeonFinding/LFGGroupData.h index 8d8f1dc0f3d..b573e7c309e 100644 --- a/src/server/game/DungeonFinding/LFGGroupData.h +++ b/src/server/game/DungeonFinding/LFGGroupData.h @@ -66,6 +66,9 @@ class LfgGroupData // VoteKick uint8 GetKicksLeft() const; + void SetVoteKick(bool active); + bool IsVoteKickActive() const; + private: // General LfgState m_State; ///< State if group in LFG @@ -76,6 +79,7 @@ class LfgGroupData uint32 m_Dungeon; ///< Dungeon entry // Vote Kick uint8 m_KicksLeft; ///< Number of kicks left + bool m_VoteKickActive; }; } // namespace lfg diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index 9b3ccc05280..5ad94948cd0 100644 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -21,7 +21,6 @@ #include "DisableMgr.h" #include "ObjectMgr.h" #include "SocialMgr.h" -#include "Language.h" #include "LFGMgr.h" #include "LFGScripts.h" #include "LFGGroupData.h" @@ -311,9 +310,8 @@ void LFGMgr::Update(uint32 diff) ObjectGuid pguid = itVotes->first; if (pguid != boot.victim) SendLfgBootProposalUpdate(pguid, boot); - SetState(pguid, LFG_STATE_DUNGEON); } - SetState(itBoot->first, LFG_STATE_DUNGEON); + SetVoteKick(itBoot->first, false); BootsStore.erase(itBoot); } } @@ -412,6 +410,8 @@ void LFGMgr::JoinLfg(Player* player, uint8 roles, LfgDungeonSet& dungeons, const joinData.result = LFG_JOIN_RANDOM_COOLDOWN; else if (dungeons.empty()) joinData.result = LFG_JOIN_NOT_MEET_REQS; + else if (player->HasAura(9454)) // check Freeze debuff + joinData.result = LFG_JOIN_NOT_MEET_REQS; else if (grp) { if (grp->GetMembersCount() > MAXGROUPSIZE) @@ -431,6 +431,8 @@ void LFGMgr::JoinLfg(Player* player, uint8 roles, LfgDungeonSet& dungeons, const joinData.result = LFG_JOIN_PARTY_RANDOM_COOLDOWN; else if (plrg->InBattleground() || plrg->InArena() || plrg->InBattlegroundQueue()) joinData.result = LFG_JOIN_USING_BG_SYSTEM; + else if (plrg->HasAura(9454)) // check Freeze debuff + joinData.result = LFG_JOIN_PARTY_NOT_MEET_REQS; ++memberCount; players.insert(plrg->GetGUID()); } @@ -643,7 +645,6 @@ void LFGMgr::LeaveLfg(ObjectGuid guid) break; case LFG_STATE_DUNGEON: case LFG_STATE_FINISHED_DUNGEON: - case LFG_STATE_BOOT: if (guid != gguid) // Player SetState(guid, LFG_STATE_NONE); break; @@ -783,10 +784,10 @@ void LFGMgr::GetCompatibleDungeons(LfgDungeonSet& dungeons, GuidSet const& playe } } } - + if (eraseDungeon) dungeons.erase(itDungeon); - + lockMap[guid][dungeonId] = it2->second; } } @@ -1156,7 +1157,7 @@ void LFGMgr::RemoveProposal(LfgProposalContainer::iterator itProposal, LfgUpdate */ void LFGMgr::InitBoot(ObjectGuid gguid, ObjectGuid kicker, ObjectGuid victim, std::string const& reason) { - SetState(gguid, LFG_STATE_BOOT); + SetVoteKick(gguid, true); LfgPlayerBoot& boot = BootsStore[gguid]; boot.inProgress = true; @@ -1170,7 +1171,6 @@ void LFGMgr::InitBoot(ObjectGuid gguid, ObjectGuid kicker, ObjectGuid victim, st for (GuidSet::const_iterator itr = players.begin(); itr != players.end(); ++itr) { ObjectGuid guid = (*itr); - SetState(guid, LFG_STATE_BOOT); boot.votes[guid] = LFG_ANSWER_PENDING; } @@ -1227,13 +1227,10 @@ void LFGMgr::UpdateBoot(ObjectGuid guid, bool accept) { ObjectGuid pguid = itVotes->first; if (pguid != boot.victim) - { - SetState(pguid, LFG_STATE_DUNGEON); SendLfgBootProposalUpdate(pguid, boot); - } } - SetState(gguid, LFG_STATE_DUNGEON); + SetVoteKick(gguid, false); if (agreeNum == LFG_GROUP_KICK_VOTES_NEEDED) // Vote passed - Kick player { if (Group* group = sGroupMgr->GetGroupByGUID(gguid.GetCounter())) @@ -1288,6 +1285,8 @@ void LFGMgr::TeleportPlayer(Player* player, bool out, bool fromOpcode /*= false* error = LFG_TELEPORTERROR_IN_VEHICLE; else if (player->GetCharmGUID()) error = LFG_TELEPORTERROR_CHARMING; + else if (player->HasAura(9454)) // check Freeze debuff + error = LFG_TELEPORTERROR_INVALID_LOCATION; else if (player->GetMapId() != uint32(dungeon->map)) // Do not teleport players in dungeon to the entrance { uint32 mapid = dungeon->map; @@ -1495,12 +1494,12 @@ LfgState LFGMgr::GetState(ObjectGuid guid) if (guid.IsGroup()) { state = GroupsStore[guid].GetState(); - TC_LOG_TRACE("lfg.data.group.state.get", "Group: %s, State: %u", guid.ToString().c_str(), state); + TC_LOG_TRACE("lfg.data.group.state.get", "Group: %s, State: %s", guid.ToString().c_str(), GetStateString(state).c_str()); } else { state = PlayersStore[guid].GetState(); - TC_LOG_TRACE("lfg.data.player.state.get", "Player: %s, State: %u", guid.ToString().c_str(), state); + TC_LOG_TRACE("lfg.data.player.state.get", "Player: %s, State: %s", guid.ToString().c_str(), GetStateString(state).c_str()); } return state; @@ -1523,6 +1522,16 @@ LfgState LFGMgr::GetOldState(ObjectGuid guid) return state; } +bool LFGMgr::IsVoteKickActive(ObjectGuid gguid) +{ + ASSERT(gguid.IsGroup()); + + bool active = GroupsStore[gguid].IsVoteKickActive(); + TC_LOG_TRACE("lfg.data.group.votekick.get", "Group: %s, Active: %d", gguid.ToString().c_str(), active); + + return active; +} + uint32 LFGMgr::GetDungeon(ObjectGuid guid, bool asId /*= true */) { uint32 dungeon = GroupsStore[guid].GetDungeon(asId); @@ -1683,6 +1692,17 @@ void LFGMgr::SetState(ObjectGuid guid, LfgState state) } } +void LFGMgr::SetVoteKick(ObjectGuid gguid, bool active) +{ + ASSERT(gguid.IsGroup()); + + LfgGroupData& data = GroupsStore[gguid]; + TC_LOG_TRACE("lfg.data.group.votekick.set", "Group: %s, New state: %d, Previous: %d", + gguid.ToString().c_str(), active, data.IsVoteKickActive()); + + data.SetVoteKick(active); +} + void LFGMgr::SetDungeon(ObjectGuid guid, uint32 dungeon) { TC_LOG_TRACE("lfg.data.group.dungeon.set", "Group: %s, Dungeon: %u", guid.ToString().c_str(), dungeon); diff --git a/src/server/game/DungeonFinding/LFGMgr.h b/src/server/game/DungeonFinding/LFGMgr.h index 0e5fadc85cc..fda9a8b7ce9 100644 --- a/src/server/game/DungeonFinding/LFGMgr.h +++ b/src/server/game/DungeonFinding/LFGMgr.h @@ -322,6 +322,8 @@ class LFGMgr LfgDungeonSet const& GetSelectedDungeons(ObjectGuid guid); /// Get current lfg state LfgState GetState(ObjectGuid guid); + /// Get current vote kick state + bool IsVoteKickActive(ObjectGuid gguid); /// Get current dungeon uint32 GetDungeon(ObjectGuid guid, bool asId = true); /// Get the map id of the current dungeon @@ -425,6 +427,7 @@ class LFGMgr void SetSelectedDungeons(ObjectGuid guid, LfgDungeonSet const& dungeons); void DecreaseKicksLeft(ObjectGuid guid); void SetState(ObjectGuid guid, LfgState state); + void SetVoteKick(ObjectGuid gguid, bool active); void RemovePlayerData(ObjectGuid guid); void GetCompatibleDungeons(LfgDungeonSet& dungeons, GuidSet const& players, LfgLockPartyMap& lockMap, bool isContinue); void _SaveToDB(ObjectGuid guid, uint32 db_guid); diff --git a/src/server/game/DungeonFinding/LFGQueue.cpp b/src/server/game/DungeonFinding/LFGQueue.cpp index 683590cebe8..6ac20541574 100644 --- a/src/server/game/DungeonFinding/LFGQueue.cpp +++ b/src/server/game/DungeonFinding/LFGQueue.cpp @@ -23,9 +23,6 @@ #include "LFGQueue.h" #include "LFGMgr.h" #include "Log.h" -#include "ObjectMgr.h" -#include "World.h" -#include "GroupMgr.h" namespace lfg { @@ -377,7 +374,7 @@ LfgCompatibility LFGQueue::CheckCompatibility(GuidList check) // Group with less that MAXGROUPSIZE members always compatible if (check.size() == 1 && numPlayers != MAXGROUPSIZE) { - TC_LOG_DEBUG("lfg.queue.match.compatibility.check", "Guids: (%s) sigle group. Compatibles", strGuids.c_str()); + TC_LOG_DEBUG("lfg.queue.match.compatibility.check", "Guids: (%s) single group. Compatibles", strGuids.c_str()); LfgQueueDataContainer::iterator itQueue = QueueDataStore.find(check.front()); LfgCompatibilityData data(LFG_COMPATIBLES_WITH_LESS_PLAYERS); diff --git a/src/server/game/DungeonFinding/LFGScripts.cpp b/src/server/game/DungeonFinding/LFGScripts.cpp index ae64e59936f..852eb7d8c5f 100644 --- a/src/server/game/DungeonFinding/LFGScripts.cpp +++ b/src/server/game/DungeonFinding/LFGScripts.cpp @@ -99,7 +99,17 @@ void LFGPlayerScript::OnMapChanged(Player* player) player->CastSpell(player, LFG_SPELL_LUCK_OF_THE_DRAW, true); } else + { + Group* group = player->GetGroup(); + if (group && group->GetMembersCount() == 1) + { + sLFGMgr->LeaveLfg(group->GetGUID()); + group->Disband(); + TC_LOG_DEBUG("lfg", "LFGPlayerScript::OnMapChanged, Player %s(%s) is last in the lfggroup so we disband the group.", + player->GetName().c_str(), player->GetGUID().ToString().c_str()); + } player->RemoveAurasDueToSpell(LFG_SPELL_LUCK_OF_THE_DRAW); + } } LFGGroupScript::LFGGroupScript() : GroupScript("LFGGroupScript") { } diff --git a/src/server/game/Entities/Corpse/Corpse.cpp b/src/server/game/Entities/Corpse/Corpse.cpp index 1e967928265..192a897238a 100644 --- a/src/server/game/Entities/Corpse/Corpse.cpp +++ b/src/server/game/Entities/Corpse/Corpse.cpp @@ -22,9 +22,6 @@ #include "UpdateMask.h" #include "ObjectAccessor.h" #include "DatabaseEnv.h" -#include "Opcodes.h" -#include "GossipDef.h" -#include "World.h" Corpse::Corpse(CorpseType type) : WorldObject(type != CORPSE_BONES), m_type(type) { @@ -172,6 +169,7 @@ bool Corpse::LoadCorpseFromDB(uint32 guid, Field* fields) Object::_Create(guid, 0, HIGHGUID_CORPSE); + SetObjectScale(1.0f); SetUInt32Value(CORPSE_FIELD_DISPLAY_ID, fields[5].GetUInt32()); _LoadIntoDataField(fields[6].GetCString(), CORPSE_FIELD_ITEM, EQUIPMENT_SLOT_END); SetUInt32Value(CORPSE_FIELD_BYTES_1, fields[7].GetUInt32()); diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index a44ca68f79b..809c76c260a 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -34,12 +34,9 @@ #include "InstanceScript.h" #include "Log.h" #include "LootMgr.h" -#include "MapManager.h" #include "MoveSpline.h" -#include "MoveSplineInit.h" #include "ObjectMgr.h" #include "Opcodes.h" -#include "OutdoorPvPMgr.h" #include "Player.h" #include "PoolMgr.h" #include "QuestDef.h" @@ -48,10 +45,8 @@ #include "TemporarySummon.h" #include "Util.h" #include "Vehicle.h" -#include "WaypointMovementGenerator.h" #include "World.h" #include "WorldPacket.h" - #include "Transport.h" TrainerSpell const* TrainerSpellData::Find(uint32 spell_id) const @@ -155,8 +150,6 @@ m_originalEntry(0), m_homePosition(), m_transportHomePosition(), m_creatureInfo( for (uint8 i = 0; i < CREATURE_MAX_SPELLS; ++i) m_spells[i] = 0; - m_CreatureSpellCooldowns.clear(); - m_CreatureCategoryCooldowns.clear(); DisableReputationGain = false; m_SightDistance = sWorld->getFloatConfig(CONFIG_SIGHT_MONSTER); @@ -1377,9 +1370,6 @@ bool Creature::CanStartAttack(Unit const* who, bool force) const if (IsCivilian()) return false; - if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC)) - return false; - // Do not attack non-combat pets if (who->GetTypeId() == TYPEID_UNIT && who->GetCreatureType() == CREATURE_TYPE_NON_COMBAT_PET) return false; @@ -1484,6 +1474,8 @@ void Creature::setDeathState(DeathState s) SetTarget(ObjectGuid::Empty); // remove target selection in any cases (can be set at aura remove in Unit::setDeathState) SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); + SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0); // if creature is mounted on a virtual mount, remove it at death + setActive(false); if (HasSearchedAssistance()) @@ -2159,88 +2151,6 @@ uint32 Creature::GetShieldBlockValue() const //dunno mob block return (getLevel()/2 + uint32(GetStat(STAT_STRENGTH)/20)); } -void Creature::_AddCreatureSpellCooldown(uint32 spell_id, time_t end_time) -{ - m_CreatureSpellCooldowns[spell_id] = end_time; -} - -void Creature::_AddCreatureCategoryCooldown(uint32 category, time_t apply_time) -{ - m_CreatureCategoryCooldowns[category] = apply_time; -} - -void Creature::AddCreatureSpellCooldown(uint32 spellid) -{ - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellid); - if (!spellInfo) - return; - - uint32 cooldown = spellInfo->GetRecoveryTime(); - if (Player* modOwner = GetSpellModOwner()) - modOwner->ApplySpellMod(spellid, SPELLMOD_COOLDOWN, cooldown); - - if (cooldown) - _AddCreatureSpellCooldown(spellid, time(NULL) + cooldown/IN_MILLISECONDS); - - if (spellInfo->GetCategory()) - _AddCreatureCategoryCooldown(spellInfo->GetCategory(), time(NULL)); -} - -bool Creature::HasCategoryCooldown(uint32 spell_id) const -{ - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spell_id); - if (!spellInfo) - return false; - - CreatureSpellCooldowns::const_iterator itr = m_CreatureCategoryCooldowns.find(spellInfo->GetCategory()); - return(itr != m_CreatureCategoryCooldowns.end() && time_t(itr->second + (spellInfo->CategoryRecoveryTime / IN_MILLISECONDS)) > time(NULL)); -} - -uint32 Creature::GetCreatureSpellCooldownDelay(uint32 spellId) const -{ - CreatureSpellCooldowns::const_iterator itr = m_CreatureSpellCooldowns.find(spellId); - time_t t = time(NULL); - return uint32(itr != m_CreatureSpellCooldowns.end() && itr->second > t ? itr->second - t : 0); -} - -bool Creature::HasSpellCooldown(uint32 spell_id) const -{ - CreatureSpellCooldowns::const_iterator itr = m_CreatureSpellCooldowns.find(spell_id); - return (itr != m_CreatureSpellCooldowns.end() && itr->second > time(NULL)) || HasCategoryCooldown(spell_id); -} - -void Creature::ProhibitSpellSchool(SpellSchoolMask idSchoolMask, uint32 unTimeMs) -{ - time_t curTime = time(NULL); - for (uint8 i = 0; i < CREATURE_MAX_SPELLS; ++i) - { - if (m_spells[i] == 0) - continue; - - uint32 unSpellId = m_spells[i]; - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(unSpellId); - if (!spellInfo) - { - ASSERT(spellInfo); - continue; - } - - // Not send cooldown for this spells - if (spellInfo->IsCooldownStartedOnEvent()) - continue; - - if (spellInfo->PreventionType != SPELL_PREVENTION_TYPE_SILENCE) - continue; - - if ((idSchoolMask & spellInfo->GetSchoolMask()) && GetCreatureSpellCooldownDelay(unSpellId) < unTimeMs) - { - _AddCreatureSpellCooldown(unSpellId, curTime + unTimeMs/IN_MILLISECONDS); - if (UnitAI* ai = GetAI()) - ai->SpellInterrupted(unSpellId, unTimeMs); - } - } -} - bool Creature::HasSpell(uint32 spellID) const { uint8 i; @@ -2502,7 +2412,7 @@ bool Creature::SetSwim(bool enable) return true; } -bool Creature::SetCanFly(bool enable) +bool Creature::SetCanFly(bool enable, bool /*packetOnly = false */) { if (!Unit::SetCanFly(enable)) return false; @@ -2697,7 +2607,7 @@ void Creature::FocusTarget(Spell const* focusSpell, WorldObject const* target) _focusSpell = focusSpell; SetGuidValue(UNIT_FIELD_TARGET, target->GetGUID()); - if (focusSpell->GetSpellInfo()->AttributesEx5 & SPELL_ATTR5_DONT_TURN_DURING_CAST) + if (focusSpell->GetSpellInfo()->HasAttribute(SPELL_ATTR5_DONT_TURN_DURING_CAST)) AddUnitState(UNIT_STATE_ROTATING); // Set serverside orientation if needed (needs to be after attribute check) @@ -2716,7 +2626,7 @@ void Creature::ReleaseFocus(Spell const* focusSpell) else SetGuidValue(UNIT_FIELD_TARGET, ObjectGuid::Empty); - if (focusSpell->GetSpellInfo()->AttributesEx5 & SPELL_ATTR5_DONT_TURN_DURING_CAST) + if (focusSpell->GetSpellInfo()->HasAttribute(SPELL_ATTR5_DONT_TURN_DURING_CAST)) ClearUnitState(UNIT_STATE_ROTATING); } @@ -2725,3 +2635,29 @@ void Creature::StartPickPocketRefillTimer() _pickpocketLootRestore = time(NULL) + sWorld->getIntConfig(CONFIG_CREATURE_PICKPOCKET_REFILL); } +void Creature::SetTextRepeatId(uint8 textGroup, uint8 id) +{ + CreatureTextRepeatIds& repeats = m_textRepeat[textGroup]; + if (std::find(repeats.begin(), repeats.end(), id) == repeats.end()) + repeats.push_back(id); + else + TC_LOG_ERROR("sql.sql", "CreatureTextMgr: TextGroup %u for Creature(%s) GuidLow %u Entry %u, id %u already added", uint32(textGroup), GetName().c_str(), GetGUIDLow(), GetEntry(), uint32(id)); +} + +CreatureTextRepeatIds Creature::GetTextRepeatGroup(uint8 textGroup) +{ + CreatureTextRepeatIds ids; + + CreatureTextRepeatGroup::const_iterator groupItr = m_textRepeat.find(textGroup); + if (groupItr != m_textRepeat.end()) + ids = groupItr->second; + + return ids; +} + +void Creature::ClearTextRepeatGroup(uint8 textGroup) +{ + CreatureTextRepeatGroup::iterator groupItr = m_textRepeat.find(textGroup); + if (groupItr != m_textRepeat.end()) + groupItr->second.clear(); +} diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index ec06bf90595..585bc137e0b 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -170,12 +170,7 @@ struct CreatureTemplate // Benchmarked: Faster than std::map (insert/find) typedef std::unordered_map<uint32, CreatureTemplate> CreatureTemplateContainer; -// GCC have alternative #pragma pack(N) syntax and old gcc version not support pack(push, N), also any gcc version not support it at some platform -#if defined(__GNUC__) -#pragma pack(1) -#else #pragma pack(push, 1) -#endif // Defines base stats for creatures (used to calculate HP/mana/armor/attackpower/rangedattackpower/all damage). struct CreatureBaseStats @@ -307,12 +302,7 @@ enum ChatType CHAT_TYPE_END = 255 }; -// GCC have alternative #pragma pack() syntax and old gcc version not support pack(pop), also any gcc version not support it at some platform -#if defined(__GNUC__) -#pragma pack() -#else #pragma pack(pop) -#endif // `creature_addon` table struct CreatureAddon @@ -414,13 +404,15 @@ struct TrainerSpellData TrainerSpell const* Find(uint32 spell_id) const; }; -typedef std::map<uint32, time_t> CreatureSpellCooldowns; - // max different by z coordinate for creature aggro reaction #define CREATURE_Z_ATTACK_RANGE 3 #define MAX_VENDOR_ITEMS 150 // Limitation in 3.x.x item count in SMSG_LIST_INVENTORY +//used for handling non-repeatable random texts +typedef std::vector<uint8> CreatureTextRepeatIds; +typedef std::unordered_map<uint8, CreatureTextRepeatIds> CreatureTextRepeatGroup; + class Creature : public Unit, public GridObject<Creature>, public MapObject { public: @@ -484,7 +476,7 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject bool SetWalk(bool enable) override; bool SetDisableGravity(bool disable, bool packetOnly = false) override; bool SetSwim(bool enable) override; - bool SetCanFly(bool enable) override; + bool SetCanFly(bool enable, bool packetOnly = false) override; bool SetWaterWalking(bool enable, bool packetOnly = false) override; bool SetFeatherFall(bool enable, bool packetOnly = false) override; bool SetHover(bool enable, bool packetOnly = false) override; @@ -494,14 +486,6 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject SpellSchoolMask GetMeleeDamageSchoolMask() const override { return m_meleeDamageSchoolMask; } void SetMeleeDamageSchool(SpellSchools school) { m_meleeDamageSchoolMask = SpellSchoolMask(1 << school); } - void _AddCreatureSpellCooldown(uint32 spell_id, time_t end_time); - void _AddCreatureCategoryCooldown(uint32 category, time_t apply_time); - void AddCreatureSpellCooldown(uint32 spellid); - bool HasSpellCooldown(uint32 spell_id) const; - bool HasCategoryCooldown(uint32 spell_id) const; - uint32 GetCreatureSpellCooldownDelay(uint32 spellId) const; - virtual void ProhibitSpellSchool(SpellSchoolMask idSchoolMask, uint32 unTimeMs) override; - bool HasSpell(uint32 spellID) const override; bool UpdateEntry(uint32 entry, CreatureData const* data = nullptr); @@ -575,8 +559,6 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject SpellInfo const* reachWithSpellCure(Unit* victim); uint32 m_spells[CREATURE_MAX_SPELLS]; - CreatureSpellCooldowns m_CreatureSpellCooldowns; - CreatureSpellCooldowns m_CreatureCategoryCooldowns; bool CanStartAttack(Unit const* u, bool force) const; float GetAttackDistance(Unit const* player) const; @@ -678,6 +660,10 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject void FocusTarget(Spell const* focusSpell, WorldObject const* target); void ReleaseFocus(Spell const* focusSpell); + CreatureTextRepeatIds GetTextRepeatGroup(uint8 textGroup); + void SetTextRepeatId(uint8 textGroup, uint8 id); + void ClearTextRepeatGroup(uint8 textGroup); + protected: bool CreateFromProto(uint32 guidlow, uint32 entry, CreatureData const* data = nullptr, uint32 vehId = 0); bool InitEntry(uint32 entry, CreatureData const* data = nullptr); @@ -742,6 +728,8 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject bool TriggerJustRespawned; Spell const* _focusSpell; ///> Locks the target during spell cast for proper facing + + CreatureTextRepeatGroup m_textRepeat; }; class AssistDelayEvent : public BasicEvent diff --git a/src/server/game/Entities/Creature/TemporarySummon.cpp b/src/server/game/Entities/Creature/TemporarySummon.cpp index fc7b85aa73e..2a3e91b7574 100644 --- a/src/server/game/Entities/Creature/TemporarySummon.cpp +++ b/src/server/game/Entities/Creature/TemporarySummon.cpp @@ -19,7 +19,6 @@ #include "Log.h" #include "ObjectAccessor.h" #include "CreatureAI.h" -#include "ObjectMgr.h" #include "TemporarySummon.h" #include "Pet.h" #include "Player.h" diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.cpp b/src/server/game/Entities/DynamicObject/DynamicObject.cpp index 60accf8ad92..71d0f13488c 100644 --- a/src/server/game/Entities/DynamicObject/DynamicObject.cpp +++ b/src/server/game/Entities/DynamicObject/DynamicObject.cpp @@ -18,12 +18,10 @@ #include "Common.h" #include "UpdateMask.h" -#include "Opcodes.h" #include "World.h" #include "ObjectAccessor.h" #include "DatabaseEnv.h" #include "GridNotifiers.h" -#include "CellImpl.h" #include "GridNotifiersImpl.h" #include "ScriptMgr.h" #include "Transport.h" diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 6ca5ab4ae5b..a4b140b9878 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -20,7 +20,6 @@ #include "Battleground.h" #include "CellImpl.h" #include "CreatureAISelector.h" -#include "DynamicTree.h" #include "GameObjectModel.h" #include "GridNotifiersImpl.h" #include "Group.h" @@ -33,7 +32,6 @@ #include "UpdateFieldFlags.h" #include "World.h" #include "Transport.h" -#include <G3D/Quat.h> GameObject::GameObject() : WorldObject(false), MapObject(), m_model(NULL), m_goValue(), m_AI(NULL) @@ -192,6 +190,12 @@ bool GameObject::Create(uint32 guidlow, uint32 name_id, Map* map, uint32 phaseMa return false; } + if (goinfo->type == GAMEOBJECT_TYPE_MO_TRANSPORT) + { + TC_LOG_ERROR("sql.sql", "Gameobject (GUID: %u Entry: %u) not created: gameobject type GAMEOBJECT_TYPE_MO_TRANSPORT cannot be manually created.", guidlow, name_id); + return false; + } + if (goinfo->type == GAMEOBJECT_TYPE_TRANSPORT) m_updateFlag = (m_updateFlag | UPDATEFLAG_TRANSPORT) & ~UPDATEFLAG_POSITION; @@ -267,6 +271,16 @@ bool GameObject::Create(uint32 guidlow, uint32 name_id, Map* map, uint32 phaseMa SetGoAnimProgress(animprogress); break; } + + if (GameObjectAddon const* addon = sObjectMgr->GetGameObjectAddon(guidlow)) + { + if (addon->InvisibilityValue) + { + m_invisibility.AddFlag(addon->invisibilityType); + m_invisibility.AddValue(addon->invisibilityType, addon->InvisibilityValue); + } + } + LastUsedScriptID = GetGOInfo()->ScriptId; AIM_Initialize(); @@ -2070,6 +2084,15 @@ void GameObject::SetGoState(GOState state) } } +uint32 GameObject::GetTransportPeriod() const +{ + ASSERT(GetGOInfo()->type == GAMEOBJECT_TYPE_TRANSPORT); + if (m_goValue.Transport.AnimationInfo) + return m_goValue.Transport.AnimationInfo->TotalTime; + + return 0; +} + void GameObject::SetDisplayId(uint32 displayid) { SetUInt32Value(GAMEOBJECT_DISPLAYID, displayid); @@ -2208,9 +2231,16 @@ void GameObject::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* t if (ActivateToQuest(target)) dynFlags |= GO_DYNFLAG_LO_SPARKLE; break; + case GAMEOBJECT_TYPE_TRANSPORT: case GAMEOBJECT_TYPE_MO_TRANSPORT: - pathProgress = int16(float(m_goValue.Transport.PathProgress) / float(GetUInt32Value(GAMEOBJECT_LEVEL)) * 65535.0f); + { + if (uint32 transportPeriod = GetTransportPeriod()) + { + float timer = float(m_goValue.Transport.PathProgress % transportPeriod); + pathProgress = int16(timer / float(transportPeriod) * 65535.0f); + } break; + } default: break; } diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index 844674b2210..5f1d2c793e6 100644 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -576,6 +576,15 @@ struct GameObjectLocale StringVector CastBarCaption; }; +// `gameobject_addon` table +struct GameObjectAddon +{ + InvisibilityType invisibilityType; + uint32 InvisibilityValue; +}; + +typedef std::unordered_map<ObjectGuid::LowType, GameObjectAddon> GameObjectAddonContainer; + // client side GO show states enum GOState { @@ -717,6 +726,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map void SetGoType(GameobjectTypes type) { SetByteValue(GAMEOBJECT_BYTES_1, 1, type); } GOState GetGoState() const { return GOState(GetByteValue(GAMEOBJECT_BYTES_1, 0)); } void SetGoState(GOState state); + virtual uint32 GetTransportPeriod() const; uint8 GetGoArtKit() const { return GetByteValue(GAMEOBJECT_BYTES_1, 2); } void SetGoArtKit(uint8 artkit); uint8 GetGoAnimProgress() const { return GetByteValue(GAMEOBJECT_BYTES_1, 3); } diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h index c82ae723f4c..b832aeb5614 100644 --- a/src/server/game/Entities/Item/Item.h +++ b/src/server/game/Entities/Item/Item.h @@ -201,8 +201,6 @@ enum ItemUpdateState ITEM_REMOVED = 3 }; -#define MAX_ITEM_SPELLS 5 - bool ItemCanGoIntoBag(ItemTemplate const* proto, ItemTemplate const* pBagProto); class Item : public Object diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 53ec842b053..6392c3ee51b 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -30,27 +30,19 @@ #include "UpdateData.h" #include "UpdateMask.h" #include "Util.h" -#include "MapManager.h" #include "ObjectAccessor.h" -#include "Log.h" #include "Transport.h" -#include "TargetedMovementGenerator.h" -#include "WaypointMovementGenerator.h" #include "VMapFactory.h" #include "CellImpl.h" #include "GridNotifiers.h" #include "GridNotifiersImpl.h" -#include "SpellAuraEffects.h" #include "UpdateFieldFlags.h" #include "TemporarySummon.h" #include "Totem.h" #include "OutdoorPvPMgr.h" #include "MovementPacketBuilder.h" -#include "DynamicTree.h" -#include "Group.h" #include "BattlefieldMgr.h" #include "Battleground.h" -#include "Chat.h" Object::Object() : m_PackGUID(sizeof(uint64)+1) { @@ -500,6 +492,7 @@ void Object::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* targe uint32* flags = NULL; uint32 visibleFlag = GetUpdateFieldData(target, flags); + ASSERT(flags); for (uint16 index = 0; index < m_valuesCount; ++index) { @@ -1015,89 +1008,34 @@ bool Object::PrintIndexError(uint32 index, bool set) const return false; } -bool Position::operator==(Position const &a) -{ - return (G3D::fuzzyEq(a.m_positionX, m_positionX) && - G3D::fuzzyEq(a.m_positionY, m_positionY) && - G3D::fuzzyEq(a.m_positionZ, m_positionZ) && - G3D::fuzzyEq(a.m_orientation, m_orientation)); -} - -bool Position::HasInLine(WorldObject const* target, float width) const -{ - if (!HasInArc(float(M_PI), target)) - return false; - width += target->GetObjectSize(); - float angle = GetRelativeAngle(target); - return std::fabs(std::sin(angle)) * GetExactDist2d(target->GetPositionX(), target->GetPositionY()) < width; -} - -std::string Position::ToString() const -{ - std::stringstream sstr; - sstr << "X: " << m_positionX << " Y: " << m_positionY << " Z: " << m_positionZ << " O: " << m_orientation; - return sstr.str(); -} - -ByteBuffer& operator>>(ByteBuffer& buf, Position::PositionXYZOStreamer const& streamer) -{ - float x, y, z, o; - buf >> x >> y >> z >> o; - streamer.m_pos->Relocate(x, y, z, o); - return buf; -} -ByteBuffer& operator<<(ByteBuffer& buf, Position::PositionXYZStreamer const& streamer) -{ - float x, y, z; - streamer.m_pos->GetPosition(x, y, z); - buf << x << y << z; - return buf; -} - -ByteBuffer& operator>>(ByteBuffer& buf, Position::PositionXYZStreamer const& streamer) -{ - float x, y, z; - buf >> x >> y >> z; - streamer.m_pos->Relocate(x, y, z); - return buf; -} - -ByteBuffer& operator<<(ByteBuffer& buf, Position::PositionXYZOStreamer const& streamer) -{ - float x, y, z, o; - streamer.m_pos->GetPosition(x, y, z, o); - buf << x << y << z << o; - return buf; -} - void MovementInfo::OutDebug() { - TC_LOG_INFO("misc", "MOVEMENT INFO"); - TC_LOG_INFO("misc", "%s", guid.ToString().c_str()); - TC_LOG_INFO("misc", "flags %u", flags); - TC_LOG_INFO("misc", "flags2 %u", flags2); - TC_LOG_INFO("misc", "time %u current time " UI64FMTD "", flags2, uint64(::time(NULL))); - TC_LOG_INFO("misc", "position: `%s`", pos.ToString().c_str()); + TC_LOG_DEBUG("misc", "MOVEMENT INFO"); + TC_LOG_DEBUG("misc", "%s", guid.ToString().c_str()); + TC_LOG_DEBUG("misc", "flags %u", flags); + TC_LOG_DEBUG("misc", "flags2 %u", flags2); + TC_LOG_DEBUG("misc", "time %u current time " UI64FMTD "", flags2, uint64(::time(NULL))); + TC_LOG_DEBUG("misc", "position: `%s`", pos.ToString().c_str()); if (flags & MOVEMENTFLAG_ONTRANSPORT) { - TC_LOG_INFO("misc", "TRANSPORT:"); - TC_LOG_INFO("misc", "%s", transport.guid.ToString().c_str()); - TC_LOG_INFO("misc", "position: `%s`", transport.pos.ToString().c_str()); - TC_LOG_INFO("misc", "seat: %i", transport.seat); - TC_LOG_INFO("misc", "time: %u", transport.time); + TC_LOG_DEBUG("misc", "TRANSPORT:"); + TC_LOG_DEBUG("misc", "%s", transport.guid.ToString().c_str()); + TC_LOG_DEBUG("misc", "position: `%s`", transport.pos.ToString().c_str()); + TC_LOG_DEBUG("misc", "seat: %i", transport.seat); + TC_LOG_DEBUG("misc", "time: %u", transport.time); if (flags2 & MOVEMENTFLAG2_INTERPOLATED_MOVEMENT) - TC_LOG_INFO("misc", "time2: %u", transport.time2); + TC_LOG_DEBUG("misc", "time2: %u", transport.time2); } if ((flags & (MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING)) || (flags2 & MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING)) - TC_LOG_INFO("misc", "pitch: %f", pitch); + TC_LOG_DEBUG("misc", "pitch: %f", pitch); - TC_LOG_INFO("misc", "fallTime: %u", fallTime); + TC_LOG_DEBUG("misc", "fallTime: %u", fallTime); if (flags & MOVEMENTFLAG_FALLING) - TC_LOG_INFO("misc", "j_zspeed: %f j_sinAngle: %f j_cosAngle: %f j_xyspeed: %f", jump.zspeed, jump.sinAngle, jump.cosAngle, jump.xyspeed); + TC_LOG_DEBUG("misc", "j_zspeed: %f j_sinAngle: %f j_cosAngle: %f j_xyspeed: %f", jump.zspeed, jump.sinAngle, jump.cosAngle, jump.xyspeed); if (flags & MOVEMENTFLAG_SPLINE_ELEVATION) - TC_LOG_INFO("misc", "splineElevation: %f", splineElevation); + TC_LOG_DEBUG("misc", "splineElevation: %f", splineElevation); } WorldObject::WorldObject(bool isWorldObject) : WorldLocation(), LastUsedScriptID(0), @@ -1430,92 +1368,6 @@ bool WorldObject::IsInRange3d(float x, float y, float z, float minRange, float m return distsq < maxdist * maxdist; } -void Position::RelocateOffset(const Position & offset) -{ - m_positionX = GetPositionX() + (offset.GetPositionX() * std::cos(GetOrientation()) + offset.GetPositionY() * std::sin(GetOrientation() + float(M_PI))); - m_positionY = GetPositionY() + (offset.GetPositionY() * std::cos(GetOrientation()) + offset.GetPositionX() * std::sin(GetOrientation())); - m_positionZ = GetPositionZ() + offset.GetPositionZ(); - SetOrientation(GetOrientation() + offset.GetOrientation()); -} - -void Position::GetPositionOffsetTo(const Position & endPos, Position & retOffset) const -{ - float dx = endPos.GetPositionX() - GetPositionX(); - float dy = endPos.GetPositionY() - GetPositionY(); - - retOffset.m_positionX = dx * std::cos(GetOrientation()) + dy * std::sin(GetOrientation()); - retOffset.m_positionY = dy * std::cos(GetOrientation()) - dx * std::sin(GetOrientation()); - retOffset.m_positionZ = endPos.GetPositionZ() - GetPositionZ(); - retOffset.SetOrientation(endPos.GetOrientation() - GetOrientation()); -} - -Position Position::GetPositionWithOffset(Position const& offset) const -{ - Position ret(*this); - ret.RelocateOffset(offset); - return ret; -} - -float Position::GetAngle(const Position* obj) const -{ - if (!obj) - return 0; - - return GetAngle(obj->GetPositionX(), obj->GetPositionY()); -} - -// Return angle in range 0..2*pi -float Position::GetAngle(const float x, const float y) const -{ - float dx = x - GetPositionX(); - float dy = y - GetPositionY(); - - float ang = std::atan2(dy, dx); - ang = (ang >= 0) ? ang : 2 * float(M_PI) + ang; - return ang; -} - -void Position::GetSinCos(const float x, const float y, float &vsin, float &vcos) const -{ - float dx = GetPositionX() - x; - float dy = GetPositionY() - y; - - if (std::fabs(dx) < 0.001f && std::fabs(dy) < 0.001f) - { - float angle = (float)rand_norm()*static_cast<float>(2*M_PI); - vcos = std::cos(angle); - vsin = std::sin(angle); - } - else - { - float dist = std::sqrt((dx*dx) + (dy*dy)); - vcos = dx / dist; - vsin = dy / dist; - } -} - -bool Position::HasInArc(float arc, const Position* obj, float border) const -{ - // always have self in arc - if (obj == this) - return true; - - // move arc to range 0.. 2*pi - arc = NormalizeOrientation(arc); - - float angle = GetAngle(obj); - angle -= m_orientation; - - // move angle to range -pi ... +pi - angle = NormalizeOrientation(angle); - if (angle > float(M_PI)) - angle -= 2.0f * float(M_PI); - - float lborder = -1 * (arc/border); // in range -pi..0 - float rborder = (arc/border); // in range 0..pi - return ((angle >= lborder) && (angle <= rborder)); -} - bool WorldObject::IsInBetween(const WorldObject* obj1, const WorldObject* obj2, float size) const { if (!obj1 || !obj2) @@ -1649,11 +1501,6 @@ void WorldObject::UpdateAllowedPositionZ(float x, float y, float &z) const } } -bool Position::IsPositionValid() const -{ - return Trinity::IsValidMapCoord(m_positionX, m_positionY, m_positionZ, m_orientation); -} - float WorldObject::GetGridActivationRange() const { if (ToPlayer()) diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index c48d8ff4d18..a560afa7f1b 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -20,6 +20,7 @@ #define _OBJECT_H #include "Common.h" +#include "Position.h" #include "UpdateMask.h" #include "GridReference.h" #include "ObjectDefines.h" @@ -246,141 +247,6 @@ class Object Object& operator=(Object const& right) = delete; }; -struct Position -{ - Position(float x = 0, float y = 0, float z = 0, float o = 0) - : m_positionX(x), m_positionY(y), m_positionZ(z), m_orientation(NormalizeOrientation(o)) { } - - Position(const Position &loc) { Relocate(loc); } - - struct PositionXYZStreamer - { - explicit PositionXYZStreamer(Position& pos) : m_pos(&pos) { } - Position* m_pos; - }; - - struct PositionXYZOStreamer - { - explicit PositionXYZOStreamer(Position& pos) : m_pos(&pos) { } - Position* m_pos; - }; - - float m_positionX; - float m_positionY; - float m_positionZ; -// Better to limit access to m_orientation field, but this will be hard to achieve with many scripts using array initialization for this structure -//private: - float m_orientation; -//public: - - bool operator==(Position const &a); - - inline bool operator!=(Position const &a) - { - return !(operator==(a)); - } - - void Relocate(float x, float y) - { m_positionX = x; m_positionY = y;} - void Relocate(float x, float y, float z) - { m_positionX = x; m_positionY = y; m_positionZ = z; } - void Relocate(float x, float y, float z, float orientation) - { m_positionX = x; m_positionY = y; m_positionZ = z; SetOrientation(orientation); } - void Relocate(Position const &pos) - { m_positionX = pos.m_positionX; m_positionY = pos.m_positionY; m_positionZ = pos.m_positionZ; SetOrientation(pos.m_orientation); } - void Relocate(Position const* pos) - { m_positionX = pos->m_positionX; m_positionY = pos->m_positionY; m_positionZ = pos->m_positionZ; SetOrientation(pos->m_orientation); } - void RelocateOffset(Position const &offset); - void SetOrientation(float orientation) - { m_orientation = NormalizeOrientation(orientation); } - - float GetPositionX() const { return m_positionX; } - float GetPositionY() const { return m_positionY; } - float GetPositionZ() const { return m_positionZ; } - float GetOrientation() const { return m_orientation; } - - void GetPosition(float &x, float &y) const - { x = m_positionX; y = m_positionY; } - void GetPosition(float &x, float &y, float &z) const - { x = m_positionX; y = m_positionY; z = m_positionZ; } - void GetPosition(float &x, float &y, float &z, float &o) const - { x = m_positionX; y = m_positionY; z = m_positionZ; o = m_orientation; } - - Position GetPosition() const - { - return *this; - } - - Position::PositionXYZStreamer PositionXYZStream() - { - return PositionXYZStreamer(*this); - } - Position::PositionXYZOStreamer PositionXYZOStream() - { - return PositionXYZOStreamer(*this); - } - - bool IsPositionValid() const; - - float GetExactDist2dSq(float x, float y) const - { float dx = m_positionX - x; float dy = m_positionY - y; return dx*dx + dy*dy; } - float GetExactDist2d(const float x, const float y) const - { return std::sqrt(GetExactDist2dSq(x, y)); } - float GetExactDist2dSq(Position const* pos) const - { float dx = m_positionX - pos->m_positionX; float dy = m_positionY - pos->m_positionY; return dx*dx + dy*dy; } - float GetExactDist2d(Position const* pos) const - { return std::sqrt(GetExactDist2dSq(pos)); } - float GetExactDistSq(float x, float y, float z) const - { float dz = m_positionZ - z; return GetExactDist2dSq(x, y) + dz*dz; } - float GetExactDist(float x, float y, float z) const - { return std::sqrt(GetExactDistSq(x, y, z)); } - float GetExactDistSq(Position const* pos) const - { float dx = m_positionX - pos->m_positionX; float dy = m_positionY - pos->m_positionY; float dz = m_positionZ - pos->m_positionZ; return dx*dx + dy*dy + dz*dz; } - float GetExactDist(Position const* pos) const - { return std::sqrt(GetExactDistSq(pos)); } - - void GetPositionOffsetTo(Position const & endPos, Position & retOffset) const; - Position GetPositionWithOffset(Position const& offset) const; - - float GetAngle(Position const* pos) const; - float GetAngle(float x, float y) const; - float GetRelativeAngle(Position const* pos) const - { return GetAngle(pos) - m_orientation; } - float GetRelativeAngle(float x, float y) const { return GetAngle(x, y) - m_orientation; } - void GetSinCos(float x, float y, float &vsin, float &vcos) const; - - bool IsInDist2d(float x, float y, float dist) const - { return GetExactDist2dSq(x, y) < dist * dist; } - bool IsInDist2d(Position const* pos, float dist) const - { return GetExactDist2dSq(pos) < dist * dist; } - bool IsInDist(float x, float y, float z, float dist) const - { return GetExactDistSq(x, y, z) < dist * dist; } - bool IsInDist(Position const* pos, float dist) const - { return GetExactDistSq(pos) < dist * dist; } - bool HasInArc(float arcangle, Position const* pos, float border = 2.0f) const; - bool HasInLine(WorldObject const* target, float width) const; - std::string ToString() const; - - // modulos a radian orientation to the range of 0..2PI - static float NormalizeOrientation(float o) - { - // fmod only supports positive numbers. Thus we have - // to emulate negative numbers - if (o < 0) - { - float mod = o *-1; - mod = std::fmod(mod, 2.0f * static_cast<float>(M_PI)); - mod = -mod + 2.0f * static_cast<float>(M_PI); - return mod; - } - return std::fmod(o, 2.0f * static_cast<float>(M_PI)); - } -}; -ByteBuffer& operator>>(ByteBuffer& buf, Position::PositionXYZOStreamer const& streamer); -ByteBuffer& operator<<(ByteBuffer& buf, Position::PositionXYZStreamer const& streamer); -ByteBuffer& operator>>(ByteBuffer& buf, Position::PositionXYZStreamer const& streamer); -ByteBuffer& operator<<(ByteBuffer& buf, Position::PositionXYZOStreamer const& streamer); - struct MovementInfo { // common diff --git a/src/server/game/Entities/Object/ObjectGuid.cpp b/src/server/game/Entities/Object/ObjectGuid.cpp index b86a253a84d..c15668c3887 100644 --- a/src/server/game/Entities/Object/ObjectGuid.cpp +++ b/src/server/game/Entities/Object/ObjectGuid.cpp @@ -18,7 +18,6 @@ #include "ObjectGuid.h" #include "World.h" -#include "ObjectMgr.h" #include <sstream> #include <iomanip> diff --git a/src/server/game/Entities/Object/ObjectGuid.h b/src/server/game/Entities/Object/ObjectGuid.h index be292751811..45881ddab6d 100644 --- a/src/server/game/Entities/Object/ObjectGuid.h +++ b/src/server/game/Entities/Object/ObjectGuid.h @@ -23,6 +23,7 @@ #include "ByteBuffer.h" #include <functional> +#include <unordered_set> enum TypeID { @@ -82,10 +83,12 @@ class ObjectGuid public: static ObjectGuid const Empty; + typedef uint32 LowType; + ObjectGuid() : _guid(0) { } explicit ObjectGuid(uint64 guid) : _guid(guid) { } - ObjectGuid(HighGuid hi, uint32 entry, uint32 counter) : _guid(counter ? uint64(counter) | (uint64(entry) << 24) | (uint64(hi) << 48) : 0) { } - ObjectGuid(HighGuid hi, uint32 counter) : _guid(counter ? uint64(counter) | (uint64(hi) << 48) : 0) { } + ObjectGuid(HighGuid hi, uint32 entry, LowType counter) : _guid(counter ? uint64(counter) | (uint64(entry) << 24) | (uint64(hi) << 48) : 0) { } + ObjectGuid(HighGuid hi, LowType counter) : _guid(counter ? uint64(counter) | (uint64(hi) << 48) : 0) { } operator uint64() const { return _guid; } PackedGuidReader ReadAsPacked() { return PackedGuidReader(*this); } @@ -98,11 +101,11 @@ class ObjectGuid uint64 GetRawValue() const { return _guid; } HighGuid GetHigh() const { return HighGuid((_guid >> 48) & 0x0000FFFF); } uint32 GetEntry() const { return HasEntry() ? uint32((_guid >> 24) & UI64LIT(0x0000000000FFFFFF)) : 0; } - uint32 GetCounter() const + LowType GetCounter() const { return HasEntry() - ? uint32(_guid & UI64LIT(0x0000000000FFFFFF)) - : uint32(_guid & UI64LIT(0x00000000FFFFFFFF)); + ? LowType(_guid & UI64LIT(0x0000000000FFFFFF)) + : LowType(_guid & UI64LIT(0x00000000FFFFFFFF)); } static uint32 GetMaxCounter(HighGuid high) @@ -202,6 +205,7 @@ typedef std::set<ObjectGuid> GuidSet; typedef std::list<ObjectGuid> GuidList; typedef std::deque<ObjectGuid> GuidDeque; typedef std::vector<ObjectGuid> GuidVector; +typedef std::unordered_set<ObjectGuid> GuidUnorderedSet; // minimum buffer size for packed guid is 9 bytes #define PACKED_GUID_MIN_BUFFER_SIZE 9 diff --git a/src/server/game/Entities/Object/Position.cpp b/src/server/game/Entities/Object/Position.cpp new file mode 100644 index 00000000000..530e51cd8f5 --- /dev/null +++ b/src/server/game/Entities/Object/Position.cpp @@ -0,0 +1,184 @@ +/* + * Copyright (C) 2008-2015 TrinityCore <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 (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, see <http://www.gnu.org/licenses/>. + */ + +#include "Position.h" +#include "ByteBuffer.h" +#include "G3D/g3dmath.h" +#include "GridDefines.h" + +bool Position::operator==(Position const &a) +{ + return (G3D::fuzzyEq(a.m_positionX, m_positionX) && + G3D::fuzzyEq(a.m_positionY, m_positionY) && + G3D::fuzzyEq(a.m_positionZ, m_positionZ) && + G3D::fuzzyEq(a.m_orientation, m_orientation)); +} + +void Position::RelocateOffset(const Position & offset) +{ + m_positionX = GetPositionX() + (offset.GetPositionX() * std::cos(GetOrientation()) + offset.GetPositionY() * std::sin(GetOrientation() + float(M_PI))); + m_positionY = GetPositionY() + (offset.GetPositionY() * std::cos(GetOrientation()) + offset.GetPositionX() * std::sin(GetOrientation())); + m_positionZ = GetPositionZ() + offset.GetPositionZ(); + SetOrientation(GetOrientation() + offset.GetOrientation()); +} + +bool Position::IsPositionValid() const +{ + return Trinity::IsValidMapCoord(m_positionX, m_positionY, m_positionZ, m_orientation); +} + +void Position::GetPositionOffsetTo(const Position & endPos, Position & retOffset) const +{ + float dx = endPos.GetPositionX() - GetPositionX(); + float dy = endPos.GetPositionY() - GetPositionY(); + + retOffset.m_positionX = dx * std::cos(GetOrientation()) + dy * std::sin(GetOrientation()); + retOffset.m_positionY = dy * std::cos(GetOrientation()) - dx * std::sin(GetOrientation()); + retOffset.m_positionZ = endPos.GetPositionZ() - GetPositionZ(); + retOffset.SetOrientation(endPos.GetOrientation() - GetOrientation()); +} + +Position Position::GetPositionWithOffset(Position const& offset) const +{ + Position ret(*this); + ret.RelocateOffset(offset); + return ret; +} + +float Position::GetAngle(const Position* obj) const +{ + if (!obj) + return 0; + + return GetAngle(obj->GetPositionX(), obj->GetPositionY()); +} + +// Return angle in range 0..2*pi +float Position::GetAngle(float x, float y) const +{ + float dx = x - GetPositionX(); + float dy = y - GetPositionY(); + + float ang = std::atan2(dy, dx); + ang = (ang >= 0) ? ang : 2 * float(M_PI) + ang; + return ang; +} + +void Position::GetSinCos(const float x, const float y, float &vsin, float &vcos) const +{ + float dx = GetPositionX() - x; + float dy = GetPositionY() - y; + + if (std::fabs(dx) < 0.001f && std::fabs(dy) < 0.001f) + { + float angle = (float)rand_norm()*static_cast<float>(2 * M_PI); + vcos = std::cos(angle); + vsin = std::sin(angle); + } + else + { + float dist = std::sqrt((dx*dx) + (dy*dy)); + vcos = dx / dist; + vsin = dy / dist; + } +} + +bool Position::HasInArc(float arc, const Position* obj, float border) const +{ + // always have self in arc + if (obj == this) + return true; + + // move arc to range 0.. 2*pi + arc = NormalizeOrientation(arc); + + float angle = GetAngle(obj); + angle -= m_orientation; + + // move angle to range -pi ... +pi + angle = NormalizeOrientation(angle); + if (angle > float(M_PI)) + angle -= 2.0f * float(M_PI); + + float lborder = -1 * (arc / border); // in range -pi..0 + float rborder = (arc / border); // in range 0..pi + return ((angle >= lborder) && (angle <= rborder)); +} + +bool Position::HasInLine(Position const* pos, float width) const +{ + if (!HasInArc(float(M_PI), pos)) + return false; + + float angle = GetRelativeAngle(pos); + return std::fabs(std::sin(angle)) * GetExactDist2d(pos->GetPositionX(), pos->GetPositionY()) < width; +} + +std::string Position::ToString() const +{ + std::stringstream sstr; + sstr << "X: " << m_positionX << " Y: " << m_positionY << " Z: " << m_positionZ << " O: " << m_orientation; + return sstr.str(); +} + +ByteBuffer& operator<<(ByteBuffer& buf, Position::PositionXYStreamer const& streamer) +{ + buf << streamer.Pos->GetPositionX(); + buf << streamer.Pos->GetPositionY(); + return buf; +} + +ByteBuffer& operator>>(ByteBuffer& buf, Position::PositionXYStreamer const& streamer) +{ + float x, y; + buf >> x >> y; + streamer.Pos->Relocate(x, y); + return buf; +} + +ByteBuffer& operator<<(ByteBuffer& buf, Position::PositionXYZStreamer const& streamer) +{ + buf << streamer.Pos->GetPositionX(); + buf << streamer.Pos->GetPositionY(); + buf << streamer.Pos->GetPositionZ(); + return buf; +} + +ByteBuffer& operator>>(ByteBuffer& buf, Position::PositionXYZStreamer const& streamer) +{ + float x, y, z; + buf >> x >> y >> z; + streamer.Pos->Relocate(x, y, z); + return buf; +} + +ByteBuffer& operator<<(ByteBuffer& buf, Position::PositionXYZOStreamer const& streamer) +{ + buf << streamer.Pos->GetPositionX(); + buf << streamer.Pos->GetPositionY(); + buf << streamer.Pos->GetPositionZ(); + buf << streamer.Pos->GetOrientation(); + return buf; +} + +ByteBuffer& operator>>(ByteBuffer& buf, Position::PositionXYZOStreamer const& streamer) +{ + float x, y, z, o; + buf >> x >> y >> z >> o; + streamer.Pos->Relocate(x, y, z, o); + return buf; +} diff --git a/src/server/game/Entities/Object/Position.h b/src/server/game/Entities/Object/Position.h new file mode 100644 index 00000000000..5bd37567811 --- /dev/null +++ b/src/server/game/Entities/Object/Position.h @@ -0,0 +1,225 @@ +/* + * Copyright (C) 2008-2015 TrinityCore <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 (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, see <http://www.gnu.org/licenses/>. + */ + +#ifndef Trinity_game_Position_h__ +#define Trinity_game_Position_h__ + +#include "Common.h" + +class ByteBuffer; + +struct Position +{ + Position(float x = 0, float y = 0, float z = 0, float o = 0) + : m_positionX(x), m_positionY(y), m_positionZ(z), m_orientation(NormalizeOrientation(o)) { } + + Position(Position const& loc) { Relocate(loc); } + + struct PositionXYStreamer + { + explicit PositionXYStreamer(Position& pos) : Pos(&pos) { } + Position* Pos; + }; + + struct PositionXYZStreamer + { + explicit PositionXYZStreamer(Position& pos) : Pos(&pos) { } + Position* Pos; + }; + + struct PositionXYZOStreamer + { + explicit PositionXYZOStreamer(Position& pos) : Pos(&pos) { } + Position* Pos; + }; + + float m_positionX; + float m_positionY; + float m_positionZ; + // Better to limit access to _orientation field, to guarantee the value is normalized +private: + float m_orientation; + +public: + bool operator==(Position const &a); + + inline bool operator!=(Position const &a) + { + return !(operator==(a)); + } + + void Relocate(float x, float y) + { + m_positionX = x; m_positionY = y; + } + + void Relocate(float x, float y, float z) + { + m_positionX = x; m_positionY = y; m_positionZ = z; + } + + void Relocate(float x, float y, float z, float orientation) + { + m_positionX = x; m_positionY = y; m_positionZ = z; SetOrientation(orientation); + } + + void Relocate(Position const &pos) + { + m_positionX = pos.m_positionX; m_positionY = pos.m_positionY; m_positionZ = pos.m_positionZ; SetOrientation(pos.m_orientation); + } + + void Relocate(Position const* pos) + { + m_positionX = pos->m_positionX; m_positionY = pos->m_positionY; m_positionZ = pos->m_positionZ; SetOrientation(pos->m_orientation); + } + + void RelocateOffset(Position const &offset); + + void SetOrientation(float orientation) + { + m_orientation = NormalizeOrientation(orientation); + } + + float GetPositionX() const { return m_positionX; } + float GetPositionY() const { return m_positionY; } + float GetPositionZ() const { return m_positionZ; } + float GetOrientation() const { return m_orientation; } + + void GetPosition(float &x, float &y) const + { + x = m_positionX; y = m_positionY; + } + + void GetPosition(float &x, float &y, float &z) const + { + x = m_positionX; y = m_positionY; z = m_positionZ; + } + + void GetPosition(float &x, float &y, float &z, float &o) const + { + x = m_positionX; y = m_positionY; z = m_positionZ; o = m_orientation; + } + + Position GetPosition() const { return *this; } + + Position::PositionXYStreamer PositionXYStream() { return PositionXYStreamer(*this); } + Position::PositionXYZStreamer PositionXYZStream() { return PositionXYZStreamer(*this); } + Position::PositionXYZOStreamer PositionXYZOStream() { return PositionXYZOStreamer(*this); } + + bool IsPositionValid() const; + + float GetExactDist2dSq(float x, float y) const + { + float dx = m_positionX - x; float dy = m_positionY - y; return dx*dx + dy*dy; + } + + float GetExactDist2d(const float x, const float y) const + { + return std::sqrt(GetExactDist2dSq(x, y)); + } + + float GetExactDist2dSq(Position const* pos) const + { + float dx = m_positionX - pos->m_positionX; float dy = m_positionY - pos->m_positionY; return dx*dx + dy*dy; + } + + float GetExactDist2d(Position const* pos) const + { + return std::sqrt(GetExactDist2dSq(pos)); + } + + float GetExactDistSq(float x, float y, float z) const + { + float dz = m_positionZ - z; return GetExactDist2dSq(x, y) + dz*dz; + } + + float GetExactDist(float x, float y, float z) const + { + return std::sqrt(GetExactDistSq(x, y, z)); + } + + float GetExactDistSq(Position const* pos) const + { + float dx = m_positionX - pos->m_positionX; float dy = m_positionY - pos->m_positionY; float dz = m_positionZ - pos->m_positionZ; return dx*dx + dy*dy + dz*dz; + } + + float GetExactDist(Position const* pos) const + { + return std::sqrt(GetExactDistSq(pos)); + } + + void GetPositionOffsetTo(Position const & endPos, Position & retOffset) const; + Position GetPositionWithOffset(Position const& offset) const; + + float GetAngle(Position const* pos) const; + float GetAngle(float x, float y) const; + float GetRelativeAngle(Position const* pos) const + { + return GetAngle(pos) - m_orientation; + } + + float GetRelativeAngle(float x, float y) const { return GetAngle(x, y) - m_orientation; } + void GetSinCos(float x, float y, float &vsin, float &vcos) const; + + bool IsInDist2d(float x, float y, float dist) const + { + return GetExactDist2dSq(x, y) < dist * dist; + } + + bool IsInDist2d(Position const* pos, float dist) const + { + return GetExactDist2dSq(pos) < dist * dist; + } + + bool IsInDist(float x, float y, float z, float dist) const + { + return GetExactDistSq(x, y, z) < dist * dist; + } + + bool IsInDist(Position const* pos, float dist) const + { + return GetExactDistSq(pos) < dist * dist; + } + + bool HasInArc(float arcangle, Position const* pos, float border = 2.0f) const; + bool HasInLine(Position const* pos, float width) const; + std::string ToString() const; + + // modulos a radian orientation to the range of 0..2PI + static float NormalizeOrientation(float o) + { + // fmod only supports positive numbers. Thus we have + // to emulate negative numbers + if (o < 0) + { + float mod = o *-1; + mod = std::fmod(mod, 2.0f * static_cast<float>(M_PI)); + mod = -mod + 2.0f * static_cast<float>(M_PI); + return mod; + } + return std::fmod(o, 2.0f * static_cast<float>(M_PI)); + } +}; + +ByteBuffer& operator<<(ByteBuffer& buf, Position::PositionXYStreamer const& streamer); +ByteBuffer& operator>>(ByteBuffer& buf, Position::PositionXYStreamer const& streamer); +ByteBuffer& operator<<(ByteBuffer& buf, Position::PositionXYZStreamer const& streamer); +ByteBuffer& operator>>(ByteBuffer& buf, Position::PositionXYZStreamer const& streamer); +ByteBuffer& operator<<(ByteBuffer& buf, Position::PositionXYZOStreamer const& streamer); +ByteBuffer& operator>>(ByteBuffer& buf, Position::PositionXYZOStreamer const& streamer); + +#endif // Trinity_game_Position_h__ diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index 5084031880d..97cdb0cf1df 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -24,9 +24,9 @@ #include "SpellMgr.h" #include "Pet.h" #include "Formulas.h" +#include "SpellHistory.h" #include "SpellAuras.h" #include "SpellAuraEffects.h" -#include "CreatureAI.h" #include "Unit.h" #include "Util.h" #include "Group.h" @@ -408,7 +408,7 @@ void Pet::SavePetToDB(PetSaveMode mode) RemoveAllAuras(); _SaveSpells(trans); - _SaveSpellCooldowns(trans); + GetSpellHistory()->SaveToDB<Pet>(trans); CharacterDatabase.CommitTransaction(trans); // current/stable/not_in_slot @@ -1107,77 +1107,11 @@ uint32 Pet::GetCurrentFoodBenefitLevel(uint32 itemlevel) const void Pet::_LoadSpellCooldowns() { - m_CreatureSpellCooldowns.clear(); - m_CreatureCategoryCooldowns.clear(); - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PET_SPELL_COOLDOWN); stmt->setUInt32(0, m_charmInfo->GetPetNumber()); - PreparedQueryResult result = CharacterDatabase.Query(stmt); - - if (result) - { - time_t curTime = time(NULL); - - PacketCooldowns cooldowns; - WorldPacket data; - - do - { - Field* fields = result->Fetch(); - - uint32 spell_id = fields[0].GetUInt32(); - time_t db_time = time_t(fields[1].GetUInt32()); - - if (!sSpellMgr->GetSpellInfo(spell_id)) - { - TC_LOG_ERROR("entities.pet", "Pet %u have unknown spell %u in `pet_spell_cooldown`, skipping.", m_charmInfo->GetPetNumber(), spell_id); - continue; - } + PreparedQueryResult cooldownsResult = CharacterDatabase.Query(stmt); - // skip outdated cooldown - if (db_time <= curTime) - continue; - - cooldowns[spell_id] = uint32(db_time - curTime)*IN_MILLISECONDS; - - _AddCreatureSpellCooldown(spell_id, db_time); - - TC_LOG_DEBUG("entities.pet", "Pet (Number: %u) spell %u cooldown loaded (%u secs).", m_charmInfo->GetPetNumber(), spell_id, uint32(db_time-curTime)); - } - while (result->NextRow()); - - if (!cooldowns.empty()) - { - BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_NONE, cooldowns); - GetOwner()->GetSession()->SendPacket(&data); - } - } -} - -void Pet::_SaveSpellCooldowns(SQLTransaction& trans) -{ - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PET_SPELL_COOLDOWNS); - stmt->setUInt32(0, m_charmInfo->GetPetNumber()); - trans->Append(stmt); - - time_t curTime = time(NULL); - - // remove oudated and save active - for (CreatureSpellCooldowns::iterator itr = m_CreatureSpellCooldowns.begin(); itr != m_CreatureSpellCooldowns.end();) - { - if (itr->second <= curTime) - m_CreatureSpellCooldowns.erase(itr++); - else - { - stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PET_SPELL_COOLDOWN); - stmt->setUInt32(0, m_charmInfo->GetPetNumber()); - stmt->setUInt32(1, itr->first); - stmt->setUInt32(2, uint32(itr->second)); - trans->Append(stmt); - - ++itr; - } - } + GetSpellHistory()->LoadFromDB<Pet>(cooldownsResult); } void Pet::_LoadSpells() @@ -1314,7 +1248,7 @@ void Pet::_LoadAuras(uint32 timediff) } aura->SetLoadedState(maxduration, remaintime, remaincharges, stackcount, recalculatemask, &damage[0]); aura->ApplyForTargets(); - TC_LOG_INFO("entities.pet", "Added aura spellid %u, effectmask %u", spellInfo->Id, effmask); + TC_LOG_DEBUG("entities.pet", "Added aura spellid %u, effectmask %u", spellInfo->Id, effmask); } } while (result->NextRow()); @@ -2026,40 +1960,6 @@ void Pet::SynchronizeLevelWithOwner() } } -void Pet::ProhibitSpellSchool(SpellSchoolMask idSchoolMask, uint32 unTimeMs) -{ - PacketCooldowns cooldowns; - WorldPacket data; - time_t curTime = time(NULL); - for (PetSpellMap::const_iterator itr = m_spells.begin(); itr != m_spells.end(); ++itr) - { - if (itr->second.state == PETSPELL_REMOVED) - continue; - - uint32 unSpellId = itr->first; - SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(unSpellId); - - // Not send cooldown for this spells - if (spellInfo->IsCooldownStartedOnEvent()) - continue; - - if (spellInfo->PreventionType != SPELL_PREVENTION_TYPE_SILENCE) - continue; - - if ((idSchoolMask & spellInfo->GetSchoolMask()) && GetCreatureSpellCooldownDelay(unSpellId) < unTimeMs) - { - cooldowns[unSpellId] = unTimeMs; - _AddCreatureSpellCooldown(unSpellId, curTime + unTimeMs/IN_MILLISECONDS); - } - } - - if (!cooldowns.empty()) - { - BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_NONE, cooldowns); - GetOwner()->GetSession()->SendPacket(&data); - } -} - Player* Pet::GetOwner() const { return Minion::GetOwner()->ToPlayer(); diff --git a/src/server/game/Entities/Pet/Pet.h b/src/server/game/Entities/Pet/Pet.h index 62d82aaab1b..1cc86ea2a20 100644 --- a/src/server/game/Entities/Pet/Pet.h +++ b/src/server/game/Entities/Pet/Pet.h @@ -108,7 +108,6 @@ class Pet : public Guardian bool IsPetAura(Aura const* aura); void _LoadSpellCooldowns(); - void _SaveSpellCooldowns(SQLTransaction& trans); void _LoadAuras(uint32 timediff); void _SaveAuras(SQLTransaction& trans); void _LoadSpells(); @@ -121,7 +120,6 @@ class Pet : public Guardian bool unlearnSpell(uint32 spell_id, bool learn_prev, bool clear_ab = true); bool removeSpell(uint32 spell_id, bool learn_prev, bool clear_ab = true); void CleanupActionBar(); - virtual void ProhibitSpellSchool(SpellSchoolMask idSchoolMask, uint32 unTimeMs) override; PetSpellMap m_spells; AutoSpellList m_autospells; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 87cff6f2c37..275dbf92dca 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -51,7 +51,6 @@ #include "LFGMgr.h" #include "Language.h" #include "Log.h" -#include "MapInstanced.h" #include "MapManager.h" #include "ObjectAccessor.h" #include "ObjectMgr.h" @@ -68,12 +67,12 @@ #include "SpellAuraEffects.h" #include "SpellAuras.h" #include "SpellMgr.h" +#include "SpellHistory.h" #include "Transport.h" #include "UpdateData.h" #include "UpdateFieldFlags.h" #include "UpdateMask.h" #include "Util.h" -#include "Vehicle.h" #include "Weather.h" #include "WeatherMgr.h" #include "World.h" @@ -966,8 +965,6 @@ bool Player::Create(uint32 guidlow, CharacterCreateInfo* createInfo) { //FIXME: outfitId not used in player creating /// @todo need more checks against packet modifications - // should check that skin, face, hair* are valid via DBC per race/class - // also do it in Player::BuildEnumData, Player::LoadFromDB Object::_Create(guidlow, 0, HIGHGUID_PLAYER); @@ -1009,6 +1006,13 @@ bool Player::Create(uint32 guidlow, CharacterCreateInfo* createInfo) return false; } + if (!ValidateAppearance(createInfo->Race, createInfo->Class, createInfo->Gender, createInfo->HairStyle, createInfo->HairColor, createInfo->Face, createInfo->FacialHair, createInfo->Skin, true)) + { + TC_LOG_ERROR("entities.player", "Player::Create: Possible hacking-attempt: Account %u tried creating a character named '%s' with invalid appearance attributes - refusing to do so", + GetSession()->GetAccountId(), m_name.c_str()); + return false; + } + uint32 RaceClassGender = (createInfo->Race) | (createInfo->Class << 8) | (createInfo->Gender << 16); SetUInt32Value(UNIT_FIELD_BYTES_0, (RaceClassGender | (powertype << 24))); @@ -1981,12 +1985,29 @@ bool Player::BuildEnumData(PreparedQueryResult result, WorldPacket* data) *data << uint8(gender); // gender uint32 playerBytes = fields[5].GetUInt32(); + uint32 playerBytes2 = fields[6].GetUInt32(); + + uint16 atLoginFlags = fields[15].GetUInt16(); + + if (!ValidateAppearance(uint8(plrRace), uint8(plrClass), gender, uint8(playerBytes >> 16), uint8(playerBytes >> 24), uint8(playerBytes >> 8), uint8(playerBytes2), uint8(playerBytes))) + { + TC_LOG_ERROR("entities.player.loading", "Player %u has wrong Appearance values (Hair/Skin/Color), forcing recustomize", guid); + + if (!(atLoginFlags & AT_LOGIN_CUSTOMIZE)) + { + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG); + stmt->setUInt16(0, uint16(AT_LOGIN_CUSTOMIZE)); + stmt->setUInt32(1, guid); + CharacterDatabase.Execute(stmt); + atLoginFlags |= AT_LOGIN_CUSTOMIZE; + } + } + *data << uint8(playerBytes); // skin *data << uint8(playerBytes >> 8); // face *data << uint8(playerBytes >> 16); // hair style *data << uint8(playerBytes >> 24); // hair color - uint32 playerBytes2 = fields[6].GetUInt32(); *data << uint8(playerBytes2 & 0xFF); // facial hair *data << uint8(fields[7].GetUInt8()); // level @@ -2001,7 +2022,6 @@ bool Player::BuildEnumData(PreparedQueryResult result, WorldPacket* data) uint32 charFlags = 0; uint32 playerFlags = fields[14].GetUInt32(); - uint16 atLoginFlags = fields[15].GetUInt16(); if (playerFlags & PLAYER_FLAGS_HIDE_HELM) charFlags |= CHARACTER_FLAG_HIDE_HELM; if (playerFlags & PLAYER_FLAGS_HIDE_CLOAK) @@ -3326,12 +3346,10 @@ void Player::InitStatsForLevel(bool reapplyMods) void Player::SendInitialSpells() { - time_t curTime = time(NULL); - time_t infTime = curTime + infinityCooldownDelayCheck; - + uint16 spellCooldowns = GetSpellHistory()->GetCooldownsSizeForPacket(); uint16 spellCount = 0; - WorldPacket data(SMSG_INITIAL_SPELLS, (1+2+4*m_spells.size()+2+m_spellCooldowns.size()*(2+2+2+4+4))); + WorldPacket data(SMSG_INITIAL_SPELLS, (1 + 2 + 4 * m_spells.size() + 2 + spellCooldowns * (2 + 2 + 2 + 4 + 4))); data << uint8(0); size_t countPos = data.wpos(); @@ -3353,40 +3371,7 @@ void Player::SendInitialSpells() data.put<uint16>(countPos, spellCount); // write real count value - uint16 spellCooldowns = m_spellCooldowns.size(); - data << uint16(spellCooldowns); - for (SpellCooldowns::const_iterator itr = m_spellCooldowns.begin(); itr != m_spellCooldowns.end(); ++itr) - { - SpellInfo const* sEntry = sSpellMgr->GetSpellInfo(itr->first); - if (!sEntry) - continue; - - data << uint32(itr->first); - - data << uint16(itr->second.itemid); // cast item id - data << uint16(sEntry->GetCategory()); // spell category - - // send infinity cooldown in special format - if (itr->second.end >= infTime) - { - data << uint32(1); // cooldown - data << uint32(0x80000000); // category cooldown - continue; - } - - time_t cooldown = itr->second.end > curTime ? (itr->second.end-curTime)*IN_MILLISECONDS : 0; - - if (sEntry->GetCategory()) // may be wrong, but anyway better than nothing... - { - data << uint32(0); // cooldown - data << uint32(cooldown); // category cooldown - } - else - { - data << uint32(cooldown); // cooldown - data << uint32(0); // category cooldown - } - } + GetSpellHistory()->WritePacket<Player>(data); GetSession()->SendPacket(&data); @@ -3902,7 +3887,7 @@ bool Player::IsNeedCastPassiveSpellAtLearn(SpellInfo const* spellInfo) const // talent dependent passives activated at form apply have proper stance data ShapeshiftForm form = GetShapeshiftForm(); bool need_cast = (!spellInfo->Stances || (form && (spellInfo->Stances & (1 << (form - 1)))) || - (!form && (spellInfo->AttributesEx2 & SPELL_ATTR2_NOT_NEED_SHAPESHIFT))); + (!form && spellInfo->HasAttribute(SPELL_ATTR2_NOT_NEED_SHAPESHIFT))); //Check CasterAuraStates return need_cast && (!spellInfo->CasterAuraState || HasAuraState(AuraStateType(spellInfo->CasterAuraState))); @@ -4183,154 +4168,19 @@ bool Player::Has310Flyer(bool checkAllSpells, uint32 excludeSpellId) return false; } -void Player::RemoveSpellCooldown(uint32 spell_id, bool update /* = false */) -{ - m_spellCooldowns.erase(spell_id); - - if (update) - SendClearCooldown(spell_id, this); -} - -// I am not sure which one is more efficient -void Player::RemoveCategoryCooldown(uint32 cat) -{ - SpellCategoryStore::const_iterator i_scstore = sSpellsByCategoryStore.find(cat); - if (i_scstore != sSpellsByCategoryStore.end()) - for (SpellCategorySet::const_iterator i_scset = i_scstore->second.begin(); i_scset != i_scstore->second.end(); ++i_scset) - RemoveSpellCooldown(*i_scset, true); -} - -void Player::RemoveSpellCategoryCooldown(uint32 cat, bool update /* = false */) -{ - SpellCategoryStore::const_iterator ct = sSpellsByCategoryStore.find(cat); - if (ct == sSpellsByCategoryStore.end()) - return; - - const SpellCategorySet& ct_set = ct->second; - for (SpellCooldowns::const_iterator i = m_spellCooldowns.begin(); i != m_spellCooldowns.end();) - { - if (ct_set.find(i->first) != ct_set.end()) - RemoveSpellCooldown((i++)->first, update); - else - ++i; - } -} - void Player::RemoveArenaSpellCooldowns(bool removeActivePetCooldowns) { // remove cooldowns on spells that have < 10 min CD - - SpellCooldowns::iterator itr, next; - for (itr = m_spellCooldowns.begin(); itr != m_spellCooldowns.end(); itr = next) + GetSpellHistory()->ResetCooldowns([](SpellHistory::CooldownStorageType::iterator itr) -> bool { - next = itr; - ++next; - SpellInfo const* entry = sSpellMgr->GetSpellInfo(itr->first); - // check if spellentry is present and if the cooldown is less than 10 min - if (entry && - entry->RecoveryTime < 10 * MINUTE * IN_MILLISECONDS && - entry->CategoryRecoveryTime < 10 * MINUTE * IN_MILLISECONDS) - { - // remove & notify - RemoveSpellCooldown(itr->first, true); - } - } + SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(itr->first); + return spellInfo->RecoveryTime < 10 * MINUTE * IN_MILLISECONDS && spellInfo->CategoryRecoveryTime < 10 * MINUTE * IN_MILLISECONDS; + }, true); // pet cooldowns if (removeActivePetCooldowns) if (Pet* pet = GetPet()) - { - // notify player - for (CreatureSpellCooldowns::const_iterator itr2 = pet->m_CreatureSpellCooldowns.begin(); itr2 != pet->m_CreatureSpellCooldowns.end(); ++itr2) - SendClearCooldown(itr2->first, pet); - - // actually clear cooldowns - pet->m_CreatureSpellCooldowns.clear(); - } -} - -void Player::RemoveAllSpellCooldown() -{ - if (!m_spellCooldowns.empty()) - { - for (SpellCooldowns::const_iterator itr = m_spellCooldowns.begin(); itr != m_spellCooldowns.end(); ++itr) - SendClearCooldown(itr->first, this); - - m_spellCooldowns.clear(); - } -} - -void Player::_LoadSpellCooldowns(PreparedQueryResult result) -{ - // some cooldowns can be already set at aura loading... - - //QueryResult* result = CharacterDatabase.PQuery("SELECT spell, item, time FROM character_spell_cooldown WHERE guid = '%u'", GetGUIDLow()); - - if (result) - { - time_t curTime = time(NULL); - - do - { - Field* fields = result->Fetch(); - uint32 spell_id = fields[0].GetUInt32(); - uint32 item_id = fields[1].GetUInt32(); - time_t db_time = time_t(fields[2].GetUInt32()); - - if (!sSpellMgr->GetSpellInfo(spell_id)) - { - TC_LOG_ERROR("entities.player.loading", "Player %u has unknown spell %u in `character_spell_cooldown`, skipping.", GetGUIDLow(), spell_id); - continue; - } - - // skip outdated cooldown - if (db_time <= curTime) - continue; - - AddSpellCooldown(spell_id, item_id, db_time); - - TC_LOG_DEBUG("entities.player.loading", "Player (GUID: %u) spell %u, item %u cooldown loaded (%u secs).", GetGUIDLow(), spell_id, item_id, uint32(db_time-curTime)); - } - while (result->NextRow()); - } -} - -void Player::_SaveSpellCooldowns(SQLTransaction& trans) -{ - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_SPELL_COOLDOWN); - stmt->setUInt32(0, GetGUIDLow()); - trans->Append(stmt); - - time_t curTime = time(NULL); - time_t infTime = curTime + infinityCooldownDelayCheck; - - bool first_round = true; - std::ostringstream ss; - - // remove outdated and save active - for (SpellCooldowns::iterator itr = m_spellCooldowns.begin(); itr != m_spellCooldowns.end();) - { - if (itr->second.end <= curTime) - m_spellCooldowns.erase(itr++); - else if (itr->second.end <= infTime) // not save locked cooldowns, it will be reset or set at reload - { - if (first_round) - { - ss << "INSERT INTO character_spell_cooldown (guid, spell, item, time) VALUES "; - first_round = false; - } - // next new/changed record prefix - else - ss << ','; - ss << '(' << GetGUIDLow() << ',' << itr->first << ',' << itr->second.itemid << ',' << uint64(itr->second.end) << ')'; - ++itr; - } - else - ++itr; - } - // if something changed execute - if (!first_round) - trans->Append(ss.str().c_str()); + pet->GetSpellHistory()->ResetAllCooldowns(); } uint32 Player::ResetTalentsCost() const @@ -4830,10 +4680,22 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe stmt->setUInt32(0, guid); trans->Append(stmt); + stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_ARENA_STATS); + stmt->setUInt32(0, guid); + trans->Append(stmt); + stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_AURA); stmt->setUInt32(0, guid); trans->Append(stmt); + stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PLAYER_BGDATA); + stmt->setUInt32(0, guid); + trans->Append(stmt); + + stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_BATTLEGROUND_RANDOM); + stmt->setUInt32(0, guid); + trans->Append(stmt); + stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_GIFT); stmt->setUInt32(0, guid); trans->Append(stmt); @@ -4866,7 +4728,7 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe stmt->setUInt32(0, guid); trans->Append(stmt); - stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_SPELL_COOLDOWN); + stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_SPELL_COOLDOWNS); stmt->setUInt32(0, guid); trans->Append(stmt); @@ -4923,10 +4785,6 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe stmt->setUInt32(0, guid); trans->Append(stmt); - stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PLAYER_BGDATA); - stmt->setUInt32(0, guid); - trans->Append(stmt); - stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_GLYPHS); stmt->setUInt32(0, guid); trans->Append(stmt); @@ -4955,6 +4813,10 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe stmt->setUInt32(0, guid); trans->Append(stmt); + stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_STATS); + stmt->setUInt32(0, guid); + trans->Append(stmt); + CharacterDatabase.CommitTransaction(trans); break; } @@ -5002,7 +4864,7 @@ void Player::DeleteOldCharacters() */ void Player::DeleteOldCharacters(uint32 keepDays) { - TC_LOG_INFO("entities.player", "Player::DeleteOldChars: Deleting all characters which have been deleted %u days before...", keepDays); + TC_LOG_INFO("entities.player", "Player::DeleteOldChars: Removing characters older than %u day(s)", keepDays); PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_OLD_CHARS); stmt->setUInt32(0, uint32(time(NULL) - time_t(keepDays * DAY))); @@ -5010,7 +4872,7 @@ void Player::DeleteOldCharacters(uint32 keepDays) if (result) { - TC_LOG_DEBUG("entities.player", "Player::DeleteOldChars: Found " UI64FMTD " character(s) to delete", result->GetRowCount()); + TC_LOG_DEBUG("entities.player", "Player::DeleteOldChars: " UI64FMTD " character(s) to remove", result->GetRowCount()); do { Field* fields = result->Fetch(); @@ -6636,20 +6498,20 @@ void Player::SendActionButtons(uint32 state) const } GetSession()->SendPacket(&data); - TC_LOG_INFO("network", "SMSG_ACTION_BUTTONS sent '%u' spec '%u' Sent", GetGUIDLow(), m_activeSpec); + TC_LOG_DEBUG("network", "SMSG_ACTION_BUTTONS sent '%u' spec '%u' Sent", GetGUIDLow(), m_activeSpec); } bool Player::IsActionButtonDataValid(uint8 button, uint32 action, uint8 type) { if (button >= MAX_ACTION_BUTTONS) { - TC_LOG_ERROR("entities.player", "Action %u not added into button %u for player %s (GUID: %u): button must be < %u", action, button, GetName().c_str(), GetGUIDLow(), MAX_ACTION_BUTTONS ); + TC_LOG_DEBUG("entities.player", "Action %u not added into button %u for player %s (GUID: %u): button must be < %u", action, button, GetName().c_str(), GetGUIDLow(), MAX_ACTION_BUTTONS ); return false; } if (action >= MAX_ACTION_BUTTON_ACTION_VALUE) { - TC_LOG_ERROR("entities.player", "Action %u not added into button %u for player %s (GUID: %u): action must be < %u", action, button, GetName().c_str(), GetGUIDLow(), MAX_ACTION_BUTTON_ACTION_VALUE); + TC_LOG_DEBUG("entities.player", "Action %u not added into button %u for player %s (GUID: %u): action must be < %u", action, button, GetName().c_str(), GetGUIDLow(), MAX_ACTION_BUTTON_ACTION_VALUE); return false; } @@ -6658,20 +6520,20 @@ bool Player::IsActionButtonDataValid(uint8 button, uint32 action, uint8 type) case ACTION_BUTTON_SPELL: if (!sSpellMgr->GetSpellInfo(action)) { - TC_LOG_ERROR("entities.player", "Spell action %u not added into button %u for player %s (GUID: %u): spell not exist", action, button, GetName().c_str(), GetGUIDLow()); + TC_LOG_DEBUG("entities.player", "Spell action %u not added into button %u for player %s (GUID: %u): spell not exist", action, button, GetName().c_str(), GetGUIDLow()); return false; } if (!HasSpell(action)) { - TC_LOG_ERROR("entities.player", "Spell action %u not added into button %u for player %s (GUID: %u): player don't known this spell", action, button, GetName().c_str(), GetGUIDLow()); + TC_LOG_DEBUG("entities.player", "Spell action %u not added into button %u for player %s (GUID: %u): player don't known this spell", action, button, GetName().c_str(), GetGUIDLow()); return false; } break; case ACTION_BUTTON_ITEM: if (!sObjectMgr->GetItemTemplate(action)) { - TC_LOG_ERROR("entities.player", "Item action %u not added into button %u for player %s (GUID: %u): item not exist", action, button, GetName().c_str(), GetGUIDLow()); + TC_LOG_DEBUG("entities.player", "Item action %u not added into button %u for player %s (GUID: %u): item not exist", action, button, GetName().c_str(), GetGUIDLow()); return false; } break; @@ -6681,7 +6543,7 @@ bool Player::IsActionButtonDataValid(uint8 button, uint32 action, uint8 type) case ACTION_BUTTON_EQSET: break; default: - TC_LOG_ERROR("entities.player", "Unknown action type %u", type); + TC_LOG_DEBUG("entities.player", "Unknown action type %u", type); return false; // other cases not checked at this moment } @@ -6883,7 +6745,7 @@ void Player::CheckAreaExploreAndOutdoor() GiveXP(XP, NULL); SendExplorationExperience(area, XP); } - TC_LOG_INFO("entities.player", "Player %u discovered a new area: %u", GetGUIDLow(), area); + TC_LOG_DEBUG("entities.player", "Player %u discovered a new area: %u", GetGUIDLow(), area); } } } @@ -7763,7 +7625,7 @@ void Player::_ApplyItemMods(Item* item, uint8 slot, bool apply) if (item->IsBroken()) return; - TC_LOG_INFO("entities.player.items", "applying mods for item %u ", item->GetGUIDLow()); + TC_LOG_DEBUG("entities.player.items", "applying mods for item %u ", item->GetGUIDLow()); uint8 attacktype = Player::GetAttackBySlot(slot); @@ -8351,7 +8213,7 @@ void Player::CastItemCombatSpell(Unit* target, WeaponAttackType attType, uint32 if (procVictim & PROC_FLAG_TAKEN_DAMAGE) //if (damageInfo->procVictim & PROC_FLAG_TAKEN_ANY_DAMAGE) { - for (uint8 i = 0; i < MAX_ITEM_SPELLS; ++i) + for (uint8 i = 0; i < MAX_ITEM_PROTO_SPELLS; ++i) { _Spell const& spellData = proto->Spells[i]; @@ -9774,7 +9636,7 @@ uint32 Player::GetXPRestBonus(uint32 xp) SetRestBonus(GetRestBonus() - rested_bonus); - TC_LOG_INFO("entities.player", "Player gain %u xp (+ %u Rested Bonus). Rested points=%f", xp+rested_bonus, rested_bonus, GetRestBonus()); + TC_LOG_DEBUG("entities.player", "GetXPRestBonus: Player %s (%u) gain %u xp (+%u Rested Bonus). Rested points=%f", GetName().c_str(), GetGUIDLow(), xp+rested_bonus, rested_bonus, GetRestBonus()); return rested_bonus; } @@ -12394,10 +12256,9 @@ Item* Player::EquipItem(uint16 pos, Item* pItem, bool update) { m_weaponChangeTimer = spellProto->StartRecoveryTime; - GetGlobalCooldownMgr().AddGlobalCooldown(spellProto, m_weaponChangeTimer); - + GetSpellHistory()->AddGlobalCooldown(spellProto, m_weaponChangeTimer); WorldPacket data; - BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_INCLUDE_GCD, cooldownSpell, 0); + GetSpellHistory()->BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_INCLUDE_GCD, cooldownSpell, 0); GetSession()->SendPacket(&data); } } @@ -16361,6 +16222,8 @@ void Player::AreaExploredOrEventHappens(uint32 questId) { q_status.Explored = true; m_QuestStatusSave[questId] = QUEST_DEFAULT_SAVE_TYPE; + SetQuestSlotState(log_slot, QUEST_STATE_COMPLETE); + SendQuestComplete(questId); } } if (CanCompleteQuest(questId)) @@ -17280,6 +17143,20 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) SetUInt32Value(PLAYER_BYTES_2, fields[10].GetUInt32()); SetByteValue(PLAYER_BYTES_3, 0, fields[5].GetUInt8()); SetByteValue(PLAYER_BYTES_3, 1, fields[49].GetUInt8()); + + if (!ValidateAppearance( + fields[3].GetUInt8(), // race + fields[4].GetUInt8(), // class + gender, GetByteValue(PLAYER_BYTES, 2), // hair type + GetByteValue(PLAYER_BYTES, 3), //hair color + uint8(fields[9].GetUInt32() >> 8), // face + GetByteValue(PLAYER_BYTES_2, 0), // facial hair + GetByteValue(PLAYER_BYTES, 0))) // skin color + { + TC_LOG_ERROR("entities.player", "Player %s has wrong Appearance values (Hair/Skin/Color), can't be loaded.", guid.ToString().c_str()); + return false; + } + SetUInt32Value(PLAYER_FLAGS, fields[11].GetUInt32()); SetInt32Value(PLAYER_FIELD_WATCHED_FACTION_INDEX, fields[48].GetUInt32()); @@ -17764,7 +17641,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) // has to be called after last Relocate() in Player::LoadFromDB SetFallInformation(0, GetPositionZ()); - _LoadSpellCooldowns(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_SPELL_COOLDOWNS)); + GetSpellHistory()->LoadFromDB<Player>(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_SPELL_COOLDOWNS)); // Spell code allow apply any auras to dead character in load time in aura/spell/item loading // Do now before stats re-calculation cleanup for ghost state unexpected auras @@ -17999,7 +17876,7 @@ void Player::_LoadAuras(PreparedQueryResult result, uint32 timediff) aura->SetLoadedState(maxduration, remaintime, remaincharges, stackcount, recalculatemask, &damage[0]); aura->ApplyForTargets(); - TC_LOG_INFO("entities.player", "Added aura spellid %u, effectmask %u", spellInfo->Id, effmask); + TC_LOG_DEBUG("entities.player", "Added aura spellid %u, effectmask %u", spellInfo->Id, effmask); } } while (result->NextRow()); @@ -19470,7 +19347,7 @@ void Player::SaveToDB(bool create /*=false*/) _SaveMonthlyQuestStatus(trans); _SaveTalents(trans); _SaveSpells(trans); - _SaveSpellCooldowns(trans); + GetSpellHistory()->SaveToDB<Player>(trans); _SaveActions(trans); _SaveAuras(trans); _SaveSkills(trans); @@ -19732,6 +19609,7 @@ void Player::_SaveInventory(SQLTransaction& trans) m_itemUpdateQueue.clear(); } + void Player::_SaveMail(SQLTransaction& trans) { if (!m_mailsLoaded) @@ -20670,8 +20548,6 @@ void Player::PetSpellInitialize() if (!pet) return; - TC_LOG_DEBUG("entities.pet", "Pet Spells Groups"); - CharmInfo* charmInfo = pet->GetCharmInfo(); WorldPacket data(SMSG_PET_SPELLS, 8+2+4+4+4*MAX_UNIT_ACTION_BAR_INDEX+1+1); @@ -20682,6 +20558,8 @@ void Player::PetSpellInitialize() data << uint8(charmInfo->GetCommandState()); data << uint16(0); // Flags, mostly unknown + TC_LOG_DEBUG("entities.pet", "Player::PetspellInitialize: Creating spellgroups for summoned pet"); + // action bar loop charmInfo->BuildActionBar(&data); @@ -20706,41 +20584,8 @@ void Player::PetSpellInitialize() data.put<uint8>(spellsCountPos, addlist); - uint8 cooldownsCount = pet->m_CreatureSpellCooldowns.size() + pet->m_CreatureCategoryCooldowns.size(); - data << uint8(cooldownsCount); - - time_t curTime = time(NULL); - - for (CreatureSpellCooldowns::const_iterator itr = pet->m_CreatureSpellCooldowns.begin(); itr != pet->m_CreatureSpellCooldowns.end(); ++itr) - { - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(itr->first); - if (!spellInfo) - { - data << uint32(0); - data << uint16(0); - data << uint32(0); - data << uint32(0); - continue; - } - - time_t cooldown = (itr->second > curTime) ? (itr->second - curTime) * IN_MILLISECONDS : 0; - data << uint32(itr->first); // spell ID - - CreatureSpellCooldowns::const_iterator categoryitr = pet->m_CreatureCategoryCooldowns.find(spellInfo->GetCategory()); - if (categoryitr != pet->m_CreatureCategoryCooldowns.end()) - { - time_t categoryCooldown = (categoryitr->second > curTime) ? (categoryitr->second - curTime) * IN_MILLISECONDS : 0; - data << uint16(spellInfo->GetCategory()); // spell category - data << uint32(cooldown); // spell cooldown - data << uint32(categoryCooldown); // category cooldown - } - else - { - data << uint16(0); - data << uint32(cooldown); - data << uint32(0); - } - } + //Cooldowns + pet->GetSpellHistory()->WritePacket<Pet>(data); GetSession()->SendPacket(&data); } @@ -20779,7 +20624,7 @@ void Player::VehicleSpellInitialize() if (!vehicle) return; - uint8 cooldownCount = vehicle->m_CreatureSpellCooldowns.size(); + uint8 cooldownCount = vehicle->GetSpellHistory()->GetCooldownsSizeForPacket(); WorldPacket data(SMSG_PET_SPELLS, 8 + 2 + 4 + 4 + 4 * 10 + 1 + 1 + cooldownCount * (4 + 2 + 4 + 4)); data << uint64(vehicle->GetGUID()); // Guid @@ -20820,41 +20665,7 @@ void Player::VehicleSpellInitialize() data << uint8(0); // Auras? // Cooldowns - data << uint8(cooldownCount); - - time_t now = sWorld->GetGameTime(); - - for (CreatureSpellCooldowns::const_iterator itr = vehicle->m_CreatureSpellCooldowns.begin(); itr != vehicle->m_CreatureSpellCooldowns.end(); ++itr) - { - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(itr->first); - if (!spellInfo) - { - data << uint32(0); - data << uint16(0); - data << uint32(0); - data << uint32(0); - continue; - } - - time_t cooldown = (itr->second > now) ? (itr->second - now) * IN_MILLISECONDS : 0; - data << uint32(itr->first); // spell ID - - CreatureSpellCooldowns::const_iterator categoryitr = vehicle->m_CreatureCategoryCooldowns.find(spellInfo->GetCategory()); - if (categoryitr != vehicle->m_CreatureCategoryCooldowns.end()) - { - time_t categoryCooldown = (categoryitr->second > now) ? (categoryitr->second - now) * IN_MILLISECONDS : 0; - data << uint16(spellInfo->GetCategory()); // spell category - data << uint32(cooldown); // spell cooldown - data << uint32(categoryCooldown); // category cooldown - } - else - { - data << uint16(0); - data << uint32(cooldown); - data << uint32(0); - } - } - + vehicle->GetSpellHistory()->WritePacket<Pet>(data); GetSession()->SendPacket(&data); } @@ -21474,9 +21285,9 @@ void Player::ContinueTaxiFlight() float distPrev = MAP_SIZE*MAP_SIZE; float distNext = - (nodeList[0].x-GetPositionX())*(nodeList[0].x-GetPositionX())+ - (nodeList[0].y-GetPositionY())*(nodeList[0].y-GetPositionY())+ - (nodeList[0].z-GetPositionZ())*(nodeList[0].z-GetPositionZ()); + (nodeList[0].LocX-GetPositionX())*(nodeList[0].LocX-GetPositionX())+ + (nodeList[0].LocY-GetPositionY())*(nodeList[0].LocY-GetPositionY())+ + (nodeList[0].LocZ-GetPositionZ())*(nodeList[0].LocZ-GetPositionZ()); for (uint32 i = 1; i < nodeList.size(); ++i) { @@ -21484,20 +21295,20 @@ void Player::ContinueTaxiFlight() TaxiPathNodeEntry const& prevNode = nodeList[i-1]; // skip nodes at another map - if (node.mapid != GetMapId()) + if (node.MapID != GetMapId()) continue; distPrev = distNext; distNext = - (node.x-GetPositionX())*(node.x-GetPositionX())+ - (node.y-GetPositionY())*(node.y-GetPositionY())+ - (node.z-GetPositionZ())*(node.z-GetPositionZ()); + (node.LocX-GetPositionX())*(node.LocX-GetPositionX())+ + (node.LocY-GetPositionY())*(node.LocY-GetPositionY())+ + (node.LocZ-GetPositionZ())*(node.LocZ-GetPositionZ()); float distNodes = - (node.x-prevNode.x)*(node.x-prevNode.x)+ - (node.y-prevNode.y)*(node.y-prevNode.y)+ - (node.z-prevNode.z)*(node.z-prevNode.z); + (node.LocX-prevNode.LocX)*(node.LocX-prevNode.LocX)+ + (node.LocY-prevNode.LocY)*(node.LocY-prevNode.LocY)+ + (node.LocZ-prevNode.LocZ)*(node.LocZ-prevNode.LocZ); if (distNext + distPrev < distNodes) { @@ -21509,44 +21320,6 @@ void Player::ContinueTaxiFlight() GetSession()->SendDoFlight(mountDisplayId, path, startNode); } -void Player::ProhibitSpellSchool(SpellSchoolMask idSchoolMask, uint32 unTimeMs) -{ - PacketCooldowns cooldowns; - WorldPacket data; - time_t curTime = time(NULL); - for (PlayerSpellMap::const_iterator itr = m_spells.begin(); itr != m_spells.end(); ++itr) - { - if (itr->second->state == PLAYERSPELL_REMOVED) - continue; - uint32 unSpellId = itr->first; - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(unSpellId); - if (!spellInfo) - { - ASSERT(spellInfo); - continue; - } - - // Not send cooldown for this spells - if (spellInfo->IsCooldownStartedOnEvent()) - continue; - - if (spellInfo->PreventionType != SPELL_PREVENTION_TYPE_SILENCE) - continue; - - if ((idSchoolMask & spellInfo->GetSchoolMask()) && GetSpellCooldownDelay(unSpellId) < unTimeMs) - { - cooldowns[unSpellId] = unTimeMs; - AddSpellCooldown(unSpellId, 0, curTime + unTimeMs/IN_MILLISECONDS); - } - } - - if (!cooldowns.empty()) - { - BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_NONE, cooldowns); - GetSession()->SendPacket(&data); - } -} - void Player::InitDataForForm(bool reapplyMods) { ShapeshiftForm form = GetShapeshiftForm(); @@ -21954,9 +21727,9 @@ void Player::SetPvP(bool state) (*itr)->SetPvP(state); } -void Player::UpdatePvP(bool state, bool override) +void Player::UpdatePvP(bool state, bool _override) { - if (!state || override) + if (!state || _override) { SetPvP(state); pvpInfo.EndTimer = 0; @@ -21968,206 +21741,6 @@ void Player::UpdatePvP(bool state, bool override) } } -bool Player::HasSpellCooldown(uint32 spell_id) const -{ - SpellCooldowns::const_iterator itr = m_spellCooldowns.find(spell_id); - return itr != m_spellCooldowns.end() && itr->second.end > time(NULL); -} - -uint32 Player::GetSpellCooldownDelay(uint32 spell_id) const -{ - SpellCooldowns::const_iterator itr = m_spellCooldowns.find(spell_id); - time_t t = time(NULL); - return uint32(itr != m_spellCooldowns.end() && itr->second.end > t ? itr->second.end - t : 0); -} - -void Player::AddSpellAndCategoryCooldowns(SpellInfo const* spellInfo, uint32 itemId, Spell* spell, bool infinityCooldown) -{ - // init cooldown values - uint32 cat = 0; - int32 rec = -1; - int32 catrec = -1; - - // some special item spells without correct cooldown in SpellInfo - // cooldown information stored in item prototype - // This used in same way in WorldSession::HandleItemQuerySingleOpcode data sending to client. - - if (itemId) - { - if (ItemTemplate const* proto = sObjectMgr->GetItemTemplate(itemId)) - { - for (uint8 idx = 0; idx < MAX_ITEM_SPELLS; ++idx) - { - if (uint32(proto->Spells[idx].SpellId) == spellInfo->Id) - { - cat = proto->Spells[idx].SpellCategory; - rec = proto->Spells[idx].SpellCooldown; - catrec = proto->Spells[idx].SpellCategoryCooldown; - break; - } - } - } - } - - // if no cooldown found above then base at DBC data - if (rec < 0 && catrec < 0) - { - cat = spellInfo->GetCategory(); - rec = spellInfo->RecoveryTime; - catrec = spellInfo->CategoryRecoveryTime; - } - - time_t curTime = time(NULL); - - time_t catrecTime; - time_t recTime; - - bool needsCooldownPacket = false; - - // overwrite time for selected category - if (infinityCooldown) - { - // use +MONTH as infinity mark for spell cooldown (will checked as MONTH/2 at save ans skipped) - // but not allow ignore until reset or re-login - catrecTime = catrec > 0 ? curTime+infinityCooldownDelay : 0; - recTime = rec > 0 ? curTime+infinityCooldownDelay : catrecTime; - } - else - { - // shoot spells used equipped item cooldown values already assigned in GetAttackTime(RANGED_ATTACK) - // prevent 0 cooldowns set by another way - if (rec <= 0 && catrec <= 0 && (cat == 76 || (spellInfo->IsAutoRepeatRangedSpell() && spellInfo->Id != 75))) - rec = GetAttackTime(RANGED_ATTACK); - - // Now we have cooldown data (if found any), time to apply mods - if (rec > 0) - ApplySpellMod(spellInfo->Id, SPELLMOD_COOLDOWN, rec, spell); - - if (catrec > 0 && !(spellInfo->AttributesEx6 & SPELL_ATTR6_IGNORE_CATEGORY_COOLDOWN_MODS)) - ApplySpellMod(spellInfo->Id, SPELLMOD_COOLDOWN, catrec, spell); - - if (int32 cooldownMod = GetTotalAuraModifier(SPELL_AURA_MOD_COOLDOWN)) - { - // Apply SPELL_AURA_MOD_COOLDOWN only to own spells - if (HasSpell(spellInfo->Id)) - { - needsCooldownPacket = true; - rec += cooldownMod * IN_MILLISECONDS; // SPELL_AURA_MOD_COOLDOWN does not affect category cooldows, verified with shaman shocks - } - } - - // replace negative cooldowns by 0 - if (rec < 0) rec = 0; - if (catrec < 0) catrec = 0; - - // no cooldown after applying spell mods - if (rec == 0 && catrec == 0) - return; - - catrecTime = catrec ? curTime+catrec/IN_MILLISECONDS : 0; - recTime = rec ? curTime+rec/IN_MILLISECONDS : catrecTime; - } - - // self spell cooldown - if (recTime > 0) - { - AddSpellCooldown(spellInfo->Id, itemId, recTime); - - if (needsCooldownPacket) - { - WorldPacket data; - BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_NONE, spellInfo->Id, rec); - SendDirectMessage(&data); - } - } - - // category spells - if (cat && catrec > 0) - { - SpellCategoryStore::const_iterator i_scstore = sSpellsByCategoryStore.find(cat); - if (i_scstore != sSpellsByCategoryStore.end()) - { - for (SpellCategorySet::const_iterator i_scset = i_scstore->second.begin(); i_scset != i_scstore->second.end(); ++i_scset) - { - if (*i_scset == spellInfo->Id) // skip main spell, already handled above - continue; - - AddSpellCooldown(*i_scset, itemId, catrecTime); - } - } - } -} - -void Player::AddSpellCooldown(uint32 spellid, uint32 itemid, time_t end_time) -{ - SpellCooldown sc; - sc.end = end_time; - sc.itemid = itemid; - m_spellCooldowns[spellid] = sc; -} - -void Player::ModifySpellCooldown(uint32 spellId, int32 cooldown) -{ - SpellCooldowns::iterator itr = m_spellCooldowns.find(spellId); - if (itr == m_spellCooldowns.end()) - return; - - time_t now = time(NULL); - if (itr->second.end + (cooldown / IN_MILLISECONDS) > now) - itr->second.end += (cooldown / IN_MILLISECONDS); - else - m_spellCooldowns.erase(itr); - - WorldPacket data(SMSG_MODIFY_COOLDOWN, 4 + 8 + 4); - data << uint32(spellId); // Spell ID - data << uint64(GetGUID()); // Player GUID - data << int32(cooldown); // Cooldown mod in milliseconds - GetSession()->SendPacket(&data); - - TC_LOG_DEBUG("misc", "ModifySpellCooldown:: Player: %s (GUID: %u) Spell: %u cooldown: %u", GetName().c_str(), GetGUIDLow(), spellId, GetSpellCooldownDelay(spellId)); -} - -void Player::SendCooldownEvent(SpellInfo const* spellInfo, uint32 itemId /*= 0*/, Spell* spell /*= NULL*/, bool setCooldown /*= true*/) -{ - // start cooldowns at server side, if any - if (setCooldown) - AddSpellAndCategoryCooldowns(spellInfo, itemId, spell); - - // Send activate cooldown timer (possible 0) at client side - WorldPacket data(SMSG_COOLDOWN_EVENT, 4 + 8); - data << uint32(spellInfo->Id); - data << uint64(GetGUID()); - SendDirectMessage(&data); - - uint32 cat = spellInfo->GetCategory(); - if (cat && spellInfo->CategoryRecoveryTime) - { - SpellCategoryStore::const_iterator ct = sSpellsByCategoryStore.find(cat); - if (ct != sSpellsByCategoryStore.end()) - { - SpellCategorySet const& catSet = ct->second; - for (SpellCooldowns::const_iterator i = m_spellCooldowns.begin(); i != m_spellCooldowns.end(); ++i) - { - if (i->first == spellInfo->Id) // skip main spell, already handled above - continue; - - SpellInfo const* spellInfo2 = sSpellMgr->GetSpellInfo(i->first); - if (!spellInfo2 || !spellInfo2->IsCooldownStartedOnEvent()) - continue; - - if (catSet.find(i->first) != catSet.end()) - { - // Send activate cooldown timer (possible 0) at client side - WorldPacket data(SMSG_COOLDOWN_EVENT, 4 + 8); - data << uint32(i->first); - data << uint64(GetGUID()); - SendDirectMessage(&data); - } - } - } - } -} - void Player::UpdatePotionCooldown(Spell* spell) { // no potion used i combat or still in combat @@ -22179,14 +21752,14 @@ void Player::UpdatePotionCooldown(Spell* spell) { // spell/item pair let set proper cooldown (except not existed charged spell cooldown spellmods for potions) if (ItemTemplate const* proto = sObjectMgr->GetItemTemplate(m_lastPotionId)) - for (uint8 idx = 0; idx < MAX_ITEM_SPELLS; ++idx) + for (uint8 idx = 0; idx < MAX_ITEM_PROTO_SPELLS; ++idx) if (proto->Spells[idx].SpellId && proto->Spells[idx].SpellTrigger == ITEM_SPELLTRIGGER_ON_USE) if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(proto->Spells[idx].SpellId)) - SendCooldownEvent(spellInfo, m_lastPotionId); + GetSpellHistory()->SendCooldownEvent(spellInfo, m_lastPotionId); } // from spell cases (m_lastPotionId set in Spell::SendSpellCooldown) else - SendCooldownEvent(spell->m_spellInfo, m_lastPotionId, spell); + GetSpellHistory()->SendCooldownEvent(spell->m_spellInfo, m_lastPotionId, spell); m_lastPotionId = 0; } @@ -22560,13 +22133,13 @@ bool Player::IsVisibleGloballyFor(Player const* u) const } template<class T> -inline void UpdateVisibilityOf_helper(GuidSet& s64, T* target, std::set<Unit*>& /*v*/) +inline void UpdateVisibilityOf_helper(GuidUnorderedSet& s64, T* target, std::set<Unit*>& /*v*/) { s64.insert(target->GetGUID()); } template<> -inline void UpdateVisibilityOf_helper(GuidSet& s64, GameObject* target, std::set<Unit*>& /*v*/) +inline void UpdateVisibilityOf_helper(GuidUnorderedSet& s64, GameObject* target, std::set<Unit*>& /*v*/) { // @HACK: This is to prevent objects like deeprun tram from disappearing when player moves far from its spawn point while riding it if ((target->GetGOInfo()->type != GAMEOBJECT_TYPE_TRANSPORT)) @@ -22574,14 +22147,14 @@ inline void UpdateVisibilityOf_helper(GuidSet& s64, GameObject* target, std::set } template<> -inline void UpdateVisibilityOf_helper(GuidSet& s64, Creature* target, std::set<Unit*>& v) +inline void UpdateVisibilityOf_helper(GuidUnorderedSet& s64, Creature* target, std::set<Unit*>& v) { s64.insert(target->GetGUID()); v.insert(target); } template<> -inline void UpdateVisibilityOf_helper(GuidSet& s64, Player* target, std::set<Unit*>& v) +inline void UpdateVisibilityOf_helper(GuidUnorderedSet& s64, Player* target, std::set<Unit*>& v) { s64.insert(target->GetGUID()); v.insert(target); @@ -22643,9 +22216,9 @@ void Player::UpdateTriggerVisibility() UpdateData udata; WorldPacket packet; - for (GuidSet::iterator itr = m_clientGUIDs.begin(); itr != m_clientGUIDs.end(); ++itr) + for (auto itr = m_clientGUIDs.begin(); itr != m_clientGUIDs.end(); ++itr) { - if (itr->IsCreature()) + if (itr->IsCreatureOrVehicle()) { Creature* creature = GetMap()->GetCreature(*itr); // Update fields of triggers, transformed units or unselectable units (values dependent on GM state) @@ -23096,14 +22669,13 @@ void Player::ApplyEquipCooldown(Item* pItem) continue; // Don't replace longer cooldowns by equip cooldown if we have any. - SpellCooldowns::iterator itr = m_spellCooldowns.find(spellData.SpellId); - if (itr != m_spellCooldowns.end() && itr->second.itemid == pItem->GetEntry() && itr->second.end > time(NULL) + 30) + if (GetSpellHistory()->GetRemainingCooldown(spellData.SpellId) > 30 * IN_MILLISECONDS) continue; - AddSpellCooldown(spellData.SpellId, pItem->GetEntry(), time(NULL) + 30); + GetSpellHistory()->AddCooldown(spellData.SpellId, pItem->GetEntry(), std::chrono::seconds(30)); - WorldPacket data(SMSG_ITEM_COOLDOWN, 12); - data << pItem->GetGUID(); + WorldPacket data(SMSG_ITEM_COOLDOWN, 8 + 4); + data << uint64(pItem->GetGUID()); data << uint32(spellData.SpellId); GetSession()->SendPacket(&data); } @@ -23702,7 +23274,7 @@ void Player::UpdateForQuestWorldObjects() UpdateData udata; WorldPacket packet; - for (GuidSet::iterator itr = m_clientGUIDs.begin(); itr != m_clientGUIDs.end(); ++itr) + for (auto itr = m_clientGUIDs.begin(); itr != m_clientGUIDs.end(); ++itr) { if (itr->IsGameObject()) { @@ -23891,7 +23463,7 @@ bool Player::HasItemFitToSpellRequirements(SpellInfo const* spellInfo, Item cons bool Player::CanNoReagentCast(SpellInfo const* spellInfo) const { // don't take reagents for spells with SPELL_ATTR5_NO_REAGENT_WHILE_PREP - if (spellInfo->AttributesEx5 & SPELL_ATTR5_NO_REAGENT_WHILE_PREP && + if (spellInfo->HasAttribute(SPELL_ATTR5_NO_REAGENT_WHILE_PREP) && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PREPARATION)) return true; @@ -23974,7 +23546,7 @@ uint32 Player::GetResurrectionSpellId() } // Reincarnation (passive spell) // prio: 1 // Glyph of Renewed Life - if (prio < 1 && HasSpell(20608) && !HasSpellCooldown(21169) && (HasAura(58059) || HasItemCount(17030))) + if (prio < 1 && HasSpell(20608) && !GetSpellHistory()->HasCooldown(21169) && (HasAura(58059) || HasItemCount(17030))) spell_id = 21169; return spell_id; @@ -24194,18 +23766,6 @@ void Player::UpdateAreaDependentAuras(uint32 newArea) if (itr->second->autocast && itr->second->IsFitToRequirements(this, m_zoneUpdateId, newArea)) if (!HasAura(itr->second->spellId)) CastSpell(this, itr->second->spellId, true); - - if (newArea == 4273 && GetVehicleCreatureBase() && GetPositionX() > 400) // Ulduar - { - switch (GetVehicleBase()->GetEntry()) - { - case 33062: - case 33109: - case 33060: - GetVehicleCreatureBase()->DespawnOrUnsummon(); - break; - } - } } uint32 Player::GetCorpseReclaimDelay(bool pvp) const @@ -24336,7 +23896,7 @@ PartyResult Player::CanUninviteFromGroup(ObjectGuid guidMember) const return ERR_PARTY_LFG_BOOT_LIMIT; lfg::LfgState state = sLFGMgr->GetState(gguid); - if (state == lfg::LFG_STATE_BOOT) + if (sLFGMgr->IsVoteKickActive(gguid)) return ERR_PARTY_LFG_BOOT_IN_PROGRESS; if (grp->GetMembersCount() <= lfg::LFG_GROUP_KICK_VOTES_NEEDED) @@ -24843,7 +24403,7 @@ void Player::RestoreBaseRune(uint8 index) { AuraEffect const* aura = m_runes->runes[index].ConvertAura; // If rune was converted by a non-pasive aura that still active we should keep it converted - if (aura && !(aura->GetSpellInfo()->Attributes & SPELL_ATTR0_PASSIVE)) + if (aura && !aura->GetSpellInfo()->HasAttribute(SPELL_ATTR0_PASSIVE)) return; ConvertRune(index, GetBaseRune(index)); SetRuneConvertAura(index, NULL); @@ -25054,11 +24614,11 @@ uint32 Player::CalculateTalentsPoints() const return uint32(talentPointsForLevel * sWorld->getRate(RATE_TALENT)); } -bool Player::IsKnowHowFlyIn(uint32 mapid, uint32 zone) const +bool Player::CanFlyInZone(uint32 mapid, uint32 zone) const { // continent checked in SpellInfo::CheckLocation at cast and area update uint32 v_map = GetVirtualMapForMapAndZone(mapid, zone); - return v_map != 571 || HasSpell(54197); // Cold Weather Flying + return v_map != 571 || HasSpell(54197); // 54197 = Cold Weather Flying } void Player::LearnSpellHighestRank(uint32 spellid) @@ -25461,7 +25021,7 @@ void Player::LearnTalent(uint32 talentId, uint32 talentRank) LearnSpell(spellid, false); AddTalent(spellid, m_activeSpec, true); - TC_LOG_INFO("entities.player", "TalentID: %u Rank: %u Spell: %u Spec: %u\n", talentId, talentRank, spellid, m_activeSpec); + TC_LOG_DEBUG("entities.player", "TalentID: %u Rank: %u Spell: %u Spec: %u\n", talentId, talentRank, spellid, m_activeSpec); // update free talent points SetFreeTalentPoints(CurTalentPoints - (talentRank - curtalent_maxrank + 1)); @@ -25596,7 +25156,7 @@ void Player::LearnPetTalent(ObjectGuid petGuid, uint32 talentId, uint32 talentRa // learn! (other talent ranks will unlearned at learning) pet->learnSpell(spellid); - TC_LOG_INFO("entities.player", "PetTalentID: %u Rank: %u Spell: %u\n", talentId, talentRank, spellid); + TC_LOG_DEBUG("entities.player", "PetTalentID: %u Rank: %u Spell: %u\n", talentId, talentRank, spellid); // update free talent points pet->SetFreeTalentPoints(CurTalentPoints - (talentRank - curtalent_maxrank + 1)); @@ -26041,14 +25601,6 @@ void Player::RemoveAtLoginFlag(AtLoginFlags flags, bool persist /*= false*/) } } -void Player::SendClearCooldown(uint32 spell_id, Unit* target) -{ - WorldPacket data(SMSG_CLEAR_COOLDOWN, 4+8); - data << uint32(spell_id); - data << uint64(target->GetGUID()); - SendDirectMessage(&data); -} - void Player::ResetMap() { // this may be called during Map::Update @@ -26699,9 +26251,9 @@ bool Player::SetDisableGravity(bool disable, bool packetOnly /*= false*/) return true; } -bool Player::SetCanFly(bool apply) +bool Player::SetCanFly(bool apply, bool packetOnly /*= false*/) { - if (!Unit::SetCanFly(apply)) + if (!packetOnly && !Unit::SetCanFly(apply)) return false; WorldPacket data(apply ? SMSG_MOVE_SET_CAN_FLY : SMSG_MOVE_UNSET_CAN_FLY, 12); @@ -26951,3 +26503,57 @@ void Player::SendSupercededSpell(uint32 oldSpell, uint32 newSpell) GetSession()->SendPacket(&data); } +bool Player::ValidateAppearance(uint8 race, uint8 class_, uint8 gender, uint8 hairID, uint8 hairColor, uint8 faceID, uint8 facialHair, uint8 skinColor, bool create /*=false*/) +{ + // Check skin color + // For Skin type is always 0 + if (CharSectionsEntry const* entry = GetCharSectionEntry(race, SECTION_TYPE_SKIN, gender, 0, skinColor)) + { // Skin Color defined as Face color, too, we check skin & face in one pass + if (CharSectionsEntry const* entry2 = GetCharSectionEntry(race, SECTION_TYPE_FACE, gender, faceID, skinColor)) + { + // Check DeathKnight exclusive + if (((entry->Flags & SECTION_FLAG_DEATH_KNIGHT) || (entry2->Flags & SECTION_FLAG_DEATH_KNIGHT)) && class_ != CLASS_DEATH_KNIGHT) + return false; + if (create && !((entry->Flags & SECTION_FLAG_PLAYER) && (entry2->Flags & SECTION_FLAG_PLAYER))) + return false; + } + else + return false; + } + else + return false; + + // These combinations don't have an entry of Type SECTION_TYPE_FACIAL_HAIR, exclude them from that check + bool excludeCheck = (race == RACE_TAUREN) || (race == RACE_DRAENEI) || (gender == GENDER_FEMALE && race != RACE_NIGHTELF && race != RACE_UNDEAD_PLAYER); + + // Check Hair + if (CharSectionsEntry const* entry = GetCharSectionEntry(race, SECTION_TYPE_HAIR, gender, hairID, hairColor)) + { + if ((entry->Flags & SECTION_FLAG_DEATH_KNIGHT) && class_ != CLASS_DEATH_KNIGHT) + return false; + if (create && !(entry->Flags & SECTION_FLAG_PLAYER)) + return false; + + if (!excludeCheck) + { + if (CharSectionsEntry const* entry2 = GetCharSectionEntry(race, SECTION_TYPE_FACIAL_HAIR, gender, facialHair, hairColor)) + { + if ((entry2->Flags & SECTION_FLAG_DEATH_KNIGHT) && class_ != CLASS_DEATH_KNIGHT) + return false; + if (create && !(entry2->Flags & SECTION_FLAG_PLAYER)) + return false; + } + else + return false; + } + else + { + // @TODO: Bound checking for facialHair ID (used clientside for markings, tauren beard, etc.) + // Not present in DBC + } + } + else + return false; + + return true; +} diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 61141192cd1..98b9d8a3d07 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -128,13 +128,6 @@ typedef std::unordered_map<uint32, PlayerTalent*> PlayerTalentMap; typedef std::unordered_map<uint32, PlayerSpell*> PlayerSpellMap; typedef std::list<SpellModifier*> SpellModList; -struct SpellCooldown -{ - time_t end; - uint16 itemid; -}; - -typedef std::map<uint32, SpellCooldown> SpellCooldowns; typedef std::unordered_map<uint32 /*instanceId*/, time_t/*releaseTime*/> InstanceTimeMap; enum TrainerSpellState @@ -353,9 +346,9 @@ struct Runes struct EnchantDuration { - EnchantDuration() : item(NULL), slot(MAX_ENCHANTMENT_SLOT), leftduration(0) { }; + EnchantDuration() : item(NULL), slot(MAX_ENCHANTMENT_SLOT), leftduration(0) { } EnchantDuration(Item* _item, EnchantmentSlot _slot, uint32 _leftduration) : item(_item), slot(_slot), - leftduration(_leftduration){ ASSERT(item); }; + leftduration(_leftduration){ ASSERT(item); } Item* item; EnchantmentSlot slot; @@ -1499,6 +1492,7 @@ class Player : public Unit, public GridObject<Player> static bool LoadPositionFromDB(uint32& mapid, float& x, float& y, float& z, float& o, bool& in_flight, ObjectGuid guid); static bool IsValidGender(uint8 Gender) { return Gender <= GENDER_FEMALE; } + static bool ValidateAppearance(uint8 race, uint8 class_, uint8 gender, uint8 hairID, uint8 hairColor, uint8 faceID, uint8 facialHair, uint8 skinColor, bool create = false); /*********************************************************/ /*** SAVE SYSTEM ***/ @@ -1654,8 +1648,6 @@ class Player : public Unit, public GridObject<Player> PlayerSpellMap const& GetSpellMap() const { return m_spells; } PlayerSpellMap & GetSpellMap() { return m_spells; } - SpellCooldowns const& GetSpellCooldownMap() const { return m_spellCooldowns; } - void AddSpellMod(SpellModifier* mod, bool apply); bool IsAffectedBySpellmod(SpellInfo const* spellInfo, SpellModifier* mod, Spell* spell = NULL); template <class T> T ApplySpellMod(uint32 spellId, SpellModOp op, T &basevalue, Spell* spell = NULL); @@ -1665,33 +1657,14 @@ class Player : public Unit, public GridObject<Player> void DropModCharge(SpellModifier* mod, Spell* spell); void SetSpellModTakingSpell(Spell* spell, bool apply); - static uint32 const infinityCooldownDelay = MONTH; // used for set "infinity cooldowns" for spells and check - static uint32 const infinityCooldownDelayCheck = MONTH/2; - bool HasSpellCooldown(uint32 spell_id) const; - uint32 GetSpellCooldownDelay(uint32 spell_id) const; - void AddSpellAndCategoryCooldowns(SpellInfo const* spellInfo, uint32 itemId, Spell* spell = NULL, bool infinityCooldown = false); - void AddSpellCooldown(uint32 spell_id, uint32 itemid, time_t end_time); - void ModifySpellCooldown(uint32 spellId, int32 cooldown); - void SendCooldownEvent(SpellInfo const* spellInfo, uint32 itemId = 0, Spell* spell = NULL, bool setCooldown = true); - void ProhibitSpellSchool(SpellSchoolMask idSchoolMask, uint32 unTimeMs) override; - void RemoveSpellCooldown(uint32 spell_id, bool update = false); - void RemoveSpellCategoryCooldown(uint32 cat, bool update = false); - void SendClearCooldown(uint32 spell_id, Unit* target); - - GlobalCooldownMgr& GetGlobalCooldownMgr() { return m_GlobalCooldownMgr; } - - void RemoveCategoryCooldown(uint32 cat); void RemoveArenaSpellCooldowns(bool removeActivePetCooldowns = false); - void RemoveAllSpellCooldown(); - void _LoadSpellCooldowns(PreparedQueryResult result); - void _SaveSpellCooldowns(SQLTransaction& trans); uint32 GetLastPotionId() { return m_lastPotionId; } void SetLastPotionId(uint32 item_id) { m_lastPotionId = item_id; } void UpdatePotionCooldown(Spell* spell = NULL); void setResurrectRequestData(ObjectGuid guid, uint32 mapId, float X, float Y, float Z, uint32 health, uint32 mana); void clearResurrectRequestData() { setResurrectRequestData(ObjectGuid::Empty, 0, 0.0f, 0.0f, 0.0f, 0, 0); } - bool isResurrectRequestedBy(ObjectGuid guid) const { return m_resurrectGUID == guid; } + bool isResurrectRequestedBy(ObjectGuid guid) const { return !m_resurrectGUID.IsEmpty() && m_resurrectGUID == guid; } bool isResurrectRequested() const { return !m_resurrectGUID.IsEmpty(); } void ResurrectUsingRequestData(); @@ -1866,7 +1839,7 @@ class Player : public Unit, public GridObject<Player> bool UpdatePosition(const Position &pos, bool teleport = false) { return UpdatePosition(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), teleport); } void UpdateUnderwaterState(Map* m, float x, float y, float z) override; - void SendMessageToSet(WorldPacket* data, bool self) override {SendMessageToSetInRange(data, GetVisibilityRange(), self); };// overwrite Object::SendMessageToSet + void SendMessageToSet(WorldPacket* data, bool self) override {SendMessageToSetInRange(data, GetVisibilityRange(), self); }// overwrite Object::SendMessageToSet void SendMessageToSetInRange(WorldPacket* data, float fist, bool self) override;// overwrite Object::SendMessageToSetInRange void SendMessageToSetInRange(WorldPacket* data, float dist, bool self, bool own_team_only); void SendMessageToSet(WorldPacket* data, Player const* skipped_rcvr) override; @@ -1974,8 +1947,6 @@ class Player : public Unit, public GridObject<Player> //End of PvP System - inline SpellCooldowns GetSpellCooldowns() const { return m_spellCooldowns; } - void SetDrunkValue(uint8 newDrunkValue, uint32 itemId = 0); uint8 GetDrunkValue() const { return GetByteValue(PLAYER_BYTES_3, 1); } static DrunkenState GetDrunkenstateByValue(uint8 value); @@ -2135,7 +2106,7 @@ class Player : public Unit, public GridObject<Player> void SetFallInformation(uint32 time, float z); void HandleFall(MovementInfo const& movementInfo); - bool IsKnowHowFlyIn(uint32 mapid, uint32 zone) const; + bool CanFlyInZone(uint32 mapid, uint32 zone) const; void SetClientControl(Unit* target, bool allowMove); @@ -2170,7 +2141,7 @@ class Player : public Unit, public GridObject<Player> WorldLocation GetStartPosition() const; // currently visible objects at player client - GuidSet m_clientGUIDs; + GuidUnorderedSet m_clientGUIDs; bool HaveAtClient(WorldObject const* u) const; @@ -2330,7 +2301,7 @@ class Player : public Unit, public GridObject<Player> void RemoveFromWhisperWhiteList(ObjectGuid guid) { WhisperList.remove(guid); } bool SetDisableGravity(bool disable, bool packetOnly /* = false */) override; - bool SetCanFly(bool apply) override; + bool SetCanFly(bool apply, bool packetOnly = false) override; bool SetWaterWalking(bool apply, bool packetOnly = false) override; bool SetFeatherFall(bool apply, bool packetOnly = false) override; bool SetHover(bool enable, bool packetOnly = false) override; @@ -2492,8 +2463,6 @@ class Player : public Unit, public GridObject<Player> PlayerTalentMap* m_talents[MAX_TALENT_SPECS]; uint32 m_lastPotionId; // last used health/mana potion in combat, that block next potion use - GlobalCooldownMgr m_GlobalCooldownMgr; - uint8 m_activeSpec; uint8 m_specsCount; @@ -2661,8 +2630,6 @@ class Player : public Unit, public GridObject<Player> AchievementMgr* m_achievementMgr; ReputationMgr* m_reputationMgr; - SpellCooldowns m_spellCooldowns; - uint32 m_ChampioningFaction; uint32 m_timeSyncCounter; diff --git a/src/server/game/Entities/Totem/Totem.cpp b/src/server/game/Entities/Totem/Totem.cpp index 5bb13fd98cf..85ee51aebf5 100644 --- a/src/server/game/Entities/Totem/Totem.cpp +++ b/src/server/game/Entities/Totem/Totem.cpp @@ -17,11 +17,10 @@ */ #include "Totem.h" -#include "Log.h" #include "Group.h" -#include "ObjectMgr.h" #include "Opcodes.h" #include "Player.h" +#include "SpellHistory.h" #include "SpellMgr.h" #include "SpellInfo.h" #include "WorldPacket.h" @@ -130,7 +129,7 @@ void Totem::UnSummon(uint32 msTime) owner->SendAutoRepeatCancel(this); if (SpellInfo const* spell = sSpellMgr->GetSpellInfo(GetUInt32Value(UNIT_CREATED_BY_SPELL))) - owner->SendCooldownEvent(spell, 0, NULL, false); + GetSpellHistory()->SendCooldownEvent(spell, 0, nullptr, false); if (Group* group = owner->GetGroup()) { diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index 84dd50c56ca..6d98a4c78b2 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -20,14 +20,10 @@ #include "Transport.h" #include "MapManager.h" #include "ObjectMgr.h" -#include "Path.h" #include "ScriptMgr.h" -#include "WorldPacket.h" #include "DBCStores.h" -#include "World.h" #include "GameObjectAI.h" #include "Vehicle.h" -#include "MapReference.h" #include "Player.h" #include "Cell.h" #include "CellImpl.h" @@ -36,7 +32,7 @@ Transport::Transport() : GameObject(), _transportInfo(NULL), _isMoving(true), _pendingStop(false), _triggeredArrivalEvent(false), _triggeredDepartureEvent(false), - _passengerTeleportItr(_passengers.begin()), _delayedAddModel(false) + _passengerTeleportItr(_passengers.begin()), _delayedAddModel(false), _delayedTeleport(false) { m_updateFlag = UPDATEFLAG_TRANSPORT | UPDATEFLAG_LOWGUID | UPDATEFLAG_STATIONARY_POSITION | UPDATEFLAG_ROTATION; } @@ -129,7 +125,7 @@ void Transport::Update(uint32 diff) if (IsMoving() || !_pendingStop) m_goValue.Transport.PathProgress += diff; - uint32 timer = m_goValue.Transport.PathProgress % GetPeriod(); + uint32 timer = m_goValue.Transport.PathProgress % GetTransportPeriod(); // Set current waypoint // Desired outcome: _currentFrame->DepartureTime < timer < _nextFrame->ArriveTime @@ -151,8 +147,8 @@ void Transport::Update(uint32 diff) if (_pendingStop && GetGoState() != GO_STATE_READY) { SetGoState(GO_STATE_READY); - m_goValue.Transport.PathProgress = (m_goValue.Transport.PathProgress / GetPeriod()); - m_goValue.Transport.PathProgress *= GetPeriod(); + m_goValue.Transport.PathProgress = (m_goValue.Transport.PathProgress / GetTransportPeriod()); + m_goValue.Transport.PathProgress *= GetTransportPeriod(); m_goValue.Transport.PathProgress += _currentFrame->ArriveTime; } break; // its a stop frame and we are waiting @@ -177,13 +173,13 @@ void Transport::Update(uint32 diff) MoveToNextWaypoint(); - sScriptMgr->OnRelocate(this, _currentFrame->Node->index, _currentFrame->Node->mapid, _currentFrame->Node->x, _currentFrame->Node->y, _currentFrame->Node->z); + sScriptMgr->OnRelocate(this, _currentFrame->Node->NodeIndex, _currentFrame->Node->MapID, _currentFrame->Node->LocX, _currentFrame->Node->LocY, _currentFrame->Node->LocZ); - TC_LOG_DEBUG("entities.transport", "Transport %u (%s) moved to node %u %u %f %f %f", GetEntry(), GetName().c_str(), _currentFrame->Node->index, _currentFrame->Node->mapid, _currentFrame->Node->x, _currentFrame->Node->y, _currentFrame->Node->z); + TC_LOG_DEBUG("entities.transport", "Transport %u (%s) moved to node %u %u %f %f %f", GetEntry(), GetName().c_str(), _currentFrame->Node->NodeIndex, _currentFrame->Node->MapID, _currentFrame->Node->LocX, _currentFrame->Node->LocY, _currentFrame->Node->LocZ); // Departure event if (_currentFrame->IsTeleportFrame()) - if (TeleportTransport(_nextFrame->Node->mapid, _nextFrame->Node->x, _nextFrame->Node->y, _nextFrame->Node->z, _nextFrame->InitialOrientation)) + if (TeleportTransport(_nextFrame->Node->MapID, _nextFrame->Node->LocX, _nextFrame->Node->LocY, _nextFrame->Node->LocZ, _nextFrame->InitialOrientation)) return; // Update more in new map thread } @@ -230,6 +226,14 @@ void Transport::Update(uint32 diff) sScriptMgr->OnTransportUpdate(this, diff); } +void Transport::DelayedUpdate(uint32 /*diff*/) +{ + if (GetKeyFrames().size() <= 1) + return; + + DelayedTeleportTransport(); +} + void Transport::AddPassenger(WorldObject* passenger) { if (!IsInWorld()) @@ -335,6 +339,8 @@ GameObject* Transport::CreateGOPassenger(uint32 guid, GameObjectData const* data return NULL; } + ASSERT(data); + float x = data->posX; float y = data->posY; float z = data->posZ; @@ -593,36 +599,8 @@ bool Transport::TeleportTransport(uint32 newMapid, float x, float y, float z, fl if (oldMap->GetId() != newMapid) { - Map* newMap = sMapMgr->CreateBaseMap(newMapid); + _delayedTeleport = true; UnloadStaticPassengers(); - GetMap()->RemoveFromMap<Transport>(this, false); - SetMap(newMap); - - for (_passengerTeleportItr = _passengers.begin(); _passengerTeleportItr != _passengers.end();) - { - WorldObject* obj = (*_passengerTeleportItr++); - - float destX, destY, destZ, destO; - obj->m_movementInfo.transport.pos.GetPosition(destX, destY, destZ, destO); - TransportBase::CalculatePassengerPosition(destX, destY, destZ, &destO, x, y, z, o); - - switch (obj->GetTypeId()) - { - case TYPEID_PLAYER: - if (!obj->ToPlayer()->TeleportTo(newMapid, destX, destY, destZ, destO, TELE_TO_NOT_LEAVE_TRANSPORT)) - RemovePassenger(obj); - break; - case TYPEID_DYNAMICOBJECT: - obj->AddObjectToRemoveList(); - break; - default: - RemovePassenger(obj); - break; - } - } - - Relocate(x, y, z, o); - GetMap()->AddToMap<Transport>(this); return true; } else @@ -645,6 +623,48 @@ bool Transport::TeleportTransport(uint32 newMapid, float x, float y, float z, fl } } +void Transport::DelayedTeleportTransport() +{ + if (!_delayedTeleport) + return; + + _delayedTeleport = false; + Map* newMap = sMapMgr->CreateBaseMap(_nextFrame->Node->MapID); + GetMap()->RemoveFromMap<Transport>(this, false); + SetMap(newMap); + + float x = _nextFrame->Node->LocX, + y = _nextFrame->Node->LocY, + z = _nextFrame->Node->LocZ, + o =_nextFrame->InitialOrientation; + + for (_passengerTeleportItr = _passengers.begin(); _passengerTeleportItr != _passengers.end();) + { + WorldObject* obj = (*_passengerTeleportItr++); + + float destX, destY, destZ, destO; + obj->m_movementInfo.transport.pos.GetPosition(destX, destY, destZ, destO); + TransportBase::CalculatePassengerPosition(destX, destY, destZ, &destO, x, y, z, o); + + switch (obj->GetTypeId()) + { + case TYPEID_PLAYER: + if (!obj->ToPlayer()->TeleportTo(_nextFrame->Node->MapID, destX, destY, destZ, destO, TELE_TO_NOT_LEAVE_TRANSPORT)) + RemovePassenger(obj); + break; + case TYPEID_DYNAMICOBJECT: + obj->AddObjectToRemoveList(); + break; + default: + RemovePassenger(obj); + break; + } + } + + Relocate(x, y, z, o); + GetMap()->AddToMap<Transport>(this); +} + void Transport::UpdatePassengerPositions(PassengerSet& passengers) { for (PassengerSet::iterator itr = passengers.begin(); itr != passengers.end(); ++itr) @@ -699,9 +719,9 @@ void Transport::UpdatePassengerPositions(PassengerSet& passengers) void Transport::DoEventIfAny(KeyFrame const& node, bool departure) { - if (uint32 eventid = departure ? node.Node->departureEventID : node.Node->arrivalEventID) + if (uint32 eventid = departure ? node.Node->DepartureEventID : node.Node->ArrivalEventID) { - TC_LOG_DEBUG("maps.script", "Taxi %s event %u of node %u of %s path", departure ? "departure" : "arrival", eventid, node.Node->index, GetName().c_str()); + TC_LOG_DEBUG("maps.script", "Taxi %s event %u of node %u of %s path", departure ? "departure" : "arrival", eventid, node.Node->NodeIndex, GetName().c_str()); GetMap()->ScriptsStart(sEventScripts, eventid, this, this); EventInform(eventid); } diff --git a/src/server/game/Entities/Transport/Transport.h b/src/server/game/Entities/Transport/Transport.h index 4e3d7c3c50e..c56ceb1696d 100644 --- a/src/server/game/Entities/Transport/Transport.h +++ b/src/server/game/Entities/Transport/Transport.h @@ -39,6 +39,7 @@ class Transport : public GameObject, public TransportBase void CleanupsBeforeDelete(bool finalCleanup = true) override; void Update(uint32 diff) override; + void DelayedUpdate(uint32 diff); void BuildUpdate(UpdateDataMapType& data_map) override; @@ -79,7 +80,7 @@ class Transport : public GameObject, public TransportBase TransportBase::CalculatePassengerOffset(x, y, z, o, GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation()); } - uint32 GetPeriod() const { return GetUInt32Value(GAMEOBJECT_LEVEL); } + uint32 GetTransportPeriod() const override { return GetUInt32Value(GAMEOBJECT_LEVEL); } void SetPeriod(uint32 period) { SetUInt32Value(GAMEOBJECT_LEVEL, period); } uint32 GetTimer() const { return GetGOValue()->Transport.PathProgress; } @@ -103,6 +104,7 @@ class Transport : public GameObject, public TransportBase void MoveToNextWaypoint(); float CalculateSegmentPos(float perc); bool TeleportTransport(uint32 newMapid, float x, float y, float z, float o); + void DelayedTeleportTransport(); void UpdatePassengerPositions(PassengerSet& passengers); void DoEventIfAny(KeyFrame const& node, bool departure); @@ -127,6 +129,7 @@ class Transport : public GameObject, public TransportBase PassengerSet _staticPassengers; bool _delayedAddModel; + bool _delayedTeleport; }; #endif diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index be383922cb1..9b0da57fa31 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -35,7 +35,6 @@ #include "InstanceSaveMgr.h" #include "InstanceScript.h" #include "Log.h" -#include "MapManager.h" #include "MoveSpline.h" #include "MoveSplineInit.h" #include "ObjectAccessor.h" @@ -52,6 +51,7 @@ #include "SpellAuras.h" #include "Spell.h" #include "SpellInfo.h" +#include "SpellHistory.h" #include "SpellMgr.h" #include "TemporarySummon.h" #include "Totem.h" @@ -164,7 +164,7 @@ Unit::Unit(bool isWorldObject) : i_AI(NULL), i_disabledAI(NULL), m_AutoRepeatFirstCast(false), m_procDeep(0), m_removedAurasCount(0), i_motionMaster(new MotionMaster(this)), m_regenTimer(0), m_ThreatManager(this), m_vehicle(NULL), m_vehicleKit(NULL), m_unitTypeMask(UNIT_MASK_NONE), - m_HostileRefManager(this), _lastDamagedTime(0) + m_HostileRefManager(this), _lastDamagedTime(0), m_spellHistory(new SpellHistory(this)) { m_objectType |= TYPEMASK_UNIT; m_objectTypeId = TYPEID_UNIT; @@ -258,24 +258,6 @@ Unit::Unit(bool isWorldObject) : } //////////////////////////////////////////////////////////// -// Methods of class GlobalCooldownMgr -bool GlobalCooldownMgr::HasGlobalCooldown(SpellInfo const* spellInfo) const -{ - GlobalCooldownList::const_iterator itr = m_GlobalCooldowns.find(spellInfo->StartRecoveryCategory); - return itr != m_GlobalCooldowns.end() && itr->second.duration && getMSTimeDiff(itr->second.cast_time, getMSTime()) < itr->second.duration; -} - -void GlobalCooldownMgr::AddGlobalCooldown(SpellInfo const* spellInfo, uint32 gcd) -{ - m_GlobalCooldowns[spellInfo->StartRecoveryCategory] = GlobalCooldown(gcd, getMSTime()); -} - -void GlobalCooldownMgr::CancelGlobalCooldown(SpellInfo const* spellInfo) -{ - m_GlobalCooldowns[spellInfo->StartRecoveryCategory].duration = 0; -} - -//////////////////////////////////////////////////////////// // Methods of class Unit Unit::~Unit() { @@ -292,6 +274,7 @@ Unit::~Unit() delete i_motionMaster; delete m_charmInfo; delete movespline; + delete m_spellHistory; ASSERT(!m_duringRemoveFromWorld); ASSERT(!m_attacking); @@ -407,7 +390,7 @@ void Unit::UpdateSplinePosition() pos.m_positionX = loc.x; pos.m_positionY = loc.y; pos.m_positionZ = loc.z; - pos.m_orientation = loc.orientation; + pos.SetOrientation(loc.orientation); if (TransportBase* transport = GetDirectTransport()) transport->CalculatePassengerPosition(loc.x, loc.y, loc.z, &loc.orientation); @@ -589,7 +572,7 @@ uint32 Unit::DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDam // interrupting auras with AURA_INTERRUPT_FLAG_DAMAGE before checking !damage (absorbed damage breaks that type of auras) if (spellProto) { - if (!(spellProto->AttributesEx4 & SPELL_ATTR4_DAMAGE_DOESNT_BREAK_AURAS)) + if (!spellProto->HasAttribute(SPELL_ATTR4_DAMAGE_DOESNT_BREAK_AURAS)) victim->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_TAKE_DAMAGE, spellProto->Id); } else @@ -777,7 +760,7 @@ uint32 Unit::DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDam if (damagetype != NODAMAGE && damage) { if (victim != this && victim->GetTypeId() == TYPEID_PLAYER && // does not support creature push_back - (!spellProto || !(spellProto->AttributesEx7 & SPELL_ATTR7_NO_PUSHBACK_ON_DAMAGE))) + (!spellProto || !spellProto->HasAttribute(SPELL_ATTR7_NO_PUSHBACK_ON_DAMAGE))) { if (damagetype != DOT) if (Spell* spell = victim->m_currentSpells[CURRENT_GENERIC_SPELL]) @@ -981,7 +964,7 @@ void Unit::CalculateSpellDamageTaken(SpellNonMeleeDamage* damageInfo, int32 dama uint32 crTypeMask = victim->GetCreatureTypeMask(); // Spells with SPELL_ATTR4_FIXED_DAMAGE ignore resilience because their damage is based off another spell's damage. - if (!(spellInfo->AttributesEx4 & SPELL_ATTR4_FIXED_DAMAGE)) + if (!spellInfo->HasAttribute(SPELL_ATTR4_FIXED_DAMAGE)) { if (IsDamageReducedByArmor(damageSchoolMask, spellInfo)) damage = CalcArmorReducedDamage(victim, damage, spellInfo, attackType); @@ -1459,7 +1442,7 @@ bool Unit::IsDamageReducedByArmor(SpellSchoolMask schoolMask, SpellInfo const* s if (spellInfo) { // there are spells with no specific attribute but they have "ignores armor" in tooltip - if (spellInfo->AttributesCu & SPELL_ATTR0_CU_IGNORE_ARMOR) + if (spellInfo->HasAttribute(SPELL_ATTR0_CU_IGNORE_ARMOR)) return false; // bleeding effects are not reduced by armor @@ -1560,7 +1543,7 @@ uint32 Unit::CalcSpellResistance(Unit* victim, SpellSchoolMask schoolMask, Spell return 0; // Ignore spells that can't be resisted - if (spellInfo && spellInfo->AttributesEx4 & SPELL_ATTR4_IGNORE_RESISTANCES) + if (spellInfo && spellInfo->HasAttribute(SPELL_ATTR4_IGNORE_RESISTANCES)) return 0; uint32 const BOSS_LEVEL = 83; @@ -2234,15 +2217,15 @@ void Unit::SendMeleeAttackStop(Unit* victim) TC_LOG_DEBUG("entities.unit", "WORLD: Sent SMSG_ATTACKSTOP"); if (victim) - TC_LOG_INFO("entities.unit", "%s %u stopped attacking %s %u", (GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature"), GetGUIDLow(), (victim->GetTypeId() == TYPEID_PLAYER ? "player" : "creature"), victim->GetGUIDLow()); + TC_LOG_DEBUG("entities.unit", "%s %u stopped attacking %s %u", (GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature"), GetGUIDLow(), (victim->GetTypeId() == TYPEID_PLAYER ? "player" : "creature"), victim->GetGUIDLow()); else - TC_LOG_INFO("entities.unit", "%s %u stopped attacking", (GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature"), GetGUIDLow()); + TC_LOG_DEBUG("entities.unit", "%s %u stopped attacking", (GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature"), GetGUIDLow()); } bool Unit::isSpellBlocked(Unit* victim, SpellInfo const* spellProto, WeaponAttackType attackType) { // These spells can't be blocked - if (spellProto && spellProto->Attributes & SPELL_ATTR0_IMPOSSIBLE_DODGE_PARRY_BLOCK) + if (spellProto && spellProto->HasAttribute(SPELL_ATTR0_IMPOSSIBLE_DODGE_PARRY_BLOCK)) return false; if (victim->HasAuraType(SPELL_AURA_IGNORE_HIT_DIRECTION) || victim->HasInArc(float(M_PI), this)) @@ -2309,7 +2292,7 @@ SpellMissInfo Unit::MeleeSpellHitResult(Unit* victim, SpellInfo const* spellInfo { // Spells with SPELL_ATTR3_IGNORE_HIT_RESULT will additionally fully ignore // resist and deflect chances - if (spellInfo->AttributesEx3 & SPELL_ATTR3_IGNORE_HIT_RESULT) + if (spellInfo->HasAttribute(SPELL_ATTR3_IGNORE_HIT_RESULT)) return SPELL_MISS_NONE; WeaponAttackType attType = BASE_ATTACK; @@ -2357,10 +2340,10 @@ SpellMissInfo Unit::MeleeSpellHitResult(Unit* victim, SpellInfo const* spellInfo bool canDodge = true; bool canParry = true; - bool canBlock = (spellInfo->AttributesEx3 & SPELL_ATTR3_BLOCKABLE_SPELL) != 0; + bool canBlock = spellInfo->HasAttribute(SPELL_ATTR3_BLOCKABLE_SPELL); // Same spells cannot be parry/dodge - if (spellInfo->Attributes & SPELL_ATTR0_IMPOSSIBLE_DODGE_PARRY_BLOCK) + if (spellInfo->HasAttribute(SPELL_ATTR0_IMPOSSIBLE_DODGE_PARRY_BLOCK)) return SPELL_MISS_NONE; // Chance resist mechanic @@ -2400,7 +2383,7 @@ SpellMissInfo Unit::MeleeSpellHitResult(Unit* victim, SpellInfo const* spellInfo } else // Only deterrence as of 3.3.5 { - if (spellInfo->AttributesCu & SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET) + if (spellInfo->HasAttribute(SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET)) canParry = false; } } @@ -2491,7 +2474,7 @@ SpellMissInfo Unit::MeleeSpellHitResult(Unit* victim, SpellInfo const* spellInfo SpellMissInfo Unit::MagicSpellHitResult(Unit* victim, SpellInfo const* spellInfo) { // Can`t miss on dead target (on skinning for example) - if ((!victim->IsAlive() && victim->GetTypeId() != TYPEID_PLAYER) || spellInfo->AttributesEx3 & SPELL_ATTR3_IGNORE_HIT_RESULT) + if ((!victim->IsAlive() && victim->GetTypeId() != TYPEID_PLAYER) || spellInfo->HasAttribute(SPELL_ATTR3_IGNORE_HIT_RESULT)) return SPELL_MISS_NONE; SpellSchoolMask schoolMask = spellInfo->GetSchoolMask(); @@ -2926,6 +2909,8 @@ void Unit::_UpdateSpells(uint32 time) ++itr; } } + + m_spellHistory->Update(); } void Unit::_UpdateAutoRepeatSpell() @@ -3089,7 +3074,7 @@ bool Unit::IsNonMeleeSpellCast(bool withDelayed, bool skipChanneled, bool skipAu { if (!skipInstant || m_currentSpells[CURRENT_GENERIC_SPELL]->GetCastTime()) { - if (!isAutoshoot || !(m_currentSpells[CURRENT_GENERIC_SPELL]->m_spellInfo->AttributesEx2 & SPELL_ATTR2_NOT_RESET_AUTO_ACTIONS)) + if (!isAutoshoot || !(m_currentSpells[CURRENT_GENERIC_SPELL]->m_spellInfo->HasAttribute(SPELL_ATTR2_NOT_RESET_AUTO_ACTIONS))) return true; } } @@ -3097,7 +3082,7 @@ bool Unit::IsNonMeleeSpellCast(bool withDelayed, bool skipChanneled, bool skipAu if (!skipChanneled && m_currentSpells[CURRENT_CHANNELED_SPELL] && (m_currentSpells[CURRENT_CHANNELED_SPELL]->getState() != SPELL_STATE_FINISHED)) { - if (!isAutoshoot || !(m_currentSpells[CURRENT_CHANNELED_SPELL]->m_spellInfo->AttributesEx2 & SPELL_ATTR2_NOT_RESET_AUTO_ACTIONS)) + if (!isAutoshoot || !(m_currentSpells[CURRENT_CHANNELED_SPELL]->m_spellInfo->HasAttribute(SPELL_ATTR2_NOT_RESET_AUTO_ACTIONS))) return true; } // autorepeat spells may be finished or delayed, but they are still considered cast @@ -3232,7 +3217,7 @@ Aura* Unit::_TryStackingOrRefreshingExistingAura(SpellInfo const* newAura, uint8 castItemGUID = castItem->GetGUID(); // find current aura from spell and change it's stackamount, or refresh it's duration - if (Aura* foundAura = GetOwnedAura(newAura->Id, casterGUID, (newAura->AttributesCu & SPELL_ATTR0_CU_ENCHANT_PROC) ? castItemGUID : ObjectGuid::Empty, 0)) + if (Aura* foundAura = GetOwnedAura(newAura->Id, casterGUID, newAura->HasAttribute(SPELL_ATTR0_CU_ENCHANT_PROC) ? castItemGUID : ObjectGuid::Empty, 0)) { // effect masks do not match // extremely rare case @@ -3743,7 +3728,7 @@ void Unit::RemoveAurasDueToSpellByDispel(uint32 spellId, uint32 dispellerSpellId // Call OnDispel hook on AuraScript aura->CallScriptDispel(&dispelInfo); - if (aura->GetSpellInfo()->AttributesEx7 & SPELL_ATTR7_DISPEL_CHARGES) + if (aura->GetSpellInfo()->HasAttribute(SPELL_ATTR7_DISPEL_CHARGES)) aura->ModCharges(-dispelInfo.GetRemovedCharges(), AURA_REMOVE_BY_ENEMY_SPELL); else aura->ModStackAmount(-dispelInfo.GetRemovedCharges(), AURA_REMOVE_BY_ENEMY_SPELL); @@ -3788,7 +3773,7 @@ void Unit::RemoveAurasDueToSpellBySteal(uint32 spellId, ObjectGuid casterGUID, U } } - bool stealCharge = (aura->GetSpellInfo()->AttributesEx7 & SPELL_ATTR7_DISPEL_CHARGES) != 0; + bool stealCharge = aura->GetSpellInfo()->HasAttribute(SPELL_ATTR7_DISPEL_CHARGES); // Cast duration to unsigned to prevent permanent aura's such as Righteous Fury being permanently added to caster uint32 dur = std::min(2u * MINUTE * IN_MILLISECONDS, uint32(aura->GetDuration())); @@ -4046,9 +4031,9 @@ void Unit::RemoveArenaAuras() { AuraApplication const* aurApp = iter->second; Aura const* aura = aurApp->GetBase(); - if (!(aura->GetSpellInfo()->AttributesEx4 & SPELL_ATTR4_UNK21) // don't remove stances, shadowform, pally/hunter auras + if (!aura->GetSpellInfo()->HasAttribute(SPELL_ATTR4_UNK21) // don't remove stances, shadowform, pally/hunter auras && !aura->IsPassive() // don't remove passive auras - && (aurApp->IsPositive() || !(aura->GetSpellInfo()->AttributesEx3 & SPELL_ATTR3_DEATH_PERSISTENT))) // not negative death persistent auras + && (aurApp->IsPositive() || !aura->GetSpellInfo()->HasAttribute(SPELL_ATTR3_DEATH_PERSISTENT))) // not negative death persistent auras RemoveAura(iter); else ++iter; @@ -4308,7 +4293,7 @@ void Unit::GetDispellableAuraList(Unit* caster, uint32 dispelMask, DispelCharges // The charges / stack amounts don't count towards the total number of auras that can be dispelled. // Ie: A dispel on a target with 5 stacks of Winters Chill and a Polymorph has 1 / (1 + 1) -> 50% chance to dispell // Polymorph instead of 1 / (5 + 1) -> 16%. - bool dispel_charges = (aura->GetSpellInfo()->AttributesEx7 & SPELL_ATTR7_DISPEL_CHARGES) != 0; + bool dispel_charges = aura->GetSpellInfo()->HasAttribute(SPELL_ATTR7_DISPEL_CHARGES); uint8 charges = dispel_charges ? aura->GetCharges() : aura->GetStackAmount(); if (charges > 0) dispelList.push_back(std::make_pair(aura, charges)); @@ -4861,13 +4846,13 @@ void Unit::AddGameObject(GameObject* gameObj) m_gameObj.push_back(gameObj); gameObj->SetOwnerGUID(GetGUID()); - if (GetTypeId() == TYPEID_PLAYER && gameObj->GetSpellId()) + if (gameObj->GetSpellId()) { SpellInfo const* createBySpell = sSpellMgr->GetSpellInfo(gameObj->GetSpellId()); // Need disable spell use for owner if (createBySpell && createBySpell->IsCooldownStartedOnEvent()) // note: item based cooldowns and cooldown spell mods with charges ignored (unknown existing cases) - ToPlayer()->AddSpellAndCategoryCooldowns(createBySpell, 0, NULL, true); + GetSpellHistory()->StartCooldown(createBySpell, 0, nullptr, true); } } @@ -4892,14 +4877,11 @@ void Unit::RemoveGameObject(GameObject* gameObj, bool del) { RemoveAurasDueToSpell(spellid); - if (GetTypeId() == TYPEID_PLAYER) - { - SpellInfo const* createBySpell = sSpellMgr->GetSpellInfo(spellid); - // Need activate spell use for owner - if (createBySpell && createBySpell->IsCooldownStartedOnEvent()) - // note: item based cooldowns and cooldown spell mods with charges ignored (unknown existing cases) - ToPlayer()->SendCooldownEvent(createBySpell); - } + SpellInfo const* createBySpell = sSpellMgr->GetSpellInfo(spellid); + // Need activate spell use for owner + if (createBySpell && createBySpell->IsCooldownStartedOnEvent()) + // note: item based cooldowns and cooldown spell mods with charges ignored (unknown existing cases) + GetSpellHistory()->SendCooldownEvent(createBySpell); } m_gameObj.remove(gameObj); @@ -5485,12 +5467,12 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere if (RandomSpells.empty()) // shouldn't happen return false; - uint8 rand_spell = irand(0, (RandomSpells.size() - 1)); + uint8 rand_spell = urand(0, (RandomSpells.size() - 1)); CastSpell(target, RandomSpells[rand_spell], true, castItem, triggeredByAura, originalCaster); for (std::vector<uint32>::iterator itr = RandomSpells.begin(); itr != RandomSpells.end(); ++itr) { - if (!ToPlayer()->HasSpellCooldown(*itr)) - ToPlayer()->AddSpellCooldown(*itr, 0, time(NULL) + cooldown); + if (!GetSpellHistory()->HasCooldown(*itr)) + GetSpellHistory()->AddCooldown(*itr, 0, std::chrono::seconds(cooldown)); } break; } @@ -5531,12 +5513,12 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere if (RandomSpells.empty()) // shouldn't happen return false; - uint8 rand_spell = irand(0, (RandomSpells.size() - 1)); + uint8 rand_spell = urand(0, (RandomSpells.size() - 1)); CastSpell(target, RandomSpells[rand_spell], true, castItem, triggeredByAura, originalCaster); for (std::vector<uint32>::iterator itr = RandomSpells.begin(); itr != RandomSpells.end(); ++itr) { - if (!ToPlayer()->HasSpellCooldown(*itr)) - ToPlayer()->AddSpellCooldown(*itr, 0, time(NULL) + cooldown); + if (!GetSpellHistory()->HasCooldown(*itr)) + GetSpellHistory()->AddCooldown(*itr, 0, std::chrono::seconds(cooldown)); } break; } @@ -5640,20 +5622,17 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere // Glyph of Ice Block case 56372: { - Player* player = ToPlayer(); - if (!player) + if (GetTypeId() != TYPEID_PLAYER) return false; - SpellCooldowns const cooldowns = player->GetSpellCooldowns(); - // remove cooldowns on all ranks of Frost Nova - for (SpellCooldowns::const_iterator itr = cooldowns.begin(); itr != cooldowns.end(); ++itr) + GetSpellHistory()->ResetCooldowns([](SpellHistory::CooldownStorageType::iterator itr) -> bool { SpellInfo const* cdSpell = sSpellMgr->GetSpellInfo(itr->first); - // Frost Nova - if (cdSpell && cdSpell->SpellFamilyName == SPELLFAMILY_MAGE - && cdSpell->SpellFamilyFlags[0] & 0x00000040) - player->RemoveSpellCooldown(cdSpell->Id, true); - } + if (!cdSpell || cdSpell->SpellFamilyName != SPELLFAMILY_MAGE + || !(cdSpell->SpellFamilyFlags[0] & 0x00000040)) + return false; + return true; + }, true); break; } case 47020: // Enter vehicle XT-002 (Scrapbot) @@ -5881,7 +5860,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere if (dummySpell->SpellIconID == 2218) { // Proc only from Abolish desease on self cast - if (procSpell->Id != 552 || victim != this || !roll_chance_i(triggerAmount)) + if (!procSpell || procSpell->Id != 552 || victim != this || !roll_chance_i(triggerAmount)) return false; triggered_spell_id = 64136; target = this; @@ -5931,7 +5910,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere case 55677: { // Dispel Magic shares spellfamilyflag with abolish disease - if (procSpell->SpellIconID != 74) + if (!procSpell || procSpell->SpellIconID != 74) return false; if (!target || !target->IsFriendlyTo(this)) return false; @@ -6062,7 +6041,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere int32 basepoints1 = CalculatePct(GetMaxPower(Powers(POWER_MANA)), triggerAmount * 2); // Improved Leader of the Pack // Check cooldown of heal spell cooldown - if (GetTypeId() == TYPEID_PLAYER && !ToPlayer()->HasSpellCooldown(34299)) + if (!GetSpellHistory()->HasCooldown(34299)) CastCustomSpell(this, 68285, &basepoints1, 0, 0, true, 0, triggeredByAura); break; } @@ -6733,7 +6712,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere return false; // custom cooldown processing case - if (cooldown && player->HasSpellCooldown(dummySpell->Id)) + if (cooldown && GetSpellHistory()->HasCooldown(dummySpell->Id)) return false; if (triggeredByAura->GetBase() && castItem->GetGUID() != triggeredByAura->GetBase()->GetCastItemGUID()) @@ -6799,7 +6778,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere // apply cooldown before cast to prevent processing itself if (cooldown) - player->AddSpellCooldown(dummySpell->Id, 0, time(NULL) + cooldown); + player->GetSpellHistory()->AddCooldown(dummySpell->Id, 0, std::chrono::seconds(cooldown)); // Attack Twice for (uint32 i = 0; i < 2; ++i) @@ -7041,7 +7020,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere return false; // custom cooldown processing case - if (cooldown && GetTypeId() == TYPEID_PLAYER && ToPlayer()->HasSpellCooldown(dummySpell->Id)) + if (cooldown && GetTypeId() == TYPEID_PLAYER && GetSpellHistory()->HasCooldown(dummySpell->Id)) return false; uint32 spellId = 0; @@ -7088,13 +7067,13 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere return false; // Remove cooldown (Chain Lightning - has Category Recovery time) - ToPlayer()->RemoveSpellCooldown(spellId); + GetSpellHistory()->ResetCooldown(spellId); } CastSpell(victim, spellId, true, castItem, triggeredByAura); if (cooldown && GetTypeId() == TYPEID_PLAYER) - ToPlayer()->AddSpellCooldown(dummySpell->Id, 0, time(NULL) + cooldown); + GetSpellHistory()->AddCooldown(dummySpell->Id, 0, std::chrono::seconds(cooldown)); return true; } @@ -7107,8 +7086,8 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere uint32 spell = sSpellMgr->GetSpellWithRank(26364, aurEff->GetSpellInfo()->GetRank()); // custom cooldown processing case - if (GetTypeId() == TYPEID_PLAYER && ToPlayer()->HasSpellCooldown(spell)) - ToPlayer()->RemoveSpellCooldown(spell); + if (GetTypeId() == TYPEID_PLAYER && GetSpellHistory()->HasCooldown(spell)) + GetSpellHistory()->ResetCooldown(spell); CastSpell(target, spell, true, castItem, triggeredByAura); aurEff->GetBase()->DropCharge(); @@ -7400,7 +7379,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere if (cooldown_spell_id == 0) cooldown_spell_id = triggered_spell_id; - if (cooldown && GetTypeId() == TYPEID_PLAYER && ToPlayer()->HasSpellCooldown(cooldown_spell_id)) + if (cooldown && GetTypeId() == TYPEID_PLAYER && GetSpellHistory()->HasCooldown(cooldown_spell_id)) return false; if (basepoints0) @@ -7409,7 +7388,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere CastSpell(target, triggered_spell_id, true, castItem, triggeredByAura, originalCaster); if (cooldown && GetTypeId() == TYPEID_PLAYER) - ToPlayer()->AddSpellCooldown(cooldown_spell_id, 0, time(NULL) + cooldown); + GetSpellHistory()->AddCooldown(cooldown_spell_id, 0, std::chrono::seconds(cooldown)); return true; } @@ -7630,9 +7609,9 @@ bool Unit::HandleAuraProc(Unit* victim, uint32 damage, Aura* triggeredByAura, Sp *handled = true; if (cooldown && GetTypeId() == TYPEID_PLAYER) { - if (ToPlayer()->HasSpellCooldown(100000)) + if (GetSpellHistory()->HasCooldown(100000)) return false; - ToPlayer()->AddSpellCooldown(100000, 0, time(NULL) + cooldown); + GetSpellHistory()->AddCooldown(100000, 0, std::chrono::seconds(cooldown)); } return true; } @@ -8301,7 +8280,11 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg return false; // Howling Blast - ToPlayer()->RemoveSpellCategoryCooldown(1248, true); + GetSpellHistory()->ResetCooldowns([](SpellHistory::CooldownStorageType::iterator itr) -> bool + { + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(itr->first); + return spellInfo && spellInfo->GetCategory() == 1248; + }, true); } // Custom basepoints/target for exist spell @@ -8320,13 +8303,13 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg if (!target) return false; - if (cooldown && target->GetTypeId() == TYPEID_PLAYER && target->ToPlayer()->HasSpellCooldown(trigger_spell_id)) + if (cooldown && target->GetTypeId() == TYPEID_PLAYER && target->GetSpellHistory()->HasCooldown(trigger_spell_id)) return false; target->CastSpell(target, trigger_spell_id, true, castItem, triggeredByAura); if (cooldown && GetTypeId() == TYPEID_PLAYER) - ToPlayer()->AddSpellCooldown(trigger_spell_id, 0, time(NULL) + cooldown); + GetSpellHistory()->AddCooldown(trigger_spell_id, 0, std::chrono::seconds(cooldown)); return true; } // Cast positive spell on enemy target @@ -8409,8 +8392,11 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg case 50227: { // Remove cooldown on Shield Slam - if (GetTypeId() == TYPEID_PLAYER) - ToPlayer()->RemoveSpellCategoryCooldown(1209, true); + GetSpellHistory()->ResetCooldowns([](SpellHistory::CooldownStorageType::iterator itr) -> bool + { + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(itr->first); + return spellInfo && spellInfo->GetCategory() == 1209; + }, true); break; } // Maelstrom Weapon @@ -8470,8 +8456,7 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg case 58628: { // remove cooldown of Death Grip - if (GetTypeId() == TYPEID_PLAYER) - ToPlayer()->RemoveSpellCooldown(49576, true); + GetSpellHistory()->ResetCooldown(49576, true); return true; } // Savage Defense @@ -8502,7 +8487,7 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg } } - if (cooldown && GetTypeId() == TYPEID_PLAYER && ToPlayer()->HasSpellCooldown(trigger_spell_id)) + if (cooldown && GetTypeId() == TYPEID_PLAYER && GetSpellHistory()->HasCooldown(trigger_spell_id)) return false; // extra attack should hit same target @@ -8519,7 +8504,7 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg CastSpell(target, trigger_spell_id, true, castItem, triggeredByAura); if (cooldown && GetTypeId() == TYPEID_PLAYER) - ToPlayer()->AddSpellCooldown(trigger_spell_id, 0, time(NULL) + cooldown); + GetSpellHistory()->AddCooldown(trigger_spell_id, 0, std::chrono::seconds(cooldown)); return true; } @@ -8615,13 +8600,13 @@ bool Unit::HandleOverrideClassScriptAuraProc(Unit* victim, uint32 /*damage*/, Au return false; } - if (cooldown && GetTypeId() == TYPEID_PLAYER && ToPlayer()->HasSpellCooldown(triggered_spell_id)) + if (cooldown && GetTypeId() == TYPEID_PLAYER && GetSpellHistory()->HasCooldown(triggered_spell_id)) return false; CastSpell(victim, triggered_spell_id, true, castItem, triggeredByAura); if (cooldown && GetTypeId() == TYPEID_PLAYER) - ToPlayer()->AddSpellCooldown(triggered_spell_id, 0, time(NULL) + cooldown); + GetSpellHistory()->AddCooldown(triggered_spell_id, 0, std::chrono::seconds(cooldown)); return true; } @@ -9356,14 +9341,11 @@ void Unit::SetMinion(Minion *minion, bool apply) if (minion->IsPetGhoul()) minion->setPowerType(POWER_ENERGY); - if (GetTypeId() == TYPEID_PLAYER) - { - // Send infinity cooldown - client does that automatically but after relog cooldown needs to be set again - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(minion->GetUInt32Value(UNIT_CREATED_BY_SPELL)); + // Send infinity cooldown - client does that automatically but after relog cooldown needs to be set again + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(minion->GetUInt32Value(UNIT_CREATED_BY_SPELL)); - if (spellInfo && (spellInfo->IsCooldownStartedOnEvent())) - ToPlayer()->AddSpellAndCategoryCooldowns(spellInfo, 0, NULL, true); - } + if (spellInfo && (spellInfo->IsCooldownStartedOnEvent())) + GetSpellHistory()->StartCooldown(spellInfo, 0, nullptr, true); } else { @@ -9397,13 +9379,10 @@ void Unit::SetMinion(Minion *minion, bool apply) } } - if (GetTypeId() == TYPEID_PLAYER) - { - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(minion->GetUInt32Value(UNIT_CREATED_BY_SPELL)); - // Remove infinity cooldown - if (spellInfo && (spellInfo->IsCooldownStartedOnEvent())) - ToPlayer()->SendCooldownEvent(spellInfo); - } + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(minion->GetUInt32Value(UNIT_CREATED_BY_SPELL)); + // Remove infinity cooldown + if (spellInfo && (spellInfo->IsCooldownStartedOnEvent())) + GetSpellHistory()->SendCooldownEvent(spellInfo); //if (minion->HasUnitTypeMask(UNIT_MASK_GUARDIAN)) { @@ -9602,7 +9581,7 @@ bool Unit::IsMagnet() const Unit* Unit::GetMagicHitRedirectTarget(Unit* victim, SpellInfo const* spellInfo) { // Patch 1.2 notes: Spell Reflection no longer reflects abilities - if (spellInfo->Attributes & SPELL_ATTR0_ABILITY || spellInfo->AttributesEx & SPELL_ATTR1_CANT_BE_REDIRECTED || spellInfo->Attributes & SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY) + if (spellInfo->HasAttribute(SPELL_ATTR0_ABILITY) || spellInfo->HasAttribute(SPELL_ATTR1_CANT_BE_REDIRECTED) || spellInfo->HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY)) return victim; Unit::AuraEffectList const& magnetAuras = victim->GetAuraEffectsByType(SPELL_AURA_SPELL_MAGNET); @@ -9854,7 +9833,7 @@ uint32 Unit::SpellDamageBonusDone(Unit* victim, SpellInfo const* spellProto, uin return pdamage; // Some spells don't benefit from done mods - if (spellProto->AttributesEx3 & SPELL_ATTR3_NO_DONE_BONUS) + if (spellProto->HasAttribute(SPELL_ATTR3_NO_DONE_BONUS)) return pdamage; // For totems get damage bonus from owner @@ -9970,11 +9949,15 @@ uint32 Unit::SpellDamageBonusDone(Unit* victim, SpellInfo const* spellProto, uin DoneTotal += int32(DoneAdvertisedBenefit * coeff * factorMod); } - // Done Percentage for DOT is already calculated, no need to do it again. The percentage mod is applied in Aura::HandleAuraSpecificMods. - float tmpDamage = (int32(pdamage) + DoneTotal) * (damagetype == DOT ? 1.0f : SpellDamagePctDone(victim, spellProto, damagetype)); - // apply spellmod to Done damage (flat and pct) - if (Player* modOwner = GetSpellModOwner()) - modOwner->ApplySpellMod(spellProto->Id, damagetype == DOT ? SPELLMOD_DOT : SPELLMOD_DAMAGE, tmpDamage); + float tmpDamage = float(int32(pdamage) + DoneTotal); + // SPELLMOD_DOT will be applied in AuraEffect::HandlePeriodicDamageAurasTick. + if (damagetype != DOT) + { + tmpDamage *= SpellDamagePctDone(victim, spellProto, damagetype); + // apply spellmod to Done damage (flat and pct) + if (Player* modOwner = GetSpellModOwner()) + modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_DAMAGE, tmpDamage); + } return uint32(std::max(tmpDamage, 0.0f)); } @@ -9985,7 +9968,7 @@ float Unit::SpellDamagePctDone(Unit* victim, SpellInfo const* spellProto, Damage return 1.0f; // Some spells don't benefit from pct done mods - if (spellProto->AttributesEx6 & SPELL_ATTR6_NO_DONE_PCT_DAMAGE_MODS) + if (spellProto->HasAttribute(SPELL_ATTR6_NO_DONE_PCT_DAMAGE_MODS)) return 1.0f; // For totems pct done mods are calculated when its calculation is run on the player in SpellDamageBonusDone. @@ -10009,7 +9992,7 @@ float Unit::SpellDamagePctDone(Unit* victim, SpellInfo const* spellProto, Damage { if ((*i)->GetSpellInfo()->EquippedItemClass == -1) AddPct(DoneTotalMod, (*i)->GetAmount()); - else if (!((*i)->GetSpellInfo()->AttributesEx5 & SPELL_ATTR5_SPECIAL_ITEM_CLASS_CHECK) && ((*i)->GetSpellInfo()->EquippedItemSubClassMask == 0)) + else if (!(*i)->GetSpellInfo()->HasAttribute(SPELL_ATTR5_SPECIAL_ITEM_CLASS_CHECK) && ((*i)->GetSpellInfo()->EquippedItemSubClassMask == 0)) AddPct(DoneTotalMod, (*i)->GetAmount()); else if (ToPlayer() && ToPlayer()->HasItemFitToSpellRequirements((*i)->GetSpellInfo())) AddPct(DoneTotalMod, (*i)->GetAmount()); @@ -10324,7 +10307,7 @@ uint32 Unit::SpellDamageBonusTaken(Unit* caster, SpellInfo const* spellProto, ui } } // Spells with SPELL_ATTR4_FIXED_DAMAGE should only benefit from mechanic damage mod auras. - if (!(spellProto->AttributesEx4 & SPELL_ATTR4_FIXED_DAMAGE)) + if (!spellProto->HasAttribute(SPELL_ATTR4_FIXED_DAMAGE)) { // get all auras from caster that allow the spell to ignore resistance (sanctified wrath) AuraEffectList const& IgnoreResistAuras = caster->GetAuraEffectsByType(SPELL_AURA_MOD_IGNORE_TARGET_RESIST); @@ -10454,7 +10437,7 @@ float Unit::GetUnitSpellCriticalChance(Unit* victim, SpellInfo const* spellProto return 0.0f; // not critting spell - if ((spellProto->AttributesEx2 & SPELL_ATTR2_CANT_CRIT)) + if (spellProto->HasAttribute(SPELL_ATTR2_CANT_CRIT)) return 0.0f; float crit_chance = 0.0f; @@ -10814,11 +10797,15 @@ uint32 Unit::SpellHealingBonusDone(Unit* victim, SpellInfo const* spellProto, ui DoneTotal = 0; } - // Done Percentage for DOT is already calculated, no need to do it again. The percentage mod is applied in Aura::HandleAuraSpecificMods. - float heal = float(int32(healamount) + DoneTotal) * (damagetype == DOT ? 1.0f : SpellHealingPctDone(victim, spellProto)); - // apply spellmod to Done amount - if (Player* modOwner = GetSpellModOwner()) - modOwner->ApplySpellMod(spellProto->Id, damagetype == DOT ? SPELLMOD_DOT : SPELLMOD_DAMAGE, heal); + float heal = float(int32(healamount) + DoneTotal); + // SPELLMOD_DOT will be applied in AuraEffect::HandlePeriodicHealAurasTick. + if (damagetype != DOT) + { + heal *= SpellHealingPctDone(victim, spellProto); + // apply spellmod to Done amount + if (Player* modOwner = GetSpellModOwner()) + modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_DAMAGE, heal); + } return uint32(std::max(heal, 0.0f)); } @@ -11063,7 +11050,7 @@ bool Unit::IsImmunedToDamage(SpellSchoolMask shoolMask) const bool Unit::IsImmunedToDamage(SpellInfo const* spellInfo) const { - if (spellInfo->Attributes & SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY) + if (spellInfo->HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY)) return false; uint32 shoolMask = spellInfo->GetSchoolMask(); @@ -11096,7 +11083,7 @@ bool Unit::IsImmunedToSpell(SpellInfo const* spellInfo) const if (itr->type == spellInfo->Id) return true; - if (spellInfo->Attributes & SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY) + if (spellInfo->HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY)) return false; if (spellInfo->Dispel) @@ -11154,7 +11141,7 @@ bool Unit::IsImmunedToSpellEffect(SpellInfo const* spellInfo, uint32 index) cons if (!spellInfo || !spellInfo->Effects[index].IsEffect()) return false; - if (spellInfo->Attributes & SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY) + if (spellInfo->HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY)) return false; // If m_immuneToEffect type contain this effect type, IMMUNE effect. @@ -11177,7 +11164,7 @@ bool Unit::IsImmunedToSpellEffect(SpellInfo const* spellInfo, uint32 index) cons SpellImmuneList const& list = m_spellImmune[IMMUNITY_STATE]; for (SpellImmuneList::const_iterator itr = list.begin(); itr != list.end(); ++itr) if (itr->type == aura) - if (!(spellInfo->AttributesEx3 & SPELL_ATTR3_IGNORE_HIT_RESULT)) + if (!spellInfo->HasAttribute(SPELL_ATTR3_IGNORE_HIT_RESULT)) return true; // Check for immune to application of harmful magical effects @@ -11252,7 +11239,7 @@ uint32 Unit::MeleeDamageBonusDone(Unit* victim, uint32 pdamage, WeaponAttackType // Some spells don't benefit from pct done mods if (spellProto) - if (!(spellProto->AttributesEx6 & SPELL_ATTR6_NO_DONE_PCT_DAMAGE_MODS)) + if (!spellProto->HasAttribute(SPELL_ATTR6_NO_DONE_PCT_DAMAGE_MODS)) { AuraEffectList const& mModDamagePercentDone = GetAuraEffectsByType(SPELL_AURA_MOD_DAMAGE_PERCENT_DONE); for (AuraEffectList::const_iterator i = mModDamagePercentDone.begin(); i != mModDamagePercentDone.end(); ++i) @@ -11261,7 +11248,7 @@ uint32 Unit::MeleeDamageBonusDone(Unit* victim, uint32 pdamage, WeaponAttackType { if ((*i)->GetSpellInfo()->EquippedItemClass == -1) AddPct(DoneTotalMod, (*i)->GetAmount()); - else if (!((*i)->GetSpellInfo()->AttributesEx5 & SPELL_ATTR5_SPECIAL_ITEM_CLASS_CHECK) && ((*i)->GetSpellInfo()->EquippedItemSubClassMask == 0)) + else if (!(*i)->GetSpellInfo()->HasAttribute(SPELL_ATTR5_SPECIAL_ITEM_CLASS_CHECK) && ((*i)->GetSpellInfo()->EquippedItemSubClassMask == 0)) AddPct(DoneTotalMod, (*i)->GetAmount()); else if (ToPlayer() && ToPlayer()->HasItemFitToSpellRequirements((*i)->GetSpellInfo())) AddPct(DoneTotalMod, (*i)->GetAmount()); @@ -11523,7 +11510,7 @@ void Unit::ApplySpellDispelImmunity(const SpellInfo* spellProto, DispelType type { ApplySpellImmune(spellProto->Id, IMMUNITY_DISPEL, type, apply); - if (apply && spellProto->AttributesEx & SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY) + if (apply && spellProto->HasAttribute(SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY)) { // Create dispel mask by dispel type uint32 dispelMask = SpellInfo::GetDispelMask(type); @@ -11808,7 +11795,7 @@ void Unit::ClearInCombat() if (HasFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_TAPPED)) SetUInt32Value(UNIT_DYNAMIC_FLAGS, creature->GetCreatureTemplate()->dynamicflags); - if (creature->IsPet()) + if (creature->IsPet() || creature->IsGuardian()) { if (Unit* owner = GetOwner()) for (uint8 i = 0; i < MAX_MOVE_TYPE; ++i) @@ -11864,7 +11851,7 @@ bool Unit::_IsValidAttackTarget(Unit const* target, SpellInfo const* bySpell, Wo return false; // can't attack invisible (ignore stealth for aoe spells) also if the area being looked at is from a spell use the dynamic object created instead of the casting unit. - if ((!bySpell || !(bySpell->AttributesEx6 & SPELL_ATTR6_CAN_TARGET_INVISIBLE)) && (obj ? !obj->CanSeeOrDetect(target, bySpell && bySpell->IsAffectingArea()) : !CanSeeOrDetect(target, bySpell && bySpell->IsAffectingArea()))) + if ((!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_CAN_TARGET_INVISIBLE)) && (obj ? !obj->CanSeeOrDetect(target, bySpell && bySpell->IsAffectingArea()) : !CanSeeOrDetect(target, bySpell && bySpell->IsAffectingArea()))) return false; // can't attack dead @@ -11872,7 +11859,7 @@ bool Unit::_IsValidAttackTarget(Unit const* target, SpellInfo const* bySpell, Wo return false; // can't attack untargetable - if ((!bySpell || !(bySpell->AttributesEx6 & SPELL_ATTR6_CAN_TARGET_UNTARGETABLE)) + if ((!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_CAN_TARGET_UNTARGETABLE)) && target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE)) return false; @@ -11981,7 +11968,7 @@ bool Unit::_IsValidAssistTarget(Unit const* target, SpellInfo const* bySpell) co return false; // can't assist invisible - if ((!bySpell || !(bySpell->AttributesEx6 & SPELL_ATTR6_CAN_TARGET_INVISIBLE)) && !CanSeeOrDetect(target, bySpell && bySpell->IsAffectingArea())) + if ((!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_CAN_TARGET_INVISIBLE)) && !CanSeeOrDetect(target, bySpell && bySpell->IsAffectingArea())) return false; // can't assist dead @@ -11989,11 +11976,11 @@ bool Unit::_IsValidAssistTarget(Unit const* target, SpellInfo const* bySpell) co return false; // can't assist untargetable - if ((!bySpell || !(bySpell->AttributesEx6 & SPELL_ATTR6_CAN_TARGET_UNTARGETABLE)) + if ((!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_CAN_TARGET_UNTARGETABLE)) && target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE)) return false; - if (!bySpell || !(bySpell->AttributesEx6 & SPELL_ATTR6_ASSIST_IGNORE_IMMUNE_FLAG)) + if (!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_ASSIST_IGNORE_IMMUNE_FLAG)) { if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE)) { @@ -12040,7 +12027,7 @@ bool Unit::_IsValidAssistTarget(Unit const* target, SpellInfo const* bySpell) co // PvC case - player can assist creature only if has specific type flags // !target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) && else if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) - && (!bySpell || !(bySpell->AttributesEx6 & SPELL_ATTR6_ASSIST_IGNORE_IMMUNE_FLAG)) + && (!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_ASSIST_IGNORE_IMMUNE_FLAG)) && !((target->GetByteValue(UNIT_FIELD_BYTES_2, 1) & UNIT_BYTE2_FLAG_PVP))) { if (Creature const* creatureTarget = target->ToCreature()) @@ -12829,7 +12816,7 @@ int32 Unit::ModSpellDuration(SpellInfo const* spellProto, Unit const* target, in return duration; // some auras are not affected by duration modifiers - if (spellProto->AttributesEx7 & SPELL_ATTR7_IGNORE_DURATION_MODS) + if (spellProto->HasAttribute(SPELL_ATTR7_IGNORE_DURATION_MODS)) return duration; // cut duration only of negative effects @@ -12933,17 +12920,17 @@ void Unit::ModSpellCastTime(SpellInfo const* spellInfo, int32 & castTime, Spell* if (!spellInfo || castTime < 0) return; - if (spellInfo->IsChanneled() && !(spellInfo->AttributesEx5 & SPELL_ATTR5_HASTE_AFFECT_DURATION)) + if (spellInfo->IsChanneled() && !spellInfo->HasAttribute(SPELL_ATTR5_HASTE_AFFECT_DURATION)) return; // called from caster if (Player* modOwner = GetSpellModOwner()) modOwner->ApplySpellMod(spellInfo->Id, SPELLMOD_CASTING_TIME, castTime, spell); - if (!((spellInfo->Attributes & (SPELL_ATTR0_ABILITY | SPELL_ATTR0_TRADESPELL)) || (spellInfo->AttributesEx3 & SPELL_ATTR3_NO_DONE_BONUS)) && + if (!(spellInfo->HasAttribute(SPELL_ATTR0_ABILITY) || spellInfo->HasAttribute(SPELL_ATTR0_TRADESPELL) || spellInfo->HasAttribute(SPELL_ATTR3_NO_DONE_BONUS)) && ((GetTypeId() == TYPEID_PLAYER && spellInfo->SpellFamilyName) || GetTypeId() == TYPEID_UNIT)) castTime = int32(float(castTime) * GetFloatValue(UNIT_MOD_CAST_SPEED)); - else if (spellInfo->Attributes & SPELL_ATTR0_REQ_AMMO && !(spellInfo->AttributesEx2 & SPELL_ATTR2_AUTOREPEAT_FLAG)) + else if (spellInfo->HasAttribute(SPELL_ATTR0_REQ_AMMO) && !spellInfo->HasAttribute(SPELL_ATTR2_AUTOREPEAT_FLAG)) castTime = int32(float(castTime) * m_modAttackSpeedPct[RANGED_ATTACK]); else if (spellInfo->SpellVisual[0] == 3881 && HasAura(67556)) // cooking with Chef Hat. castTime = 500; @@ -13718,7 +13705,7 @@ void CharmInfo::InitPossessCreateSpells() { uint32 spellId = _unit->ToCreature()->m_spells[i]; SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId); - if (spellInfo && !(spellInfo->Attributes & SPELL_ATTR0_CASTABLE_WHILE_DEAD)) + if (spellInfo && !spellInfo->HasAttribute(SPELL_ATTR0_CASTABLE_WHILE_DEAD)) { if (spellInfo->IsPassive()) _unit->CastSpell(_unit, spellInfo, true); @@ -13746,7 +13733,7 @@ void CharmInfo::InitCharmCreateSpells() uint32 spellId = _unit->ToCreature()->m_spells[x]; SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId); - if (!spellInfo || spellInfo->Attributes & SPELL_ATTR0_CASTABLE_WHILE_DEAD) + if (!spellInfo || spellInfo->HasAttribute(SPELL_ATTR0_CASTABLE_WHILE_DEAD)) { _charmspells[x].SetActionAndType(spellId, ACT_DISABLED); continue; @@ -14133,7 +14120,7 @@ void Unit::ProcDamageAndSpellFor(bool isVictim, Unit* target, uint32 procFlag, u continue; // Triggered spells not triggering additional spells - bool triggered = !(spellProto->AttributesEx3 & SPELL_ATTR3_CAN_PROC_WITH_TRIGGERED) ? + bool triggered = !spellProto->HasAttribute(SPELL_ATTR3_CAN_PROC_WITH_TRIGGERED) ? (procExtra & PROC_EX_INTERNAL_TRIGGERED && !(procFlag & PROC_FLAG_DONE_TRAP_ACTIVATION)) : false; for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) @@ -14190,7 +14177,7 @@ void Unit::ProcDamageAndSpellFor(bool isVictim, Unit* target, uint32 procFlag, u cooldown = i->spellProcEvent->cooldown; // Note: must SetCantProc(false) before return - if (spellInfo->AttributesEx3 & SPELL_ATTR3_DISABLE_PROC) + if (spellInfo->HasAttribute(SPELL_ATTR3_DISABLE_PROC)) SetCantProc(true); bool handled = i->aura->CallScriptProcHandlers(aurApp, eventInfo); @@ -14385,7 +14372,7 @@ void Unit::ProcDamageAndSpellFor(bool isVictim, Unit* target, uint32 procFlag, u i->aura->CallScriptAfterProcHandlers(aurApp, eventInfo); - if (spellInfo->AttributesEx3 & SPELL_ATTR3_DISABLE_PROC) + if (spellInfo->HasAttribute(SPELL_ATTR3_DISABLE_PROC)) SetCantProc(false); } @@ -15060,7 +15047,7 @@ bool Unit::IsTriggeredAtSpellProcEvent(Unit* victim, Aura* aura, SpellInfo const // Additional checks for triggered spells (ignore trap casts) if (procExtra & PROC_EX_INTERNAL_TRIGGERED && !(procFlag & PROC_FLAG_DONE_TRAP_ACTIVATION)) { - if (!(spellProto->AttributesEx3 & SPELL_ATTR3_CAN_PROC_WITH_TRIGGERED)) + if (!spellProto->HasAttribute(SPELL_ATTR3_CAN_PROC_WITH_TRIGGERED)) return false; } @@ -15540,18 +15527,11 @@ void Unit::SetControlled(bool apply, UnitState state) { case UNIT_STATE_STUNNED: SetStunned(true); - // i need to stop fear on stun and root or i will get teleport to destination issue as MVMGEN for fear keeps going on - if (HasUnitState(UNIT_STATE_FLEEING)) - SetFeared(false); CastStop(); break; case UNIT_STATE_ROOT: if (!HasUnitState(UNIT_STATE_STUNNED)) - { SetRooted(true); - if (HasUnitState(UNIT_STATE_FLEEING)) - SetFeared(false); - } break; case UNIT_STATE_CONFUSED: if (!HasUnitState(UNIT_STATE_STUNNED)) @@ -15639,11 +15619,9 @@ void Unit::SetStunned(bool apply) // setting MOVEMENTFLAG_ROOT RemoveUnitMovementFlag(MOVEMENTFLAG_MASK_MOVING); AddUnitMovementFlag(MOVEMENTFLAG_ROOT); + StopMoving(); - // Creature specific - if (GetTypeId() != TYPEID_PLAYER) - StopMoving(); - else + if (GetTypeId() == TYPEID_PLAYER) SetStandState(UNIT_STAND_STATE_STAND); WorldPacket data(SMSG_FORCE_MOVE_ROOT, 8); @@ -15687,6 +15665,7 @@ void Unit::SetRooted(bool apply) // setting MOVEMENTFLAG_ROOT RemoveUnitMovementFlag(MOVEMENTFLAG_MASK_MOVING); AddUnitMovementFlag(MOVEMENTFLAG_ROOT); + StopMoving(); if (GetTypeId() == TYPEID_PLAYER) { @@ -15700,7 +15679,6 @@ void Unit::SetRooted(bool apply) WorldPacket data(SMSG_SPLINE_MOVE_ROOT, 8); data << GetPackGUID(); SendMessageToSet(&data, true); - StopMoving(); } } else @@ -16220,7 +16198,7 @@ Aura* Unit::AddAura(uint32 spellId, Unit* target) if (!spellInfo) return NULL; - if (!target->IsAlive() && !(spellInfo->Attributes & SPELL_ATTR0_PASSIVE) && !(spellInfo->AttributesEx2 & SPELL_ATTR2_CAN_TARGET_DEAD)) + if (!target->IsAlive() && !spellInfo->HasAttribute(SPELL_ATTR0_PASSIVE) && !spellInfo->HasAttribute(SPELL_ATTR2_CAN_TARGET_DEAD)) return NULL; return AddAura(spellInfo, MAX_EFFECT_MASK, target); @@ -16477,7 +16455,7 @@ void Unit::KnockbackFrom(float x, float y, float speedXY, float speedZ) float vcos, vsin; GetSinCos(x, y, vsin, vcos); - WorldPacket data(SMSG_MOVE_KNOCK_BACK, (8+4+4+4+4+4)); + WorldPacket data(SMSG_MOVE_KNOCK_BACK, (8 + 4 + 4 + 4 + 4 + 4)); data << GetPackGUID(); data << uint32(0); // counter data << float(vcos); // x direction @@ -16486,6 +16464,9 @@ void Unit::KnockbackFrom(float x, float y, float speedXY, float speedZ) data << float(-speedZ); // Z Movement speed (vertical) player->GetSession()->SendPacket(&data); + + if (player->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED) || player->HasAuraType(SPELL_AURA_FLY)) + player->SetCanFly(true, true); } } @@ -17323,30 +17304,30 @@ void Unit::StopAttackFaction(uint32 faction_id) void Unit::OutDebugInfo() const { TC_LOG_ERROR("entities.unit", "Unit::OutDebugInfo"); - TC_LOG_INFO("entities.unit", "%s name %s", GetGUID().ToString().c_str(), GetName().c_str()); - TC_LOG_INFO("entities.unit", "Owner %s, Minion %s, Charmer %s, Charmed %s", GetOwnerGUID().ToString().c_str(), GetMinionGUID().ToString().c_str(), GetCharmerGUID().ToString().c_str(), GetCharmGUID().ToString().c_str()); - TC_LOG_INFO("entities.unit", "In world %u, unit type mask %u", (uint32)(IsInWorld() ? 1 : 0), m_unitTypeMask); + TC_LOG_DEBUG("entities.unit", "%s name %s", GetGUID().ToString().c_str(), GetName().c_str()); + TC_LOG_DEBUG("entities.unit", "Owner %s, Minion %s, Charmer %s, Charmed %s", GetOwnerGUID().ToString().c_str(), GetMinionGUID().ToString().c_str(), GetCharmerGUID().ToString().c_str(), GetCharmGUID().ToString().c_str()); + TC_LOG_DEBUG("entities.unit", "In world %u, unit type mask %u", (uint32)(IsInWorld() ? 1 : 0), m_unitTypeMask); if (IsInWorld()) - TC_LOG_INFO("entities.unit", "Mapid %u", GetMapId()); + TC_LOG_DEBUG("entities.unit", "Mapid %u", GetMapId()); std::ostringstream o; o << "Summon Slot: "; for (uint32 i = 0; i < MAX_SUMMON_SLOT; ++i) o << m_SummonSlot[i].ToString() << ", "; - TC_LOG_INFO("entities.unit", "%s", o.str().c_str()); + TC_LOG_DEBUG("entities.unit", "%s", o.str().c_str()); o.str(""); o << "Controlled List: "; for (ControlList::const_iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); ++itr) o << (*itr)->GetGUID().ToString() << ", "; - TC_LOG_INFO("entities.unit", "%s", o.str().c_str()); + TC_LOG_DEBUG("entities.unit", "%s", o.str().c_str()); o.str(""); o << "Aura List: "; for (AuraApplicationMap::const_iterator itr = m_appliedAuras.begin(); itr != m_appliedAuras.end(); ++itr) o << itr->first << ", "; - TC_LOG_INFO("entities.unit", "%s", o.str().c_str()); + TC_LOG_DEBUG("entities.unit", "%s", o.str().c_str()); o.str(""); if (IsVehicle()) @@ -17355,11 +17336,11 @@ void Unit::OutDebugInfo() const for (SeatMap::iterator itr = GetVehicleKit()->Seats.begin(); itr != GetVehicleKit()->Seats.end(); ++itr) if (Unit* passenger = ObjectAccessor::GetUnit(*GetVehicleBase(), itr->second.Passenger.Guid)) o << passenger->GetGUID().ToString() << ", "; - TC_LOG_INFO("entities.unit", "%s", o.str().c_str()); + TC_LOG_DEBUG("entities.unit", "%s", o.str().c_str()); } if (GetVehicle()) - TC_LOG_INFO("entities.unit", "On vehicle %u.", GetVehicleBase()->GetEntry()); + TC_LOG_DEBUG("entities.unit", "On vehicle %u.", GetVehicleBase()->GetEntry()); } uint32 Unit::GetRemainingPeriodicAmount(ObjectGuid caster, uint32 spellId, AuraType auraType, uint8 effectIndex) const @@ -17544,7 +17525,7 @@ bool Unit::SetSwim(bool enable) return true; } -bool Unit::SetCanFly(bool enable) +bool Unit::SetCanFly(bool enable, bool /*packetOnly = false */) { if (enable == HasUnitMovementFlag(MOVEMENTFLAG_CAN_FLY)) return false; @@ -17795,27 +17776,6 @@ void Unit::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) data->append(fieldBuffer); } -void Unit::BuildCooldownPacket(WorldPacket& data, uint8 flags, uint32 spellId, uint32 cooldown) -{ - data.Initialize(SMSG_SPELL_COOLDOWN, 8 + 1 + 4 + 4); - data << uint64(GetGUID()); - data << uint8(flags); - data << uint32(spellId); - data << uint32(cooldown); -} - -void Unit::BuildCooldownPacket(WorldPacket& data, uint8 flags, PacketCooldowns const& cooldowns) -{ - data.Initialize(SMSG_SPELL_COOLDOWN, 8 + 1 + (4 + 4) * cooldowns.size()); - data << uint64(GetGUID()); - data << uint8(flags); - for (std::unordered_map<uint32, uint32>::const_iterator itr = cooldowns.begin(); itr != cooldowns.end(); ++itr) - { - data << uint32(itr->first); - data << uint32(itr->second); - } -} - int32 Unit::GetHighestExclusiveSameEffectSpellGroupValue(AuraEffect const* aurEff, AuraType auraType, bool checkMiscValue /*= false*/, int32 miscValue /*= 0*/) const { int32 val = 0; diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index ddf43f30971..2593ca2c728 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -273,13 +273,6 @@ enum UnitRename #define MAX_AGGRO_RESET_TIME 10 // in seconds #define MAX_AGGRO_RADIUS 45.0f // yards -enum Swing -{ - NOSWING = 0, - SINGLEHANDEDSWING = 1, - TWOHANDEDSWING = 2 -}; - enum VictimState { VICTIMSTATE_INTACT = 0, // set when attacker misses @@ -339,6 +332,7 @@ class AuraEffect; class Creature; class Spell; class SpellInfo; +class SpellHistory; class DynamicObject; class GameObject; class Item; @@ -355,7 +349,7 @@ class TransportBase; class SpellCastTargets; typedef std::list<Unit*> UnitList; -typedef std::list< std::pair<Aura*, uint8> > DispelChargesList; +typedef std::list<std::pair<Aura*, uint8>> DispelChargesList; struct SpellImmune { @@ -380,13 +374,6 @@ enum WeaponDamageRange MAXDAMAGE }; -enum DamageTypeToSchool -{ - RESISTANCE, - DAMAGE_DEALT, - DAMAGE_TAKEN -}; - enum AuraRemoveMode { AURA_REMOVE_NONE = 0, @@ -1031,30 +1018,6 @@ enum CurrentSpellTypes #define CURRENT_FIRST_NON_MELEE_SPELL 1 #define CURRENT_MAX_SPELL 4 -struct GlobalCooldown -{ - explicit GlobalCooldown(uint32 _dur = 0, uint32 _time = 0) : duration(_dur), cast_time(_time) { } - - uint32 duration; - uint32 cast_time; -}; - -typedef std::unordered_map<uint32 /*category*/, GlobalCooldown> GlobalCooldownList; - -class GlobalCooldownMgr // Shared by Player and CharmInfo -{ -public: - GlobalCooldownMgr() { } - -public: - bool HasGlobalCooldown(SpellInfo const* spellInfo) const; - void AddGlobalCooldown(SpellInfo const* spellInfo, uint32 gcd); - void CancelGlobalCooldown(SpellInfo const* spellInfo); - -private: - GlobalCooldownList m_GlobalCooldowns; -}; - enum ActiveStates { ACT_PASSIVE = 0x01, // 0x01 - passive @@ -1171,8 +1134,6 @@ struct CharmInfo CharmSpellInfo* GetCharmSpell(uint8 index) { return &(_charmspells[index]); } - GlobalCooldownMgr& GetGlobalCooldownMgr() { return m_GlobalCooldownMgr; } - void SetIsCommandAttack(bool val); bool IsCommandAttack(); void SetIsCommandFollow(bool val); @@ -1205,8 +1166,6 @@ struct CharmInfo float _stayX; float _stayY; float _stayZ; - - GlobalCooldownMgr m_GlobalCooldownMgr; }; // for clearing special attacks @@ -1237,16 +1196,6 @@ enum PlayerTotemType SUMMON_TYPE_TOTEM_AIR = 83 }; -/// Spell cooldown flags sent in SMSG_SPELL_COOLDOWN -enum SpellCooldownFlags -{ - SPELL_COOLDOWN_FLAG_NONE = 0x0, - SPELL_COOLDOWN_FLAG_INCLUDE_GCD = 0x1, ///< Starts GCD in addition to normal cooldown specified in the packet - SPELL_COOLDOWN_FLAG_INCLUDE_EVENT_COOLDOWNS = 0x2 ///< Starts GCD for spells that should start their cooldown on events, requires SPELL_COOLDOWN_FLAG_INCLUDE_GCD set -}; - -typedef std::unordered_map<uint32, uint32> PacketCooldowns; - // delay time next attack to prevent client attack animation problems #define ATTACK_DISPLAY_DELAY 200 #define MAX_PLAYER_STEALTH_DETECT_RANGE 30.0f // max distance for detection targets by player @@ -1585,8 +1534,6 @@ class Unit : public WorldObject void SetAuraStack(uint32 spellId, Unit* target, uint32 stack); void SendPlaySpellVisual(uint32 id); void SendPlaySpellImpact(ObjectGuid guid, uint32 id); - void BuildCooldownPacket(WorldPacket& data, uint8 flags, uint32 spellId, uint32 cooldown); - void BuildCooldownPacket(WorldPacket& data, uint8 flags, PacketCooldowns const& cooldowns); void DeMorph(); @@ -1622,7 +1569,7 @@ class Unit : public WorldObject virtual bool SetWalk(bool enable); virtual bool SetDisableGravity(bool disable, bool packetOnly = false); virtual bool SetSwim(bool enable); - virtual bool SetCanFly(bool enable); + virtual bool SetCanFly(bool enable, bool packetOnly = false); virtual bool SetWaterWalking(bool enable, bool packetOnly = false); virtual bool SetFeatherFall(bool enable, bool packetOnly = false); virtual bool SetHover(bool enable, bool packetOnly = false); @@ -1845,7 +1792,6 @@ class Unit : public WorldObject void SetChannelObjectGuid(ObjectGuid guid) { SetGuidValue(UNIT_FIELD_CHANNEL_OBJECT, guid); } void SetCurrentCastSpell(Spell* pSpell); - virtual void ProhibitSpellSchool(SpellSchoolMask /*idSchoolMask*/, uint32 /*unTimeMs*/) { } void InterruptSpell(CurrentSpellTypes spellType, bool withDelayed = true, bool withInstant = true); void FinishSpell(CurrentSpellTypes spellType, bool ok = true); @@ -1863,6 +1809,9 @@ class Unit : public WorldObject Spell* FindCurrentSpellBySpellId(uint32 spell_id) const; int32 GetCurrentSpellCastTime(uint32 spell_id) const; + SpellHistory* GetSpellHistory() { return m_spellHistory; } + SpellHistory const* GetSpellHistory() const { return m_spellHistory; } + ObjectGuid m_SummonSlot[MAX_SUMMON_SLOT]; ObjectGuid m_ObjectSlot[MAX_GAMEOBJECT_SLOT]; @@ -1933,7 +1882,7 @@ class Unit : public WorldObject void TauntApply(Unit* victim); void TauntFadeOut(Unit* taunter); ThreatManager& getThreatManager() { return m_ThreatManager; } - void addHatedBy(HostileReference* pHostileReference) { m_HostileRefManager.insertFirst(pHostileReference); }; + void addHatedBy(HostileReference* pHostileReference) { m_HostileRefManager.insertFirst(pHostileReference); } void removeHatedBy(HostileReference* /*pHostileReference*/) { /* nothing to do yet */ } HostileRefManager& getHostileRefManager() { return m_HostileRefManager; } @@ -2293,6 +2242,8 @@ class Unit : public WorldObject bool _isWalkingBeforeCharm; ///< Are we walking before we were charmed? time_t _lastDamagedTime; // Part of Evade mechanics + + SpellHistory* m_spellHistory; }; namespace Trinity diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp index 9887f303357..b6f9534ac51 100755 --- a/src/server/game/Entities/Vehicle/Vehicle.cpp +++ b/src/server/game/Entities/Vehicle/Vehicle.cpp @@ -22,12 +22,8 @@ #include "Vehicle.h" #include "Unit.h" #include "Util.h" -#include "WorldPacket.h" #include "ScriptMgr.h" #include "CreatureAI.h" -#include "ZoneScript.h" -#include "SpellMgr.h" -#include "SpellInfo.h" #include "MoveSplineInit.h" #include "TemporarySummon.h" #include "EventProcessor.h" diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp index ba82c61e7ff..2264612f89b 100644 --- a/src/server/game/Events/GameEventMgr.cpp +++ b/src/server/game/Events/GameEventMgr.cpp @@ -24,7 +24,6 @@ #include "Language.h" #include "Log.h" #include "MapManager.h" -#include "GossipDef.h" #include "Player.h" #include "BattlegroundMgr.h" #include "UnitAI.h" diff --git a/src/server/game/Events/GameEventMgr.h b/src/server/game/Events/GameEventMgr.h index a47b6f29e80..eb29e463a4d 100644 --- a/src/server/game/Events/GameEventMgr.h +++ b/src/server/game/Events/GameEventMgr.h @@ -96,7 +96,7 @@ class GameEventMgr { private: GameEventMgr(); - ~GameEventMgr() { }; + ~GameEventMgr() { } public: static GameEventMgr* instance() diff --git a/src/server/game/Globals/ObjectAccessor.cpp b/src/server/game/Globals/ObjectAccessor.cpp index 88cc201ebf8..859633b16c4 100644 --- a/src/server/game/Globals/ObjectAccessor.cpp +++ b/src/server/game/Globals/ObjectAccessor.cpp @@ -20,28 +20,20 @@ #include <boost/thread/locks.hpp> #include "ObjectAccessor.h" -#include "CellImpl.h" #include "Corpse.h" #include "Creature.h" #include "DynamicObject.h" #include "GameObject.h" #include "GridNotifiers.h" -#include "GridNotifiersImpl.h" #include "Item.h" #include "Map.h" -#include "MapInstanced.h" -#include "MapManager.h" #include "ObjectDefines.h" #include "ObjectMgr.h" -#include "Opcodes.h" #include "Pet.h" #include "Player.h" -#include "Vehicle.h" #include "World.h" #include "WorldPacket.h" -#include <cmath> - ObjectAccessor::ObjectAccessor() { } ObjectAccessor::~ObjectAccessor() { } diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index f0d7d039dd5..e540824e71c 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -1039,6 +1039,66 @@ void ObjectMgr::LoadCreatureAddons() TC_LOG_INFO("server.loading", ">> Loaded %u creature addons in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); } +void ObjectMgr::LoadGameObjectAddons() +{ + uint32 oldMSTime = getMSTime(); + + // 0 1 2 + QueryResult result = WorldDatabase.Query("SELECT guid, invisibilityType, invisibilityValue FROM gameobject_addon"); + + if (!result) + { + TC_LOG_INFO("server.loading", ">> Loaded 0 gameobject addon definitions. DB table `gameobject_addon` is empty."); + return; + } + + uint32 count = 0; + do + { + Field* fields = result->Fetch(); + + ObjectGuid::LowType guid = fields[0].GetUInt32(); + + const GameObjectData* goData = GetGOData(guid); + if (!goData) + { + TC_LOG_ERROR("sql.sql", "GameObject (GUID: %u) does not exist but has a record in `gameobject_addon`", guid); + continue; + } + + GameObjectAddon& gameObjectAddon = _gameObjectAddonStore[guid]; + gameObjectAddon.invisibilityType = InvisibilityType(fields[1].GetUInt8()); + gameObjectAddon.InvisibilityValue = fields[2].GetUInt32(); + + if (gameObjectAddon.invisibilityType >= TOTAL_INVISIBILITY_TYPES) + { + TC_LOG_ERROR("sql.sql", "GameObject (GUID: %u) has invalid InvisibilityType in `gameobject_addon`", guid); + gameObjectAddon.invisibilityType = INVISIBILITY_GENERAL; + gameObjectAddon.InvisibilityValue = 0; + } + + if (gameObjectAddon.invisibilityType && !gameObjectAddon.InvisibilityValue) + { + TC_LOG_ERROR("sql.sql", "GameObject (GUID: %u) has InvisibilityType set but has no InvisibilityValue in `gameobject_addon`, set to 1", guid); + gameObjectAddon.InvisibilityValue = 1; + } + + ++count; + } + while (result->NextRow()); + + TC_LOG_INFO("server.loading", ">> Loaded %u gameobject addons in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); +} + +GameObjectAddon const* ObjectMgr::GetGameObjectAddon(ObjectGuid::LowType lowguid) +{ + GameObjectAddonContainer::const_iterator itr = _gameObjectAddonStore.find(lowguid); + if (itr != _gameObjectAddonStore.end()) + return &(itr->second); + + return NULL; +} + CreatureAddon const* ObjectMgr::GetCreatureAddon(uint32 lowguid) { CreatureAddonContainer::const_iterator itr = _creatureAddonStore.find(lowguid); @@ -4941,11 +5001,11 @@ void ObjectMgr::LoadEventScripts() { TaxiPathNodeEntry const& node = sTaxiPathNodesByPath[path_idx][node_idx]; - if (node.arrivalEventID) - evt_scripts.insert(node.arrivalEventID); + if (node.ArrivalEventID) + evt_scripts.insert(node.ArrivalEventID); - if (node.departureEventID) - evt_scripts.insert(node.departureEventID); + if (node.DepartureEventID) + evt_scripts.insert(node.DepartureEventID); } } @@ -6674,7 +6734,7 @@ void ObjectMgr::LoadGameObjectTemplate() { if (got.moTransport.taxiPathId >= sTaxiPathNodesByPath.size() || sTaxiPathNodesByPath[got.moTransport.taxiPathId].empty()) TC_LOG_ERROR("sql.sql", "GameObject (Entry: %u GoType: %u) have data0=%u but TaxiPath (Id: %u) not exist.", - entry, got.type, got.moTransport.taxiPathId, got.moTransport.taxiPathId); + entry, got.type, got.moTransport.taxiPathId, got.moTransport.taxiPathId); } if (uint32 transportMap = got.moTransport.mapID) _transportMaps.insert(transportMap); @@ -8601,7 +8661,6 @@ void ObjectMgr::LoadBroadcastTexts() } _broadcastTextStore.rehash(result->GetRowCount()); - uint32 count = 0; do { @@ -8627,26 +8686,23 @@ void ObjectMgr::LoadBroadcastTexts() { if (!sSoundEntriesStore.LookupEntry(bct.SoundId)) { - TC_LOG_INFO("sql.sql", "BroadcastText (Id: %u) in table `broadcast_text` has SoundId %u but sound does not exist. Skipped.", bct.Id, bct.SoundId); - // don't load bct of higher expansions - continue; + TC_LOG_DEBUG("broadcasttext", "BroadcastText (Id: %u) in table `broadcast_text` has SoundId %u but sound does not exist.", bct.Id, bct.SoundId); + bct.SoundId = 0; } } if (!GetLanguageDescByID(bct.Language)) { - TC_LOG_INFO("sql.sql", "BroadcastText (Id: %u) in table `broadcast_text` using Language %u but Language does not exist. Skipped.", bct.Id, bct.Language); - // don't load bct of higher expansions - continue; + TC_LOG_DEBUG("broadcasttext", "BroadcastText (Id: %u) in table `broadcast_text` using Language %u but Language does not exist.", bct.Id, bct.Language); + bct.Language = LANG_UNIVERSAL; } if (bct.EmoteId0) { if (!sEmotesStore.LookupEntry(bct.EmoteId0)) { - TC_LOG_INFO("sql.sql", "BroadcastText (Id: %u) in table `broadcast_text` has EmoteId0 %u but emote does not exist. Skipped.", bct.Id, bct.EmoteId0); - // don't load bct of higher expansions - continue; + TC_LOG_DEBUG("broadcasttext", "BroadcastText (Id: %u) in table `broadcast_text` has EmoteId0 %u but emote does not exist.", bct.Id, bct.EmoteId0); + bct.EmoteId0 = 0; } } @@ -8654,9 +8710,8 @@ void ObjectMgr::LoadBroadcastTexts() { if (!sEmotesStore.LookupEntry(bct.EmoteId1)) { - TC_LOG_INFO("sql.sql", "BroadcastText (Id: %u) in table `broadcast_text` has EmoteId1 %u but emote does not exist. Skipped.", bct.Id, bct.EmoteId1); - // don't load bct of higher expansions - continue; + TC_LOG_DEBUG("broadcasttext", "BroadcastText (Id: %u) in table `broadcast_text` has EmoteId1 %u but emote does not exist.", bct.Id, bct.EmoteId1); + bct.EmoteId1 = 0; } } @@ -8664,19 +8719,16 @@ void ObjectMgr::LoadBroadcastTexts() { if (!sEmotesStore.LookupEntry(bct.EmoteId2)) { - TC_LOG_INFO("sql.sql", "BroadcastText (Id: %u) in table `broadcast_text` has EmoteId2 %u but emote does not exist. Skipped.", bct.Id, bct.EmoteId2); - // don't load bct of higher expansions - continue; + TC_LOG_DEBUG("broadcasttext", "BroadcastText (Id: %u) in table `broadcast_text` has EmoteId2 %u but emote does not exist.", bct.Id, bct.EmoteId2); + bct.EmoteId2 = 0; } } _broadcastTextStore[bct.Id] = bct; - - ++count; } while (result->NextRow()); - TC_LOG_INFO("server.loading", ">> Loaded %u broadcast texts in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); + TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " broadcast texts in %u ms", _broadcastTextStore.size(), GetMSTimeDiffToNow(oldMSTime)); } void ObjectMgr::LoadBroadcastTextLocales() @@ -8702,8 +8754,7 @@ void ObjectMgr::LoadBroadcastTextLocales() BroadcastTextContainer::iterator bct = _broadcastTextStore.find(id); if (bct == _broadcastTextStore.end()) { - TC_LOG_INFO("sql.sql", "BroadcastText (Id: %u) in table `locales_broadcast_text` does not exist or is incompatible. Skipped!", id); - // don't load bct of higher expansions + TC_LOG_ERROR("sql.sql", "BroadcastText (Id: %u) in table `locales_broadcast_text` does not exist. Skipped!", id); continue; } diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index f9562a12335..f18e39077f3 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -49,12 +49,7 @@ struct PlayerClassLevelInfo; struct PlayerInfo; struct PlayerLevelInfo; -// GCC have alternative #pragma pack(N) syntax and old gcc version not support pack(push, N), also any gcc version not support it at some platform -#if defined(__GNUC__) -#pragma pack(1) -#else #pragma pack(push, 1) -#endif struct PageText { @@ -82,12 +77,7 @@ private: uint8 _summonGroup; ///< Summon's group id }; -// GCC have alternative #pragma pack() syntax and old gcc version not support pack(pop), also any gcc version not support it at some platform -#if defined(__GNUC__) -#pragma pack() -#else #pragma pack(pop) -#endif // DB scripting commands enum ScriptCommands @@ -732,6 +722,7 @@ class ObjectMgr static void ChooseCreatureFlags(CreatureTemplate const* cinfo, uint32& npcflag, uint32& unit_flags, uint32& dynamicflags, CreatureData const* data = NULL); EquipmentInfo const* GetEquipmentInfo(uint32 entry, int8& id); CreatureAddon const* GetCreatureAddon(uint32 lowguid); + GameObjectAddon const* GetGameObjectAddon(ObjectGuid::LowType lowguid); CreatureAddon const* GetCreatureTemplateAddon(uint32 entry); ItemTemplate const* GetItemTemplate(uint32 entry); ItemTemplateContainer const* GetItemTemplateStore() const { return &_itemTemplateStore; } @@ -974,6 +965,7 @@ class ObjectMgr void LoadLinkedRespawn(); bool SetCreatureLinkedRespawn(uint32 guid, uint32 linkedGuid); void LoadCreatureAddons(); + void LoadGameObjectAddons(); void LoadCreatureModelInfo(); void LoadEquipmentTemplates(); void LoadGameObjectLocales(); @@ -1419,6 +1411,7 @@ class ObjectMgr CreatureModelContainer _creatureModelStore; CreatureAddonContainer _creatureAddonStore; CreatureAddonContainer _creatureTemplateAddonStore; + GameObjectAddonContainer _gameObjectAddonStore; EquipmentInfoContainer _equipmentInfoStore; LinkedRespawnContainer _linkedRespawnStore; CreatureLocaleContainer _creatureLocaleStore; diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.cpp b/src/server/game/Grids/Notifiers/GridNotifiers.cpp index e14910bdf5e..d52e559c408 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiers.cpp +++ b/src/server/game/Grids/Notifiers/GridNotifiers.cpp @@ -21,12 +21,9 @@ #include "WorldPacket.h" #include "WorldSession.h" #include "UpdateData.h" -#include "Item.h" -#include "Map.h" #include "Transport.h" #include "ObjectAccessor.h" #include "CellImpl.h" -#include "SpellInfo.h" using namespace Trinity; @@ -65,7 +62,7 @@ void VisibleNotifier::SendToSelf() } } - for (GuidSet::const_iterator it = vis_guids.begin(); it != vis_guids.end(); ++it) + for (auto it = vis_guids.begin(); it != vis_guids.end(); ++it) { i_player.m_clientGUIDs.erase(*it); i_data.AddOutOfRangeGUID(*it); diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.h b/src/server/game/Grids/Notifiers/GridNotifiers.h index 5eb726084b3..ccf9748e67a 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiers.h +++ b/src/server/game/Grids/Notifiers/GridNotifiers.h @@ -43,7 +43,7 @@ namespace Trinity Player &i_player; UpdateData i_data; std::set<Unit*> i_visibleNow; - GuidSet vis_guids; + GuidUnorderedSet vis_guids; VisibleNotifier(Player &player) : i_player(player), vis_guids(player.m_clientGUIDs) { } template<class T> void Visit(GridRefManager<T> &m); diff --git a/src/server/game/Grids/ObjectGridLoader.cpp b/src/server/game/Grids/ObjectGridLoader.cpp index 779688402b6..c7e1056a3ef 100644 --- a/src/server/game/Grids/ObjectGridLoader.cpp +++ b/src/server/game/Grids/ObjectGridLoader.cpp @@ -20,7 +20,6 @@ #include "ObjectAccessor.h" #include "ObjectMgr.h" #include "Creature.h" -#include "Vehicle.h" #include "GameObject.h" #include "DynamicObject.h" #include "Corpse.h" diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index 5664cbb6e4b..2e81bdd1af8 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -31,7 +31,6 @@ #include "BattlegroundMgr.h" #include "MapManager.h" #include "InstanceSaveMgr.h" -#include "MapInstanced.h" #include "Util.h" #include "LFGMgr.h" #include "UpdateFieldFlags.h" @@ -1858,6 +1857,9 @@ GroupJoinBattlegroundResult Group::CanJoinBattlegroundQueue(Battleground const* // check if someone in party is using dungeon system if (member->isUsingLfg()) return ERR_LFG_CANT_USE_BATTLEGROUND; + // check Freeze debuff + if (member->HasAura(9454)) + return ERR_BATTLEGROUND_JOIN_FAILED; } // only check for MinPlayerCount since MinPlayerCount == MaxPlayerCount for arenas... diff --git a/src/server/game/Groups/Group.h b/src/server/game/Groups/Group.h index 28e933bd08c..732afce9517 100644 --- a/src/server/game/Groups/Group.h +++ b/src/server/game/Groups/Group.h @@ -218,7 +218,7 @@ class Group ObjectGuid GetMasterLooterGuid() const; ItemQualities GetLootThreshold() const; - uint32 GetDbStoreId() const { return m_dbStoreId; }; + uint32 GetDbStoreId() const { return m_dbStoreId; } // member manipulation methods bool IsMember(ObjectGuid guid) const; diff --git a/src/server/game/Handlers/AddonHandler.cpp b/src/server/game/Handlers/AddonHandler.cpp index 8d5e07c4d3b..adb76846379 100644 --- a/src/server/game/Handlers/AddonHandler.cpp +++ b/src/server/game/Handlers/AddonHandler.cpp @@ -18,7 +18,6 @@ #include "zlib.h" #include "AddonHandler.h" -#include "DatabaseEnv.h" #include "Opcodes.h" #include "Log.h" diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp index de23626eb25..2ec89ac2a26 100644 --- a/src/server/game/Handlers/BattleGroundHandler.cpp +++ b/src/server/game/Handlers/BattleGroundHandler.cpp @@ -178,6 +178,10 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData) return; } + // check Freeze debuff + if (_player->HasAura(9454)) + return; + BattlegroundQueue& bgQueue = sBattlegroundMgr->GetBattlegroundQueue(bgQueueTypeId); GroupQueueInfo* ginfo = bgQueue.AddGroup(_player, NULL, bgTypeId, bracketEntry, 0, false, isPremade, 0, 0); @@ -434,6 +438,10 @@ void WorldSession::HandleBattleFieldPortOpcode(WorldPacket &recvData) WorldPacket data; if (action) { + // check Freeze debuff + if (_player->HasAura(9454)) + return; + if (!_player->IsInvitedForBattlegroundQueueType(bgQueueTypeId)) return; // cheating? diff --git a/src/server/game/Handlers/BattlefieldHandler.cpp b/src/server/game/Handlers/BattlefieldHandler.cpp index c7ffac217c4..69e36e7328d 100644 --- a/src/server/game/Handlers/BattlefieldHandler.cpp +++ b/src/server/game/Handlers/BattlefieldHandler.cpp @@ -15,8 +15,6 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include "ObjectAccessor.h" -#include "ObjectMgr.h" #include "Opcodes.h" #include "Player.h" #include "WorldPacket.h" diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index ee8e051ecd9..9cb9077c5ff 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -28,7 +28,6 @@ #include "Guild.h" #include "GuildMgr.h" #include "Language.h" -#include "LFGMgr.h" #include "Log.h" #include "ObjectAccessor.h" #include "ObjectMgr.h" @@ -1254,6 +1253,9 @@ void WorldSession::HandleAlterAppearance(WorldPacket& recvData) if (bs_skinColor && (bs_skinColor->type != 3 || bs_skinColor->race != _player->getRace() || bs_skinColor->gender != _player->getGender())) return; + if (!Player::ValidateAppearance(_player->getRace(), _player->getClass(), _player->getGender(), bs_hair->hair_id, Color, _player->GetByteValue(PLAYER_BYTES, 1), bs_facialHair->hair_id, bs_skinColor ? bs_skinColor->hair_id : _player->GetByteValue(PLAYER_BYTES, 0))) + return; + GameObject* go = _player->FindNearestGameObjectOfType(GAMEOBJECT_TYPE_BARBER_CHAIR, 5.0f); if (!go) { @@ -1338,10 +1340,8 @@ void WorldSession::HandleCharCustomize(WorldPacket& recvData) >> customizeInfo.FacialHair >> customizeInfo.Face; - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_AT_LOGIN); - + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_NAME_DATA); stmt->setUInt32(0, customizeInfo.Guid.GetCounter()); - // TODO: Make async with callback PreparedQueryResult result = CharacterDatabase.Query(stmt); if (!result) @@ -1351,6 +1351,29 @@ void WorldSession::HandleCharCustomize(WorldPacket& recvData) } Field* fields = result->Fetch(); + uint8 plrRace = fields[0].GetUInt8(); + uint8 plrClass = fields[1].GetUInt8(); + uint8 plrGender = fields[2].GetUInt8(); + + if (!Player::ValidateAppearance(plrRace, plrClass, plrGender, customizeInfo.HairStyle, customizeInfo.HairColor, customizeInfo.Face, customizeInfo.FacialHair, customizeInfo.Skin, true)) + { + SendCharCustomize(CHAR_CREATE_ERROR, customizeInfo); + return; + } + + stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_AT_LOGIN); + + stmt->setUInt32(0, customizeInfo.Guid.GetCounter()); + // TODO: Make async with callback + result = CharacterDatabase.Query(stmt); + + if (!result) + { + SendCharCustomize(CHAR_CREATE_ERROR, customizeInfo); + return; + } + + fields = result->Fetch(); uint32 at_loginFlags = fields[0].GetUInt16(); if (!(at_loginFlags & AT_LOGIN_CUSTOMIZE)) diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp index f5264bde755..2acbaba1f67 100644 --- a/src/server/game/Handlers/ChatHandler.cpp +++ b/src/server/game/Handlers/ChatHandler.cpp @@ -34,7 +34,6 @@ #include "Log.h" #include "Opcodes.h" #include "Player.h" -#include "SpellAuras.h" #include "SpellAuraEffects.h" #include "Util.h" #include "ScriptMgr.h" diff --git a/src/server/game/Handlers/CombatHandler.cpp b/src/server/game/Handlers/CombatHandler.cpp index ea990c83f46..39ba593c8d9 100644 --- a/src/server/game/Handlers/CombatHandler.cpp +++ b/src/server/game/Handlers/CombatHandler.cpp @@ -22,9 +22,7 @@ #include "WorldSession.h" #include "ObjectAccessor.h" #include "CreatureAI.h" -#include "ObjectDefines.h" #include "Vehicle.h" -#include "VehicleDefines.h" #include "Player.h" #include "Opcodes.h" diff --git a/src/server/game/Handlers/DuelHandler.cpp b/src/server/game/Handlers/DuelHandler.cpp index 37d89274909..954fb66a9db 100644 --- a/src/server/game/Handlers/DuelHandler.cpp +++ b/src/server/game/Handlers/DuelHandler.cpp @@ -20,8 +20,6 @@ #include "WorldPacket.h" #include "WorldSession.h" #include "Log.h" -#include "Opcodes.h" -#include "UpdateData.h" #include "Player.h" void WorldSession::HandleDuelAcceptedOpcode(WorldPacket& recvPacket) diff --git a/src/server/game/Handlers/GuildHandler.cpp b/src/server/game/Handlers/GuildHandler.cpp index 6b770b58827..ca7b4a5f8cf 100644 --- a/src/server/game/Handlers/GuildHandler.cpp +++ b/src/server/game/Handlers/GuildHandler.cpp @@ -23,10 +23,7 @@ #include "ObjectMgr.h" #include "GuildMgr.h" #include "Log.h" -#include "Opcodes.h" #include "Guild.h" -#include "GossipDef.h" -#include "SocialMgr.h" void WorldSession::HandleGuildQueryOpcode(WorldPacket& recvPacket) { diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp index a24f247c79d..672e1c69920 100644 --- a/src/server/game/Handlers/ItemHandler.cpp +++ b/src/server/game/Handlers/ItemHandler.cpp @@ -24,8 +24,6 @@ #include "ObjectMgr.h" #include "Player.h" #include "Item.h" -#include "UpdateData.h" -#include "ObjectAccessor.h" #include "SpellInfo.h" void WorldSession::HandleSplitItemOpcode(WorldPacket& recvData) diff --git a/src/server/game/Handlers/LFGHandler.cpp b/src/server/game/Handlers/LFGHandler.cpp index 34732a681c5..e18e7830cfb 100644 --- a/src/server/game/Handlers/LFGHandler.cpp +++ b/src/server/game/Handlers/LFGHandler.cpp @@ -465,10 +465,10 @@ void WorldSession::SendLfgJoinResult(lfg::LfgJoinResultData const& joinData) void WorldSession::SendLfgQueueStatus(lfg::LfgQueueStatusData const& queueData) { - TC_LOG_DEBUG("lfg", "SMSG_LFG_QUEUE_STATUS %s dungeon: %u, waitTime: %d, " + TC_LOG_DEBUG("lfg", "SMSG_LFG_QUEUE_STATUS %s state: %s, dungeon: %u, waitTime: %d, " "avgWaitTime: %d, waitTimeTanks: %d, waitTimeHealer: %d, waitTimeDps: %d, " "queuedTime: %u, tanks: %u, healers: %u, dps: %u", - GetPlayerInfo().c_str(), queueData.dungeonId, queueData.waitTime, queueData.waitTimeAvg, + GetPlayerInfo().c_str(), lfg::GetStateString(sLFGMgr->GetState(GetPlayer()->GetGUID())).c_str(), queueData.dungeonId, queueData.waitTime, queueData.waitTimeAvg, queueData.waitTimeTank, queueData.waitTimeHealer, queueData.waitTimeDps, queueData.queuedTime, queueData.tanks, queueData.healers, queueData.dps); diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index e541b9d7625..7b8ce80ccd7 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -28,9 +28,6 @@ #include "ObjectMgr.h" #include "GuildMgr.h" #include "WorldSession.h" -#include "BigNumber.h" -#include "SHA1.h" -#include "UpdateData.h" #include "LootMgr.h" #include "Chat.h" #include "zlib.h" @@ -38,19 +35,14 @@ #include "Object.h" #include "Battleground.h" #include "OutdoorPvP.h" -#include "Pet.h" #include "SocialMgr.h" -#include "CellImpl.h" #include "AccountMgr.h" -#include "Vehicle.h" #include "CreatureAI.h" #include "DBCEnums.h" #include "ScriptMgr.h" #include "MapManager.h" -#include "InstanceScript.h" #include "GameObjectAI.h" #include "Group.h" -#include "AccountMgr.h" #include "Spell.h" #include "BattlegroundMgr.h" #include "Battlefield.h" diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index f537af4b46e..e86fa523f68 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -23,7 +23,6 @@ #include "Log.h" #include "Corpse.h" #include "Player.h" -#include "SpellAuras.h" #include "MapManager.h" #include "Transport.h" #include "Battleground.h" diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp index 0300759a6e6..3c4bbd87b3f 100644 --- a/src/server/game/Handlers/NPCHandler.cpp +++ b/src/server/game/Handlers/NPCHandler.cpp @@ -27,8 +27,6 @@ #include "SpellMgr.h" #include "Player.h" #include "GossipDef.h" -#include "UpdateMask.h" -#include "ObjectAccessor.h" #include "Creature.h" #include "Pet.h" #include "ReputationMgr.h" diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp index 684b4abb2aa..0bf33eee234 100644 --- a/src/server/game/Handlers/PetHandler.cpp +++ b/src/server/game/Handlers/PetHandler.cpp @@ -30,6 +30,7 @@ #include "Pet.h" #include "World.h" #include "Group.h" +#include "SpellHistory.h" #include "SpellInfo.h" #include "Player.h" @@ -89,7 +90,7 @@ void WorldSession::HandlePetAction(WorldPacket& recvData) SpellInfo const* spell = (flag == ACT_ENABLED || flag == ACT_PASSIVE) ? sSpellMgr->GetSpellInfo(spellid) : NULL; if (!spell) return; - if (!(spell->Attributes & SPELL_ATTR0_CASTABLE_WHILE_DEAD)) + if (!spell->HasAttribute(SPELL_ATTR0_CASTABLE_WHILE_DEAD)) return; } @@ -344,8 +345,6 @@ void WorldSession::HandlePetActionHelper(Unit* pet, ObjectGuid guid1, uint32 spe if (result == SPELL_CAST_OK) { - pet->ToCreature()->AddCreatureSpellCooldown(spellid); - unit_target = spell->m_targets.GetUnitTarget(); //10% chance to play special pet attack talk, else growl @@ -379,8 +378,8 @@ void WorldSession::HandlePetActionHelper(Unit* pet, ObjectGuid guid1, uint32 spe else spell->SendPetCastResult(result); - if (!pet->ToCreature()->HasSpellCooldown(spellid)) - GetPlayer()->SendClearCooldown(spellid, pet); + if (!pet->GetSpellHistory()->HasCooldown(spellid)) + pet->GetSpellHistory()->ResetCooldown(spellid, true); spell->finish(false); delete spell; @@ -794,7 +793,6 @@ void WorldSession::HandlePetCastSpellOpcode(WorldPacket& recvPacket) { if (Creature* creature = caster->ToCreature()) { - creature->AddCreatureSpellCooldown(spellId); if (Pet* pet = creature->ToPet()) { // 10% chance to play special pet attack talk, else growl @@ -812,16 +810,8 @@ void WorldSession::HandlePetCastSpellOpcode(WorldPacket& recvPacket) { spell->SendPetCastResult(result); - if (caster->GetTypeId() == TYPEID_PLAYER) - { - if (!caster->ToPlayer()->HasSpellCooldown(spellId)) - GetPlayer()->SendClearCooldown(spellId, caster); - } - else - { - if (!caster->ToCreature()->HasSpellCooldown(spellId)) - GetPlayer()->SendClearCooldown(spellId, caster); - } + if (!caster->GetSpellHistory()->HasCooldown(spellId)) + caster->GetSpellHistory()->ResetCooldown(spellId, true); spell->finish(false); delete spell; diff --git a/src/server/game/Handlers/PetitionsHandler.cpp b/src/server/game/Handlers/PetitionsHandler.cpp index 1bf081900ee..05e793455da 100644 --- a/src/server/game/Handlers/PetitionsHandler.cpp +++ b/src/server/game/Handlers/PetitionsHandler.cpp @@ -28,8 +28,6 @@ #include "Opcodes.h" #include "Guild.h" #include "ArenaTeam.h" -#include "GossipDef.h" -#include "SocialMgr.h" #define CHARTER_DISPLAY_ID 16161 diff --git a/src/server/game/Handlers/QueryHandler.cpp b/src/server/game/Handlers/QueryHandler.cpp index ed41d2ebeed..d15f21f4ad3 100644 --- a/src/server/game/Handlers/QueryHandler.cpp +++ b/src/server/game/Handlers/QueryHandler.cpp @@ -17,7 +17,6 @@ */ #include "Common.h" -#include "Language.h" #include "DatabaseEnv.h" #include "WorldPacket.h" #include "WorldSession.h" @@ -28,7 +27,6 @@ #include "Player.h" #include "UpdateMask.h" #include "NPCHandler.h" -#include "Pet.h" #include "MapManager.h" void WorldSession::SendNameQueryOpcode(ObjectGuid guid) diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index b6157d6eb94..3c6258b2d7c 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -627,7 +627,7 @@ void WorldSession::HandleQuestgiverStatusMultipleQuery(WorldPacket& /*recvPacket WorldPacket data(SMSG_QUESTGIVER_STATUS_MULTIPLE, 4); data << uint32(count); // placeholder - for (GuidSet::const_iterator itr = _player->m_clientGUIDs.begin(); itr != _player->m_clientGUIDs.end(); ++itr) + for (auto itr = _player->m_clientGUIDs.begin(); itr != _player->m_clientGUIDs.end(); ++itr) { uint32 questStatus = DIALOG_STATUS_NONE; diff --git a/src/server/game/Handlers/SkillHandler.cpp b/src/server/game/Handlers/SkillHandler.cpp index 23ce233a905..6da2efa38a6 100644 --- a/src/server/game/Handlers/SkillHandler.cpp +++ b/src/server/game/Handlers/SkillHandler.cpp @@ -17,13 +17,11 @@ */ #include "Common.h" -#include "DatabaseEnv.h" #include "Log.h" #include "ObjectAccessor.h" #include "Opcodes.h" #include "Player.h" #include "Pet.h" -#include "UpdateMask.h" #include "WorldPacket.h" #include "WorldSession.h" diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp index c4bd892d3cf..a6108b36c13 100644 --- a/src/server/game/Handlers/SpellHandler.cpp +++ b/src/server/game/Handlers/SpellHandler.cpp @@ -26,9 +26,6 @@ #include "Opcodes.h" #include "Spell.h" #include "Totem.h" -#include "TemporarySummon.h" -#include "SpellAuras.h" -#include "CreatureAI.h" #include "ScriptMgr.h" #include "GameObjectAI.h" #include "SpellAuraEffects.h" @@ -417,7 +414,7 @@ void WorldSession::HandleCancelAuraOpcode(WorldPacket& recvPacket) return; // not allow remove spells with attr SPELL_ATTR0_CANT_CANCEL - if (spellInfo->Attributes & SPELL_ATTR0_CANT_CANCEL) + if (spellInfo->HasAttribute(SPELL_ATTR0_CANT_CANCEL)) return; // channeled spell case (it currently cast then) @@ -494,8 +491,6 @@ void WorldSession::HandlePetCancelAuraOpcode(WorldPacket& recvPacket) } pet->RemoveOwnedAura(spellId, ObjectGuid::Empty, 0, AURA_REMOVE_BY_CANCEL); - - pet->AddCreatureSpellCooldown(spellId); } void WorldSession::HandleCancelGrowthAuraOpcode(WorldPacket& /*recvPacket*/) { } diff --git a/src/server/game/Handlers/TaxiHandler.cpp b/src/server/game/Handlers/TaxiHandler.cpp index 02e0345dba8..af0f5b0fc75 100644 --- a/src/server/game/Handlers/TaxiHandler.cpp +++ b/src/server/game/Handlers/TaxiHandler.cpp @@ -24,7 +24,6 @@ #include "Log.h" #include "ObjectMgr.h" #include "Player.h" -#include "UpdateMask.h" #include "Path.h" #include "WaypointMovementGenerator.h" @@ -238,7 +237,7 @@ void WorldSession::HandleMoveSplineDoneOpcode(WorldPacket& recvData) TaxiPathNodeEntry const& node = flight->GetPath()[flight->GetCurrentNode()]; flight->SkipCurrentNode(); - GetPlayer()->TeleportTo(curDestNode->map_id, node.x, node.y, node.z, GetPlayer()->GetOrientation()); + GetPlayer()->TeleportTo(curDestNode->map_id, node.LocX, node.LocY, node.LocZ, GetPlayer()->GetOrientation()); } return; } diff --git a/src/server/game/Handlers/VoiceChatHandler.cpp b/src/server/game/Handlers/VoiceChatHandler.cpp index 7801ed4d9fe..277755c6eb1 100644 --- a/src/server/game/Handlers/VoiceChatHandler.cpp +++ b/src/server/game/Handlers/VoiceChatHandler.cpp @@ -19,7 +19,6 @@ #include "Common.h" #include "WorldPacket.h" #include "WorldSession.h" -#include "Opcodes.h" #include "Log.h" void WorldSession::HandleVoiceSessionEnableOpcode(WorldPacket& recvData) diff --git a/src/server/game/Instances/InstanceSaveMgr.cpp b/src/server/game/Instances/InstanceSaveMgr.cpp index 0a355fb14b7..260c2966a52 100644 --- a/src/server/game/Instances/InstanceSaveMgr.cpp +++ b/src/server/game/Instances/InstanceSaveMgr.cpp @@ -21,15 +21,12 @@ #include "GridNotifiers.h" #include "Log.h" #include "GridStates.h" -#include "CellImpl.h" #include "Map.h" #include "MapManager.h" #include "MapInstanced.h" #include "InstanceSaveMgr.h" #include "Timer.h" -#include "GridNotifiersImpl.h" #include "Config.h" -#include "Transport.h" #include "ObjectMgr.h" #include "World.h" #include "Group.h" diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp index badd151bf4c..da806e5b038 100644 --- a/src/server/game/Instances/InstanceScript.cpp +++ b/src/server/game/Instances/InstanceScript.cpp @@ -191,6 +191,12 @@ void InstanceScript::UpdateDoorState(GameObject* door) door->SetGoState(open ? GO_STATE_ACTIVE : GO_STATE_READY); } +BossInfo* InstanceScript::GetBossInfo(uint32 id) +{ + ASSERT(id < bosses.size()); + return &bosses[id]; +} + void InstanceScript::AddObject(Creature* obj, bool add) { ObjectInfoMap::const_iterator j = _creatureInfo.find(obj->GetEntry()); @@ -420,7 +426,26 @@ void InstanceScript::DoUseDoorOrButton(ObjectGuid guid, uint32 withRestoreTime / TC_LOG_ERROR("scripts", "InstanceScript: DoUseDoorOrButton can't use gameobject entry %u, because type is %u.", go->GetEntry(), go->GetGoType()); } else - TC_LOG_DEBUG("scripts", "InstanceScript: HandleGameObject failed"); + TC_LOG_DEBUG("scripts", "InstanceScript: DoUseDoorOrButton failed"); +} + +void InstanceScript::DoCloseDoorOrButton(ObjectGuid guid) +{ + if (!guid) + return; + + if (GameObject* go = instance->GetGameObject(guid)) + { + if (go->GetGoType() == GAMEOBJECT_TYPE_DOOR || go->GetGoType() == GAMEOBJECT_TYPE_BUTTON) + { + if (go->getLootState() == GO_ACTIVATED) + go->ResetDoorOrButton(); + } + else + TC_LOG_ERROR("scripts", "InstanceScript: DoCloseDoorOrButton can't use gameobject entry %u, because type is %u.", go->GetEntry(), go->GetGoType()); + } + else + TC_LOG_DEBUG("scripts", "InstanceScript: DoCloseDoorOrButton failed"); } void InstanceScript::DoRespawnGameObject(ObjectGuid guid, uint32 timeToDespawn /*= MINUTE*/) diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h index 3089a4193c9..be05a9f4495 100644 --- a/src/server/game/Instances/InstanceScript.h +++ b/src/server/game/Instances/InstanceScript.h @@ -191,6 +191,7 @@ class InstanceScript : public ZoneScript // Change active state of doors or buttons void DoUseDoorOrButton(ObjectGuid guid, uint32 withRestoreTime = 0, bool useAlternativeState = false); + void DoCloseDoorOrButton(ObjectGuid guid); // Respawns a GO having negative spawntimesecs in gameobject-table void DoRespawnGameObject(ObjectGuid guid, uint32 timeToDespawn = MINUTE); @@ -254,12 +255,16 @@ class InstanceScript : public ZoneScript void AddObject(GameObject* obj, bool add); void AddObject(WorldObject* obj, uint32 type, bool add); - void AddDoor(GameObject* door, bool add); + virtual void AddDoor(GameObject* door, bool add); void AddMinion(Creature* minion, bool add); - void UpdateDoorState(GameObject* door); + virtual void UpdateDoorState(GameObject* door); void UpdateMinionState(Creature* minion, EncounterState state); + // Exposes private data that should never be modified unless exceptional cases. + // Pay very much attention at how the returned BossInfo data is modified to avoid issues. + BossInfo* GetBossInfo(uint32 id); + // Instance Load and Save bool ReadSaveDataHeaders(std::istringstream& data); void ReadSaveDataBossStates(std::istringstream& data); diff --git a/src/server/game/Loot/LootMgr.cpp b/src/server/game/Loot/LootMgr.cpp index db6a2c98379..ba4e4713458 100644 --- a/src/server/game/Loot/LootMgr.cpp +++ b/src/server/game/Loot/LootMgr.cpp @@ -853,7 +853,7 @@ ByteBuffer& operator<<(ByteBuffer& b, LootItem const& li) { b << uint32(li.itemid); b << uint32(li.count); // nr of items of this type - b << uint32(sObjectMgr->GetItemTemplate(li.itemid)->DisplayInfoID); + b << uint32(ASSERT_NOTNULL(sObjectMgr->GetItemTemplate(li.itemid))->DisplayInfoID); b << uint32(li.randomSuffix); b << uint32(li.randomPropertyId); //b << uint8(0); // slot type - will send after this function call @@ -1832,7 +1832,7 @@ void LoadLootTemplates_Spell() { // not report about not trainable spells (optionally supported by DB) // ignore 61756 (Northrend Inscription Research (FAST QA VERSION) for example - if (!(spellInfo->Attributes & SPELL_ATTR0_NOT_SHAPESHIFT) || (spellInfo->Attributes & SPELL_ATTR0_TRADESPELL)) + if (!spellInfo->HasAttribute(SPELL_ATTR0_NOT_SHAPESHIFT) || spellInfo->HasAttribute(SPELL_ATTR0_TRADESPELL)) { LootTemplates_Spell.ReportNonExistingId(spell_id, "Spell", spellInfo->Id); } diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 94f458e6742..c1a462497cd 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -28,7 +28,6 @@ #include "Group.h" #include "InstanceScript.h" #include "MapInstanced.h" -#include "MapManager.h" #include "ObjectAccessor.h" #include "ObjectMgr.h" #include "Pet.h" @@ -130,9 +129,9 @@ void Map::LoadMMap(int gx, int gy) bool mmapLoadResult = MMAP::MMapFactory::createOrGetMMapManager()->loadMap((sWorld->GetDataPath() + "mmaps").c_str(), GetId(), gx, gy); if (mmapLoadResult) - TC_LOG_INFO("maps", "MMAP loaded name:%s, id:%d, x:%d, y:%d (mmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy); + TC_LOG_DEBUG("maps", "MMAP loaded name:%s, id:%d, x:%d, y:%d (mmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy); else - TC_LOG_INFO("maps", "Could not load MMAP name:%s, id:%d, x:%d, y:%d (mmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy); + TC_LOG_ERROR("maps", "Could not load MMAP name:%s, id:%d, x:%d, y:%d (mmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy); } void Map::LoadVMap(int gx, int gy) @@ -144,10 +143,10 @@ void Map::LoadVMap(int gx, int gy) switch (vmapLoadResult) { case VMAP::VMAP_LOAD_RESULT_OK: - TC_LOG_INFO("maps", "VMAP loaded name:%s, id:%d, x:%d, y:%d (vmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy); + TC_LOG_DEBUG("maps", "VMAP loaded name:%s, id:%d, x:%d, y:%d (vmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy); break; case VMAP::VMAP_LOAD_RESULT_ERROR: - TC_LOG_INFO("maps", "Could not load VMAP name:%s, id:%d, x:%d, y:%d (vmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy); + TC_LOG_ERROR("maps", "Could not load VMAP name:%s, id:%d, x:%d, y:%d (vmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy); break; case VMAP::VMAP_LOAD_RESULT_IGNORED: TC_LOG_DEBUG("maps", "Ignored VMAP name:%s, id:%d, x:%d, y:%d (vmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy); @@ -177,7 +176,7 @@ void Map::LoadMap(int gx, int gy, bool reload) //map already load, delete it before reloading (Is it necessary? Do we really need the ability the reload maps during runtime?) if (GridMaps[gx][gy]) { - TC_LOG_INFO("maps", "Unloading previously loaded map %u before reloading.", GetId()); + TC_LOG_DEBUG("maps", "Unloading previously loaded map %u before reloading.", GetId()); sScriptMgr->OnUnloadGridMap(this, GridMaps[gx][gy], gx, gy); delete (GridMaps[gx][gy]); @@ -189,7 +188,7 @@ void Map::LoadMap(int gx, int gy, bool reload) int len = sWorld->GetDataPath().length() + strlen("maps/%03u%02u%02u.map") + 1; tmp = new char[len]; snprintf(tmp, len, (char *)(sWorld->GetDataPath() + "maps/%03u%02u%02u.map").c_str(), GetId(), gx, gy); - TC_LOG_INFO("maps", "Loading map %s", tmp); + TC_LOG_DEBUG("maps", "Loading map %s", tmp); // loading data GridMaps[gx][gy] = new GridMap(); if (!GridMaps[gx][gy]->loadData(tmp)) @@ -2501,7 +2500,7 @@ void Map::UpdateObjectsVisibilityFor(Player* player, Cell cell, CellCoord cellpa void Map::SendInitSelf(Player* player) { - TC_LOG_INFO("maps", "Creating player data for himself %u", player->GetGUIDLow()); + TC_LOG_DEBUG("maps", "Creating player data for himself %u", player->GetGUIDLow()); UpdateData data; @@ -2563,6 +2562,17 @@ inline void Map::setNGrid(NGridType *grid, uint32 x, uint32 y) void Map::DelayedUpdate(const uint32 t_diff) { + for (_transportsUpdateIter = _transports.begin(); _transportsUpdateIter != _transports.end();) + { + Transport* transport = *_transportsUpdateIter; + ++_transportsUpdateIter; + + if (!transport->IsInWorld()) + continue; + + transport->DelayedUpdate(t_diff); + } + RemoveAllObjectsInRemoveList(); // Don't unload grids if it's battleground, since we may have manually added GOs, creatures, those doesn't load from DB at grid re-load ! @@ -2853,7 +2863,7 @@ bool InstanceMap::CanEnter(Player* player) uint32 maxPlayers = GetMaxPlayers(); if (GetPlayersCountExceptGMs() >= maxPlayers) { - TC_LOG_INFO("maps", "MAP: Instance '%u' of map '%s' cannot have more than '%u' players. Player '%s' rejected", GetInstanceId(), GetMapName(), maxPlayers, player->GetName().c_str()); + TC_LOG_WARN("maps", "MAP: Instance '%u' of map '%s' cannot have more than '%u' players. Player '%s' rejected", GetInstanceId(), GetMapName(), maxPlayers, player->GetName().c_str()); player->SendTransferAborted(GetId(), TRANSFER_ABORT_MAX_PLAYERS); return false; } @@ -2922,7 +2932,7 @@ bool InstanceMap::AddPlayerToMap(Player* player) InstanceSave* mapSave = sInstanceSaveMgr->GetInstanceSave(GetInstanceId()); if (!mapSave) { - TC_LOG_INFO("maps", "InstanceMap::Add: creating instance save for map %d spawnmode %d with instance id %d", GetId(), GetSpawnMode(), GetInstanceId()); + TC_LOG_DEBUG("maps", "InstanceMap::Add: creating instance save for map %d spawnmode %d with instance id %d", GetId(), GetSpawnMode(), GetInstanceId()); mapSave = sInstanceSaveMgr->AddInstanceSave(GetId(), GetInstanceId(), Difficulty(GetSpawnMode()), 0, true); } @@ -2998,7 +3008,7 @@ bool InstanceMap::AddPlayerToMap(Player* player) // first player enters (no players yet) SetResetSchedule(false); - TC_LOG_INFO("maps", "MAP: Player '%s' entered instance '%u' of map '%s'", player->GetName().c_str(), GetInstanceId(), GetMapName()); + TC_LOG_DEBUG("maps", "MAP: Player '%s' entered instance '%u' of map '%s'", player->GetName().c_str(), GetInstanceId(), GetMapName()); // initialize unload state m_unloadTimer = 0; m_resetAfterUnload = false; @@ -3024,7 +3034,7 @@ void InstanceMap::Update(const uint32 t_diff) void InstanceMap::RemovePlayerFromMap(Player* player, bool remove) { - TC_LOG_INFO("maps", "MAP: Removing player '%s' from instance '%u' of map '%s' before relocating to another map", player->GetName().c_str(), GetInstanceId(), GetMapName()); + TC_LOG_DEBUG("maps", "MAP: Removing player '%s' from instance '%u' of map '%s' before relocating to another map", player->GetName().c_str(), GetInstanceId(), GetMapName()); //if last player set unload timer if (!m_unloadTimer && m_mapRefManager.getSize() == 1) m_unloadTimer = m_unloadWhenEmpty ? MIN_UNLOAD_DELAY : std::max(sWorld->getIntConfig(CONFIG_INSTANCE_UNLOAD_DELAY), (uint32)MIN_UNLOAD_DELAY); @@ -3257,7 +3267,7 @@ bool BattlegroundMap::AddPlayerToMap(Player* player) void BattlegroundMap::RemovePlayerFromMap(Player* player, bool remove) { - TC_LOG_INFO("maps", "MAP: Removing player '%s' from bg '%u' of map '%s' before relocating to another map", player->GetName().c_str(), GetInstanceId(), GetMapName()); + TC_LOG_DEBUG("maps", "MAP: Removing player '%s' from bg '%u' of map '%s' before relocating to another map", player->GetName().c_str(), GetInstanceId(), GetMapName()); Map::RemovePlayerFromMap(player, remove); } diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index 3bbd6068e4e..43fcbaba31c 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -210,12 +210,7 @@ public: ZLiquidStatus getLiquidStatus(float x, float y, float z, uint8 ReqLiquidType, LiquidData* data = 0); }; -// GCC have alternative #pragma pack(N) syntax and old gcc version not support pack(push, N), also any gcc version not support it at some platform -#if defined(__GNUC__) -#pragma pack(1) -#else #pragma pack(push, 1) -#endif struct InstanceTemplate { @@ -241,11 +236,7 @@ struct ZoneDynamicInfo uint32 LightFadeInTime; }; -#if defined(__GNUC__) -#pragma pack() -#else #pragma pack(pop) -#endif #define MAX_HEIGHT 100000.0f // can be use for find ground height at surface #define INVALID_HEIGHT -100000.0f // for check, must be equal to VMAP_INVALID_HEIGHT, real value for unknown height is VMAP_INVALID_HEIGHT_VALUE diff --git a/src/server/game/Maps/MapManager.cpp b/src/server/game/Maps/MapManager.cpp index c8dd812ca02..29f4b4ab7c2 100644 --- a/src/server/game/Maps/MapManager.cpp +++ b/src/server/game/Maps/MapManager.cpp @@ -27,7 +27,6 @@ #include "InstanceScript.h" #include "Config.h" #include "World.h" -#include "CellImpl.h" #include "Corpse.h" #include "ObjectMgr.h" #include "Language.h" diff --git a/src/server/game/Maps/TransportMgr.cpp b/src/server/game/Maps/TransportMgr.cpp index b2e30473632..dadc2eeeac3 100644 --- a/src/server/game/Maps/TransportMgr.cpp +++ b/src/server/game/Maps/TransportMgr.cpp @@ -112,7 +112,7 @@ void TransportMgr::GeneratePath(GameObjectTemplate const* goInfo, TransportTempl Movement::PointsArray splinePath, allPoints; bool mapChange = false; for (size_t i = 0; i < path.size(); ++i) - allPoints.push_back(G3D::Vector3(path[i].x, path[i].y, path[i].z)); + allPoints.push_back(G3D::Vector3(path[i].LocX, path[i].LocY, path[i].LocZ)); // Add extra points to allow derivative calculations for all path nodes allPoints.insert(allPoints.begin(), allPoints.front().lerp(allPoints[1], -0.2f)); @@ -129,7 +129,7 @@ void TransportMgr::GeneratePath(GameObjectTemplate const* goInfo, TransportTempl if (!mapChange) { TaxiPathNodeEntry const& node_i = path[i]; - if (i != path.size() - 1 && (node_i.actionFlag & 1 || node_i.mapid != path[i + 1].mapid)) + if (i != path.size() - 1 && (node_i.Flags & 1 || node_i.MapID != path[i + 1].MapID)) { keyFrames.back().Teleport = true; mapChange = true; @@ -142,8 +142,8 @@ void TransportMgr::GeneratePath(GameObjectTemplate const* goInfo, TransportTempl k.InitialOrientation = Position::NormalizeOrientation(std::atan2(h.y, h.x) + float(M_PI)); keyFrames.push_back(k); - splinePath.push_back(G3D::Vector3(node_i.x, node_i.y, node_i.z)); - transport->mapsUsed.insert(k.Node->mapid); + splinePath.push_back(G3D::Vector3(node_i.LocX, node_i.LocY, node_i.LocZ)); + transport->mapsUsed.insert(k.Node->MapID); } } else @@ -153,12 +153,12 @@ void TransportMgr::GeneratePath(GameObjectTemplate const* goInfo, TransportTempl if (splinePath.size() >= 2) { // Remove special catmull-rom spline points - if (!keyFrames.front().IsStopFrame() && !keyFrames.front().Node->arrivalEventID && !keyFrames.front().Node->departureEventID) + if (!keyFrames.front().IsStopFrame() && !keyFrames.front().Node->ArrivalEventID && !keyFrames.front().Node->DepartureEventID) { splinePath.erase(splinePath.begin()); keyFrames.erase(keyFrames.begin()); } - if (!keyFrames.back().IsStopFrame() && !keyFrames.back().Node->arrivalEventID && !keyFrames.back().Node->departureEventID) + if (!keyFrames.back().IsStopFrame() && !keyFrames.back().Node->ArrivalEventID && !keyFrames.back().Node->DepartureEventID) { splinePath.pop_back(); keyFrames.pop_back(); @@ -311,7 +311,7 @@ void TransportMgr::GeneratePath(GameObjectTemplate const* goInfo, TransportTempl float curPathTime = 0.0f; if (keyFrames[0].IsStopFrame()) { - curPathTime = float(keyFrames[0].Node->delay); + curPathTime = float(keyFrames[0].Node->Delay); keyFrames[0].DepartureTime = uint32(curPathTime * IN_MILLISECONDS); } @@ -322,7 +322,7 @@ void TransportMgr::GeneratePath(GameObjectTemplate const* goInfo, TransportTempl { keyFrames[i].ArriveTime = uint32(curPathTime * IN_MILLISECONDS); keyFrames[i - 1].NextArriveTime = keyFrames[i].ArriveTime; - curPathTime += float(keyFrames[i].Node->delay); + curPathTime += float(keyFrames[i].Node->Delay); keyFrames[i].DepartureTime = uint32(curPathTime * IN_MILLISECONDS); } else @@ -374,10 +374,10 @@ Transport* TransportMgr::CreateTransport(uint32 entry, uint32 guid /*= 0*/, Map* // ...at first waypoint TaxiPathNodeEntry const* startNode = tInfo->keyFrames.begin()->Node; - uint32 mapId = startNode->mapid; - float x = startNode->x; - float y = startNode->y; - float z = startNode->z; + uint32 mapId = startNode->MapID; + float x = startNode->LocX; + float y = startNode->LocY; + float z = startNode->LocZ; float o = tInfo->keyFrames.begin()->InitialOrientation; // initialize the gameobject base diff --git a/src/server/game/Maps/TransportMgr.h b/src/server/game/Maps/TransportMgr.h index dbd99bd163a..fff7b9d8afa 100644 --- a/src/server/game/Maps/TransportMgr.h +++ b/src/server/game/Maps/TransportMgr.h @@ -61,7 +61,7 @@ struct KeyFrame uint32 NextArriveTime; bool IsTeleportFrame() const { return Teleport; } - bool IsStopFrame() const { return Node->actionFlag == 2; } + bool IsStopFrame() const { return Node->Flags == 2; } }; struct TransportTemplate diff --git a/src/server/game/Maps/ZoneScript.h b/src/server/game/Maps/ZoneScript.h index d8dba57d438..fd52bdd4c14 100644 --- a/src/server/game/Maps/ZoneScript.h +++ b/src/server/game/Maps/ZoneScript.h @@ -29,8 +29,8 @@ class ZoneScript ZoneScript() { } virtual ~ZoneScript() { } - virtual uint32 GetCreatureEntry(uint32 /*guidlow*/, CreatureData const* data) { return data->id; } - virtual uint32 GetGameObjectEntry(uint32 /*guidlow*/, uint32 entry) { return entry; } + virtual uint32 GetCreatureEntry(ObjectGuid::LowType /*guidLow*/, CreatureData const* data) { return data->id; } + virtual uint32 GetGameObjectEntry(ObjectGuid::LowType /*guidLow*/, uint32 entry) { return entry; } virtual void OnCreatureCreate(Creature* ) { } virtual void OnCreatureRemove(Creature* ) { } diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index 8131984224f..9bae8fbdfae 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -207,7 +207,8 @@ enum TrinityStrings LANG_LIQUID_STATUS = 175, LANG_INVALID_GAMEOBJECT_TYPE = 176, LANG_GAMEOBJECT_DAMAGED = 177, - // Room for more level 1 178-199 not used + LANG_GRID_POSITION = 178, + // Room for more level 1 179-199 not used // level 2 chat LANG_NO_SELECTION = 200, diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 685bcd338a9..06c58a408da 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -3599,4 +3599,12 @@ enum DiminishingLevels DIMINISHING_LEVEL_TAUNT_IMMUNE = 4 }; +/// Spell cooldown flags sent in SMSG_SPELL_COOLDOWN +enum SpellCooldownFlags +{ + SPELL_COOLDOWN_FLAG_NONE = 0x0, + SPELL_COOLDOWN_FLAG_INCLUDE_GCD = 0x1, ///< Starts GCD in addition to normal cooldown specified in the packet + SPELL_COOLDOWN_FLAG_INCLUDE_EVENT_COOLDOWNS = 0x2 ///< Starts GCD for spells that should start their cooldown on events, requires SPELL_COOLDOWN_FLAG_INCLUDE_GCD set +}; + #endif diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index 47e5b77a0da..2b323e196a7 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -30,7 +30,6 @@ #include "RandomMovementGenerator.h" #include "MoveSpline.h" #include "MoveSplineInit.h" -#include <cassert> inline bool isStatic(MovementGenerator *mv) { @@ -387,6 +386,43 @@ void MotionMaster::MoveJump(float x, float y, float z, float speedXY, float spee Mutate(new EffectMovementGenerator(id), MOTION_SLOT_CONTROLLED); } +void MotionMaster::MoveCirclePath(float x, float y, float z, float radius, bool clockwise, uint8 stepCount) +{ + float step = 2 * float(M_PI) / stepCount * (clockwise ? -1.0f : 1.0f); + Position const& pos = { x, y, z, 0.0f }; + float angle = pos.GetAngle(_owner->GetPositionX(), _owner->GetPositionY()); + + Movement::MoveSplineInit init(_owner); + + for (uint8 i = 0; i < stepCount; angle += step, ++i) + { + G3D::Vector3 point; + point.x = x + radius * cosf(angle); + point.y = y + radius * sinf(angle); + + if (_owner->IsFlying()) + point.z = z; + else + point.z = _owner->GetMap()->GetHeight(_owner->GetPhaseMask(), point.x, point.y, z); + + init.Path().push_back(point); + } + + if (_owner->IsFlying()) + { + init.SetFly(); + init.SetCyclic(); + init.SetAnimation(Movement::ToFly); + } + else + { + init.SetWalk(true); + init.SetCyclic(); + } + + init.Launch(); +} + void MotionMaster::MoveFall(uint32 id /*=0*/) { // use larger distance for vmap height search than in most other cases diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h index 2821cd5a59b..c8da50364ba 100644 --- a/src/server/game/Movement/MotionMaster.h +++ b/src/server/game/Movement/MotionMaster.h @@ -182,8 +182,9 @@ class MotionMaster //: private std::stack<MovementGenerator *> void MoveKnockbackFrom(float srcX, float srcY, float speedXY, float speedZ); void MoveJumpTo(float angle, float speedXY, float speedZ); void MoveJump(Position const& pos, float speedXY, float speedZ, uint32 id = EVENT_JUMP) - { MoveJump(pos.m_positionX, pos.m_positionY, pos.m_positionZ, speedXY, speedZ, id); }; + { MoveJump(pos.m_positionX, pos.m_positionY, pos.m_positionZ, speedXY, speedZ, id); } void MoveJump(float x, float y, float z, float speedXY, float speedZ, uint32 id = EVENT_JUMP); + void MoveCirclePath(float x, float y, float z, float radius, bool clockwise, uint8 stepCount); void MoveFall(uint32 id = 0); void MoveSeekAssistance(float x, float y, float z); diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp index cbfc181fe9f..f0c0311280f 100755 --- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp @@ -17,10 +17,8 @@ */ #include "Creature.h" -#include "MapManager.h" #include "ConfusedMovementGenerator.h" #include "PathGenerator.h" -#include "VMapFactory.h" #include "MoveSplineInit.h" #include "MoveSpline.h" #include "Player.h" diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp index cea25fefbda..fa17846a1ff 100644 --- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp @@ -18,7 +18,6 @@ #include "Creature.h" #include "CreatureAI.h" -#include "MapManager.h" #include "FleeingMovementGenerator.h" #include "PathGenerator.h" #include "ObjectAccessor.h" diff --git a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp index ff28f3855a6..4245bffb864 100644 --- a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp @@ -19,7 +19,6 @@ #include "HomeMovementGenerator.h" #include "Creature.h" #include "CreatureAI.h" -#include "WorldPacket.h" #include "MoveSplineInit.h" #include "MoveSpline.h" diff --git a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp index 0341af299be..86f0e6e20eb 100644 --- a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp @@ -17,9 +17,7 @@ */ #include "Creature.h" -#include "MapManager.h" #include "RandomMovementGenerator.h" -#include "ObjectAccessor.h" #include "Map.h" #include "Util.h" #include "CreatureGroups.h" diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp index ed1ea7f4b17..f91fc1985d5 100755 --- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp @@ -19,7 +19,6 @@ #include "WaypointMovementGenerator.h" //Extended headers #include "ObjectMgr.h" -#include "World.h" #include "Transport.h" //Flightmaster grid preloading #include "MapManager.h" @@ -249,10 +248,10 @@ uint32 FlightPathMovementGenerator::GetPathAtMapEnd() const if (i_currentNode >= i_path->size()) return i_path->size(); - uint32 curMapId = (*i_path)[i_currentNode].mapid; + uint32 curMapId = (*i_path)[i_currentNode].MapID; for (uint32 i = i_currentNode; i < i_path->size(); ++i) { - if ((*i_path)[i].mapid != curMapId) + if ((*i_path)[i].MapID != curMapId) return i; } @@ -297,7 +296,7 @@ void FlightPathMovementGenerator::DoReset(Player* player) uint32 end = GetPathAtMapEnd(); for (uint32 i = GetCurrentNode(); i != end; ++i) { - G3D::Vector3 vertice((*i_path)[i].x, (*i_path)[i].y, (*i_path)[i].z); + G3D::Vector3 vertice((*i_path)[i].LocX, (*i_path)[i].LocY, (*i_path)[i].LocZ); init.Path().push_back(vertice); } init.SetFirstPointId(GetCurrentNode()); @@ -333,10 +332,10 @@ void FlightPathMovementGenerator::SetCurrentNodeAfterTeleport() if (i_path->empty()) return; - uint32 map0 = (*i_path)[0].mapid; + uint32 map0 = (*i_path)[0].MapID; for (size_t i = 1; i < i_path->size(); ++i) { - if ((*i_path)[i].mapid != map0) + if ((*i_path)[i].MapID != map0) { i_currentNode = i; return; @@ -346,9 +345,9 @@ void FlightPathMovementGenerator::SetCurrentNodeAfterTeleport() void FlightPathMovementGenerator::DoEventIfAny(Player* player, TaxiPathNodeEntry const& node, bool departure) { - if (uint32 eventid = departure ? node.departureEventID : node.arrivalEventID) + if (uint32 eventid = departure ? node.DepartureEventID : node.ArrivalEventID) { - TC_LOG_DEBUG("maps.script", "Taxi %s event %u of node %u of path %u for player %s", departure ? "departure" : "arrival", eventid, node.index, node.path, player->GetName().c_str()); + TC_LOG_DEBUG("maps.script", "Taxi %s event %u of node %u of path %u for player %s", departure ? "departure" : "arrival", eventid, node.NodeIndex, node.PathID, player->GetName().c_str()); player->GetMap()->ScriptsStart(sEventScripts, eventid, player, player); } } @@ -356,7 +355,7 @@ void FlightPathMovementGenerator::DoEventIfAny(Player* player, TaxiPathNodeEntry bool FlightPathMovementGenerator::GetResetPos(Player*, float& x, float& y, float& z) { const TaxiPathNodeEntry& node = (*i_path)[i_currentNode]; - x = node.x; y = node.y; z = node.z; + x = node.LocX; y = node.LocY; z = node.LocZ; return true; } @@ -365,10 +364,10 @@ void FlightPathMovementGenerator::InitEndGridInfo() /*! Storage to preload flightmaster grid at end of flight. For multi-stop flights, this will be reinitialized for each flightmaster at the end of each spline (or stop) in the flight. */ uint32 nodeCount = (*i_path).size(); //! Number of nodes in path. - _endMapId = (*i_path)[nodeCount - 1].mapid; //! MapId of last node + _endMapId = (*i_path)[nodeCount - 1].MapID; //! MapId of last node _preloadTargetNode = nodeCount - 3; - _endGridX = (*i_path)[nodeCount - 1].x; - _endGridY = (*i_path)[nodeCount - 1].y; + _endGridX = (*i_path)[nodeCount - 1].LocX; + _endGridY = (*i_path)[nodeCount - 1].LocY; } void FlightPathMovementGenerator::PreloadEndGrid() @@ -379,9 +378,9 @@ void FlightPathMovementGenerator::PreloadEndGrid() // Load the grid if (endMap) { - TC_LOG_INFO("misc", "Preloading rid (%f, %f) for map %u at node index %u/%u", _endGridX, _endGridY, _endMapId, _preloadTargetNode, (uint32)(i_path->size()-1)); + TC_LOG_DEBUG("misc", "Preloading rid (%f, %f) for map %u at node index %u/%u", _endGridX, _endGridY, _endMapId, _preloadTargetNode, (uint32)(i_path->size()-1)); endMap->LoadGrid(_endGridX, _endGridY); } else - TC_LOG_INFO("misc", "Unable to determine map to preload flightmaster grid"); + TC_LOG_DEBUG("misc", "Unable to determine map to preload flightmaster grid"); } diff --git a/src/server/game/Movement/Spline/MoveSpline.cpp b/src/server/game/Movement/Spline/MoveSpline.cpp index d3fa03c1238..1beeebbbad3 100644 --- a/src/server/game/Movement/Spline/MoveSpline.cpp +++ b/src/server/game/Movement/Spline/MoveSpline.cpp @@ -147,7 +147,7 @@ void MoveSpline::init_spline(const MoveSplineInitArgs& args) /// @todo what to do in such cases? problem is in input data (all points are at same coords) if (spline.length() < minimal_duration) { - TC_LOG_ERROR("misc", "MoveSpline::init_spline: zero length spline, wrong input data?"); + TC_LOG_DEBUG("misc", "MoveSpline::init_spline: zero length spline, wrong input data?"); spline.set_length(spline.last(), spline.isCyclic() ? 1000 : 1); } point_Idx = spline.first(); diff --git a/src/server/game/Movement/Spline/MoveSplineFlag.h b/src/server/game/Movement/Spline/MoveSplineFlag.h index 62fe808b6f5..0a3b41d412a 100644 --- a/src/server/game/Movement/Spline/MoveSplineFlag.h +++ b/src/server/game/Movement/Spline/MoveSplineFlag.h @@ -24,11 +24,7 @@ namespace Movement { -#if defined( __GNUC__ ) -#pragma pack(1) -#else #pragma pack(push, 1) -#endif class MoveSplineFlag { @@ -136,11 +132,7 @@ namespace Movement bool unknown12 : 1; bool unknown13 : 1; }; -#if defined( __GNUC__ ) -#pragma pack() -#else #pragma pack(pop) -#endif } #endif // TRINITYSERVER_MOVESPLINEFLAG_H diff --git a/src/server/game/Movement/Spline/MoveSplineInit.cpp b/src/server/game/Movement/Spline/MoveSplineInit.cpp index 9619d478b7f..180ecf23079 100644 --- a/src/server/game/Movement/Spline/MoveSplineInit.cpp +++ b/src/server/game/Movement/Spline/MoveSplineInit.cpp @@ -21,7 +21,6 @@ #include "MovementPacketBuilder.h" #include "Unit.h" #include "Transport.h" -#include "Vehicle.h" #include "WorldPacket.h" #include "Opcodes.h" diff --git a/src/server/game/Movement/Spline/MovementUtil.cpp b/src/server/game/Movement/Spline/MovementUtil.cpp index 7e63f029fd4..4f7e1d6a7a4 100644 --- a/src/server/game/Movement/Spline/MovementUtil.cpp +++ b/src/server/game/Movement/Spline/MovementUtil.cpp @@ -18,7 +18,6 @@ #include "MoveSplineFlag.h" #include <cmath> -#include <string> namespace Movement { diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.cpp b/src/server/game/OutdoorPvP/OutdoorPvP.cpp index cf7be3de5ce..c8bc68d0ddf 100644 --- a/src/server/game/OutdoorPvP/OutdoorPvP.cpp +++ b/src/server/game/OutdoorPvP/OutdoorPvP.cpp @@ -20,7 +20,6 @@ #include "ObjectAccessor.h" #include "ObjectMgr.h" #include "Map.h" -#include "MapManager.h" #include "Group.h" #include "WorldPacket.h" #include "GridNotifiers.h" @@ -509,7 +508,7 @@ bool OPvPCapturePoint::HandleCustomSpell(Player* player, uint32 /*spellId*/, Gam { if (!player->IsOutdoorPvPActive()) return false; - return false; + return true; } bool OutdoorPvP::HandleOpenGo(Player* player, ObjectGuid guid) diff --git a/src/server/game/Pools/PoolMgr.cpp b/src/server/game/Pools/PoolMgr.cpp index d643bc5da41..3f561539917 100644 --- a/src/server/game/Pools/PoolMgr.cpp +++ b/src/server/game/Pools/PoolMgr.cpp @@ -170,7 +170,7 @@ PoolObject* PoolGroup<T>::RollOne(ActivePoolData& spawns, uint32 triggerFrom) } if (!EqualChanced.empty()) { - int32 index = irand(0, EqualChanced.size()-1); + uint32 index = urand(0, EqualChanced.size()-1); // Triggering object is marked as spawned at this time and can be also rolled (respawn case) // so this need explicit check for this case if (EqualChanced[index].guid == triggerFrom || !spawns.IsActiveObject<T>(EqualChanced[index].guid)) diff --git a/src/server/game/Reputation/ReputationMgr.cpp b/src/server/game/Reputation/ReputationMgr.cpp index b99cb677ba0..a3e458503d6 100644 --- a/src/server/game/Reputation/ReputationMgr.cpp +++ b/src/server/game/Reputation/ReputationMgr.cpp @@ -28,6 +28,9 @@ const int32 ReputationMgr::PointsInRank[MAX_REPUTATION_RANK] = {36000, 3000, 3000, 3000, 6000, 12000, 21000, 1000}; +const int32 ReputationMgr::Reputation_Cap = 42999; +const int32 ReputationMgr::Reputation_Bottom = -42000; + ReputationRank ReputationMgr::ReputationToRank(int32 standing) { int32 limit = Reputation_Cap + 1; diff --git a/src/server/game/Reputation/ReputationMgr.h b/src/server/game/Reputation/ReputationMgr.h index c3a8d4f477c..7d7650b858e 100644 --- a/src/server/game/Reputation/ReputationMgr.h +++ b/src/server/game/Reputation/ReputationMgr.h @@ -72,8 +72,8 @@ class ReputationMgr void LoadFromDB(PreparedQueryResult result); public: // statics static const int32 PointsInRank[MAX_REPUTATION_RANK]; - static const int32 Reputation_Cap = 42999; - static const int32 Reputation_Bottom = -42000; + static const int32 Reputation_Cap; + static const int32 Reputation_Bottom; static ReputationRank ReputationToRank(int32 standing); public: // accessors diff --git a/src/server/game/Scripting/MapScripts.cpp b/src/server/game/Scripting/MapScripts.cpp index ab9c2e32cc8..3beaa7daa9b 100644 --- a/src/server/game/Scripting/MapScripts.cpp +++ b/src/server/game/Scripting/MapScripts.cpp @@ -21,8 +21,6 @@ #include "GridNotifiersImpl.h" #include "GossipDef.h" #include "Map.h" -#include "MapManager.h" -#include "MapRefManager.h" #include "ObjectMgr.h" #include "Pet.h" #include "ScriptedCreature.h" diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp index 7b4e272b3c1..f0ee013bcc2 100644 --- a/src/server/game/Scripting/ScriptLoader.cpp +++ b/src/server/game/Scripting/ScriptLoader.cpp @@ -425,7 +425,8 @@ void AddSC_boss_heigan(); void AddSC_boss_gothik(); void AddSC_boss_thaddius(); void AddSC_instance_naxxramas(); -void AddSC_boss_magus_telestra(); //The Nexus Nexus +void AddSC_boss_nexus_commanders(); // The Nexus Nexus +void AddSC_boss_magus_telestra(); void AddSC_boss_anomalus(); void AddSC_boss_ormorok(); void AddSC_boss_keristrasza(); @@ -621,6 +622,7 @@ void AddSC_instance_magtheridons_lair(); void AddSC_boss_grand_warlock_nethekurse(); //HC Shattered Halls void AddSC_boss_warbringer_omrogg(); void AddSC_boss_warchief_kargath_bladefist(); +void AddSC_shattered_halls(); void AddSC_instance_shattered_halls(); void AddSC_boss_watchkeeper_gargolmar(); //HC Ramparts void AddSC_boss_omor_the_unscarred(); @@ -1151,6 +1153,7 @@ void AddOutlandScripts() AddSC_boss_grand_warlock_nethekurse(); //HC Shattered Halls AddSC_boss_warbringer_omrogg(); AddSC_boss_warchief_kargath_bladefist(); + AddSC_shattered_halls(); AddSC_instance_shattered_halls(); AddSC_boss_watchkeeper_gargolmar(); //HC Ramparts AddSC_boss_omor_the_unscarred(); @@ -1253,7 +1256,8 @@ void AddNorthrendScripts() AddSC_boss_gothik(); AddSC_boss_thaddius(); AddSC_instance_naxxramas(); - AddSC_boss_magus_telestra(); //The Nexus Nexus + AddSC_boss_nexus_commanders(); // The Nexus Nexus + AddSC_boss_magus_telestra(); AddSC_boss_anomalus(); AddSC_boss_ormorok(); AddSC_boss_keristrasza(); diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 628452d120c..aed829a7b57 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -182,9 +182,8 @@ struct TSpellSummary uint8 Effects; // set of enum SelectEffect } *SpellSummary; -ScriptMgr::ScriptMgr() : _scriptCount(0) +ScriptMgr::ScriptMgr() : _scriptCount(0), _scheduledScripts(0) { - _scheduledScripts = 0; } ScriptMgr::~ScriptMgr() { } diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index e290b13c635..a226f1b7ed2 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -1142,7 +1142,7 @@ class ScriptMgr uint32 _scriptCount; //atomic op counter for active scripts amount - std::atomic_long _scheduledScripts; + std::atomic<uint32> _scheduledScripts; }; #endif diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 68abadccf75..4b47e51fde6 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -1363,11 +1363,7 @@ enum PacketProcessing class WorldSession; class WorldPacket; -#if defined(__GNUC__) -#pragma pack(1) -#else #pragma pack(push, 1) -#endif struct OpcodeHandler { @@ -1379,11 +1375,7 @@ struct OpcodeHandler extern OpcodeHandler opcodeTable[NUM_MSG_TYPES]; -#if defined(__GNUC__) -#pragma pack() -#else #pragma pack(pop) -#endif /// Lookup opcode name for human understandable logging inline const char* LookupOpcodeName(uint16 id) diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index b6b1a4992af..d6055e9733b 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -36,16 +36,12 @@ #include "Group.h" #include "Guild.h" #include "World.h" -#include "ObjectAccessor.h" #include "BattlegroundMgr.h" #include "OutdoorPvPMgr.h" -#include "MapManager.h" #include "SocialMgr.h" #include "zlib.h" #include "ScriptMgr.h" -#include "Transport.h" #include "WardenWin.h" -#include "WardenMac.h" #include "MoveSpline.h" namespace { @@ -218,8 +214,8 @@ void WorldSession::SendPacket(WorldPacket* packet) { uint64 minTime = uint64(cur_time - lastTime); uint64 fullTime = uint64(lastTime - firstTime); - TC_LOG_INFO("misc", "Send all time packets count: " UI64FMTD " bytes: " UI64FMTD " avr.count/sec: %f avr.bytes/sec: %f time: %u", sendPacketCount, sendPacketBytes, float(sendPacketCount)/fullTime, float(sendPacketBytes)/fullTime, uint32(fullTime)); - TC_LOG_INFO("misc", "Send last min packets count: " UI64FMTD " bytes: " UI64FMTD " avr.count/sec: %f avr.bytes/sec: %f", sendLastPacketCount, sendLastPacketBytes, float(sendLastPacketCount)/minTime, float(sendLastPacketBytes)/minTime); + TC_LOG_DEBUG("misc", "Send all time packets count: " UI64FMTD " bytes: " UI64FMTD " avr.count/sec: %f avr.bytes/sec: %f time: %u", sendPacketCount, sendPacketBytes, float(sendPacketCount)/fullTime, float(sendPacketBytes)/fullTime, uint32(fullTime)); + TC_LOG_DEBUG("misc", "Send last min packets count: " UI64FMTD " bytes: " UI64FMTD " avr.count/sec: %f avr.bytes/sec: %f", sendLastPacketCount, sendLastPacketBytes, float(sendLastPacketCount)/minTime, float(sendLastPacketBytes)/minTime); lastTime = cur_time; sendLastPacketCount = 1; @@ -229,6 +225,7 @@ void WorldSession::SendPacket(WorldPacket* packet) sScriptMgr->OnPacketSend(this, *packet); + TC_LOG_TRACE("network.opcode", "S->C: %s %s", GetPlayerInfo().c_str(), GetOpcodeNameForLogging(packet->GetOpcode()).c_str()); m_Socket->SendPacket(*packet); } @@ -951,7 +948,7 @@ void WorldSession::ReadAddonsInfo(WorldPacket &data) if (size > 0xFFFFF) { - TC_LOG_ERROR("misc", "WorldSession::ReadAddonsInfo addon info too big, size %u", size); + TC_LOG_DEBUG("addon", "WorldSession::ReadAddonsInfo: AddOnInfo too big, size %u", size); return; } @@ -981,7 +978,7 @@ void WorldSession::ReadAddonsInfo(WorldPacket &data) addonInfo >> enabled >> crc >> unk1; - TC_LOG_INFO("misc", "ADDON: Name: %s, Enabled: 0x%x, CRC: 0x%x, Unknown2: 0x%x", addonName.c_str(), enabled, crc, unk1); + TC_LOG_DEBUG("addon", "AddOn: %s (CRC: 0x%x) - enabled: 0x%x - Unknown2: 0x%x", addonName.c_str(), crc, enabled, unk1); AddonInfo addon(addonName, enabled, crc, 2, true); @@ -989,15 +986,14 @@ void WorldSession::ReadAddonsInfo(WorldPacket &data) if (savedAddon) { if (addon.CRC != savedAddon->CRC) - TC_LOG_INFO("misc", "ADDON: %s was known, but didn't match known CRC (0x%x)!", addon.Name.c_str(), savedAddon->CRC); + TC_LOG_WARN("addon", " Addon: %s: modified (CRC: 0x%x) - accountID %d)", addon.Name.c_str(), savedAddon->CRC, GetAccountId()); else - TC_LOG_INFO("misc", "ADDON: %s was known, CRC is correct (0x%x)", addon.Name.c_str(), savedAddon->CRC); + TC_LOG_DEBUG("addon", "Addon: %s: validated (CRC: 0x%x) - accountID %d", addon.Name.c_str(), savedAddon->CRC, GetAccountId()); } else { AddonMgr::SaveAddon(addon); - - TC_LOG_INFO("misc", "ADDON: %s (0x%x) was not known, saving...", addon.Name.c_str(), addon.CRC); + TC_LOG_WARN("addon", "Addon: %s: unknown (CRC: 0x%x) - accountId %d (storing addon name and checksum to database)", addon.Name.c_str(), addon.CRC, GetAccountId()); } /// @todo Find out when to not use CRC/pubkey, and other possible states. @@ -1006,10 +1002,10 @@ void WorldSession::ReadAddonsInfo(WorldPacket &data) uint32 currentTime; addonInfo >> currentTime; - TC_LOG_DEBUG("network", "ADDON: CurrentTime: %u", currentTime); + TC_LOG_DEBUG("addon", "AddOn: CurrentTime: %u", currentTime); } else - TC_LOG_ERROR("misc", "Addon packet uncompress error!"); + TC_LOG_DEBUG("addon", "AddOn: Addon packet uncompress error!"); } void WorldSession::SendAddonsInfo() @@ -1048,8 +1044,8 @@ void WorldSession::SendAddonsInfo() data << uint8(usepk); if (usepk) // if CRC is wrong, add public key (client need it) { - TC_LOG_INFO("misc", "ADDON: CRC (0x%x) for addon %s is wrong (does not match expected 0x%x), sending pubkey", - itr->CRC, itr->Name.c_str(), STANDARD_ADDON_CRC); + TC_LOG_DEBUG("addon", "AddOn: %s: CRC checksum mismatch: got 0x%x - expected 0x%x - sending pubkey to accountID %d", + itr->Name.c_str(), itr->CRC, STANDARD_ADDON_CRC, GetAccountId()); data.append(addonPublicKey, sizeof(addonPublicKey)); } @@ -1262,7 +1258,7 @@ bool WorldSession::DosProtection::EvaluateOpcode(WorldPacket& p, time_t time) co return true; case POLICY_KICK: { - TC_LOG_INFO("network", "AntiDOS: Player kicked!"); + TC_LOG_WARN("network", "AntiDOS: Player kicked!"); Session->KickPlayer(); return false; } @@ -1278,7 +1274,7 @@ bool WorldSession::DosProtection::EvaluateOpcode(WorldPacket& p, time_t time) co case BAN_IP: nameOrIp = Session->GetRemoteAddress(); break; } sWorld->BanAccount(bm, nameOrIp, duration, "DOS (Packet Flooding/Spoofing", "Server: AutoDOS"); - TC_LOG_INFO("network", "AntiDOS: Player automatically banned for %u seconds.", duration); + TC_LOG_WARN("network", "AntiDOS: Player automatically banned for %u seconds.", duration); Session->KickPlayer(); return false; } @@ -1374,6 +1370,7 @@ uint32 WorldSession::DosProtection::GetMaxPacketCounterAllowed(uint16 opcode) co case MSG_RANDOM_ROLL: // not profiled case CMSG_TIME_SYNC_RESP: // not profiled case CMSG_TRAINER_BUY_SPELL: // not profiled + case CMSG_FORCE_RUN_SPEED_CHANGE_ACK: // not profiled { // "0" is a magic number meaning there's no limit for the opcode. // All the opcodes above must cause little CPU usage and no sync/async database queries at all diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index 5b1d9497953..cff423c71c6 100644 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -28,7 +28,7 @@ using boost::asio::ip::tcp; WorldSocket::WorldSocket(tcp::socket&& socket) - : Socket(std::move(socket)), _authSeed(rand32()), _OverSpeedPings(0), _worldSession(nullptr) + : Socket(std::move(socket)), _authSeed(rand32()), _OverSpeedPings(0), _worldSession(nullptr), _authed(false) { _headerBuffer.Resize(sizeof(ClientPktHeader)); } @@ -53,7 +53,15 @@ void WorldSocket::HandleSendAuthSession() seed2.SetRand(16 * 8); packet.append(seed2.AsByteArray(16).get(), 16); // new encryption seeds - SendPacket(packet); + SendPacketAndLogOpcode(packet); +} + +void WorldSocket::OnClose() +{ + { + std::lock_guard<std::mutex> sessionGuard(_worldSessionLock); + _worldSession = nullptr; + } } void WorldSocket::ReadHandler() @@ -80,7 +88,10 @@ void WorldSocket::ReadHandler() // We just received nice new header if (!ReadHeaderHandler()) + { + CloseSocket(); return; + } } // We have full read header, now check the data payload @@ -101,7 +112,10 @@ void WorldSocket::ReadHandler() // just received fresh new payload if (!ReadDataHandler()) + { + CloseSocket(); return; + } _headerBuffer.Reset(); } @@ -121,17 +135,8 @@ bool WorldSocket::ReadHeaderHandler() if (!header->IsValidSize() || !header->IsValidOpcode()) { - if (_worldSession) - { - Player* player = _worldSession->GetPlayer(); - TC_LOG_ERROR("network", "WorldSocket::ReadHeaderHandler(): client (account: %u, char [GUID: %u, name: %s]) sent malformed packet (size: %hu, cmd: %u)", - _worldSession->GetAccountId(), player ? player->GetGUIDLow() : 0, player ? player->GetName().c_str() : "<none>", header->size, header->cmd); - } - else - TC_LOG_ERROR("network", "WorldSocket::ReadHeaderHandler(): client %s sent malformed packet (size: %hu, cmd: %u)", - GetRemoteIpAddress().to_string().c_str(), header->size, header->cmd); - - CloseSocket(); + TC_LOG_ERROR("network", "WorldSocket::ReadHeaderHandler(): client %s sent malformed packet (size: %hu, cmd: %u)", + GetRemoteIpAddress().to_string().c_str(), header->size, header->cmd); return false; } @@ -146,35 +151,37 @@ bool WorldSocket::ReadDataHandler() uint16 opcode = uint16(header->cmd); - std::string opcodeName = GetOpcodeNameForLogging(opcode); - WorldPacket packet(opcode, std::move(_packetBuffer)); if (sPacketLog->CanLogPacket()) sPacketLog->LogPacket(packet, CLIENT_TO_SERVER, GetRemoteIpAddress(), GetRemotePort()); - TC_LOG_TRACE("network.opcode", "C->S: %s %s", (_worldSession ? _worldSession->GetPlayerInfo() : GetRemoteIpAddress().to_string()).c_str(), opcodeName.c_str()); + std::unique_lock<std::mutex> sessionGuard(_worldSessionLock, std::defer_lock); switch (opcode) { case CMSG_PING: - HandlePing(packet); - break; + LogOpcodeText(opcode, sessionGuard); + return HandlePing(packet); case CMSG_AUTH_SESSION: - if (_worldSession) + LogOpcodeText(opcode, sessionGuard); + if (_authed) { - TC_LOG_ERROR("network", "WorldSocket::ProcessIncoming: received duplicate CMSG_AUTH_SESSION from %s", _worldSession->GetPlayerInfo().c_str()); - break; + // locking just to safely log offending user is probably overkill but we are disconnecting him anyway + if (sessionGuard.try_lock()) + TC_LOG_ERROR("network", "WorldSocket::ProcessIncoming: received duplicate CMSG_AUTH_SESSION from %s", _worldSession->GetPlayerInfo().c_str()); + return false; } HandleAuthSession(packet); break; case CMSG_KEEP_ALIVE: - TC_LOG_DEBUG("network", "%s", opcodeName.c_str()); - sScriptMgr->OnPacketReceive(_worldSession, packet); + LogOpcodeText(opcode, sessionGuard); break; default: { + sessionGuard.lock(); + LogOpcodeText(opcode, sessionGuard); if (!_worldSession) { TC_LOG_ERROR("network.opcode", "ProcessIncoming: Client not authed opcode = %u", uint32(opcode)); @@ -195,7 +202,26 @@ bool WorldSocket::ReadDataHandler() return true; } -void WorldSocket::SendPacket(WorldPacket& packet) +void WorldSocket::LogOpcodeText(uint16 opcode, std::unique_lock<std::mutex> const& guard) const +{ + if (!guard) + { + TC_LOG_TRACE("network.opcode", "C->S: %s %s", GetRemoteIpAddress().to_string().c_str(), GetOpcodeNameForLogging(opcode).c_str()); + } + else + { + TC_LOG_TRACE("network.opcode", "C->S: %s %s", (_worldSession ? _worldSession->GetPlayerInfo() : GetRemoteIpAddress().to_string()).c_str(), + GetOpcodeNameForLogging(opcode).c_str()); + } +} + +void WorldSocket::SendPacketAndLogOpcode(WorldPacket const& packet) +{ + TC_LOG_TRACE("network.opcode", "S->C: %s %s", GetRemoteIpAddress().to_string().c_str(), GetOpcodeNameForLogging(packet.GetOpcode()).c_str()); + SendPacket(packet); +} + +void WorldSocket::SendPacket(WorldPacket const& packet) { if (!IsOpen()) return; @@ -203,8 +229,6 @@ void WorldSocket::SendPacket(WorldPacket& packet) if (sPacketLog->CanLogPacket()) sPacketLog->LogPacket(packet, SERVER_TO_CLIENT, GetRemoteIpAddress(), GetRemotePort()); - TC_LOG_TRACE("network.opcode", "S->C: %s %s", (_worldSession ? _worldSession->GetPlayerInfo() : GetRemoteIpAddress().to_string()).c_str(), GetOpcodeNameForLogging(packet.GetOpcode()).c_str()); - ServerPktHeader header(packet.size() + 2, packet.GetOpcode()); std::unique_lock<std::mutex> guard(_writeLock); @@ -257,7 +281,7 @@ void WorldSocket::HandleAuthSession(WorldPacket& recvPacket) recvPacket >> unk4; recvPacket.read(digest, 20); - TC_LOG_INFO("network", "WorldSocket::HandleAuthSession: client %u, serverId %u, account %s, loginServerType %u, clientseed %u, realmIndex %u", + TC_LOG_DEBUG("network", "WorldSocket::HandleAuthSession: client %u, serverId %u, account %s, loginServerType %u, clientseed %u, realmIndex %u", clientBuild, serverId, account.c_str(), @@ -429,7 +453,7 @@ void WorldSocket::HandleAuthSession(WorldPacket& recvPacket) if (allowedAccountType > SEC_PLAYER && AccountTypes(security) < allowedAccountType) { SendAuthResponseError(AUTH_UNAVAILABLE); - TC_LOG_INFO("network", "WorldSocket::HandleAuthSession: User tries to login but his security level is not enough"); + TC_LOG_DEBUG("network", "WorldSocket::HandleAuthSession: User tries to login but his security level is not enough"); sScriptMgr->OnFailedAccountLogin(id); DelayedCloseSocket(); return; @@ -461,6 +485,7 @@ void WorldSocket::HandleAuthSession(WorldPacket& recvPacket) // At this point, we can safely hook a successful login sScriptMgr->OnAccountLogin(id); + _authed = true; _worldSession = new WorldSession(id, shared_from_this(), AccountTypes(security), expansion, mutetime, locale, recruiter, isRecruiter); _worldSession->LoadGlobalAccountData(); _worldSession->LoadTutorialsData(); @@ -479,10 +504,10 @@ void WorldSocket::SendAuthResponseError(uint8 code) WorldPacket packet(SMSG_AUTH_RESPONSE, 1); packet << uint8(code); - SendPacket(packet); + SendPacketAndLogOpcode(packet); } -void WorldSocket::HandlePing(WorldPacket& recvPacket) +bool WorldSocket::HandlePing(WorldPacket& recvPacket) { uint32 ping; uint32 latency; @@ -511,13 +536,14 @@ void WorldSocket::HandlePing(WorldPacket& recvPacket) if (maxAllowed && _OverSpeedPings > maxAllowed) { + std::unique_lock<std::mutex> sessionGuard(_worldSessionLock); + if (_worldSession && !_worldSession->HasPermission(rbac::RBAC_PERM_SKIP_CHECK_OVERSPEED_PING)) { TC_LOG_ERROR("network", "WorldSocket::HandlePing: %s kicked for over-speed pings (address: %s)", _worldSession->GetPlayerInfo().c_str(), GetRemoteIpAddress().to_string().c_str()); - CloseSocket(); - return; + return false; } } } @@ -525,20 +551,23 @@ void WorldSocket::HandlePing(WorldPacket& recvPacket) _OverSpeedPings = 0; } - if (_worldSession) { - _worldSession->SetLatency(latency); - _worldSession->ResetClientTimeDelay(); - } - else - { - TC_LOG_ERROR("network", "WorldSocket::HandlePing: peer sent CMSG_PING, but is not authenticated or got recently kicked, address = %s", GetRemoteIpAddress().to_string().c_str()); + std::lock_guard<std::mutex> sessionGuard(_worldSessionLock); - CloseSocket(); - return; + if (_worldSession) + { + _worldSession->SetLatency(latency); + _worldSession->ResetClientTimeDelay(); + } + else + { + TC_LOG_ERROR("network", "WorldSocket::HandlePing: peer sent CMSG_PING, but is not authenticated or got recently kicked, address = %s", GetRemoteIpAddress().to_string().c_str()); + return false; + } } WorldPacket packet(SMSG_PONG, 4); packet << ping; - return SendPacket(packet); + SendPacketAndLogOpcode(packet); + return true; } diff --git a/src/server/game/Server/WorldSocket.h b/src/server/game/Server/WorldSocket.h index 89c335662a8..0f6acd0d72c 100644 --- a/src/server/game/Server/WorldSocket.h +++ b/src/server/game/Server/WorldSocket.h @@ -55,19 +55,25 @@ public: void Start() override; - void SendPacket(WorldPacket& packet); + void SendPacket(WorldPacket const& packet); protected: + void OnClose() override; void ReadHandler() override; bool ReadHeaderHandler(); bool ReadDataHandler(); private: + /// writes network.opcode log + /// accessing WorldSession is not threadsafe, only do it when holding _worldSessionLock + void LogOpcodeText(uint16 opcode, std::unique_lock<std::mutex> const& guard) const; + /// sends and logs network.opcode without accessing WorldSession + void SendPacketAndLogOpcode(WorldPacket const& packet); void HandleSendAuthSession(); void HandleAuthSession(WorldPacket& recvPacket); void SendAuthResponseError(uint8 code); - void HandlePing(WorldPacket& recvPacket); + bool HandlePing(WorldPacket& recvPacket); uint32 _authSeed; AuthCrypt _authCrypt; @@ -75,7 +81,9 @@ private: std::chrono::steady_clock::time_point _LastPingTime; uint32 _OverSpeedPings; + std::mutex _worldSessionLock; WorldSession* _worldSession; + bool _authed; MessageBuffer _headerBuffer; MessageBuffer _packetBuffer; diff --git a/src/server/game/Server/WorldSocketMgr.cpp b/src/server/game/Server/WorldSocketMgr.cpp index 947bd62860c..86c09ef6b6b 100644 --- a/src/server/game/Server/WorldSocketMgr.cpp +++ b/src/server/game/Server/WorldSocketMgr.cpp @@ -50,7 +50,8 @@ bool WorldSocketMgr::StartNetwork(boost::asio::io_service& service, std::string { _tcpNoDelay = sConfigMgr->GetBoolDefault("Network.TcpNodelay", true); - TC_LOG_DEBUG("misc", "Max allowed socket connections %d", boost::asio::socket_base::max_connections); + int const max_connections = boost::asio::socket_base::max_connections; + TC_LOG_DEBUG("misc", "Max allowed socket connections %d", max_connections); // -1 means use default _socketSendBufferSize = sConfigMgr->GetIntDefault("Network.OutKBuff", -1); diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index c267e560005..918b000a557 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -27,12 +27,12 @@ #include "ObjectAccessor.h" #include "Util.h" #include "Spell.h" +#include "SpellHistory.h" #include "SpellAuraEffects.h" #include "Battleground.h" #include "OutdoorPvPMgr.h" #include "Formulas.h" #include "GridNotifiers.h" -#include "GridNotifiersImpl.h" #include "CellImpl.h" #include "ScriptMgr.h" #include "Vehicle.h" @@ -542,11 +542,11 @@ void AuraEffect::CalculatePeriodic(Unit* caster, bool create, bool load) // Haste modifies periodic time of channeled spells if (m_spellInfo->IsChanneled()) { - if (m_spellInfo->AttributesEx5 & SPELL_ATTR5_HASTE_AFFECT_DURATION) + if (m_spellInfo->HasAttribute(SPELL_ATTR5_HASTE_AFFECT_DURATION)) caster->ModSpellCastTime(m_spellInfo, m_amplitude); } // and periodic time of auras affected by SPELL_AURA_PERIODIC_HASTE - else if (caster->HasAuraTypeWithAffectMask(SPELL_AURA_PERIODIC_HASTE, m_spellInfo) || m_spellInfo->AttributesEx5 & SPELL_ATTR5_HASTE_AFFECT_DURATION) + else if (caster->HasAuraTypeWithAffectMask(SPELL_AURA_PERIODIC_HASTE, m_spellInfo) || m_spellInfo->HasAttribute(SPELL_ATTR5_HASTE_AFFECT_DURATION)) m_amplitude = int32(m_amplitude * caster->GetFloatValue(UNIT_MOD_CAST_SPEED)); } } @@ -555,7 +555,7 @@ void AuraEffect::CalculatePeriodic(Unit* caster, bool create, bool load) { m_tickNumber = m_amplitude ? GetBase()->GetDuration() / m_amplitude : 0; m_periodicTimer = m_amplitude ? GetBase()->GetDuration() % m_amplitude : 0; - if (m_spellInfo->AttributesEx5 & SPELL_ATTR5_START_PERIODIC_AT_APPLY) + if (m_spellInfo->HasAttribute(SPELL_ATTR5_START_PERIODIC_AT_APPLY)) ++m_tickNumber; } else // aura just created or reapplied @@ -571,7 +571,7 @@ void AuraEffect::CalculatePeriodic(Unit* caster, bool create, bool load) { m_periodicTimer = 0; // Start periodic on next tick or at aura apply - if (m_amplitude && !(m_spellInfo->AttributesEx5 & SPELL_ATTR5_START_PERIODIC_AT_APPLY)) + if (m_amplitude && !m_spellInfo->HasAttribute(SPELL_ATTR5_START_PERIODIC_AT_APPLY)) m_periodicTimer += m_amplitude; } } @@ -1109,15 +1109,13 @@ void AuraEffect::HandleShapeshiftBoosts(Unit* target, bool apply) const // Remove cooldown of spells triggered on stance change - they may share cooldown with stance spell if (spellId) { - if (target->GetTypeId() == TYPEID_PLAYER) - target->ToPlayer()->RemoveSpellCooldown(spellId); + target->GetSpellHistory()->ResetCooldown(spellId); target->CastSpell(target, spellId, true, NULL, this); } if (spellId2) { - if (target->GetTypeId() == TYPEID_PLAYER) - target->ToPlayer()->RemoveSpellCooldown(spellId2); + target->GetSpellHistory()->ResetCooldown(spellId2); target->CastSpell(target, spellId2, true, NULL, this); } @@ -1133,7 +1131,7 @@ void AuraEffect::HandleShapeshiftBoosts(Unit* target, bool apply) const continue; SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(itr->first); - if (!spellInfo || !(spellInfo->Attributes & (SPELL_ATTR0_PASSIVE | SPELL_ATTR0_HIDDEN_CLIENTSIDE))) + if (!spellInfo || !(spellInfo->HasAttribute(SPELL_ATTR0_PASSIVE) || spellInfo->HasAttribute(SPELL_ATTR0_HIDDEN_CLIENTSIDE))) continue; if (spellInfo->Stances & (1<<(GetMiscValue()-1))) @@ -1148,7 +1146,7 @@ void AuraEffect::HandleShapeshiftBoosts(Unit* target, bool apply) const if (GlyphPropertiesEntry const* glyph = sGlyphPropertiesStore.LookupEntry(glyphId)) { SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(glyph->SpellId); - if (!spellInfo || !(spellInfo->Attributes & (SPELL_ATTR0_PASSIVE | SPELL_ATTR0_HIDDEN_CLIENTSIDE))) + if (!spellInfo || !(spellInfo->HasAttribute(SPELL_ATTR0_PASSIVE) || spellInfo->HasAttribute(SPELL_ATTR0_HIDDEN_CLIENTSIDE))) continue; if (spellInfo->Stances & (1<<(GetMiscValue()-1))) target->CastSpell(target, glyph->SpellId, true, NULL, this); @@ -3243,7 +3241,7 @@ void AuraEffect::HandleModStateImmunityMask(AuraApplication const* aurApp, uint8 for (std::list <AuraType>::iterator iter = aura_immunity_list.begin(); iter != aura_immunity_list.end(); ++iter) target->ApplySpellImmune(GetId(), IMMUNITY_STATE, *iter, apply); - if (apply && GetSpellInfo()->AttributesEx & SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY) + if (apply && GetSpellInfo()->HasAttribute(SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY)) { target->RemoveAurasWithMechanic(mechanic_immunity_list, AURA_REMOVE_BY_DEFAULT, GetId()); for (std::list <AuraType>::iterator iter = aura_immunity_list.begin(); iter != aura_immunity_list.end(); ++iter) @@ -3300,7 +3298,7 @@ void AuraEffect::HandleModMechanicImmunity(AuraApplication const* aurApp, uint8 break; } - if (apply && GetSpellInfo()->AttributesEx & SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY) + if (apply && GetSpellInfo()->HasAttribute(SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY)) target->RemoveAurasWithMechanic(mechanic, AURA_REMOVE_BY_DEFAULT, GetId()); } @@ -3336,7 +3334,7 @@ void AuraEffect::HandleAuraModStateImmunity(AuraApplication const* aurApp, uint8 target->ApplySpellImmune(GetId(), IMMUNITY_STATE, GetMiscValue(), apply); - if (apply && GetSpellInfo()->AttributesEx & SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY) + if (apply && GetSpellInfo()->HasAttribute(SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY)) target->RemoveAurasByType(AuraType(GetMiscValue()), ObjectGuid::Empty, GetBase()); } @@ -3372,13 +3370,13 @@ void AuraEffect::HandleAuraModSchoolImmunity(AuraApplication const* aurApp, uint target->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_IMMUNE_OR_LOST_SELECTION); // remove all flag auras (they are positive, but they must be removed when you are immune) - if (GetSpellInfo()->AttributesEx & SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY - && GetSpellInfo()->AttributesEx2 & SPELL_ATTR2_DAMAGE_REDUCED_SHIELD) + if (GetSpellInfo()->HasAttribute(SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY) + && GetSpellInfo()->HasAttribute(SPELL_ATTR2_DAMAGE_REDUCED_SHIELD)) target->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_IMMUNE_OR_LOST_SELECTION); /// @todo optimalize this cycle - use RemoveAurasWithInterruptFlags call or something else if ((apply) - && GetSpellInfo()->AttributesEx & SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY + && GetSpellInfo()->HasAttribute(SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY) && GetSpellInfo()->IsPositive()) //Only positive immunity removes auras { uint32 school_mask = GetMiscValue(); @@ -3759,7 +3757,7 @@ void AuraEffect::HandleModTotalPercentStat(AuraApplication const* aurApp, uint8 // recalculate current HP/MP after applying aura modifications (only for spells with SPELL_ATTR0_UNK4 0x00000010 flag) // this check is total bullshit i think - if (GetMiscValue() == STAT_STAMINA && (m_spellInfo->Attributes & SPELL_ATTR0_ABILITY)) + if (GetMiscValue() == STAT_STAMINA && m_spellInfo->HasAttribute(SPELL_ATTR0_ABILITY)) target->SetHealth(std::max<uint32>(uint32(healthPct * target->GetMaxHealth() * 0.01f), (alive ? 1 : 0))); } @@ -3853,10 +3851,11 @@ void AuraEffect::HandleAuraModIncreaseHealth(AuraApplication const* aurApp, uint } else { - if (int32(target->GetHealth()) > GetAmount()) - target->ModifyHealth(-GetAmount()); - else - target->SetHealth(1); + if (target->GetHealth() > 0) + { + int32 value = std::min<int32>(target->GetHealth() - 1, GetAmount()); + target->ModifyHealth(-value); + } target->HandleStatModifier(UNIT_MOD_HEALTH, TOTAL_VALUE, float(GetAmount()), apply); } } @@ -3868,19 +3867,15 @@ void AuraEffect::HandleAuraModIncreaseMaxHealth(AuraApplication const* aurApp, u Unit* target = aurApp->GetTarget(); - uint32 oldhealth = target->GetHealth(); - double healthPercentage = (double)oldhealth / (double)target->GetMaxHealth(); + float percent = target->GetHealthPct(); target->HandleStatModifier(UNIT_MOD_HEALTH, TOTAL_VALUE, float(GetAmount()), apply); // refresh percentage - if (oldhealth > 0) + if (target->GetHealth() > 0) { - uint32 newhealth = uint32(ceil((double)target->GetMaxHealth() * healthPercentage)); - if (newhealth == 0) - newhealth = 1; - - target->SetHealth(newhealth); + uint32 newHealth = std::max<uint32>(target->CountPctFromMaxHealth(int32(percent)), 1); + target->SetHealth(newHealth); } } @@ -3944,8 +3939,12 @@ void AuraEffect::HandleAuraModIncreaseHealthPercent(AuraApplication const* aurAp // Unit will keep hp% after MaxHealth being modified if unit is alive. float percent = target->GetHealthPct(); target->HandleStatModifier(UNIT_MOD_HEALTH, TOTAL_PCT, float(GetAmount()), apply); - if (target->IsAlive()) - target->SetHealth(target->CountPctFromMaxHealth(int32(percent))); + + if (target->GetHealth() > 0) + { + uint32 newHealth = std::max<uint32>(target->CountPctFromMaxHealth(int32(percent)), 1); + target->SetHealth(newHealth); + } } void AuraEffect::HandleAuraIncreaseBaseHealthPercent(AuraApplication const* aurApp, uint8 mode, bool apply) const @@ -5846,6 +5845,9 @@ void AuraEffect::HandlePeriodicDamageAurasTick(Unit* target, Unit* caster) const else damage = std::max(int32(damage * GetDonePct()), 0); + if (Player* modOwner = caster->GetSpellModOwner()) + modOwner->ApplySpellMod(GetSpellInfo()->Id, SPELLMOD_DOT, damage); + damage = target->SpellDamageBonusTaken(caster, GetSpellInfo(), damage, DOT, GetBase()->GetStackAmount()); // Calculate armor mitigation @@ -5901,7 +5903,7 @@ void AuraEffect::HandlePeriodicDamageAurasTick(Unit* target, Unit* caster) const else damage = uint32(target->CountPctFromMaxHealth(damage)); - if (!(m_spellInfo->AttributesEx4 & SPELL_ATTR4_FIXED_DAMAGE)) + if (!m_spellInfo->HasAttribute(SPELL_ATTR4_FIXED_DAMAGE)) if (m_spellInfo->Effects[m_effIndex].IsTargetingArea() || isAreaAura) { damage = int32(float(damage) * target->GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_AOE_DAMAGE_AVOIDANCE, m_spellInfo->SchoolMask)); @@ -5918,7 +5920,7 @@ void AuraEffect::HandlePeriodicDamageAurasTick(Unit* target, Unit* caster) const damage = caster->SpellCriticalDamageBonus(m_spellInfo, damage, target); int32 dmg = damage; - if (!(GetSpellInfo()->AttributesEx4 & SPELL_ATTR4_FIXED_DAMAGE)) + if (!GetSpellInfo()->HasAttribute(SPELL_ATTR4_FIXED_DAMAGE)) caster->ApplyResilience(target, NULL, &dmg, crit, CR_CRIT_TAKEN_SPELL); damage = dmg; @@ -5978,7 +5980,7 @@ void AuraEffect::HandlePeriodicHealthLeechAuraTick(Unit* target, Unit* caster) c if (isAreaAura) damage = caster->SpellDamageBonusDone(target, GetSpellInfo(), damage, DOT, GetBase()->GetStackAmount()) * caster->SpellDamagePctDone(target, m_spellInfo, DOT); else - damage = std::max(int32(damage * GetDonePct()), 0); + damage = std::max(int32(damage * GetDonePct()), 0); damage = target->SpellDamageBonusTaken(caster, GetSpellInfo(), damage, DOT, GetBase()->GetStackAmount()); @@ -5990,7 +5992,7 @@ void AuraEffect::HandlePeriodicHealthLeechAuraTick(Unit* target, Unit* caster) c damage = damageReductedArmor; } - if (!(m_spellInfo->AttributesEx4 & SPELL_ATTR4_FIXED_DAMAGE)) + if (!m_spellInfo->HasAttribute(SPELL_ATTR4_FIXED_DAMAGE)) if (m_spellInfo->Effects[m_effIndex].IsTargetingArea() || isAreaAura) { damage = uint32(float(damage) * target->GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_AOE_DAMAGE_AVOIDANCE, m_spellInfo->SchoolMask)); @@ -6007,7 +6009,7 @@ void AuraEffect::HandlePeriodicHealthLeechAuraTick(Unit* target, Unit* caster) c damage = caster->SpellCriticalDamageBonus(m_spellInfo, damage, target); int32 dmg = damage; - if (!(GetSpellInfo()->AttributesEx4 & SPELL_ATTR4_FIXED_DAMAGE)) + if (!GetSpellInfo()->HasAttribute(SPELL_ATTR4_FIXED_DAMAGE)) caster->ApplyResilience(target, NULL, &dmg, crit, CR_CRIT_TAKEN_SPELL); damage = dmg; @@ -6083,7 +6085,7 @@ void AuraEffect::HandlePeriodicHealAurasTick(Unit* target, Unit* caster) const } // heal for caster damage (must be alive) - if (target != caster && GetSpellInfo()->AttributesEx2 & SPELL_ATTR2_HEALTH_FUNNEL && !caster->IsAlive()) + if (target != caster && GetSpellInfo()->HasAttribute(SPELL_ATTR2_HEALTH_FUNNEL) && !caster->IsAlive()) return; // don't regen when permanent aura target has full power @@ -6149,6 +6151,9 @@ void AuraEffect::HandlePeriodicHealAurasTick(Unit* target, Unit* caster) const else damage = std::max(int32(damage * GetDonePct()), 0); + if (Player* modOwner = caster->GetSpellModOwner()) + modOwner->ApplySpellMod(GetSpellInfo()->Id, SPELLMOD_DOT, damage); + damage = target->SpellHealingBonusTaken(caster, GetSpellInfo(), damage, DOT, GetBase()->GetStackAmount()); } @@ -6177,7 +6182,7 @@ void AuraEffect::HandlePeriodicHealAurasTick(Unit* target, Unit* caster) const // Health Funnel // damage caster for heal amount - if (target != caster && GetSpellInfo()->AttributesEx2 & SPELL_ATTR2_HEALTH_FUNNEL) + if (target != caster && GetSpellInfo()->HasAttribute(SPELL_ATTR2_HEALTH_FUNNEL)) { uint32 funnelDamage = GetSpellInfo()->ManaPerSecond; // damage is not affected by spell power @@ -6308,7 +6313,7 @@ void AuraEffect::HandlePeriodicEnergizeAuraTick(Unit* target, Unit* caster) cons { Powers powerType = Powers(GetMiscValue()); - if (target->GetTypeId() == TYPEID_PLAYER && target->getPowerType() != powerType && !(m_spellInfo->AttributesEx7 & SPELL_ATTR7_CAN_RESTORE_SECONDARY_POWER)) + if (target->GetTypeId() == TYPEID_PLAYER && target->getPowerType() != powerType && !m_spellInfo->HasAttribute(SPELL_ATTR7_CAN_RESTORE_SECONDARY_POWER)) return; if (!target->IsAlive() || !target->GetMaxPower(powerType)) @@ -6418,6 +6423,9 @@ void AuraEffect::HandleProcTriggerSpellWithValueAuraProc(AuraApplication* aurApp void AuraEffect::HandleProcTriggerDamageAuraProc(AuraApplication* aurApp, ProcEventInfo& eventInfo) { + if (!aurApp) + return; + Unit* target = aurApp->GetTarget(); Unit* triggerTarget = eventInfo.GetProcTarget(); SpellNonMeleeDamage damageInfo(target, triggerTarget, GetId(), GetSpellInfo()->SchoolMask); diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index 93a4c96b92f..5479dcdbf00 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -25,6 +25,7 @@ #include "Player.h" #include "Unit.h" #include "Spell.h" +#include "SpellHistory.h" #include "SpellAuraEffects.h" #include "DynamicObject.h" #include "ObjectAccessor.h" @@ -191,7 +192,7 @@ void AuraApplication::BuildUpdatePacket(ByteBuffer& data, bool remove) const Aura const* aura = GetBase(); data << uint32(aura->GetId()); uint32 flags = _flags; - if (aura->GetMaxDuration() > 0 && !(aura->GetSpellInfo()->AttributesEx5 & SPELL_ATTR5_HIDE_DURATION)) + if (aura->GetMaxDuration() > 0 && !aura->GetSpellInfo()->HasAttribute(SPELL_ATTR5_HIDE_DURATION)) flags |= AFLAG_DURATION; data << uint8(flags); data << uint8(aura->GetCasterLevel()); @@ -418,7 +419,7 @@ void Aura::_ApplyForTarget(Unit* target, Unit* caster, AuraApplication * auraApp if (m_spellInfo->IsCooldownStartedOnEvent()) { Item* castItem = m_castItemGuid ? caster->ToPlayer()->GetItemByGuid(m_castItemGuid) : NULL; - caster->ToPlayer()->AddSpellAndCategoryCooldowns(m_spellInfo, castItem ? castItem->GetEntry() : 0, NULL, true); + caster->GetSpellHistory()->StartCooldown(m_spellInfo, castItem ? castItem->GetEntry() : 0, nullptr, true); } } } @@ -446,12 +447,9 @@ void Aura::_UnapplyForTarget(Unit* target, Unit* caster, AuraApplication * auraA m_removedApplications.push_back(auraApp); // reset cooldown state for spells - if (caster && caster->GetTypeId() == TYPEID_PLAYER) - { - if (GetSpellInfo()->IsCooldownStartedOnEvent()) - // note: item based cooldowns and cooldown spell mods with charges ignored (unknown existed cases) - caster->ToPlayer()->SendCooldownEvent(GetSpellInfo()); - } + if (caster && GetSpellInfo()->IsCooldownStartedOnEvent()) + // note: item based cooldowns and cooldown spell mods with charges ignored (unknown existed cases) + caster->GetSpellHistory()->SendCooldownEvent(GetSpellInfo()); } // removes aura from all targets @@ -749,12 +747,13 @@ void Aura::SetDuration(int32 duration, bool withMods) void Aura::RefreshDuration(bool withMods) { - if (withMods) + Unit* caster = GetCaster(); + if (withMods && caster) { int32 duration = m_spellInfo->GetMaxDuration(); // Calculate duration of periodics affected by haste. - if (GetCaster()->HasAuraTypeWithAffectMask(SPELL_AURA_PERIODIC_HASTE, m_spellInfo) || m_spellInfo->AttributesEx5 & SPELL_ATTR5_HASTE_AFFECT_DURATION) - duration = int32(duration * GetCaster()->GetFloatValue(UNIT_MOD_CAST_SPEED)); + if (caster->HasAuraTypeWithAffectMask(SPELL_AURA_PERIODIC_HASTE, m_spellInfo) || m_spellInfo->HasAttribute(SPELL_ATTR5_HASTE_AFFECT_DURATION)) + duration = int32(duration * caster->GetFloatValue(UNIT_MOD_CAST_SPEED)); SetMaxDuration(duration); SetDuration(duration); @@ -1214,7 +1213,7 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b break; case 60970: // Heroic Fury (remove Intercept cooldown) if (target->GetTypeId() == TYPEID_PLAYER) - target->ToPlayer()->RemoveSpellCooldown(20252, true); + target->GetSpellHistory()->ResetCooldown(20252, true); break; } break; @@ -1496,15 +1495,15 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b // check cooldown if (caster->GetTypeId() == TYPEID_PLAYER) { - if (caster->ToPlayer()->HasSpellCooldown(aura->GetId())) + if (caster->GetSpellHistory()->HasCooldown(aura->GetId())) { // This additional check is needed to add a minimal delay before cooldown in in effect // to allow all bubbles broken by a single damage source proc mana return - if (caster->ToPlayer()->GetSpellCooldownDelay(aura->GetId()) <= 11) + if (caster->GetSpellHistory()->GetRemainingCooldown(aura->GetId()) <= 11) break; } else // and add if needed - caster->ToPlayer()->AddSpellCooldown(aura->GetId(), 0, uint32(time(NULL) + 12)); + caster->GetSpellHistory()->AddCooldown(aura->GetId(), 0, std::chrono::seconds(12)); } // effect on caster @@ -1557,14 +1556,14 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b // Glyph of Guardian Spirit if (AuraEffect* aurEff = player->GetAuraEffect(63231, 0)) { - if (!player->HasSpellCooldown(47788)) + if (!player->GetSpellHistory()->HasCooldown(47788)) break; - player->RemoveSpellCooldown(GetSpellInfo()->Id, true); - player->AddSpellCooldown(GetSpellInfo()->Id, 0, uint32(time(NULL) + aurEff->GetAmount())); + player->GetSpellHistory()->ResetCooldown(GetSpellInfo()->Id, true); + player->GetSpellHistory()->AddCooldown(GetSpellInfo()->Id, 0, std::chrono::seconds(aurEff->GetAmount())); WorldPacket data; - player->BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_NONE, GetSpellInfo()->Id, aurEff->GetAmount()*IN_MILLISECONDS); + player->GetSpellHistory()->BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_NONE, GetSpellInfo()->Id, aurEff->GetAmount() * IN_MILLISECONDS); player->SendDirectMessage(&data); } break; @@ -1813,7 +1812,7 @@ bool Aura::CanStackWith(Aura const* existingAura) const if (existingAura->GetSpellInfo()->IsChanneled()) return true; - if (m_spellInfo->AttributesEx3 & SPELL_ATTR3_STACK_FOR_DIFF_CASTERS) + if (m_spellInfo->HasAttribute(SPELL_ATTR3_STACK_FOR_DIFF_CASTERS)) return true; // check same periodic auras @@ -1865,7 +1864,7 @@ bool Aura::CanStackWith(Aura const* existingAura) const if (m_spellInfo->IsMultiSlotAura() && !IsArea()) return true; if (GetCastItemGUID() && existingAura->GetCastItemGUID()) - if (GetCastItemGUID() != existingAura->GetCastItemGUID() && (m_spellInfo->AttributesCu & SPELL_ATTR0_CU_ENCHANT_PROC)) + if (GetCastItemGUID() != existingAura->GetCastItemGUID() && m_spellInfo->HasAttribute(SPELL_ATTR0_CU_ENCHANT_PROC)) return true; // same spell with same caster should not stack return false; diff --git a/src/server/game/Spells/Auras/SpellAuras.h b/src/server/game/Spells/Auras/SpellAuras.h index ac45461b333..6abcd578411 100644 --- a/src/server/game/Spells/Auras/SpellAuras.h +++ b/src/server/game/Spells/Auras/SpellAuras.h @@ -161,8 +161,8 @@ class Aura { return GetCasterGUID() == target->GetGUID() && m_spellInfo->Stances - && !(m_spellInfo->AttributesEx2 & SPELL_ATTR2_NOT_NEED_SHAPESHIFT) - && !(m_spellInfo->Attributes & SPELL_ATTR0_NOT_SHAPESHIFT); + && !m_spellInfo->HasAttribute(SPELL_ATTR2_NOT_NEED_SHAPESHIFT) + && !m_spellInfo->HasAttribute(SPELL_ATTR0_NOT_SHAPESHIFT); } bool CanBeSaved() const; diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 8f8295d57d1..94bb90487bc 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -31,12 +31,9 @@ #include "Player.h" #include "Pet.h" #include "Unit.h" -#include "Totem.h" #include "Spell.h" #include "DynamicObject.h" -#include "Group.h" #include "UpdateData.h" -#include "MapManager.h" #include "ObjectAccessor.h" #include "CellImpl.h" #include "SharedDefines.h" @@ -53,6 +50,7 @@ #include "SpellScript.h" #include "InstanceScript.h" #include "SpellInfo.h" +#include "SpellHistory.h" #include "Battlefield.h" #include "BattlefieldMgr.h" @@ -482,23 +480,23 @@ void SpellCastTargets::Update(Unit* caster) void SpellCastTargets::OutDebug() const { if (!m_targetMask) - TC_LOG_INFO("spells", "No targets"); + TC_LOG_DEBUG("spells", "No targets"); - TC_LOG_INFO("spells", "target mask: %u", m_targetMask); + TC_LOG_DEBUG("spells", "target mask: %u", m_targetMask); if (m_targetMask & (TARGET_FLAG_UNIT_MASK | TARGET_FLAG_CORPSE_MASK | TARGET_FLAG_GAMEOBJECT_MASK)) - TC_LOG_INFO("spells", "Object target: %s", m_objectTargetGUID.ToString().c_str()); + TC_LOG_DEBUG("spells", "Object target: %s", m_objectTargetGUID.ToString().c_str()); if (m_targetMask & TARGET_FLAG_ITEM) - TC_LOG_INFO("spells", "Item target: %s", m_itemTargetGUID.ToString().c_str()); + TC_LOG_DEBUG("spells", "Item target: %s", m_itemTargetGUID.ToString().c_str()); if (m_targetMask & TARGET_FLAG_TRADE_ITEM) - TC_LOG_INFO("spells", "Trade item target: %s", m_itemTargetGUID.ToString().c_str()); + TC_LOG_DEBUG("spells", "Trade item target: %s", m_itemTargetGUID.ToString().c_str()); if (m_targetMask & TARGET_FLAG_SOURCE_LOCATION) - TC_LOG_INFO("spells", "Source location: transport guid:%s trans offset: %s position: %s", m_src._transportGUID.ToString().c_str(), m_src._transportOffset.ToString().c_str(), m_src._position.ToString().c_str()); + TC_LOG_DEBUG("spells", "Source location: transport guid:%s trans offset: %s position: %s", m_src._transportGUID.ToString().c_str(), m_src._transportOffset.ToString().c_str(), m_src._position.ToString().c_str()); if (m_targetMask & TARGET_FLAG_DEST_LOCATION) - TC_LOG_INFO("spells", "Destination location: transport guid:%s trans offset: %s position: %s", m_dst._transportGUID.ToString().c_str(), m_dst._transportOffset.ToString().c_str(), m_dst._position.ToString().c_str()); + TC_LOG_DEBUG("spells", "Destination location: transport guid:%s trans offset: %s position: %s", m_dst._transportGUID.ToString().c_str(), m_dst._transportOffset.ToString().c_str(), m_dst._position.ToString().c_str()); if (m_targetMask & TARGET_FLAG_STRING) - TC_LOG_INFO("spells", "String: %s", m_strTarget.c_str()); - TC_LOG_INFO("spells", "speed: %f", m_speed); - TC_LOG_INFO("spells", "elevation: %f", m_elevation); + TC_LOG_DEBUG("spells", "String: %s", m_strTarget.c_str()); + TC_LOG_DEBUG("spells", "speed: %f", m_speed); + TC_LOG_DEBUG("spells", "elevation: %f", m_elevation); } SpellValue::SpellValue(SpellInfo const* proto) @@ -512,7 +510,7 @@ SpellValue::SpellValue(SpellInfo const* proto) Spell::Spell(Unit* caster, SpellInfo const* info, TriggerCastFlags triggerFlags, ObjectGuid originalCasterGUID, bool skipCheck) : m_spellInfo(sSpellMgr->GetSpellForDifficultyFromSpell(info, caster)), -m_caster((info->AttributesEx6 & SPELL_ATTR6_CAST_BY_CHARMER && caster->GetCharmerOrOwner()) ? caster->GetCharmerOrOwner() : caster) +m_caster((info->HasAttribute(SPELL_ATTR6_CAST_BY_CHARMER) && caster->GetCharmerOrOwner()) ? caster->GetCharmerOrOwner() : caster) , m_spellValue(new SpellValue(m_spellInfo)), m_preGeneratedPath(PathGenerator(m_caster)) { m_customError = SPELL_CUSTOM_ERROR_NONE; @@ -533,7 +531,7 @@ m_caster((info->AttributesEx6 & SPELL_ATTR6_CAST_BY_CHARMER && caster->GetCharme switch (m_spellInfo->DmgClass) { case SPELL_DAMAGE_CLASS_MELEE: - if (m_spellInfo->AttributesEx3 & SPELL_ATTR3_REQ_OFFHAND) + if (m_spellInfo->HasAttribute(SPELL_ATTR3_REQ_OFFHAND)) m_attackType = OFF_ATTACK; else m_attackType = BASE_ATTACK; @@ -543,7 +541,7 @@ m_caster((info->AttributesEx6 & SPELL_ATTR6_CAST_BY_CHARMER && caster->GetCharme break; default: // Wands - if (m_spellInfo->AttributesEx2 & SPELL_ATTR2_AUTOREPEAT_FLAG) + if (m_spellInfo->HasAttribute(SPELL_ATTR2_AUTOREPEAT_FLAG)) m_attackType = RANGED_ATTACK; else m_attackType = BASE_ATTACK; @@ -574,7 +572,7 @@ m_caster((info->AttributesEx6 & SPELL_ATTR6_CAST_BY_CHARMER && caster->GetCharme m_spellState = SPELL_STATE_NULL; _triggeredCastFlags = triggerFlags; - if (info->AttributesEx4 & SPELL_ATTR4_CAN_CAST_WHILE_CASTING) + if (info->HasAttribute(SPELL_ATTR4_CAN_CAST_WHILE_CASTING)) _triggeredCastFlags = TriggerCastFlags(uint32(_triggeredCastFlags) | TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_CAST_DIRECTLY); m_CastItem = NULL; @@ -615,8 +613,8 @@ m_caster((info->AttributesEx6 & SPELL_ATTR6_CAST_BY_CHARMER && caster->GetCharme // Determine if spell can be reflected back to the caster // Patch 1.2 notes: Spell Reflection no longer reflects abilities - m_canReflect = m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_MAGIC && !(m_spellInfo->Attributes & SPELL_ATTR0_ABILITY) - && !(m_spellInfo->AttributesEx & SPELL_ATTR1_CANT_BE_REFLECTED) && !(m_spellInfo->Attributes & SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY) + m_canReflect = m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_MAGIC && !m_spellInfo->HasAttribute(SPELL_ATTR0_ABILITY) + && !m_spellInfo->HasAttribute(SPELL_ATTR1_CANT_BE_REFLECTED) && !m_spellInfo->HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY) && !m_spellInfo->IsPassive() && !m_spellInfo->IsPositive(); CleanupTargetList(); @@ -1749,11 +1747,11 @@ uint32 Spell::GetSearcherTypeMask(SpellTargetObjectTypes objType, ConditionList* default: break; } - if (!(m_spellInfo->AttributesEx2 & SPELL_ATTR2_CAN_TARGET_DEAD)) + if (!m_spellInfo->HasAttribute(SPELL_ATTR2_CAN_TARGET_DEAD)) retMask &= ~GRID_MAP_TYPE_MASK_CORPSE; - if (m_spellInfo->AttributesEx3 & SPELL_ATTR3_ONLY_TARGET_PLAYERS) + if (m_spellInfo->HasAttribute(SPELL_ATTR3_ONLY_TARGET_PLAYERS)) retMask &= GRID_MAP_TYPE_MASK_CORPSE | GRID_MAP_TYPE_MASK_PLAYER; - if (m_spellInfo->AttributesEx3 & SPELL_ATTR3_ONLY_TARGET_GHOSTS) + if (m_spellInfo->HasAttribute(SPELL_ATTR3_ONLY_TARGET_GHOSTS)) retMask &= GRID_MAP_TYPE_MASK_PLAYER; if (condList) @@ -1843,7 +1841,7 @@ void Spell::SearchChainTargets(std::list<WorldObject*>& targets, uint32 chainTar } // chain lightning/heal spells and similar - allow to jump at larger distance and go out of los - bool isBouncingFar = (m_spellInfo->AttributesEx4 & SPELL_ATTR4_AREA_TARGET_CHAIN + bool isBouncingFar = (m_spellInfo->HasAttribute(SPELL_ATTR4_AREA_TARGET_CHAIN) || m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_NONE || m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_MAGIC); @@ -1944,7 +1942,7 @@ void Spell::prepareDataForTriggerSystem(AuraEffect const* /*triggeredByAura*/) break; case SPELL_DAMAGE_CLASS_RANGED: // Auto attack - if (m_spellInfo->AttributesEx2 & SPELL_ATTR2_AUTOREPEAT_FLAG) + if (m_spellInfo->HasAttribute(SPELL_ATTR2_AUTOREPEAT_FLAG)) { m_procAttacker = PROC_FLAG_DONE_RANGED_AUTO_ATTACK; m_procVictim = PROC_FLAG_TAKEN_RANGED_AUTO_ATTACK; @@ -1958,7 +1956,7 @@ void Spell::prepareDataForTriggerSystem(AuraEffect const* /*triggeredByAura*/) default: if (m_spellInfo->EquippedItemClass == ITEM_CLASS_WEAPON && m_spellInfo->EquippedItemSubClassMask & (1<<ITEM_SUBCLASS_WEAPON_WAND) - && m_spellInfo->AttributesEx2 & SPELL_ATTR2_AUTOREPEAT_FLAG) // Wands auto attack + && m_spellInfo->HasAttribute(SPELL_ATTR2_AUTOREPEAT_FLAG)) // Wands auto attack { m_procAttacker = PROC_FLAG_DONE_RANGED_AUTO_ATTACK; m_procVictim = PROC_FLAG_TAKEN_RANGED_AUTO_ATTACK; @@ -1990,8 +1988,8 @@ void Spell::prepareDataForTriggerSystem(AuraEffect const* /*triggeredByAura*/) if (!(m_procAttacker & PROC_FLAG_DONE_RANGED_AUTO_ATTACK)) { if (_triggeredCastFlags & TRIGGERED_DISALLOW_PROC_EVENTS && - (m_spellInfo->AttributesEx2 & SPELL_ATTR2_TRIGGERED_CAN_TRIGGER_PROC || - m_spellInfo->AttributesEx3 & SPELL_ATTR3_TRIGGERED_CAN_TRIGGER_PROC_2)) + (m_spellInfo->HasAttribute(SPELL_ATTR2_TRIGGERED_CAN_TRIGGER_PROC) || + m_spellInfo->HasAttribute(SPELL_ATTR3_TRIGGERED_CAN_TRIGGER_PROC_2))) m_procEx |= PROC_EX_INTERNAL_CANT_PROC; else if (_triggeredCastFlags & TRIGGERED_DISALLOW_PROC_EVENTS) m_procEx |= PROC_EX_INTERNAL_TRIGGERED; @@ -2275,7 +2273,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target) m_spellAura = NULL; // Set aura to null for every target-make sure that pointer is not used for unit without aura applied //Spells with this flag cannot trigger if effect is cast on self - bool canEffectTrigger = !(m_spellInfo->AttributesEx3 & SPELL_ATTR3_CANT_TRIGGER_PROC) && unitTarget->CanProc() && (CanExecuteTriggersOnHit(mask) || missInfo == SPELL_MISS_IMMUNE || missInfo == SPELL_MISS_IMMUNE2); + bool canEffectTrigger = !m_spellInfo->HasAttribute(SPELL_ATTR3_CANT_TRIGGER_PROC) && unitTarget->CanProc() && (CanExecuteTriggersOnHit(mask) || missInfo == SPELL_MISS_IMMUNE || missInfo == SPELL_MISS_IMMUNE2); Unit* spellHitTarget = NULL; if (missInfo == SPELL_MISS_NONE) // In case spell hit target, do all effect on that target @@ -2395,7 +2393,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target) if (canEffectTrigger && missInfo != SPELL_MISS_REFLECT) { caster->ProcDamageAndSpell(unitTarget, procAttacker, procVictim, procEx, damageInfo.damage, m_attackType, m_spellInfo, m_triggeredByAuraSpell); - if (caster->GetTypeId() == TYPEID_PLAYER && (m_spellInfo->Attributes & SPELL_ATTR0_STOP_ATTACK_TARGET) == 0 && + if (caster->GetTypeId() == TYPEID_PLAYER && m_spellInfo->HasAttribute(SPELL_ATTR0_STOP_ATTACK_TARGET) == 0 && (m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_MELEE || m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_RANGED)) caster->ToPlayer()->CastItemCombatSpell(unitTarget, m_attackType, procVictim, procEx); } @@ -2415,7 +2413,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target) caster->ProcDamageAndSpell(unit, procAttacker, procVictim, procEx, 0, m_attackType, m_spellInfo, m_triggeredByAuraSpell); // Failed Pickpocket, reveal rogue - if (missInfo == SPELL_MISS_RESIST && m_spellInfo->AttributesCu & SPELL_ATTR0_CU_PICKPOCKET && unitTarget->GetTypeId() == TYPEID_UNIT) + if (missInfo == SPELL_MISS_RESIST && m_spellInfo->HasAttribute(SPELL_ATTR0_CU_PICKPOCKET) && unitTarget->GetTypeId() == TYPEID_UNIT) { m_caster->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_TALK); if (unitTarget->ToCreature()->IsAIEnabled) @@ -2425,9 +2423,9 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target) if (missInfo != SPELL_MISS_EVADE && !m_caster->IsFriendlyTo(unit) && (!m_spellInfo->IsPositive() || m_spellInfo->HasEffect(SPELL_EFFECT_DISPEL))) { - m_caster->CombatStart(unit, !(m_spellInfo->AttributesEx3 & SPELL_ATTR3_NO_INITIAL_AGGRO)); + m_caster->CombatStart(unit, !m_spellInfo->HasAttribute(SPELL_ATTR3_NO_INITIAL_AGGRO)); - if (m_spellInfo->AttributesCu & SPELL_ATTR0_CU_AURA_CC) + if (m_spellInfo->HasAttribute(SPELL_ATTR0_CU_AURA_CC)) if (!unit->IsStandState()) unit->SetStandState(UNIT_STAND_STATE_STAND); } @@ -2514,7 +2512,7 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA { unit->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_HITBYSPELL); /// @todo This is a hack. But we do not know what types of stealth should be interrupted by CC - if ((m_spellInfo->AttributesCu & SPELL_ATTR0_CU_AURA_CC) && unit->IsControlledByPlayer()) + if (m_spellInfo->HasAttribute(SPELL_ATTR0_CU_AURA_CC) && unit->IsControlledByPlayer()) unit->RemoveAurasByType(SPELL_AURA_MOD_STEALTH); } else if (m_caster->IsFriendlyTo(unit)) @@ -2532,7 +2530,7 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA if (m_caster->GetTypeId() == TYPEID_PLAYER) m_caster->ToPlayer()->UpdatePvP(true); } - if (unit->IsInCombat() && !(m_spellInfo->AttributesEx3 & SPELL_ATTR3_NO_INITIAL_AGGRO)) + if (unit->IsInCombat() && !m_spellInfo->HasAttribute(SPELL_ATTR3_NO_INITIAL_AGGRO)) { m_caster->SetInCombatState(unit->GetCombatTimer() > 0, unit); unit->getHostileRefManager().threatAssist(m_caster, 0.0f); @@ -2625,7 +2623,7 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA if (m_spellInfo->IsChanneled()) m_originalCaster->ModSpellCastTime(aurSpellInfo, duration, this); // and duration of auras affected by SPELL_AURA_PERIODIC_HASTE - else if (m_originalCaster->HasAuraTypeWithAffectMask(SPELL_AURA_PERIODIC_HASTE, aurSpellInfo) || m_spellInfo->AttributesEx5 & SPELL_ATTR5_HASTE_AFFECT_DURATION) + else if (m_originalCaster->HasAuraTypeWithAffectMask(SPELL_AURA_PERIODIC_HASTE, aurSpellInfo) || m_spellInfo->HasAttribute(SPELL_ATTR5_HASTE_AFFECT_DURATION)) duration = int32(duration * m_originalCaster->GetFloatValue(UNIT_MOD_CAST_SPEED)); if (duration != m_spellAura->GetMaxDuration()) @@ -3192,7 +3190,7 @@ void Spell::cast(bool skipCheck) SendSpellGo(); // Okay, everything is prepared. Now we need to distinguish between immediate and evented delayed spells - if ((m_spellInfo->Speed > 0.0f && !m_spellInfo->IsChanneled()) || m_spellInfo->AttributesEx4 & SPELL_ATTR4_UNK4) + if ((m_spellInfo->Speed > 0.0f && !m_spellInfo->IsChanneled()) || m_spellInfo->HasAttribute(SPELL_ATTR4_UNK4)) { // Remove used for cast item if need (it can be already NULL after TakeReagents call // in case delayed spell remove item at cast delay start @@ -3229,7 +3227,7 @@ void Spell::cast(bool skipCheck) //Clear spell cooldowns after every spell is cast if .cheat cooldown is enabled. if (m_caster->ToPlayer()->GetCommandStatus(CHEAT_COOLDOWN)) - m_caster->ToPlayer()->RemoveSpellCooldown(m_spellInfo->Id, true); + m_caster->GetSpellHistory()->ResetCooldown(m_spellInfo->Id, true); } SetExecutedCurrently(false); @@ -3433,30 +3431,7 @@ void Spell::_handle_finish_phase() void Spell::SendSpellCooldown() { - Player* _player = m_caster->ToPlayer(); - if (!_player) - { - // Handle pet cooldowns here if needed instead of in PetAI to avoid hidden cooldown restarts - Creature* _creature = m_caster->ToCreature(); - if (_creature && (_creature->IsPet() || _creature->IsGuardian())) - _creature->AddCreatureSpellCooldown(m_spellInfo->Id); - - return; - } - - // mana/health/etc potions, disabled by client (until combat out as declarate) - if (m_CastItem && (m_CastItem->IsPotion() || m_spellInfo->IsCooldownStartedOnEvent())) - { - // need in some way provided data for Spell::finish SendCooldownEvent - _player->SetLastPotionId(m_CastItem->GetEntry()); - return; - } - - // have infinity cooldown but set at aura apply // do not set cooldown for triggered spells (needed by reincarnation) - if (m_spellInfo->IsCooldownStartedOnEvent() || m_spellInfo->IsPassive() || (_triggeredCastFlags & TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD)) - return; - - _player->AddSpellAndCategoryCooldowns(m_spellInfo, m_CastItem ? m_CastItem->GetEntry() : 0, this); + m_caster->GetSpellHistory()->HandleCooldowns(m_spellInfo, m_CastItem, this); } void Spell::update(uint32 difftime) @@ -3592,7 +3567,7 @@ void Spell::finish(bool ok) break; } } - if (!found && !(m_spellInfo->AttributesEx2 & SPELL_ATTR2_NOT_RESET_AUTO_ACTIONS)) + if (!found && !m_spellInfo->HasAttribute(SPELL_ATTR2_NOT_RESET_AUTO_ACTIONS)) { m_caster->resetAttackTimer(BASE_ATTACK); if (m_caster->haveOffhandWeapon()) @@ -3618,7 +3593,7 @@ void Spell::finish(bool ok) } // Stop Attack for some spells - if (m_spellInfo->Attributes & SPELL_ATTR0_STOP_ATTACK_TARGET) + if (m_spellInfo->HasAttribute(SPELL_ATTR0_STOP_ATTACK_TARGET)) m_caster->AttackStop(); } @@ -3783,7 +3758,7 @@ void Spell::SendSpellStart() if ((IsTriggered() && !m_spellInfo->IsAutoRepeatRangedSpell()) || m_triggeredByAuraSpell) castFlags |= CAST_FLAG_PENDING; - if (m_spellInfo->Attributes & SPELL_ATTR0_REQ_AMMO) + if (m_spellInfo->HasAttribute(SPELL_ATTR0_REQ_AMMO)) castFlags |= CAST_FLAG_AMMO; if ((m_caster->GetTypeId() == TYPEID_PLAYER || (m_caster->GetTypeId() == TYPEID_UNIT && m_caster->ToCreature()->IsPet())) @@ -3836,7 +3811,7 @@ void Spell::SendSpellGo() if ((IsTriggered() && !m_spellInfo->IsAutoRepeatRangedSpell()) || m_triggeredByAuraSpell) castFlags |= CAST_FLAG_PENDING; - if (m_spellInfo->Attributes & SPELL_ATTR0_REQ_AMMO) + if (m_spellInfo->HasAttribute(SPELL_ATTR0_REQ_AMMO)) castFlags |= CAST_FLAG_AMMO; // arrows/bullets visual if ((m_caster->GetTypeId() == TYPEID_PLAYER || @@ -4230,7 +4205,7 @@ void Spell::SendResurrectRequest(Player* target) data << uint8(m_caster->GetTypeId() == TYPEID_PLAYER ? 0 : 1); // "you'll be afflicted with resurrection sickness" // override delay sent with SMSG_CORPSE_RECLAIM_DELAY, set instant resurrection for spells with this attribute - if (m_spellInfo->AttributesEx3 & SPELL_ATTR3_IGNORE_RESURRECTION_TIMER) + if (m_spellInfo->HasAttribute(SPELL_ATTR3_IGNORE_RESURRECTION_TIMER)) data << uint32(0); target->GetSession()->SendPacket(&data); } @@ -4561,8 +4536,8 @@ void Spell::HandleThreatSpells() if (m_UniqueTargetInfo.empty()) return; - if ((m_spellInfo->AttributesEx & SPELL_ATTR1_NO_THREAT) || - (m_spellInfo->AttributesEx3 & SPELL_ATTR3_NO_INITIAL_AGGRO)) + if (m_spellInfo->HasAttribute(SPELL_ATTR1_NO_THREAT) || + m_spellInfo->HasAttribute(SPELL_ATTR3_NO_INITIAL_AGGRO)) return; float threat = 0.0f; @@ -4573,7 +4548,7 @@ void Spell::HandleThreatSpells() threat += threatEntry->flatMod; } - else if ((m_spellInfo->AttributesCu & SPELL_ATTR0_CU_NO_INITIAL_THREAT) == 0) + else if (m_spellInfo->HasAttribute(SPELL_ATTR0_CU_NO_INITIAL_THREAT) == 0) threat += m_spellInfo->SpellLevel; // past this point only multiplicative effects occur @@ -4634,30 +4609,33 @@ void Spell::HandleEffects(Unit* pUnitTarget, Item* pItemTarget, GameObject* pGOT SpellCastResult Spell::CheckCast(bool strict) { // check death state - if (!m_caster->IsAlive() && !(m_spellInfo->Attributes & SPELL_ATTR0_PASSIVE) && !((m_spellInfo->Attributes & SPELL_ATTR0_CASTABLE_WHILE_DEAD) || (IsTriggered() && !m_triggeredByAuraSpell))) + if (!m_caster->IsAlive() && !m_spellInfo->HasAttribute(SPELL_ATTR0_PASSIVE) && !(m_spellInfo->HasAttribute(SPELL_ATTR0_CASTABLE_WHILE_DEAD) || (IsTriggered() && !m_triggeredByAuraSpell))) return SPELL_FAILED_CASTER_DEAD; // check cooldowns to prevent cheating - if (m_caster->GetTypeId() == TYPEID_PLAYER && !(m_spellInfo->Attributes & SPELL_ATTR0_PASSIVE)) + if (!m_spellInfo->IsPassive()) { - //can cast triggered (by aura only?) spells while have this flag - if (!(_triggeredCastFlags & TRIGGERED_IGNORE_CASTER_AURASTATE) && m_caster->ToPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_ALLOW_ONLY_ABILITY)) - return SPELL_FAILED_SPELL_IN_PROGRESS; + if (m_caster->GetTypeId() == TYPEID_PLAYER) + { + //can cast triggered (by aura only?) spells while have this flag + if (!(_triggeredCastFlags & TRIGGERED_IGNORE_CASTER_AURASTATE) && m_caster->ToPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_ALLOW_ONLY_ABILITY)) + return SPELL_FAILED_SPELL_IN_PROGRESS; - if (m_caster->ToPlayer()->HasSpellCooldown(m_spellInfo->Id)) + // check if we are using a potion in combat for the 2nd+ time. Cooldown is added only after caster gets out of combat + if (m_caster->ToPlayer()->GetLastPotionId() && m_CastItem && (m_CastItem->IsPotion() || m_spellInfo->IsCooldownStartedOnEvent())) + return SPELL_FAILED_NOT_READY; + } + + if (!m_caster->GetSpellHistory()->IsReady(m_spellInfo)) { if (m_triggeredByAuraSpell) return SPELL_FAILED_DONT_REPORT; else return SPELL_FAILED_NOT_READY; } - - // check if we are using a potion in combat for the 2nd+ time. Cooldown is added only after caster gets out of combat - if (m_caster->ToPlayer()->GetLastPotionId() && m_CastItem && (m_CastItem->IsPotion() || m_spellInfo->IsCooldownStartedOnEvent())) - return SPELL_FAILED_NOT_READY; } - if (m_spellInfo->AttributesEx7 & SPELL_ATTR7_IS_CHEAT_SPELL && !m_caster->HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_ALLOW_CHEAT_SPELLS)) + if (m_spellInfo->HasAttribute(SPELL_ATTR7_IS_CHEAT_SPELL) && !m_caster->HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_ALLOW_CHEAT_SPELLS)) { m_customError = SPELL_CUSTOM_ERROR_GM_ONLY; return SPELL_FAILED_CUSTOM_ERROR; @@ -4675,11 +4653,11 @@ SpellCastResult Spell::CheckCast(bool strict) if (m_caster->GetTypeId() == TYPEID_PLAYER && VMAP::VMapFactory::createOrGetVMapManager()->isLineOfSightCalcEnabled()) { - if (m_spellInfo->Attributes & SPELL_ATTR0_OUTDOORS_ONLY && + if (m_spellInfo->HasAttribute(SPELL_ATTR0_OUTDOORS_ONLY) && !m_caster->GetMap()->IsOutdoors(m_caster->GetPositionX(), m_caster->GetPositionY(), m_caster->GetPositionZ())) return SPELL_FAILED_ONLY_OUTDOORS; - if (m_spellInfo->Attributes & SPELL_ATTR0_INDOORS_ONLY && + if (m_spellInfo->HasAttribute(SPELL_ATTR0_INDOORS_ONLY) && m_caster->GetMap()->IsOutdoors(m_caster->GetPositionX(), m_caster->GetPositionY(), m_caster->GetPositionZ())) return SPELL_FAILED_ONLY_INDOORS; } @@ -4705,7 +4683,7 @@ SpellCastResult Spell::CheckCast(bool strict) if (shapeError != SPELL_CAST_OK) return shapeError; - if ((m_spellInfo->Attributes & SPELL_ATTR0_ONLY_STEALTHED) && !(m_caster->HasStealthAura())) + if (m_spellInfo->HasAttribute(SPELL_ATTR0_ONLY_STEALTHED) && !(m_caster->HasStealthAura())) return SPELL_FAILED_ONLY_STEALTHED; } } @@ -4791,7 +4769,7 @@ SpellCastResult Spell::CheckCast(bool strict) // those spells may have incorrect target entries or not filled at all (for example 15332) // such spells when learned are not targeting anyone using targeting system, they should apply directly to caster instead // also, such casts shouldn't be sent to client - if (!((m_spellInfo->Attributes & SPELL_ATTR0_PASSIVE) && (!m_targets.GetUnitTarget() || m_targets.GetUnitTarget() == m_caster))) + if (!(m_spellInfo->HasAttribute(SPELL_ATTR0_PASSIVE) && (!m_targets.GetUnitTarget() || m_targets.GetUnitTarget() == m_caster))) { // Check explicit target for m_originalCaster - todo: get rid of such workarounds SpellCastResult castResult = m_spellInfo->CheckExplicitTarget(m_originalCaster ? m_originalCaster : m_caster, m_targets.GetObjectTarget(), m_targets.GetItemTarget()); @@ -4808,11 +4786,11 @@ SpellCastResult Spell::CheckCast(bool strict) if (target != m_caster) { // Must be behind the target - if ((m_spellInfo->AttributesCu & SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET) && target->HasInArc(static_cast<float>(M_PI), m_caster)) + if (m_spellInfo->HasAttribute(SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET) && target->HasInArc(static_cast<float>(M_PI), m_caster)) return SPELL_FAILED_NOT_BEHIND; // Target must be facing you - if ((m_spellInfo->AttributesCu & SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER) && !target->HasInArc(static_cast<float>(M_PI), m_caster)) + if (m_spellInfo->HasAttribute(SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER) && !target->HasInArc(static_cast<float>(M_PI), m_caster)) return SPELL_FAILED_NOT_INFRONT; if (m_caster->GetEntry() != WORLD_TRIGGER) // Ignore LOS for gameobjects casts (wrongly cast by a trigger) @@ -4822,7 +4800,7 @@ SpellCastResult Spell::CheckCast(bool strict) if (DynamicObject* dynObj = m_caster->GetDynObject(m_triggeredByAuraSpell->Id)) losTarget = dynObj; - if (!(m_spellInfo->AttributesEx2 & SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS) && !DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_spellInfo->Id, NULL, SPELL_DISABLE_LOS) && !target->IsWithinLOSInMap(losTarget)) + if (!m_spellInfo->HasAttribute(SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS) && !DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_spellInfo->Id, NULL, SPELL_DISABLE_LOS) && !target->IsWithinLOSInMap(losTarget)) return SPELL_FAILED_LINE_OF_SIGHT; } } @@ -4834,7 +4812,7 @@ SpellCastResult Spell::CheckCast(bool strict) float x, y, z; m_targets.GetDstPos()->GetPosition(x, y, z); - if (!(m_spellInfo->AttributesEx2 & SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS) && !DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_spellInfo->Id, NULL, SPELL_DISABLE_LOS) && !m_caster->IsWithinLOS(x, y, z)) + if (!m_spellInfo->HasAttribute(SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS) && !DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_spellInfo->Id, NULL, SPELL_DISABLE_LOS) && !m_caster->IsWithinLOS(x, y, z)) return SPELL_FAILED_LINE_OF_SIGHT; } @@ -4855,15 +4833,15 @@ SpellCastResult Spell::CheckCast(bool strict) } // Spell cast only in battleground - if ((m_spellInfo->AttributesEx3 & SPELL_ATTR3_BATTLEGROUND) && m_caster->GetTypeId() == TYPEID_PLAYER) + if (m_spellInfo->HasAttribute(SPELL_ATTR3_BATTLEGROUND) && m_caster->GetTypeId() == TYPEID_PLAYER) if (!m_caster->ToPlayer()->InBattleground()) return SPELL_FAILED_ONLY_BATTLEGROUNDS; // do not allow spells to be cast in arenas // - with greater than 10 min CD without SPELL_ATTR4_USABLE_IN_ARENA flag // - with SPELL_ATTR4_NOT_USABLE_IN_ARENA flag - if ((m_spellInfo->AttributesEx4 & SPELL_ATTR4_NOT_USABLE_IN_ARENA) || - (m_spellInfo->GetRecoveryTime() > 10 * MINUTE * IN_MILLISECONDS && !(m_spellInfo->AttributesEx4 & SPELL_ATTR4_USABLE_IN_ARENA))) + if (m_spellInfo->HasAttribute(SPELL_ATTR4_NOT_USABLE_IN_ARENA) || + (m_spellInfo->GetRecoveryTime() > 10 * MINUTE * IN_MILLISECONDS && !m_spellInfo->HasAttribute(SPELL_ATTR4_USABLE_IN_ARENA))) if (MapEntry const* mapEntry = sMapStore.LookupEntry(m_caster->GetMapId())) if (mapEntry->IsBattleArena()) return SPELL_FAILED_NOT_IN_ARENA; @@ -4881,7 +4859,7 @@ SpellCastResult Spell::CheckCast(bool strict) // not let players cast spells at mount (and let do it to creatures) if (m_caster->IsMounted() && m_caster->GetTypeId() == TYPEID_PLAYER && !(_triggeredCastFlags & TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE) && - !m_spellInfo->IsPassive() && !(m_spellInfo->Attributes & SPELL_ATTR0_CASTABLE_WHILE_MOUNTED)) + !m_spellInfo->IsPassive() && !m_spellInfo->HasAttribute(SPELL_ATTR0_CASTABLE_WHILE_MOUNTED)) { if (m_caster->IsInFlight()) return SPELL_FAILED_NOT_ON_TAXI; @@ -4938,7 +4916,7 @@ SpellCastResult Spell::CheckCast(bool strict) for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) if (m_spellInfo->Effects[i].Effect == SPELL_EFFECT_DISPEL) { - if (m_spellInfo->Effects[i].IsTargetingArea() || m_spellInfo->AttributesEx & SPELL_ATTR1_MELEE_COMBAT_START) + if (m_spellInfo->Effects[i].IsTargetingArea() || m_spellInfo->HasAttribute(SPELL_ATTR1_MELEE_COMBAT_START)) { hasDispellableAura = true; break; @@ -5507,13 +5485,13 @@ SpellCastResult Spell::CheckPetCast(Unit* target) } // cooldown - if (Creature const* creatureCaster = m_caster->ToCreature()) - if (creatureCaster->HasSpellCooldown(m_spellInfo->Id)) + if (Creature* creatureCaster = m_caster->ToCreature()) + if (!creatureCaster->GetSpellHistory()->IsReady(m_spellInfo)) return SPELL_FAILED_NOT_READY; // Check if spell is affected by GCD if (m_spellInfo->StartRecoveryCategory > 0) - if (m_caster->GetCharmInfo() && m_caster->GetCharmInfo()->GetGlobalCooldownMgr().HasGlobalCooldown(m_spellInfo)) + if (m_caster->GetCharmInfo() && m_caster->GetSpellHistory()->HasGlobalCooldown(m_spellInfo)) return SPELL_FAILED_NOT_READY; return CheckCast(true); @@ -5522,7 +5500,7 @@ SpellCastResult Spell::CheckPetCast(Unit* target) SpellCastResult Spell::CheckCasterAuras() const { // spells totally immuned to caster auras (wsg flag drop, give marks etc) - if (m_spellInfo->AttributesEx6 & SPELL_ATTR6_IGNORE_CASTER_AURAS) + if (m_spellInfo->HasAttribute(SPELL_ATTR6_IGNORE_CASTER_AURAS)) return SPELL_CAST_OK; uint8 school_immune = 0; @@ -5531,7 +5509,7 @@ SpellCastResult Spell::CheckCasterAuras() const // Check if the spell grants school or mechanic immunity. // We use bitmasks so the loop is done only once and not on every aura check below. - if (m_spellInfo->AttributesEx & SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY) + if (m_spellInfo->HasAttribute(SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY)) { for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) { @@ -5547,7 +5525,7 @@ SpellCastResult Spell::CheckCasterAuras() const mechanic_immune = IMMUNE_TO_MOVEMENT_IMPAIRMENT_AND_LOSS_CONTROL_MASK; } - bool usableInStun = (m_spellInfo->AttributesEx5 & SPELL_ATTR5_USABLE_WHILE_STUNNED) != 0; + bool usableInStun = m_spellInfo->HasAttribute(SPELL_ATTR5_USABLE_WHILE_STUNNED); // Glyph of Pain Suppression // there is no other way to handle it @@ -5579,9 +5557,9 @@ SpellCastResult Spell::CheckCasterAuras() const else prevented_reason = SPELL_FAILED_STUNNED; } - else if (unitflag & UNIT_FLAG_CONFUSED && !(m_spellInfo->AttributesEx5 & SPELL_ATTR5_USABLE_WHILE_CONFUSED)) + else if (unitflag & UNIT_FLAG_CONFUSED && !m_spellInfo->HasAttribute(SPELL_ATTR5_USABLE_WHILE_CONFUSED)) prevented_reason = SPELL_FAILED_CONFUSED; - else if (unitflag & UNIT_FLAG_FLEEING && !(m_spellInfo->AttributesEx5 & SPELL_ATTR5_USABLE_WHILE_FEARED)) + else if (unitflag & UNIT_FLAG_FLEEING && !m_spellInfo->HasAttribute(SPELL_ATTR5_USABLE_WHILE_FEARED)) prevented_reason = SPELL_FAILED_FLEEING; else if (unitflag & UNIT_FLAG_SILENCED && m_spellInfo->PreventionType == SPELL_PREVENTION_TYPE_SILENCE) prevented_reason = SPELL_FAILED_SILENCED; @@ -5601,7 +5579,7 @@ SpellCastResult Spell::CheckCasterAuras() const SpellInfo const* auraInfo = aura->GetSpellInfo(); if (auraInfo->GetAllEffectsMechanicMask() & mechanic_immune) continue; - if (auraInfo->GetSchoolMask() & school_immune && !(auraInfo->AttributesEx & SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE)) + if (auraInfo->GetSchoolMask() & school_immune && !auraInfo->HasAttribute(SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE)) continue; if (auraInfo->GetDispelMask() & dispel_immune) continue; @@ -5619,11 +5597,11 @@ SpellCastResult Spell::CheckCasterAuras() const return SPELL_FAILED_STUNNED; break; case SPELL_AURA_MOD_CONFUSE: - if (!(m_spellInfo->AttributesEx5 & SPELL_ATTR5_USABLE_WHILE_CONFUSED)) + if (!m_spellInfo->HasAttribute(SPELL_ATTR5_USABLE_WHILE_CONFUSED)) return SPELL_FAILED_CONFUSED; break; case SPELL_AURA_MOD_FEAR: - if (!(m_spellInfo->AttributesEx5 & SPELL_ATTR5_USABLE_WHILE_FEARED)) + if (!m_spellInfo->HasAttribute(SPELL_ATTR5_USABLE_WHILE_FEARED)) return SPELL_FAILED_FLEEING; break; case SPELL_AURA_MOD_SILENCE: @@ -5804,7 +5782,7 @@ SpellCastResult Spell::CheckItems() if (!proto) return SPELL_FAILED_ITEM_NOT_READY; - for (uint8 i = 0; i < MAX_ITEM_SPELLS; ++i) + for (uint8 i = 0; i < MAX_ITEM_PROTO_SPELLS; ++i) if (proto->Spells[i].SpellCharges) if (m_CastItem->GetSpellCharges(i) == 0) return SPELL_FAILED_NO_CHARGES_REMAIN; @@ -6260,7 +6238,7 @@ SpellCastResult Spell::CheckItems() if (!(_triggeredCastFlags & TRIGGERED_IGNORE_EQUIPPED_ITEM_REQUIREMENT) && m_spellInfo->EquippedItemClass >=0) { // main hand weapon required - if (m_spellInfo->AttributesEx3 & SPELL_ATTR3_MAIN_HAND) + if (m_spellInfo->HasAttribute(SPELL_ATTR3_MAIN_HAND)) { Item* item = m_caster->ToPlayer()->GetWeaponForAttack(BASE_ATTACK); @@ -6274,7 +6252,7 @@ SpellCastResult Spell::CheckItems() } // offhand hand weapon required - if (m_spellInfo->AttributesEx3 & SPELL_ATTR3_REQ_OFFHAND) + if (m_spellInfo->HasAttribute(SPELL_ATTR3_REQ_OFFHAND)) { Item* item = m_caster->ToPlayer()->GetWeaponForAttack(OFF_ATTACK); @@ -6324,7 +6302,7 @@ void Spell::Delayed() // only called in DealDamage() else m_timer += delaytime; - TC_LOG_INFO("spells", "Spell %u partially interrupted for (%d) ms at damage", m_spellInfo->Id, delaytime); + TC_LOG_DEBUG("spells", "Spell %u partially interrupted for (%d) ms at damage", m_spellInfo->Id, delaytime); WorldPacket data(SMSG_SPELL_DELAYED, 8+4); data << m_caster->GetPackGUID(); @@ -6463,11 +6441,11 @@ bool Spell::CheckEffectTarget(Unit const* target, uint32 eff, Position const* lo } // check for ignore LOS on the effect itself - if (m_spellInfo->AttributesEx2 & SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS || DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_spellInfo->Id, NULL, SPELL_DISABLE_LOS)) + if (m_spellInfo->HasAttribute(SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS) || DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_spellInfo->Id, NULL, SPELL_DISABLE_LOS)) return true; // if spell is triggered, need to check for LOS disable on the aura triggering it and inherit that behaviour - if (IsTriggered() && m_triggeredByAuraSpell && (m_triggeredByAuraSpell->AttributesEx2 & SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS || DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_triggeredByAuraSpell->Id, NULL, SPELL_DISABLE_LOS))) + if (IsTriggered() && m_triggeredByAuraSpell && (m_triggeredByAuraSpell->HasAttribute(SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS) || DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_triggeredByAuraSpell->Id, NULL, SPELL_DISABLE_LOS))) return true; /// @todo shit below shouldn't be here, but it's temporary @@ -6518,7 +6496,7 @@ bool Spell::CheckEffectTarget(Unit const* target, uint32 eff, Position const* lo bool Spell::IsNextMeleeSwingSpell() const { - return (m_spellInfo->Attributes & SPELL_ATTR0_ON_NEXT_SWING) != 0; + return m_spellInfo->HasAttribute(SPELL_ATTR0_ON_NEXT_SWING); } bool Spell::IsAutoActionResetSpell() const @@ -6697,7 +6675,7 @@ void Spell::HandleLaunchPhase() if (m_applyMultiplierMask & (1 << i)) multiplier[i] = m_spellInfo->Effects[i].CalcDamageMultiplier(m_originalCaster, this); - bool usesAmmo = (m_spellInfo->AttributesCu & SPELL_ATTR0_CU_DIRECT_DAMAGE) != 0; + bool usesAmmo = m_spellInfo->HasAttribute(SPELL_ATTR0_CU_DIRECT_DAMAGE); Unit::AuraEffectList const& Auras = m_caster->GetAuraEffectsByType(SPELL_AURA_ABILITY_CONSUME_NO_AMMO); for (Unit::AuraEffectList::const_iterator j = Auras.begin(); j != Auras.end(); ++j) { @@ -7140,7 +7118,7 @@ void Spell::CallScriptDestinationTargetSelectHandlers(SpellDestination& target, bool Spell::CheckScriptEffectImplicitTargets(uint32 effIndex, uint32 effIndexToCheck) { // Skip if there are not any script - if (!m_loadedScripts.size()) + if (m_loadedScripts.empty()) return true; for (std::list<SpellScript*>::iterator itr = m_loadedScripts.begin(); itr != m_loadedScripts.end(); ++itr) @@ -7162,7 +7140,7 @@ bool Spell::CheckScriptEffectImplicitTargets(uint32 effIndex, uint32 effIndexToC bool Spell::CanExecuteTriggersOnHit(uint8 effMask, SpellInfo const* triggeredByAura) const { - bool only_on_caster = (triggeredByAura && (triggeredByAura->AttributesEx4 & SPELL_ATTR4_PROC_ONLY_ON_CASTER)); + bool only_on_caster = (triggeredByAura && triggeredByAura->HasAttribute(SPELL_ATTR4_PROC_ONLY_ON_CASTER)); // If triggeredByAura has SPELL_ATTR4_PROC_ONLY_ON_CASTER then it can only proc on a cast spell with TARGET_UNIT_CASTER for (uint8 i = 0;i < MAX_SPELL_EFFECTS; ++i) { @@ -7233,13 +7211,11 @@ enum GCDLimits bool Spell::HasGlobalCooldown() const { - // Only player or controlled units have global cooldown - if (m_caster->GetCharmInfo()) - return m_caster->GetCharmInfo()->GetGlobalCooldownMgr().HasGlobalCooldown(m_spellInfo); - else if (m_caster->GetTypeId() == TYPEID_PLAYER) - return m_caster->ToPlayer()->GetGlobalCooldownMgr().HasGlobalCooldown(m_spellInfo); - else + // Only players or controlled units have global cooldown + if (m_caster->GetTypeId() != TYPEID_PLAYER && !m_caster->GetCharmInfo()) return false; + + return m_caster->GetSpellHistory()->HasGlobalCooldown(m_spellInfo); } void Spell::TriggerGlobalCooldown() @@ -7248,6 +7224,10 @@ void Spell::TriggerGlobalCooldown() if (!gcd) return; + // Only players or controlled units have global cooldown + if (m_caster->GetTypeId() != TYPEID_PLAYER && !m_caster->GetCharmInfo()) + return; + if (m_caster->GetTypeId() == TYPEID_PLAYER) if (m_caster->ToPlayer()->GetCommandStatus(CHEAT_COOLDOWN)) return; @@ -7269,11 +7249,7 @@ void Spell::TriggerGlobalCooldown() gcd = MAX_GCD; } - // Only players or controlled units have global cooldown - if (m_caster->GetCharmInfo()) - m_caster->GetCharmInfo()->GetGlobalCooldownMgr().AddGlobalCooldown(m_spellInfo, gcd); - else if (m_caster->GetTypeId() == TYPEID_PLAYER) - m_caster->ToPlayer()->GetGlobalCooldownMgr().AddGlobalCooldown(m_spellInfo, gcd); + m_caster->GetSpellHistory()->AddGlobalCooldown(m_spellInfo, gcd); } void Spell::CancelGlobalCooldown() @@ -7286,10 +7262,10 @@ void Spell::CancelGlobalCooldown() return; // Only players or controlled units have global cooldown - if (m_caster->GetCharmInfo()) - m_caster->GetCharmInfo()->GetGlobalCooldownMgr().CancelGlobalCooldown(m_spellInfo); - else if (m_caster->GetTypeId() == TYPEID_PLAYER) - m_caster->ToPlayer()->GetGlobalCooldownMgr().CancelGlobalCooldown(m_spellInfo); + if (m_caster->GetTypeId() != TYPEID_PLAYER && !m_caster->GetCharmInfo()) + return; + + m_caster->GetSpellHistory()->CancelGlobalCooldown(m_spellInfo); } namespace Trinity @@ -7401,14 +7377,14 @@ WorldObjectSpellConeTargetCheck::WorldObjectSpellConeTargetCheck(float coneAngle bool WorldObjectSpellConeTargetCheck::operator()(WorldObject* target) { - if (_spellInfo->AttributesCu & SPELL_ATTR0_CU_CONE_BACK) + if (_spellInfo->HasAttribute(SPELL_ATTR0_CU_CONE_BACK)) { if (!_caster->isInBack(target, _coneAngle)) return false; } - else if (_spellInfo->AttributesCu & SPELL_ATTR0_CU_CONE_LINE) + else if (_spellInfo->HasAttribute(SPELL_ATTR0_CU_CONE_LINE)) { - if (!_caster->HasInLine(target, _caster->GetObjectSize())) + if (!_caster->HasInLine(target, _caster->GetObjectSize() + target->GetObjectSize())) return false; } else @@ -7425,7 +7401,7 @@ WorldObjectSpellTrajTargetCheck::WorldObjectSpellTrajTargetCheck(float range, Po bool WorldObjectSpellTrajTargetCheck::operator()(WorldObject* target) { // return all targets on missile trajectory (0 - size of a missile) - if (!_caster->HasInLine(target, 0)) + if (!_caster->HasInLine(target, target->GetObjectSize())) return false; return WorldObjectSpellAreaTargetCheck::operator ()(target); } diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index 2ae2930aeb0..1aac88ac602 100644 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -473,6 +473,7 @@ class Spell void ReSetTimer() { m_timer = m_casttime > 0 ? m_casttime : 0; } bool IsNextMeleeSwingSpell() const; bool IsTriggered() const { return (_triggeredCastFlags & TRIGGERED_FULL_MASK) != 0; } + bool IsIgnoringCooldowns() const { return (_triggeredCastFlags & TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD) != 0; } bool IsChannelActive() const { return m_caster->GetUInt32Value(UNIT_CHANNEL_SPELL) != 0; } bool IsAutoActionResetSpell() const; diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index d2f2951aac1..3829e12b790 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -32,10 +32,6 @@ #include "DynamicObject.h" #include "SpellAuras.h" #include "SpellAuraEffects.h" -#include "Group.h" -#include "UpdateData.h" -#include "MapManager.h" -#include "ObjectAccessor.h" #include "SharedDefines.h" #include "Pet.h" #include "GameObject.h" @@ -43,21 +39,16 @@ #include "Creature.h" #include "Totem.h" #include "CreatureAI.h" -#include "BattlegroundMgr.h" #include "Battleground.h" #include "OutdoorPvPMgr.h" #include "Language.h" #include "SocialMgr.h" #include "Util.h" -#include "VMapFactory.h" #include "TemporarySummon.h" -#include "CellImpl.h" #include "GridNotifiers.h" -#include "GridNotifiersImpl.h" -#include "SkillDiscovery.h" #include "Formulas.h" -#include "Vehicle.h" #include "ScriptMgr.h" +#include "SpellHistory.h" #include "GameObjectAI.h" #include "AccountMgr.h" #include "InstanceScript.h" @@ -324,7 +315,7 @@ void Spell::EffectSchoolDMG(SpellEffIndex effIndex) case SPELLFAMILY_GENERIC: { // Meteor like spells (divided damage to targets) - if (m_spellInfo->AttributesCu & SPELL_ATTR0_CU_SHARE_DAMAGE) + if (m_spellInfo->HasAttribute(SPELL_ATTR0_CU_SHARE_DAMAGE)) { uint32 count = 0; for (std::list<TargetInfo>::iterator ihit= m_UniqueTargetInfo.begin(); ihit != m_UniqueTargetInfo.end(); ++ihit) @@ -779,8 +770,8 @@ void Spell::EffectTriggerSpell(SpellEffIndex effIndex) return; // Reset cooldown on stealth if needed - if (unitTarget->ToPlayer()->HasSpellCooldown(1784)) - unitTarget->ToPlayer()->RemoveSpellCooldown(1784); + if (unitTarget->GetSpellHistory()->HasCooldown(1784)) + unitTarget->GetSpellHistory()->ResetCooldown(1784); unitTarget->CastSpell(unitTarget, 1784, true); return; @@ -889,7 +880,7 @@ void Spell::EffectTriggerSpell(SpellEffIndex effIndex) // Remove spell cooldown (not category) if spell triggering spell with cooldown and same category if (m_caster->GetTypeId() == TYPEID_PLAYER && m_spellInfo->CategoryRecoveryTime && spellInfo->CategoryRecoveryTime && m_spellInfo->GetCategory() == spellInfo->GetCategory()) - m_caster->ToPlayer()->RemoveSpellCooldown(spellInfo->Id); + m_caster->GetSpellHistory()->ResetCooldown(spellInfo->Id); // original caster guid only for GO cast m_caster->CastSpell(targets, spellInfo, &values, TRIGGERED_FULL_MASK, NULL, NULL, m_originalCasterGUID); @@ -942,7 +933,7 @@ void Spell::EffectTriggerMissileSpell(SpellEffIndex effIndex) // Remove spell cooldown (not category) if spell triggering spell with cooldown and same category if (m_caster->GetTypeId() == TYPEID_PLAYER && m_spellInfo->CategoryRecoveryTime && spellInfo->CategoryRecoveryTime && m_spellInfo->GetCategory() == spellInfo->GetCategory()) - m_caster->ToPlayer()->RemoveSpellCooldown(spellInfo->Id); + m_caster->GetSpellHistory()->ResetCooldown(spellInfo->Id); // original caster guid only for GO cast m_caster->CastSpell(targets, spellInfo, &values, TRIGGERED_FULL_MASK, NULL, NULL, m_originalCasterGUID); @@ -1755,7 +1746,7 @@ void Spell::EffectEnergize(SpellEffIndex effIndex) Powers power = Powers(m_spellInfo->Effects[effIndex].MiscValue); - if (unitTarget->GetTypeId() == TYPEID_PLAYER && unitTarget->getPowerType() != power && !(m_spellInfo->AttributesEx7 & SPELL_ATTR7_CAN_RESTORE_SECONDARY_POWER)) + if (unitTarget->GetTypeId() == TYPEID_PLAYER && unitTarget->getPowerType() != power && !m_spellInfo->HasAttribute(SPELL_ATTR7_CAN_RESTORE_SECONDARY_POWER)) return; if (unitTarget->GetMaxPower(power) == 0) @@ -1870,7 +1861,7 @@ void Spell::EffectEnergizePct(SpellEffIndex effIndex) Powers power = Powers(m_spellInfo->Effects[effIndex].MiscValue); - if (unitTarget->GetTypeId() == TYPEID_PLAYER && unitTarget->getPowerType() != power && !(m_spellInfo->AttributesEx7 & SPELL_ATTR7_CAN_RESTORE_SECONDARY_POWER)) + if (unitTarget->GetTypeId() == TYPEID_PLAYER && unitTarget->getPowerType() != power && !m_spellInfo->HasAttribute(SPELL_ATTR7_CAN_RESTORE_SECONDARY_POWER)) return; uint32 maxPower = unitTarget->GetMaxPower(power); @@ -3482,7 +3473,7 @@ void Spell::EffectInterruptCast(SpellEffIndex effIndex) if (m_originalCaster) { int32 duration = m_spellInfo->GetDuration(); - unitTarget->ProhibitSpellSchool(curSpellInfo->GetSchoolMask(), unitTarget->ModSpellDuration(m_spellInfo, unitTarget, duration, false, 1 << effIndex)); + unitTarget->GetSpellHistory()->LockSpellSchool(curSpellInfo->GetSchoolMask(), unitTarget->ModSpellDuration(m_spellInfo, unitTarget, duration, false, 1 << effIndex)); } ExecuteLogEffectInterruptCast(effIndex, unitTarget, curSpellInfo->Id); unitTarget->InterruptSpell(CurrentSpellTypes(i), false); @@ -4226,7 +4217,7 @@ void Spell::EffectStuck(SpellEffIndex /*effIndex*/) return; TC_LOG_DEBUG("spells", "Spell Effect: Stuck"); - TC_LOG_INFO("spells", "Player %s (guid %u) used auto-unstuck future at map %u (%f, %f, %f)", player->GetName().c_str(), player->GetGUIDLow(), player->GetMapId(), player->GetPositionX(), player->GetPositionY(), player->GetPositionZ()); + TC_LOG_DEBUG("spells", "Player %s (guid %u) used auto-unstuck future at map %u (%f, %f, %f)", player->GetName().c_str(), player->GetGUIDLow(), player->GetMapId(), player->GetPositionX(), player->GetPositionY(), player->GetPositionZ()); if (player->IsInFlight()) return; @@ -5344,13 +5335,13 @@ void Spell::EffectStealBeneficialBuff(SpellEffIndex effIndex) if ((aura->GetSpellInfo()->GetDispelMask()) & dispelMask) { // Need check for passive? this - if (!aurApp->IsPositive() || aura->IsPassive() || aura->GetSpellInfo()->AttributesEx4 & SPELL_ATTR4_NOT_STEALABLE) + if (!aurApp->IsPositive() || aura->IsPassive() || aura->GetSpellInfo()->HasAttribute(SPELL_ATTR4_NOT_STEALABLE)) continue; // The charges / stack amounts don't count towards the total number of auras that can be dispelled. // Ie: A dispel on a target with 5 stacks of Winters Chill and a Polymorph has 1 / (1 + 1) -> 50% chance to dispell // Polymorph instead of 1 / (5 + 1) -> 16%. - bool dispel_charges = (aura->GetSpellInfo()->AttributesEx7 & SPELL_ATTR7_DISPEL_CHARGES) != 0; + bool dispel_charges = aura->GetSpellInfo()->HasAttribute(SPELL_ATTR7_DISPEL_CHARGES); uint8 charges = dispel_charges ? aura->GetCharges() : aura->GetStackAmount(); if (charges > 0) steal_list.push_back(std::make_pair(aura, charges)); @@ -5849,10 +5840,10 @@ void Spell::EffectCastButtons(SpellEffIndex effIndex) if (!spellInfo) continue; - if (!p_caster->HasSpell(spell_id) || p_caster->HasSpellCooldown(spell_id)) + if (!p_caster->HasSpell(spell_id) || p_caster->GetSpellHistory()->HasCooldown(spell_id)) continue; - if (!(spellInfo->AttributesEx7 & SPELL_ATTR7_SUMMON_PLAYER_TOTEM)) + if (!spellInfo->HasAttribute(SPELL_ATTR7_SUMMON_PLAYER_TOTEM)) continue; uint32 cost = spellInfo->CalcPowerCost(m_caster, spellInfo->GetSchoolMask()); diff --git a/src/server/game/Spells/SpellHistory.cpp b/src/server/game/Spells/SpellHistory.cpp new file mode 100644 index 00000000000..09e3be690b1 --- /dev/null +++ b/src/server/game/Spells/SpellHistory.cpp @@ -0,0 +1,643 @@ +/* + * Copyright (C) 2008-2015 TrinityCore <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 (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, see <http://www.gnu.org/licenses/>. + */ + +#include "WorldPacket.h" +#include "SpellHistory.h" +#include "Pet.h" +#include "Player.h" +#include "SpellInfo.h" +#include "Spell.h" +#include "World.h" +#include "Opcodes.h" + +SpellHistory::Clock::duration const SpellHistory::InfinityCooldownDelay = std::chrono::duration_cast<SpellHistory::Clock::duration>(std::chrono::seconds(MONTH)); +SpellHistory::Clock::duration const SpellHistory::InfinityCooldownDelayCheck = std::chrono::duration_cast<SpellHistory::Clock::duration>(std::chrono::seconds(MONTH / 2)); + +template<> +struct SpellHistory::PersistenceHelper<Player> +{ + static CharacterDatabaseStatements const CooldownsDeleteStatement = CHAR_DEL_CHAR_SPELL_COOLDOWNS; + static CharacterDatabaseStatements const CooldownsInsertStatement = CHAR_INS_CHAR_SPELL_COOLDOWN; + + static void SetIdentifier(PreparedStatement* stmt, uint8 index, Unit* owner) { stmt->setUInt32(index, owner->GetGUID().GetCounter()); } + + static bool ReadCooldown(Field* fields, uint32* spellId, CooldownEntry* cooldownEntry) + { + *spellId = fields[0].GetUInt32(); + if (!sSpellMgr->GetSpellInfo(*spellId)) + return false; + + cooldownEntry->CooldownEnd = Clock::from_time_t(time_t(fields[2].GetUInt32())); + cooldownEntry->ItemId = fields[1].GetUInt32(); + return true; + } + + static void WriteCooldown(PreparedStatement* stmt, uint8& index, CooldownStorageType::value_type const& cooldown) + { + stmt->setUInt32(index++, cooldown.first); + stmt->setUInt32(index++, cooldown.second.ItemId); + stmt->setUInt32(index++, uint32(Clock::to_time_t(cooldown.second.CooldownEnd))); + } +}; + +template<> +struct SpellHistory::PersistenceHelper<Pet> +{ + static CharacterDatabaseStatements const CooldownsDeleteStatement = CHAR_DEL_PET_SPELL_COOLDOWNS; + static CharacterDatabaseStatements const CooldownsInsertStatement = CHAR_INS_PET_SPELL_COOLDOWN; + + static void SetIdentifier(PreparedStatement* stmt, uint8 index, Unit* owner) { stmt->setUInt32(index, owner->GetCharmInfo()->GetPetNumber()); } + + static bool ReadCooldown(Field* fields, uint32* spellId, CooldownEntry* cooldownEntry) + { + *spellId = fields[0].GetUInt32(); + if (!sSpellMgr->GetSpellInfo(*spellId)) + return false; + + cooldownEntry->CooldownEnd = Clock::from_time_t(time_t(fields[1].GetUInt32())); + cooldownEntry->ItemId = 0; + return true; + } + + static void WriteCooldown(PreparedStatement* stmt, uint8& index, CooldownStorageType::value_type const& cooldown) + { + stmt->setUInt32(index++, cooldown.first); + stmt->setUInt32(index++, uint32(Clock::to_time_t(cooldown.second.CooldownEnd))); + } +}; + +template<class OwnerType> +void SpellHistory::LoadFromDB(PreparedQueryResult cooldownsResult) +{ + typedef PersistenceHelper<OwnerType> StatementInfo; + + if (cooldownsResult) + { + do + { + uint32 spellId; + CooldownEntry cooldown; + if (StatementInfo::ReadCooldown(cooldownsResult->Fetch(), &spellId, &cooldown)) + _spellCooldowns[spellId] = cooldown; + + } while (cooldownsResult->NextRow()); + } +} + +template<class OwnerType> +void SpellHistory::SaveToDB(SQLTransaction& trans) +{ + typedef PersistenceHelper<OwnerType> StatementInfo; + + uint8 index = 0; + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(StatementInfo::CooldownsDeleteStatement); + StatementInfo::SetIdentifier(stmt, index++, _owner); + trans->Append(stmt); + + for (auto const& p : _spellCooldowns) + { + if (!p.second.OnHold) + { + index = 0; + stmt = CharacterDatabase.GetPreparedStatement(StatementInfo::CooldownsInsertStatement); + StatementInfo::SetIdentifier(stmt, index++, _owner); + StatementInfo::WriteCooldown(stmt, index, p); + trans->Append(stmt); + } + } +} + +void SpellHistory::Update() +{ + SQLTransaction t; + Clock::time_point now = Clock::now(); + for (auto itr = _spellCooldowns.begin(); itr != _spellCooldowns.end();) + { + if (itr->second.CooldownEnd < now) + itr = _spellCooldowns.erase(itr); + else + ++itr; + } +} + +void SpellHistory::HandleCooldowns(SpellInfo const* spellInfo, Item const* item, Spell* spell /*= nullptr*/) +{ + if (Player* player = _owner->ToPlayer()) + { + // potions start cooldown until exiting combat + if (item && (item->IsPotion() || spellInfo->IsCooldownStartedOnEvent())) + { + player->SetLastPotionId(item->GetEntry()); + return; + } + } + + if (spellInfo->IsCooldownStartedOnEvent() || spellInfo->IsPassive() || (spell && spell->IsIgnoringCooldowns())) + return; + + StartCooldown(spellInfo, item ? item->GetEntry() : 0, spell); +} + +bool SpellHistory::IsReady(SpellInfo const* spellInfo) const +{ + if (spellInfo->PreventionType == SPELL_PREVENTION_TYPE_SILENCE) + if (IsSchoolLocked(spellInfo->GetSchoolMask())) + return false; + + if (HasCooldown(spellInfo->Id)) + return false; + + return true; +} + +template<> +void SpellHistory::WritePacket<Pet>(WorldPacket& packet) const +{ + Clock::time_point now = Clock::now(); + + uint8 cooldownsCount = _spellCooldowns.size(); + packet << uint8(cooldownsCount); + + for (auto const& spellCooldown : _spellCooldowns) + { + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellCooldown.first); + if (!spellInfo) + { + packet << uint32(0); + packet << uint16(0); + packet << uint32(0); + packet << uint32(0); + continue; + } + + packet << uint32(spellCooldown.first); // spell ID + packet << uint16(spellInfo->GetCategory()); // spell category + if (!spellCooldown.second.OnHold) + { + uint32 cooldownDuration = spellCooldown.second.CooldownEnd > now ? std::chrono::duration_cast<std::chrono::milliseconds>(spellCooldown.second.CooldownEnd - now).count() : 0; + if (cooldownDuration <= 0) + { + packet << uint32(0); + packet << uint32(0); + continue; + } + + if (spellInfo->GetCategory()) + { + packet << uint32(0); + packet << uint32(cooldownDuration); + } + else + { + packet << uint32(cooldownDuration); + packet << uint32(0); + } + } + } +} + +template<> +void SpellHistory::WritePacket<Player>(WorldPacket& packet) const +{ + Clock::time_point now = Clock::now(); + Clock::time_point infTime = now + InfinityCooldownDelayCheck; + + uint16 cooldownsCount = _spellCooldowns.size(); + size_t dataPos = packet.wpos(); + packet << uint16(cooldownsCount); + + for (auto const& spellCooldown : _spellCooldowns) + { + SpellInfo const* sEntry = sSpellMgr->GetSpellInfo(spellCooldown.first); + if (!sEntry) + { + --cooldownsCount; + continue; + } + + packet << uint32(spellCooldown.first); + + packet << uint16(spellCooldown.second.ItemId); // cast item id + packet << uint16(sEntry->GetCategory()); // spell category + + // send infinity cooldown in special format + if (spellCooldown.second.CooldownEnd >= infTime) + { + packet << uint32(1); // cooldown + packet << uint32(0x80000000); // category cooldown + continue; + } + + uint32 cooldownDuration = spellCooldown.second.CooldownEnd > now ? std::chrono::duration_cast<std::chrono::milliseconds>(spellCooldown.second.CooldownEnd - now).count() : 0; + + if (sEntry->GetCategory()) // may be wrong, but anyway better than nothing... + { + packet << uint32(0); // cooldown + packet << uint32(cooldownDuration); // category cooldown + } + else + { + packet << uint32(cooldownDuration); // cooldown + packet << uint32(0); // category cooldown + } + } + + packet.put<uint16>(dataPos, cooldownsCount); +} + +void SpellHistory::StartCooldown(SpellInfo const* spellInfo, uint32 itemId, Spell* spell /*= nullptr*/, bool onHold /*= false*/) +{ + // init cooldown values + uint32 categoryId = 0; + int32 cooldown = -1; + int32 categoryCooldown = -1; + + // some special item spells without correct cooldown in SpellInfo + // cooldown information stored in item prototype + if (itemId) + { + if (ItemTemplate const* proto = sObjectMgr->GetItemTemplate(itemId)) + { + for (uint8 idx = 0; idx < MAX_ITEM_PROTO_SPELLS; ++idx) + { + if (uint32(proto->Spells[idx].SpellId) == spellInfo->Id) + { + categoryId = proto->Spells[idx].SpellCategory; + cooldown = proto->Spells[idx].SpellCooldown; + categoryCooldown = proto->Spells[idx].SpellCategoryCooldown; + break; + } + } + } + } + + // if no cooldown found above then base at DBC data + if (cooldown < 0 && categoryCooldown < 0) + { + categoryId = spellInfo->GetCategory(); + cooldown = spellInfo->RecoveryTime; + categoryCooldown = spellInfo->CategoryRecoveryTime; + } + + Clock::time_point curTime = Clock::now(); + Clock::time_point catrecTime; + Clock::time_point recTime; + bool needsCooldownPacket = false; + + // overwrite time for selected category + if (onHold) + { + // use +MONTH as infinite cooldown marker + catrecTime = categoryCooldown > 0 ? (curTime + InfinityCooldownDelay) : curTime; + recTime = cooldown > 0 ? (curTime + InfinityCooldownDelay) : catrecTime; + } + else + { + // shoot spells used equipped item cooldown values already assigned in GetAttackTime(RANGED_ATTACK) + // prevent 0 cooldowns set by another way + if (cooldown <= 0 && categoryCooldown <= 0 && (categoryId == 76 || (spellInfo->IsAutoRepeatRangedSpell() && spellInfo->Id != 75))) + cooldown = _owner->GetAttackTime(RANGED_ATTACK); + + // Now we have cooldown data (if found any), time to apply mods + if (Player* modOwner = _owner->GetSpellModOwner()) + { + if (cooldown > 0) + modOwner->ApplySpellMod(spellInfo->Id, SPELLMOD_COOLDOWN, cooldown, spell); + + if (categoryCooldown > 0 && !spellInfo->HasAttribute(SPELL_ATTR6_IGNORE_CATEGORY_COOLDOWN_MODS)) + modOwner->ApplySpellMod(spellInfo->Id, SPELLMOD_COOLDOWN, categoryCooldown, spell); + } + + if (int32 cooldownMod = _owner->GetTotalAuraModifier(SPELL_AURA_MOD_COOLDOWN)) + { + // Apply SPELL_AURA_MOD_COOLDOWN only to own spells + Player* playerOwner = GetPlayerOwner(); + if (!playerOwner || playerOwner->HasSpell(spellInfo->Id)) + { + needsCooldownPacket = true; + cooldown += cooldownMod * IN_MILLISECONDS; // SPELL_AURA_MOD_COOLDOWN does not affect category cooldows, verified with shaman shocks + } + } + + // replace negative cooldowns by 0 + if (cooldown < 0) + cooldown = 0; + + if (categoryCooldown < 0) + categoryCooldown = 0; + + // no cooldown after applying spell mods + if (cooldown == 0 && categoryCooldown == 0) + return; + + catrecTime = categoryCooldown ? curTime + std::chrono::duration_cast<Clock::duration>(std::chrono::milliseconds(categoryCooldown)) : curTime; + recTime = cooldown ? curTime + std::chrono::duration_cast<Clock::duration>(std::chrono::milliseconds(cooldown)) : catrecTime; + } + + // self spell cooldown + if (recTime != curTime) + { + AddCooldown(spellInfo->Id, itemId, recTime, onHold); + + if (needsCooldownPacket) + { + if (Player* playerOwner = GetPlayerOwner()) + { + WorldPacket spellCooldown; + BuildCooldownPacket(spellCooldown, SPELL_COOLDOWN_FLAG_NONE, spellInfo->Id, cooldown); + playerOwner->SendDirectMessage(&spellCooldown); + } + } + } + + // category spells + if (categoryId && catrecTime != curTime) + { + SpellCategoryStore::const_iterator i_scstore = sSpellsByCategoryStore.find(categoryId); + if (i_scstore != sSpellsByCategoryStore.end()) + { + for (SpellCategorySet::const_iterator i_scset = i_scstore->second.begin(); i_scset != i_scstore->second.end(); ++i_scset) + { + if (*i_scset == spellInfo->Id) // skip main spell, already handled above + continue; + + AddCooldown(*i_scset, itemId, catrecTime, onHold); + } + } + } +} + +void SpellHistory::SendCooldownEvent(SpellInfo const* spellInfo, uint32 itemId /*= 0*/, Spell* spell /*= nullptr*/, bool startCooldown /*= true*/) +{ + // start cooldowns at server side, if any + if (startCooldown) + StartCooldown(spellInfo, itemId, spell); + + if (Player* player = GetPlayerOwner()) + { + // Send activate cooldown timer (possible 0) at client side + WorldPacket data(SMSG_COOLDOWN_EVENT, 4 + 8); + data << uint32(spellInfo->Id); + data << uint64(_owner->GetGUID()); + player->SendDirectMessage(&data); + + uint32 category = spellInfo->GetCategory(); + if (category && spellInfo->CategoryRecoveryTime) + { + SpellCategoryStore::const_iterator ct = sSpellsByCategoryStore.find(category); + if (ct != sSpellsByCategoryStore.end()) + { + for (auto const& cooldownPair : _spellCooldowns) + { + uint32 categorySpell = cooldownPair.first; + if (!ct->second.count(categorySpell)) + continue; + + if (categorySpell == spellInfo->Id) // skip main spell, already handled above + continue; + + SpellInfo const* spellInfo2 = sSpellMgr->EnsureSpellInfo(categorySpell); + if (!spellInfo2->IsCooldownStartedOnEvent()) + continue; + + data.Initialize(SMSG_COOLDOWN_EVENT, 4 + 8); + data << uint32(categorySpell); + data << uint64(_owner->GetGUID()); + player->SendDirectMessage(&data); + } + } + } + } +} + +void SpellHistory::AddCooldown(uint32 spellId, uint32 itemId, Clock::time_point cooldownEnd, bool onHold /*= false*/) +{ + CooldownEntry& cooldownEntry = _spellCooldowns[spellId]; + cooldownEntry.CooldownEnd = cooldownEnd; + cooldownEntry.ItemId = itemId; + cooldownEntry.OnHold = onHold; +} + +void SpellHistory::ModifyCooldown(uint32 spellId, int32 cooldownModMs) +{ + auto itr = _spellCooldowns.find(spellId); + if (!cooldownModMs || itr == _spellCooldowns.end()) + return; + + Clock::time_point now = Clock::now(); + Clock::duration offset = std::chrono::duration_cast<Clock::duration>(std::chrono::milliseconds(cooldownModMs)); + if (itr->second.CooldownEnd + offset > now) + itr->second.CooldownEnd += offset; + else + _spellCooldowns.erase(itr); + + if (Player* playerOwner = GetPlayerOwner()) + { + WorldPacket modifyCooldown(SMSG_MODIFY_COOLDOWN, 4 + 8 + 4); + modifyCooldown << uint32(spellId); + modifyCooldown << uint64(_owner->GetGUID()); + modifyCooldown << int32(cooldownModMs); + playerOwner->SendDirectMessage(&modifyCooldown); + } +} + +void SpellHistory::ResetCooldown(uint32 spellId, bool update /*= false*/) +{ + auto itr = _spellCooldowns.find(spellId); + if (itr == _spellCooldowns.end()) + return; + + ResetCooldown(itr, update); +} + +void SpellHistory::ResetCooldown(CooldownStorageType::iterator& itr, bool update /*= false*/) +{ + if (update) + { + if (Player* playerOwner = GetPlayerOwner()) + { + WorldPacket data(SMSG_CLEAR_COOLDOWN, 4 + 8); + data << uint32(itr->first); + data << uint64(_owner->GetGUID()); + playerOwner->SendDirectMessage(&data); + } + } + + itr = _spellCooldowns.erase(itr); +} + +void SpellHistory::ResetAllCooldowns() +{ + if (GetPlayerOwner()) + { + std::vector<int32> cooldowns; + cooldowns.reserve(_spellCooldowns.size()); + for (auto const& p : _spellCooldowns) + cooldowns.push_back(p.first); + + SendClearCooldowns(cooldowns); + } + + _spellCooldowns.clear(); +} + +bool SpellHistory::HasCooldown(uint32 spellId) const +{ + return _spellCooldowns.count(spellId) != 0; +} + +uint32 SpellHistory::GetRemainingCooldown(uint32 spellId) const +{ + auto itr = _spellCooldowns.find(spellId); + if (itr == _spellCooldowns.end()) + return 0; + + Clock::time_point now = Clock::now(); + if (itr->second.CooldownEnd < now) + return 0; + + Clock::duration remaining = itr->second.CooldownEnd - now; + return uint32(std::chrono::duration_cast<std::chrono::milliseconds>(remaining).count()); +} + +void SpellHistory::LockSpellSchool(SpellSchoolMask schoolMask, uint32 lockoutTime) +{ + Clock::time_point lockoutEnd = Clock::now() + std::chrono::duration_cast<Clock::duration>(std::chrono::milliseconds(lockoutTime)); + for (uint32 i = 0; i < MAX_SPELL_SCHOOL; ++i) + if (SpellSchoolMask(1 << i) & schoolMask) + _schoolLockouts[i] = lockoutEnd; + + std::set<uint32> knownSpells; + if (Player* plrOwner = _owner->ToPlayer()) + { + for (auto const& p : plrOwner->GetSpellMap()) + if (p.second->state != PLAYERSPELL_REMOVED) + knownSpells.insert(p.first); + } + else if (Pet* petOwner = _owner->ToPet()) + { + for (auto const& p : petOwner->m_spells) + if (p.second.state != PETSPELL_REMOVED) + knownSpells.insert(p.first); + } + else + { + Creature* creatureOwner = _owner->ToCreature(); + for (uint8 i = 0; i < CREATURE_MAX_SPELLS; ++i) + if (creatureOwner->m_spells[i]) + knownSpells.insert(creatureOwner->m_spells[i]); + } + + PacketCooldowns cooldowns; + WorldPacket spellCooldowns; + for (uint32 spellId : knownSpells) + { + SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(spellId); + if (spellInfo->IsCooldownStartedOnEvent()) + continue; + + if (spellInfo->PreventionType != SPELL_PREVENTION_TYPE_SILENCE) + continue; + + if ((schoolMask & spellInfo->GetSchoolMask()) && GetRemainingCooldown(spellId) < lockoutTime) + { + cooldowns[spellId] = lockoutTime; + AddCooldown(spellId, 0, lockoutEnd); + } + } + + if (Player* player = GetPlayerOwner()) + { + if (!cooldowns.empty()) + { + BuildCooldownPacket(spellCooldowns, SPELL_COOLDOWN_FLAG_NONE, cooldowns); + player->SendDirectMessage(&spellCooldowns); + } + } +} + +bool SpellHistory::IsSchoolLocked(SpellSchoolMask schoolMask) const +{ + Clock::time_point now = Clock::now(); + for (uint32 i = 0; i < MAX_SPELL_SCHOOL; ++i) + if (SpellSchoolMask(1 << i) & schoolMask) + if (_schoolLockouts[i] > now) + return true; + + return false; +} + +bool SpellHistory::HasGlobalCooldown(SpellInfo const* spellInfo) const +{ + auto itr = _globalCooldowns.find(spellInfo->StartRecoveryCategory); + return itr != _globalCooldowns.end() && itr->second > Clock::now(); +} + +void SpellHistory::AddGlobalCooldown(SpellInfo const* spellInfo, uint32 duration) +{ + _globalCooldowns[spellInfo->StartRecoveryCategory] = Clock::now() + std::chrono::duration_cast<Clock::duration>(std::chrono::milliseconds(duration)); +} + +void SpellHistory::CancelGlobalCooldown(SpellInfo const* spellInfo) +{ + _globalCooldowns[spellInfo->StartRecoveryCategory] = Clock::time_point(Clock::duration(0)); +} + +Player* SpellHistory::GetPlayerOwner() const +{ + return _owner->GetCharmerOrOwnerPlayerOrPlayerItself(); +} + +void SpellHistory::SendClearCooldowns(std::vector<int32> const& cooldowns) const +{ + if (Player* playerOwner = GetPlayerOwner()) + { + for (int32 spell : cooldowns) + { + WorldPacket data(SMSG_CLEAR_COOLDOWN, 4 + 8); + data << uint32(spell); + data << uint64(_owner->GetGUID()); + playerOwner->SendDirectMessage(&data); + } + } +} + +void SpellHistory::BuildCooldownPacket(WorldPacket& data, uint8 flags, uint32 spellId, uint32 cooldown) const +{ + data.Initialize(SMSG_SPELL_COOLDOWN, 8 + 1 + 4 + 4); + data << uint64(_owner->GetGUID()); + data << uint8(flags); + data << uint32(spellId); + data << uint32(cooldown); +} + +void SpellHistory::BuildCooldownPacket(WorldPacket& data, uint8 flags, PacketCooldowns const& cooldowns) const +{ + data.Initialize(SMSG_SPELL_COOLDOWN, 8 + 1 + (4 + 4) * cooldowns.size()); + data << uint64(_owner->GetGUID()); + data << uint8(flags); + for (auto const& cooldown : cooldowns) + { + data << cooldown.first; + data << cooldown.second; + } +} + +template void SpellHistory::LoadFromDB<Player>(PreparedQueryResult cooldownsResult); +template void SpellHistory::LoadFromDB<Pet>(PreparedQueryResult cooldownsResult); +template void SpellHistory::SaveToDB<Player>(SQLTransaction& trans); +template void SpellHistory::SaveToDB<Pet>(SQLTransaction& trans); diff --git a/src/server/game/Spells/SpellHistory.h b/src/server/game/Spells/SpellHistory.h new file mode 100644 index 00000000000..f1533d57aef --- /dev/null +++ b/src/server/game/Spells/SpellHistory.h @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2008-2015 TrinityCore <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 (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, see <http://www.gnu.org/licenses/>. + */ + +#ifndef SpellHistory_h__ +#define SpellHistory_h__ + +#include "SharedDefines.h" +#include "QueryResult.h" +#include "Transaction.h" +#include <chrono> +#include <deque> + +class Item; +class Player; +class Spell; +class SpellInfo; +class Unit; +struct SpellCategoryEntry; + +class SpellHistory +{ +public: + typedef std::chrono::system_clock Clock; + + struct CooldownEntry + { + CooldownEntry() : ItemId(0), OnHold(false) { } + CooldownEntry(Clock::time_point endTime, uint32 itemId) : CooldownEnd(endTime), ItemId(itemId), OnHold(false) { } + + Clock::time_point CooldownEnd; + uint32 ItemId; + bool OnHold; + }; + + typedef std::unordered_map<uint32 /*spellId*/, CooldownEntry> CooldownStorageType; + typedef std::unordered_map<uint32 /*categoryId*/, Clock::time_point> GlobalCooldownStorageType; + + explicit SpellHistory(Unit* owner) : _owner(owner), _schoolLockouts() { } + + template<class OwnerType> + void LoadFromDB(PreparedQueryResult cooldownsResult); + + template<class OwnerType> + void SaveToDB(SQLTransaction& trans); + + void Update(); + + void HandleCooldowns(SpellInfo const* spellInfo, Item const* item, Spell* spell = nullptr); + bool IsReady(SpellInfo const* spellInfo) const; + template<class OwnerType> + void WritePacket(WorldPacket& packet) const; + + // Cooldowns + static Clock::duration const InfinityCooldownDelay; // used for set "infinity cooldowns" for spells and check + static Clock::duration const InfinityCooldownDelayCheck; + + void StartCooldown(SpellInfo const* spellInfo, uint32 itemId, Spell* spell = nullptr, bool onHold = false); + void SendCooldownEvent(SpellInfo const* spellInfo, uint32 itemId = 0, Spell* spell = nullptr, bool startCooldown = true); + + template<class Type, class Period> + void AddCooldown(uint32 spellId, uint32 itemId, std::chrono::duration<Type, Period> cooldownDuration) + { + AddCooldown(spellId, itemId, Clock::now() + std::chrono::duration_cast<Clock::duration>(cooldownDuration)); + } + + void AddCooldown(uint32 spellId, uint32 itemId, Clock::time_point cooldownEnd, bool onHold = false); + void ModifyCooldown(uint32 spellId, int32 cooldownModMs); + void ResetCooldown(uint32 spellId, bool update = false); + void ResetCooldown(CooldownStorageType::iterator& itr, bool update = false); + template<typename Predicate> + void ResetCooldowns(Predicate predicate, bool update = false) + { + std::vector<int32> resetCooldowns; + resetCooldowns.reserve(_spellCooldowns.size()); + for (auto itr = _spellCooldowns.begin(); itr != _spellCooldowns.end();) + { + if (predicate(itr)) + { + resetCooldowns.push_back(itr->first); + ResetCooldown(itr, false); + } + else + ++itr; + } + + if (update && !resetCooldowns.empty()) + SendClearCooldowns(resetCooldowns); + } + + void ResetAllCooldowns(); + bool HasCooldown(uint32 spellId) const; + uint32 GetRemainingCooldown(uint32 spellId) const; + + // School lockouts + void LockSpellSchool(SpellSchoolMask schoolMask, uint32 lockoutTime); + bool IsSchoolLocked(SpellSchoolMask schoolMask) const; + + // Global cooldown + bool HasGlobalCooldown(SpellInfo const* spellInfo) const; + void AddGlobalCooldown(SpellInfo const* spellInfo, uint32 duration); + void CancelGlobalCooldown(SpellInfo const* spellInfo); + + void BuildCooldownPacket(WorldPacket& data, uint8 flags, uint32 spellId, uint32 cooldown) const; + + CooldownStorageType::size_type GetCooldownsSizeForPacket() const { return _spellCooldowns.size(); } + +private: + Player* GetPlayerOwner() const; + void SendClearCooldowns(std::vector<int32> const& cooldowns) const; + + typedef std::unordered_map<uint32, uint32> PacketCooldowns; + void BuildCooldownPacket(WorldPacket& data, uint8 flags, PacketCooldowns const& cooldowns) const; + + Unit* _owner; + CooldownStorageType _spellCooldowns; + Clock::time_point _schoolLockouts[MAX_SPELL_SCHOOL]; + GlobalCooldownStorageType _globalCooldowns; + + template<class T> + struct PersistenceHelper { }; +}; + +#endif // SpellHistory_h__ diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 6215f8cfa0a..789b95e3e14 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -453,7 +453,7 @@ int32 SpellEffectInfo::CalcValue(Unit const* caster, int32 const* bp, Unit const // amount multiplication based on caster's level if (!caster->IsControlledByPlayer() && _spellInfo->SpellLevel && _spellInfo->SpellLevel != caster->getLevel() && - !basePointsPerLevel && (_spellInfo->Attributes & SPELL_ATTR0_LEVEL_DAMAGE_CALCULATION)) + !basePointsPerLevel && _spellInfo->HasAttribute(SPELL_ATTR0_LEVEL_DAMAGE_CALCULATION)) { bool canEffectScale = false; switch (Effect) @@ -1049,14 +1049,14 @@ bool SpellInfo::NeedsToBeTriggeredByCaster(SpellInfo const* triggeringSpell) con bool SpellInfo::IsPassive() const { - return (Attributes & SPELL_ATTR0_PASSIVE) != 0; + return HasAttribute(SPELL_ATTR0_PASSIVE); } bool SpellInfo::IsAutocastable() const { - if (Attributes & SPELL_ATTR0_PASSIVE) + if (HasAttribute(SPELL_ATTR0_PASSIVE)) return false; - if (AttributesEx & SPELL_ATTR1_UNAUTOCASTABLE_BY_PET) + if (HasAttribute(SPELL_ATTR1_UNAUTOCASTABLE_BY_PET)) return false; return true; } @@ -1107,37 +1107,37 @@ bool SpellInfo::IsMultiSlotAura() const bool SpellInfo::IsStackableOnOneSlotWithDifferentCasters() const { /// TODO: Re-verify meaning of SPELL_ATTR3_STACK_FOR_DIFF_CASTERS and update conditions here - return StackAmount > 1 && !IsChanneled() && !(AttributesEx3 & SPELL_ATTR3_STACK_FOR_DIFF_CASTERS); + return StackAmount > 1 && !IsChanneled() && !HasAttribute(SPELL_ATTR3_STACK_FOR_DIFF_CASTERS); } bool SpellInfo::IsCooldownStartedOnEvent() const { - return Attributes & SPELL_ATTR0_DISABLED_WHILE_ACTIVE || (CategoryEntry && CategoryEntry->Flags & SPELL_CATEGORY_FLAG_COOLDOWN_STARTS_ON_EVENT); + return HasAttribute(SPELL_ATTR0_DISABLED_WHILE_ACTIVE) || (CategoryEntry && CategoryEntry->Flags & SPELL_CATEGORY_FLAG_COOLDOWN_STARTS_ON_EVENT); } bool SpellInfo::IsDeathPersistent() const { - return (AttributesEx3 & SPELL_ATTR3_DEATH_PERSISTENT) != 0; + return HasAttribute(SPELL_ATTR3_DEATH_PERSISTENT); } bool SpellInfo::IsRequiringDeadTarget() const { - return (AttributesEx3 & SPELL_ATTR3_ONLY_TARGET_GHOSTS) != 0; + return HasAttribute(SPELL_ATTR3_ONLY_TARGET_GHOSTS); } bool SpellInfo::IsAllowingDeadTarget() const { - return AttributesEx2 & SPELL_ATTR2_CAN_TARGET_DEAD || Targets & (TARGET_FLAG_CORPSE_ALLY | TARGET_FLAG_CORPSE_ENEMY | TARGET_FLAG_UNIT_DEAD); + return HasAttribute(SPELL_ATTR2_CAN_TARGET_DEAD) || Targets & (TARGET_FLAG_CORPSE_ALLY | TARGET_FLAG_CORPSE_ENEMY | TARGET_FLAG_UNIT_DEAD); } bool SpellInfo::CanBeUsedInCombat() const { - return !(Attributes & SPELL_ATTR0_CANT_USED_IN_COMBAT); + return !HasAttribute(SPELL_ATTR0_CANT_USED_IN_COMBAT); } bool SpellInfo::IsPositive() const { - return !(AttributesCu & SPELL_ATTR0_CU_NEGATIVE); + return !HasAttribute(SPELL_ATTR0_CU_NEGATIVE); } bool SpellInfo::IsPositiveEffect(uint8 effIndex) const @@ -1146,27 +1146,27 @@ bool SpellInfo::IsPositiveEffect(uint8 effIndex) const { default: case 0: - return !(AttributesCu & SPELL_ATTR0_CU_NEGATIVE_EFF0); + return !HasAttribute(SPELL_ATTR0_CU_NEGATIVE_EFF0); case 1: - return !(AttributesCu & SPELL_ATTR0_CU_NEGATIVE_EFF1); + return !HasAttribute(SPELL_ATTR0_CU_NEGATIVE_EFF1); case 2: - return !(AttributesCu & SPELL_ATTR0_CU_NEGATIVE_EFF2); + return !HasAttribute(SPELL_ATTR0_CU_NEGATIVE_EFF2); } } bool SpellInfo::IsChanneled() const { - return (AttributesEx & (SPELL_ATTR1_CHANNELED_1 | SPELL_ATTR1_CHANNELED_2)) != 0; + return HasAttribute(SPELL_ATTR1_CHANNELED_1) || HasAttribute(SPELL_ATTR1_CHANNELED_2); } bool SpellInfo::NeedsComboPoints() const { - return (AttributesEx & (SPELL_ATTR1_REQ_COMBO_POINTS1 | SPELL_ATTR1_REQ_COMBO_POINTS2)) != 0; + return HasAttribute(SPELL_ATTR1_REQ_COMBO_POINTS1) || HasAttribute(SPELL_ATTR1_REQ_COMBO_POINTS2); } bool SpellInfo::IsBreakingStealth() const { - return !(AttributesEx & SPELL_ATTR1_NOT_BREAK_STEALTH); + return !HasAttribute(SPELL_ATTR1_NOT_BREAK_STEALTH); } bool SpellInfo::IsRangedWeaponSpell() const @@ -1177,12 +1177,12 @@ bool SpellInfo::IsRangedWeaponSpell() const bool SpellInfo::IsAutoRepeatRangedSpell() const { - return (AttributesEx2 & SPELL_ATTR2_AUTOREPEAT_FLAG) != 0; + return HasAttribute(SPELL_ATTR2_AUTOREPEAT_FLAG); } bool SpellInfo::IsAffectedBySpellMods() const { - return !(AttributesEx3 & SPELL_ATTR3_NO_DONE_BONUS); + return !HasAttribute(SPELL_ATTR3_NO_DONE_BONUS); } bool SpellInfo::IsAffectedBySpellMod(SpellModifier const* mod) const @@ -1205,11 +1205,11 @@ bool SpellInfo::IsAffectedBySpellMod(SpellModifier const* mod) const bool SpellInfo::CanPierceImmuneAura(SpellInfo const* aura) const { // these spells pierce all avalible spells (Resurrection Sickness for example) - if (Attributes & SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY) + if (HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY)) return true; // these spells (Cyclone for example) can pierce all... // ...but not these (Divine shield, Ice block, Cyclone and Banish for example) - if ((AttributesEx & SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE) && !(aura && (aura->Mechanic == MECHANIC_IMMUNE_SHIELD || aura->Mechanic == MECHANIC_INVULNERABILITY || aura->Mechanic == MECHANIC_BANISH))) + if ((HasAttribute(SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE)) && !(aura && (aura->Mechanic == MECHANIC_IMMUNE_SHIELD || aura->Mechanic == MECHANIC_INVULNERABILITY || aura->Mechanic == MECHANIC_BANISH))) return true; return false; @@ -1218,15 +1218,15 @@ bool SpellInfo::CanPierceImmuneAura(SpellInfo const* aura) const bool SpellInfo::CanDispelAura(SpellInfo const* aura) const { // These spells (like Mass Dispel) can dispell all auras, except death persistent ones (like Dungeon and Battleground Deserter) - if (Attributes & SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY && !aura->IsDeathPersistent()) + if (HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY) && !aura->IsDeathPersistent()) return true; // These auras (like Divine Shield) can't be dispelled - if (aura->Attributes & SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY) + if (aura->HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY)) return false; // These auras (Cyclone for example) are not dispelable - if (aura->AttributesEx & SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE) + if (aura->HasAttribute(SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE)) return false; return true; @@ -1235,7 +1235,7 @@ bool SpellInfo::CanDispelAura(SpellInfo const* aura) const bool SpellInfo::IsSingleTarget() const { // all other single target spells have if it has AttributesEx5 - if (AttributesEx5 & SPELL_ATTR5_SINGLE_TARGET_SPELL) + if (HasAttribute(SPELL_ATTR5_SINGLE_TARGET_SPELL)) return true; switch (GetSpellSpecific()) @@ -1332,7 +1332,7 @@ SpellCastResult SpellInfo::CheckShapeshift(uint32 form) const if (actAsShifted) { - if (Attributes & SPELL_ATTR0_NOT_SHAPESHIFT) // not while shapeshifted + if (HasAttribute(SPELL_ATTR0_NOT_SHAPESHIFT)) // not while shapeshifted return SPELL_FAILED_NOT_SHAPESHIFT; else if (Stances != 0) // needs other shapeshift return SPELL_FAILED_ONLY_SHAPESHIFT; @@ -1340,7 +1340,7 @@ SpellCastResult SpellInfo::CheckShapeshift(uint32 form) const else { // needs shapeshift - if (!(AttributesEx2 & SPELL_ATTR2_NOT_NEED_SHAPESHIFT) && Stances != 0) + if (!HasAttribute(SPELL_ATTR2_NOT_NEED_SHAPESHIFT) && Stances != 0) return SPELL_FAILED_ONLY_SHAPESHIFT; } @@ -1379,7 +1379,7 @@ SpellCastResult SpellInfo::CheckLocation(uint32 map_id, uint32 zone_id, uint32 a } // continent limitation (virtual continent) - if (AttributesEx4 & SPELL_ATTR4_CAST_ONLY_IN_OUTLAND) + if (HasAttribute(SPELL_ATTR4_CAST_ONLY_IN_OUTLAND)) { uint32 v_map = GetVirtualMapForMapAndZone(map_id, zone_id); MapEntry const* mapEntry = sMapStore.LookupEntry(v_map); @@ -1388,7 +1388,7 @@ SpellCastResult SpellInfo::CheckLocation(uint32 map_id, uint32 zone_id, uint32 a } // raid instance limitation - if (AttributesEx6 & SPELL_ATTR6_NOT_IN_RAID_INSTANCE) + if (HasAttribute(SPELL_ATTR6_NOT_IN_RAID_INSTANCE)) { MapEntry const* mapEntry = sMapStore.LookupEntry(map_id); if (!mapEntry || mapEntry->IsRaid()) @@ -1482,22 +1482,26 @@ SpellCastResult SpellInfo::CheckLocation(uint32 map_id, uint32 zone_id, uint32 a case SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED: case SPELL_AURA_FLY: { - if (player && !player->IsKnowHowFlyIn(map_id, zone_id)) - return SPELL_FAILED_INCORRECT_AREA; + SkillLineAbilityMapBounds bounds = sSpellMgr->GetSkillLineAbilityMapBounds(Id); + for (SkillLineAbilityMap::const_iterator skillIter = bounds.first; skillIter != bounds.second; ++skillIter) + { + if (skillIter->second->skillId == SKILL_MOUNTS) + if (player && !player->CanFlyInZone(map_id, zone_id)) + return SPELL_FAILED_INCORRECT_AREA; + } } } } - return SPELL_CAST_OK; } SpellCastResult SpellInfo::CheckTarget(Unit const* caster, WorldObject const* target, bool implicit) const { - if (AttributesEx & SPELL_ATTR1_CANT_TARGET_SELF && caster == target) + if (HasAttribute(SPELL_ATTR1_CANT_TARGET_SELF) && caster == target) return SPELL_FAILED_BAD_TARGETS; // check visibility - ignore stealth for implicit (area) targets - if (!(AttributesEx6 & SPELL_ATTR6_CAN_TARGET_INVISIBLE) && !caster->CanSeeOrDetect(target, implicit)) + if (!HasAttribute(SPELL_ATTR6_CAN_TARGET_INVISIBLE) && !caster->CanSeeOrDetect(target, implicit)) return SPELL_FAILED_BAD_TARGETS; Unit const* unitTarget = target->ToUnit(); @@ -1505,7 +1509,7 @@ SpellCastResult SpellInfo::CheckTarget(Unit const* caster, WorldObject const* ta // creature/player specific target checks if (unitTarget) { - if (AttributesEx & SPELL_ATTR1_CANT_TARGET_IN_COMBAT) + if (HasAttribute(SPELL_ATTR1_CANT_TARGET_IN_COMBAT)) { if (unitTarget->IsInCombat()) return SPELL_FAILED_TARGET_AFFECTING_COMBAT; @@ -1517,9 +1521,9 @@ SpellCastResult SpellInfo::CheckTarget(Unit const* caster, WorldObject const* ta } // only spells with SPELL_ATTR3_ONLY_TARGET_GHOSTS can target ghosts - if (((AttributesEx3 & SPELL_ATTR3_ONLY_TARGET_GHOSTS) != 0) != unitTarget->HasAuraType(SPELL_AURA_GHOST)) + if (HasAttribute(SPELL_ATTR3_ONLY_TARGET_GHOSTS) != unitTarget->HasAuraType(SPELL_AURA_GHOST)) { - if (AttributesEx3 & SPELL_ATTR3_ONLY_TARGET_GHOSTS) + if (HasAttribute(SPELL_ATTR3_ONLY_TARGET_GHOSTS)) return SPELL_FAILED_TARGET_NOT_GHOST; else return SPELL_FAILED_BAD_TARGETS; @@ -1530,12 +1534,12 @@ SpellCastResult SpellInfo::CheckTarget(Unit const* caster, WorldObject const* ta if (caster->GetTypeId() == TYPEID_PLAYER) { // Do not allow these spells to target creatures not tapped by us (Banish, Polymorph, many quest spells) - if (AttributesEx2 & SPELL_ATTR2_CANT_TARGET_TAPPED) + if (HasAttribute(SPELL_ATTR2_CANT_TARGET_TAPPED)) if (Creature const* targetCreature = unitTarget->ToCreature()) if (targetCreature->hasLootRecipient() && !targetCreature->isTappedBy(caster->ToPlayer())) return SPELL_FAILED_CANT_CAST_ON_TAPPED; - if (AttributesCu & SPELL_ATTR0_CU_PICKPOCKET) + if (HasAttribute(SPELL_ATTR0_CU_PICKPOCKET)) { if (unitTarget->GetTypeId() == TYPEID_PLAYER) return SPELL_FAILED_BAD_TARGETS; @@ -1575,21 +1579,21 @@ SpellCastResult SpellInfo::CheckTarget(Unit const* caster, WorldObject const* ta else return SPELL_CAST_OK; // corpseOwner and unit specific target checks - if (AttributesEx3 & SPELL_ATTR3_ONLY_TARGET_PLAYERS && !unitTarget->ToPlayer()) + if (HasAttribute(SPELL_ATTR3_ONLY_TARGET_PLAYERS) && !unitTarget->ToPlayer()) return SPELL_FAILED_TARGET_NOT_PLAYER; if (!IsAllowingDeadTarget() && !unitTarget->IsAlive()) return SPELL_FAILED_TARGETS_DEAD; // check this flag only for implicit targets (chain and area), allow to explicitly target units for spells like Shield of Righteousness - if (implicit && AttributesEx6 & SPELL_ATTR6_CANT_TARGET_CROWD_CONTROLLED && !unitTarget->CanFreeMove()) + if (implicit && HasAttribute(SPELL_ATTR6_CANT_TARGET_CROWD_CONTROLLED) && !unitTarget->CanFreeMove()) return SPELL_FAILED_BAD_TARGETS; // checked in Unit::IsValidAttack/AssistTarget, shouldn't be checked for ENTRY targets - //if (!(AttributesEx6 & SPELL_ATTR6_CAN_TARGET_UNTARGETABLE) && target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE)) + //if (!HasAttribute(SPELL_ATTR6_CAN_TARGET_UNTARGETABLE) && target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE)) // return SPELL_FAILED_BAD_TARGETS; - //if (!(AttributesEx6 & SPELL_ATTR6_CAN_TARGET_POSSESSED_FRIENDS) + //if (!HasAttribute(SPELL_ATTR6_CAN_TARGET_POSSESSED_FRIENDS) if (!CheckTargetCreatureType(unitTarget)) { @@ -1610,7 +1614,7 @@ SpellCastResult SpellInfo::CheckTarget(Unit const* caster, WorldObject const* ta } // not allow casting on flying player - if (unitTarget->HasUnitState(UNIT_STATE_IN_FLIGHT)) + if (unitTarget->HasUnitState(UNIT_STATE_IN_FLIGHT) && !(AttributesCu & SPELL_ATTR0_CU_ALLOW_INFLIGHT_TARGET)) return SPELL_FAILED_BAD_TARGETS; /* TARGET_UNIT_MASTER gets blocked here for passengers, because the whole idea of this check is to @@ -1705,7 +1709,7 @@ SpellCastResult SpellInfo::CheckVehicle(Unit const* caster) const checkMask = VEHICLE_SEAT_FLAG_CAN_ATTACK; VehicleSeatEntry const* vehicleSeat = vehicle->GetSeatForPassenger(caster); - if (!(AttributesEx6 & SPELL_ATTR6_CASTABLE_WHILE_ON_VEHICLE) && !(Attributes & SPELL_ATTR0_CASTABLE_WHILE_MOUNTED) + if (!HasAttribute(SPELL_ATTR6_CASTABLE_WHILE_ON_VEHICLE) && !HasAttribute(SPELL_ATTR0_CASTABLE_WHILE_MOUNTED) && (vehicleSeat->m_flags & checkMask) != checkMask) return SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW; @@ -2106,7 +2110,7 @@ uint32 SpellInfo::CalcCastTime(Spell* spell /*= NULL*/) const if (spell) spell->GetCaster()->ModSpellCastTime(this, castTime, spell); - if (Attributes & SPELL_ATTR0_REQ_AMMO && (!IsAutoRepeatRangedSpell())) + if (HasAttribute(SPELL_ATTR0_REQ_AMMO) && (!IsAutoRepeatRangedSpell())) castTime += 500; return (castTime > 0) ? uint32(castTime) : 0; @@ -2147,7 +2151,7 @@ uint32 SpellInfo::GetRecoveryTime() const int32 SpellInfo::CalcPowerCost(Unit const* caster, SpellSchoolMask schoolMask) const { // Spell drain all exist power on cast (Only paladin lay of Hands) - if (AttributesEx & SPELL_ATTR1_DRAIN_ALL_POWER) + if (HasAttribute(SPELL_ATTR1_DRAIN_ALL_POWER)) { // If power type - health drain all if (PowerType == POWER_HEALTH) @@ -2193,7 +2197,7 @@ int32 SpellInfo::CalcPowerCost(Unit const* caster, SpellSchoolMask schoolMask) c powerCost += caster->GetInt32Value(UNIT_FIELD_POWER_COST_MODIFIER + school); // Shiv - costs 20 + weaponSpeed*10 energy (apply only to non-triggered spell with energy cost) - if (AttributesEx4 & SPELL_ATTR4_SPELL_VS_EXTEND_COST) + if (HasAttribute(SPELL_ATTR4_SPELL_VS_EXTEND_COST)) { uint32 speed = 0; if (SpellShapeshiftEntry const* ss = sSpellShapeshiftStore.LookupEntry(caster->GetShapeshiftForm())) @@ -2201,7 +2205,7 @@ int32 SpellInfo::CalcPowerCost(Unit const* caster, SpellSchoolMask schoolMask) c else { WeaponAttackType slot = BASE_ATTACK; - if (AttributesEx3 & SPELL_ATTR3_REQ_OFFHAND) + if (HasAttribute(SPELL_ATTR3_REQ_OFFHAND)) slot = OFF_ATTACK; speed = caster->GetAttackTime(slot); @@ -2216,7 +2220,7 @@ int32 SpellInfo::CalcPowerCost(Unit const* caster, SpellSchoolMask schoolMask) c if (!caster->IsControlledByPlayer()) { - if (Attributes & SPELL_ATTR0_LEVEL_DAMAGE_CALCULATION) + if (HasAttribute(SPELL_ATTR0_LEVEL_DAMAGE_CALCULATION)) { GtNPCManaCostScalerEntry const* spellScaler = sGtNPCManaCostScalerStore.LookupEntry(SpellLevel - 1); GtNPCManaCostScalerEntry const* casterScaler = sGtNPCManaCostScalerStore.LookupEntry(caster->getLevel() - 1); @@ -2361,7 +2365,7 @@ void SpellInfo::_InitializeExplicitTargetMask() bool SpellInfo::_IsPositiveEffect(uint8 effIndex, bool deep) const { // not found a single positive spell with this attribute - if (Attributes & SPELL_ATTR0_NEGATIVE_1) + if (HasAttribute(SPELL_ATTR0_NEGATIVE_1)) return false; switch (SpellFamilyName) @@ -2542,7 +2546,7 @@ bool SpellInfo::_IsPositiveEffect(uint8 effIndex, bool deep) const if (Effects[effIndex].TargetA.GetTarget() != TARGET_UNIT_CASTER) return false; // but not this if this first effect (didn't find better check) - if (Attributes & SPELL_ATTR0_NEGATIVE_1 && effIndex == 0) + if (HasAttribute(SPELL_ATTR0_NEGATIVE_1) && effIndex == 0) return false; break; case SPELL_AURA_MECHANIC_IMMUNITY: diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h index d9c062e77fd..cfa9877405d 100644 --- a/src/server/game/Spells/SpellInfo.h +++ b/src/server/game/Spells/SpellInfo.h @@ -186,6 +186,7 @@ enum SpellCustomAttributes SPELL_ATTR0_CU_IGNORE_ARMOR = 0x00008000, SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER = 0x00010000, SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET = 0x00020000, + SPELL_ATTR0_CU_ALLOW_INFLIGHT_TARGET = 0x00040000, SPELL_ATTR0_CU_NEGATIVE = SPELL_ATTR0_CU_NEGATIVE_EFF0 | SPELL_ATTR0_CU_NEGATIVE_EFF1 | SPELL_ATTR0_CU_NEGATIVE_EFF2 }; @@ -376,6 +377,16 @@ public: bool HasAura(AuraType aura) const; bool HasAreaAuraEffect() const; + inline bool HasAttribute(SpellAttr0 attribute) const { return !!(Attributes & attribute); } + inline bool HasAttribute(SpellAttr1 attribute) const { return !!(AttributesEx & attribute); } + inline bool HasAttribute(SpellAttr2 attribute) const { return !!(AttributesEx2 & attribute); } + inline bool HasAttribute(SpellAttr3 attribute) const { return !!(AttributesEx3 & attribute); } + inline bool HasAttribute(SpellAttr4 attribute) const { return !!(AttributesEx4 & attribute); } + inline bool HasAttribute(SpellAttr5 attribute) const { return !!(AttributesEx5 & attribute); } + inline bool HasAttribute(SpellAttr6 attribute) const { return !!(AttributesEx6 & attribute); } + inline bool HasAttribute(SpellAttr7 attribute) const { return !!(AttributesEx7 & attribute); } + inline bool HasAttribute(SpellCustomAttributes customAttribute) const { return !!(AttributesCu & customAttribute); } + bool IsExplicitDiscovery() const; bool IsLootCrafting() const; bool IsQuestTame() const; diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index dd4453cc4c5..13290320084 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -19,15 +19,11 @@ #include "SpellMgr.h" #include "SpellInfo.h" #include "ObjectMgr.h" -#include "SpellAuras.h" #include "SpellAuraDefines.h" #include "SharedDefines.h" #include "DBCStores.h" -#include "World.h" #include "Chat.h" -#include "Spell.h" #include "BattlegroundMgr.h" -#include "MapManager.h" #include "BattlefieldWG.h" #include "BattlefieldMgr.h" #include "Player.h" @@ -2238,7 +2234,7 @@ void SpellMgr::LoadEnchantCustomAttr() continue; /// @todo find a better check - if (!(spellInfo->AttributesEx2 & SPELL_ATTR2_PRESERVE_ENCHANT_IN_ARENA) || !(spellInfo->Attributes & SPELL_ATTR0_NOT_SHAPESHIFT)) + if (!spellInfo->HasAttribute(SPELL_ATTR2_PRESERVE_ENCHANT_IN_ARENA) || !spellInfo->HasAttribute(SPELL_ATTR0_NOT_SHAPESHIFT)) continue; for (uint32 j = 0; j < MAX_SPELL_EFFECTS; ++j) @@ -2958,6 +2954,10 @@ void SpellMgr::LoadSpellInfoCorrections() switch (spellInfo->Id) { + case 63026: // Force Cast (HACK: Target shouldn't be changed) + case 63137: // Force Cast (HACK: Target shouldn't be changed; summon position should be untied from spell destination) + spellInfo->Effects[0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DB); + break; case 53096: // Quetz'lun's Judgment case 70743: // AoD Special case 70614: // AoD Special - Vegard @@ -3004,6 +3004,10 @@ void SpellMgr::LoadSpellInfoCorrections() spellInfo->Effects[EFFECT_0].TriggerSpell = 36325; // They Must Burn Bomb Drop (DND) break; case 49838: // Stop Time + case 69438: // Sample Satisfaction + case 69445: // Perfume Spritz + case 69489: // Chocolate Sample + case 69563: // Cologne Spritz spellInfo->AttributesEx3 |= SPELL_ATTR3_NO_INITIAL_AGGRO; break; case 61407: // Energize Cores @@ -3130,6 +3134,7 @@ void SpellMgr::LoadSpellInfoCorrections() case 64823: // Item - Druid T8 Balance 4P Bonus case 34477: // Misdirection case 44401: // Missile Barrage + case 18820: // Insight spellInfo->ProcCharges = 1; break; case 44544: // Fingers of Frost @@ -3748,7 +3753,7 @@ void SpellMgr::LoadSpellInfoCorrections() { case SPELLFAMILY_PALADIN: // Seals of the Pure should affect Seal of Righteousness - if (spellInfo->SpellIconID == 25 && spellInfo->Attributes & SPELL_ATTR0_PASSIVE) + if (spellInfo->SpellIconID == 25 && spellInfo->HasAttribute(SPELL_ATTR0_PASSIVE)) spellInfo->Effects[EFFECT_0].SpellClassMask[1] |= 0x20000000; break; case SPELLFAMILY_DEATHKNIGHT: diff --git a/src/server/game/Spells/SpellScript.cpp b/src/server/game/Spells/SpellScript.cpp index 96977804f70..b347a982132 100644 --- a/src/server/game/Spells/SpellScript.cpp +++ b/src/server/game/Spells/SpellScript.cpp @@ -19,7 +19,6 @@ #include "Spell.h" #include "SpellAuras.h" #include "SpellScript.h" -#include "SpellMgr.h" bool _SpellScript::_Validate(SpellInfo const* entry) { diff --git a/src/server/game/Texts/CreatureTextMgr.cpp b/src/server/game/Texts/CreatureTextMgr.cpp index 5fbc4b8ae1e..f9ccd2efd16 100644 --- a/src/server/game/Texts/CreatureTextMgr.cpp +++ b/src/server/game/Texts/CreatureTextMgr.cpp @@ -77,7 +77,7 @@ void CreatureTextMgr::LoadCreatureTexts() uint32 oldMSTime = getMSTime(); mTextMap.clear(); // for reload case - mTextRepeatMap.clear(); //reset all currently used temp texts + //all currently used temp texts are NOT reset PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_CREATURE_TEXT); PreparedQueryResult result = WorldDatabase.Query(stmt); @@ -224,13 +224,7 @@ uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, WorldObject if (tempGroup.empty()) { - CreatureTextRepeatMap::iterator mapItr = mTextRepeatMap.find(source->GetGUID()); - if (mapItr != mTextRepeatMap.end()) - { - CreatureTextRepeatGroup::iterator groupItr = mapItr->second.find(textGroup); - groupItr->second.clear(); - } - + source->ClearTextRepeatGroup(textGroup); tempGroup = textGroupContainer; } @@ -426,26 +420,14 @@ void CreatureTextMgr::SetRepeatId(Creature* source, uint8 textGroup, uint8 id) if (!source) return; - CreatureTextRepeatIds& repeats = mTextRepeatMap[source->GetGUID()][textGroup]; - if (std::find(repeats.begin(), repeats.end(), id) == repeats.end()) - repeats.push_back(id); - else - TC_LOG_ERROR("sql.sql", "CreatureTextMgr: TextGroup %u for Creature(%s) GuidLow %u Entry %u, id %u already added", uint32(textGroup), source->GetName().c_str(), source->GetGUIDLow(), source->GetEntry(), uint32(id)); + source->SetTextRepeatId(textGroup, id); } CreatureTextRepeatIds CreatureTextMgr::GetRepeatGroup(Creature* source, uint8 textGroup) { ASSERT(source);//should never happen - CreatureTextRepeatIds ids; - CreatureTextRepeatMap::const_iterator mapItr = mTextRepeatMap.find(source->GetGUID()); - if (mapItr != mTextRepeatMap.end()) - { - CreatureTextRepeatGroup::const_iterator groupItr = (*mapItr).second.find(textGroup); - if (groupItr != mapItr->second.end()) - ids = groupItr->second; - } - return ids; + return source->GetTextRepeatGroup(textGroup); } bool CreatureTextMgr::TextExist(uint32 sourceEntry, uint8 textGroup) diff --git a/src/server/game/Texts/CreatureTextMgr.h b/src/server/game/Texts/CreatureTextMgr.h index 6ee1e82ce66..237aedd49d0 100644 --- a/src/server/game/Texts/CreatureTextMgr.h +++ b/src/server/game/Texts/CreatureTextMgr.h @@ -75,11 +75,6 @@ typedef std::unordered_map<uint32, CreatureTextHolder> CreatureTextMap; // a typedef std::map<CreatureTextId, CreatureTextLocale> LocaleCreatureTextMap; -//used for handling non-repeatable random texts -typedef std::vector<uint8> CreatureTextRepeatIds; -typedef std::unordered_map<uint8, CreatureTextRepeatIds> CreatureTextRepeatGroup; -typedef std::unordered_map<ObjectGuid, CreatureTextRepeatGroup> CreatureTextRepeatMap;//guid based - class CreatureTextMgr { private: @@ -115,7 +110,6 @@ class CreatureTextMgr float GetRangeForChatType(ChatMsg msgType) const; CreatureTextMap mTextMap; - CreatureTextRepeatMap mTextRepeatMap; LocaleCreatureTextMap mLocaleTextMap; }; diff --git a/src/server/game/Warden/Warden.cpp b/src/server/game/Warden/Warden.cpp index aed2d73c422..ecf7697db0d 100644 --- a/src/server/game/Warden/Warden.cpp +++ b/src/server/game/Warden/Warden.cpp @@ -22,10 +22,8 @@ #include "Log.h" #include "Opcodes.h" #include "ByteBuffer.h" -#include <openssl/md5.h> #include <openssl/sha.h> #include "World.h" -#include "Player.h" #include "Util.h" #include "Warden.h" #include "AccountMgr.h" diff --git a/src/server/game/Warden/Warden.h b/src/server/game/Warden/Warden.h index 4d46773adcd..695c6730b27 100644 --- a/src/server/game/Warden/Warden.h +++ b/src/server/game/Warden/Warden.h @@ -57,11 +57,7 @@ enum WardenCheckType MODULE_CHECK = 0xD9 // 217: uint Seed + byte[20] SHA1 (check to ensure module isn't injected) }; -#if defined(__GNUC__) -#pragma pack(1) -#else #pragma pack(push, 1) -#endif struct WardenModuleUse { @@ -84,11 +80,7 @@ struct WardenHashRequest uint8 Seed[16]; }; -#if defined(__GNUC__) -#pragma pack() -#else #pragma pack(pop) -#endif struct ClientWardenModule { diff --git a/src/server/game/Warden/WardenCheckMgr.cpp b/src/server/game/Warden/WardenCheckMgr.cpp index c2d095e6530..df9cd4786ad 100644 --- a/src/server/game/Warden/WardenCheckMgr.cpp +++ b/src/server/game/Warden/WardenCheckMgr.cpp @@ -21,7 +21,6 @@ #include "WorldSession.h" #include "Log.h" #include "Database/DatabaseEnv.h" -#include "Util.h" #include "WardenCheckMgr.h" #include "Warden.h" diff --git a/src/server/game/Warden/WardenWin.cpp b/src/server/game/Warden/WardenWin.cpp index 5a9d2d174b4..7db5e8f39e5 100644 --- a/src/server/game/Warden/WardenWin.cpp +++ b/src/server/game/Warden/WardenWin.cpp @@ -32,7 +32,6 @@ #include "WardenWin.h" #include "WardenModuleWin.h" #include "WardenCheckMgr.h" -#include "AccountMgr.h" WardenWin::WardenWin() : Warden(), _serverTicks(0) {} diff --git a/src/server/game/Warden/WardenWin.h b/src/server/game/Warden/WardenWin.h index 31d28b22e23..ab6ef7c8c65 100644 --- a/src/server/game/Warden/WardenWin.h +++ b/src/server/game/Warden/WardenWin.h @@ -25,11 +25,7 @@ #include "ByteBuffer.h" #include "Warden.h" -#if defined(__GNUC__) -#pragma pack(1) -#else #pragma pack(push, 1) -#endif struct WardenInitModuleRequest { @@ -61,11 +57,7 @@ struct WardenInitModuleRequest uint8 Function3_set; }; -#if defined(__GNUC__) -#pragma pack() -#else #pragma pack(pop) -#endif class WorldSession; class Warden; diff --git a/src/server/game/Weather/Weather.cpp b/src/server/game/Weather/Weather.cpp index edcbe90498d..2a94cd26183 100644 --- a/src/server/game/Weather/Weather.cpp +++ b/src/server/game/Weather/Weather.cpp @@ -25,7 +25,6 @@ #include "Player.h" #include "World.h" #include "Log.h" -#include "ObjectMgr.h" #include "Util.h" #include "ScriptMgr.h" #include "WorldSession.h" @@ -193,8 +192,10 @@ bool Weather::ReGenerate() void Weather::SendWeatherUpdateToPlayer(Player* player) { - WorldPacket data(SMSG_WEATHER, (4+4+4)); - data << uint32(GetWeatherState()) << (float)m_grade << uint8(0); + WorldPacket data(SMSG_WEATHER, (4 + 4 + 1)); + data << uint32(GetWeatherState()); + data << (float)m_grade; + data << uint8(0); player->GetSession()->SendPacket(&data); } @@ -209,7 +210,7 @@ bool Weather::UpdateWeather() WeatherState state = GetWeatherState(); - WorldPacket data(SMSG_WEATHER, (4+4+4)); + WorldPacket data(SMSG_WEATHER, (4 + 4 + 1)); data << uint32(state); data << (float)m_grade; data << uint8(0); diff --git a/src/server/game/Weather/WeatherMgr.cpp b/src/server/game/Weather/WeatherMgr.cpp index d1a614f494d..9100dd464b9 100644 --- a/src/server/game/Weather/WeatherMgr.cpp +++ b/src/server/game/Weather/WeatherMgr.cpp @@ -143,8 +143,10 @@ void LoadWeatherData() void SendFineWeatherUpdateToPlayer(Player* player) { - WorldPacket data(SMSG_WEATHER, (4+4+4)); - data << (uint32)WEATHER_STATE_FINE << (float)0.0f << uint8(0); + WorldPacket data(SMSG_WEATHER, (4 + 4 + 1)); + data << (uint32)WEATHER_STATE_FINE; + data << (float)0.0f; + data << uint8(0); player->GetSession()->SendPacket(&data); } diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 930bf20b6e7..5f54154fab1 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1523,6 +1523,9 @@ void World::SetInitialWorldSettings() TC_LOG_INFO("server.loading", "Loading Gameobject Data..."); sObjectMgr->LoadGameobjects(); + + TC_LOG_INFO("server.loading", "Loading GameObject Addon Data..."); + sObjectMgr->LoadGameObjectAddons(); // must be after LoadGameObjectTemplate() and LoadGameobjects() TC_LOG_INFO("server.loading", "Loading Creature Linked Respawn..."); sObjectMgr->LoadLinkedRespawn(); // must be after LoadCreatures(), LoadGameObjects() @@ -1914,28 +1917,24 @@ void World::DetectDBCLang() TC_LOG_INFO("server.loading", "Using %s DBC Locale as default. All available DBC locales: %s", localeNames[m_defaultDbcLocale], availableLocalsStr.empty() ? "<none>" : availableLocalsStr.c_str()); } -void World::RecordTimeDiff(const char *text, ...) +void World::ResetTimeDiffRecord() { if (m_updateTimeCount != 1) return; - if (!text) - { - m_currentTime = getMSTime(); + + m_currentTime = getMSTime(); +} + +void World::RecordTimeDiff(std::string const& text) +{ + if (m_updateTimeCount != 1) return; - } uint32 thisTime = getMSTime(); uint32 diff = getMSTimeDiff(m_currentTime, thisTime); if (diff > m_int_configs[CONFIG_MIN_LOG_UPDATE]) - { - va_list ap; - char str[256]; - va_start(ap, text); - vsnprintf(str, 256, text, ap); - va_end(ap); - TC_LOG_INFO("misc", "Difftime %s: %u.", str, diff); - } + TC_LOG_INFO("misc", "Difftime %s: %u.", text.c_str(), diff); m_currentTime = thisTime; } @@ -2052,7 +2051,7 @@ void World::Update(uint32 diff) } /// <li> Handle session updates when the timer has passed - RecordTimeDiff(NULL); + ResetTimeDiffRecord(); UpdateSessions(diff); RecordTimeDiff("UpdateSessions"); @@ -2099,7 +2098,7 @@ void World::Update(uint32 diff) /// <li> Handle all other objects ///- Update objects when the timer has passed (maps, transport, creatures, ...) - RecordTimeDiff(NULL); + ResetTimeDiffRecord(); sMapMgr->Update(diff); RecordTimeDiff("UpdateMapMgr"); @@ -3024,7 +3023,7 @@ void World::ResetRandomBG() { TC_LOG_INFO("misc", "Random BG status reset for all characters."); - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_BATTLEGROUND_RANDOM); + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_BATTLEGROUND_RANDOM_ALL); CharacterDatabase.Execute(stmt); for (SessionMap::const_iterator itr = m_sessions.begin(); itr != m_sessions.end(); ++itr) diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 95c737936bc..af89adcb04e 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -741,7 +741,8 @@ class World void LoadDBVersion(); char const* GetDBVersion() const { return m_DBVersion.c_str(); } - void RecordTimeDiff(const char * text, ...); + void ResetTimeDiffRecord(); + void RecordTimeDiff(std::string const& text); void LoadAutobroadcasts(); diff --git a/src/server/scripts/CMakeLists.txt b/src/server/scripts/CMakeLists.txt index e7d08d69805..20b970b6ac1 100644 --- a/src/server/scripts/CMakeLists.txt +++ b/src/server/scripts/CMakeLists.txt @@ -50,6 +50,7 @@ include_directories( ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Recast/Include ${CMAKE_SOURCE_DIR}/dep/g3dlite/include ${CMAKE_SOURCE_DIR}/dep/SFMT + ${CMAKE_SOURCE_DIR}/dep/cppformat ${CMAKE_SOURCE_DIR}/dep/zlib ${CMAKE_SOURCE_DIR}/src/server/shared ${CMAKE_SOURCE_DIR}/src/server/shared/Configuration @@ -62,6 +63,7 @@ include_directories( ${CMAKE_SOURCE_DIR}/src/server/shared/Logging ${CMAKE_SOURCE_DIR}/src/server/shared/Packets ${CMAKE_SOURCE_DIR}/src/server/shared/Threading + ${CMAKE_SOURCE_DIR}/src/server/shared/Updater ${CMAKE_SOURCE_DIR}/src/server/shared/Utilities ${CMAKE_SOURCE_DIR}/src/server/collision ${CMAKE_SOURCE_DIR}/src/server/collision/Management @@ -144,6 +146,8 @@ include_directories( ${VALGRIND_INCLUDE_DIR} ) +GroupSources(${CMAKE_CURRENT_SOURCE_DIR}) + add_library(scripts STATIC ${scripts_STAT_SRCS} ${scripts_STAT_PCH_SRC} diff --git a/src/server/scripts/Commands/cs_account.cpp b/src/server/scripts/Commands/cs_account.cpp index c6ddd73addd..5668c20d6b0 100644 --- a/src/server/scripts/Commands/cs_account.cpp +++ b/src/server/scripts/Commands/cs_account.cpp @@ -667,7 +667,7 @@ public: if (isAccountNameGiven) { targetAccountName = arg1; - if (!AccountMgr::normalizeString(targetAccountName)) + if (!AccountMgr::normalizeString(targetAccountName) || !AccountMgr::GetId(targetAccountName)) { handler->PSendSysMessage(LANG_ACCOUNT_NOT_EXIST, targetAccountName.c_str()); handler->SetSentErrorMessage(true); diff --git a/src/server/scripts/Commands/cs_lfg.cpp b/src/server/scripts/Commands/cs_lfg.cpp index 308a841df2a..d1662f3a97c 100644 --- a/src/server/scripts/Commands/cs_lfg.cpp +++ b/src/server/scripts/Commands/cs_lfg.cpp @@ -19,7 +19,9 @@ #include "Chat.h" #include "Language.h" #include "LFGMgr.h" +#include "ObjectMgr.h" #include "Group.h" +#include "GroupMgr.h" #include "Player.h" void GetPlayerInfo(ChatHandler* handler, Player* player) @@ -47,15 +49,15 @@ public: { { "player", rbac::RBAC_PERM_COMMAND_LFG_PLAYER, false, &HandleLfgPlayerInfoCommand, "", NULL }, { "group", rbac::RBAC_PERM_COMMAND_LFG_GROUP, false, &HandleLfgGroupInfoCommand, "", NULL }, - { "queue", rbac::RBAC_PERM_COMMAND_LFG_QUEUE, false, &HandleLfgQueueInfoCommand, "", NULL }, - { "clean", rbac::RBAC_PERM_COMMAND_LFG_CLEAN, false, &HandleLfgCleanCommand, "", NULL }, - { "options", rbac::RBAC_PERM_COMMAND_LFG_OPTIONS, false, &HandleLfgOptionsCommand, "", NULL }, + { "queue", rbac::RBAC_PERM_COMMAND_LFG_QUEUE, true, &HandleLfgQueueInfoCommand, "", NULL }, + { "clean", rbac::RBAC_PERM_COMMAND_LFG_CLEAN, true, &HandleLfgCleanCommand, "", NULL }, + { "options", rbac::RBAC_PERM_COMMAND_LFG_OPTIONS, true, &HandleLfgOptionsCommand, "", NULL }, { NULL, 0, false, NULL, "", NULL } }; static ChatCommand commandTable[] = { - { "lfg", rbac::RBAC_PERM_COMMAND_LFG, false, NULL, "", lfgCommandTable }, + { "lfg", rbac::RBAC_PERM_COMMAND_LFG, true, NULL, "", lfgCommandTable }, { NULL, 0, false, NULL, "", NULL } }; return commandTable; @@ -74,25 +76,55 @@ public: static bool HandleLfgGroupInfoCommand(ChatHandler* handler, char const* args) { - Player* target = NULL; - std::string playerName; - if (!handler->extractPlayerTarget((char*)args, &target, NULL, &playerName)) + Player* playerTarget; + ObjectGuid guidTarget; + std::string nameTarget; + + ObjectGuid parseGUID(HIGHGUID_PLAYER, uint32(atoul(args))); + + if (sObjectMgr->GetPlayerNameByGUID(parseGUID, nameTarget)) + { + playerTarget = ObjectAccessor::FindPlayer(parseGUID); + guidTarget = parseGUID; + } + else if (!handler->extractPlayerTarget((char*)args, &playerTarget, &guidTarget, &nameTarget)) return false; - Group* grp = target->GetGroup(); - if (!grp) + Group* groupTarget = NULL; + + if (playerTarget) + groupTarget = playerTarget->GetGroup(); + else + { + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GROUP_MEMBER); + stmt->setUInt32(0, guidTarget.GetCounter()); + PreparedQueryResult resultGroup = CharacterDatabase.Query(stmt); + if (resultGroup) + groupTarget = sGroupMgr->GetGroupByDbStoreId((*resultGroup)[0].GetUInt32()); + } + if (!groupTarget) { - handler->PSendSysMessage(LANG_LFG_NOT_IN_GROUP, playerName.c_str()); - return true; + handler->PSendSysMessage(LANG_LFG_NOT_IN_GROUP, nameTarget.c_str()); + handler->SetSentErrorMessage(true); + return false; } - ObjectGuid guid = grp->GetGUID(); + ObjectGuid guid = groupTarget->GetGUID(); std::string const& state = lfg::GetStateString(sLFGMgr->GetState(guid)); - handler->PSendSysMessage(LANG_LFG_GROUP_INFO, grp->isLFGGroup(), + handler->PSendSysMessage(LANG_LFG_GROUP_INFO, groupTarget->isLFGGroup(), state.c_str(), sLFGMgr->GetDungeon(guid)); - for (GroupReference* itr = grp->GetFirstMember(); itr != NULL; itr = itr->next()) - GetPlayerInfo(handler, itr->GetSource()); + Group::MemberSlotList const& members = groupTarget->GetMemberSlots(); + + for (Group::MemberSlotList::const_iterator itr = members.begin(); itr != members.end(); ++itr) + { + Group::MemberSlot const& slot = *itr; + Player* p = ObjectAccessor::FindPlayer((*itr).guid); + if (p) + GetPlayerInfo(handler, p); + else + handler->PSendSysMessage("%s is offline.", slot.name.c_str()); + } return true; } @@ -118,7 +150,7 @@ public: static bool HandleLfgQueueInfoCommand(ChatHandler* handler, char const* args) { - handler->SendSysMessage(sLFGMgr->DumpQueueInfo(atoi(args) != 0).c_str()); + handler->SendSysMessage(sLFGMgr->DumpQueueInfo(*args != '\0').c_str()); return true; } diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 0e86823aa7c..c8a908f6930 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -25,7 +25,6 @@ #include "InstanceSaveMgr.h" #include "Language.h" #include "MovementGenerator.h" -#include "ObjectAccessor.h" #include "Opcodes.h" #include "SpellAuras.h" #include "TargetedMovementGenerator.h" @@ -36,6 +35,7 @@ #include "GroupMgr.h" #include "MMapFactory.h" #include "DisableMgr.h" +#include "SpellHistory.h" class misc_commandscript : public CommandScript { @@ -237,7 +237,8 @@ public: zoneId, (zoneEntry ? zoneEntry->area_name[handler->GetSessionDbcLocale()] : unknown), areaId, (areaEntry ? areaEntry->area_name[handler->GetSessionDbcLocale()] : unknown), object->GetPhaseMask(), - object->GetPositionX(), object->GetPositionY(), object->GetPositionZ(), object->GetOrientation(), + object->GetPositionX(), object->GetPositionY(), object->GetPositionZ(), object->GetOrientation()); + handler->PSendSysMessage(LANG_GRID_POSITION, cell.GridX(), cell.GridY(), cell.CellX(), cell.CellY(), object->GetInstanceId(), zoneX, zoneY, groundZ, floorZ, haveMap, haveVMap, haveMMap); @@ -708,7 +709,7 @@ public: if (!*args) { - target->RemoveAllSpellCooldown(); + target->GetSpellHistory()->ResetAllCooldowns(); handler->PSendSysMessage(LANG_REMOVEALL_COOLDOWN, nameLink.c_str()); } else @@ -718,14 +719,15 @@ public: if (!spellIid) return false; - if (!sSpellMgr->GetSpellInfo(spellIid)) + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellIid); + if (!spellInfo) { handler->PSendSysMessage(LANG_UNKNOWN_SPELL, target == handler->GetSession()->GetPlayer() ? handler->GetTrinityString(LANG_YOU) : nameLink.c_str()); handler->SetSentErrorMessage(true); return false; } - target->RemoveSpellCooldown(spellIid, true); + target->GetSpellHistory()->ResetCooldown(spellIid, true); handler->PSendSysMessage(LANG_REMOVE_COOLDOWN, spellIid, target == handler->GetSession()->GetPlayer() ? handler->GetTrinityString(LANG_YOU) : nameLink.c_str()); } return true; @@ -1438,7 +1440,7 @@ public: * Player %s %s (guid: %u) - I. LANG_PINFO_PLAYER * ** GM Mode active, Phase: -1 - II. LANG_PINFO_GM_ACTIVE (if GM) * ** Banned: (Type, Reason, Time, By) - III. LANG_PINFO_BANNED (if banned) - * ** Muted: (Time, Reason, By) - IV. LANG_PINFO_MUTED (if muted) + * ** Muted: (Reason, Time, By) - IV. LANG_PINFO_MUTED (if muted) * * Account: %s (id: %u), GM Level: %u - V. LANG_PINFO_ACC_ACCOUNT * * Last Login: %u (Failed Logins: %u) - VI. LANG_PINFO_ACC_LASTLOGIN * * Uses OS: %s - Latency: %u ms - VII. LANG_PINFO_ACC_OS @@ -1691,7 +1693,7 @@ public: // Output IV. LANG_PINFO_MUTED if mute is applied if (muteTime > 0) - handler->PSendSysMessage(LANG_PINFO_MUTED, secsToTimeString(muteTime - time(NULL), true).c_str(), muteReason.c_str(), muteBy.c_str()); + handler->PSendSysMessage(LANG_PINFO_MUTED, muteReason.c_str(), secsToTimeString(muteTime - time(nullptr), true).c_str(), muteBy.c_str()); // Output V. LANG_PINFO_ACC_ACCOUNT handler->PSendSysMessage(LANG_PINFO_ACC_ACCOUNT, userName.c_str(), accId, security); @@ -1980,7 +1982,7 @@ public: PreparedStatement *stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_MUTE_INFO); stmt->setUInt32(0, accountId); PreparedQueryResult result = LoginDatabase.Query(stmt); - + if (!result) { handler->PSendSysMessage(LANG_COMMAND_MUTEHISTORY_EMPTY, accountName); @@ -1991,16 +1993,16 @@ public: do { Field* fields = result->Fetch(); - + // we have to manually set the string for mutedate time_t sqlTime = fields[0].GetUInt32(); tm timeinfo; char buffer[80]; - + // set it to string localtime_r(&sqlTime, &timeinfo); strftime(buffer, sizeof(buffer),"%Y-%m-%d %I:%M%p", &timeinfo); - + handler->PSendSysMessage(LANG_COMMAND_MUTEHISTORY_OUTPUT, buffer, fields[1].GetUInt32(), fields[2].GetCString(), fields[3].GetCString()); } while (result->NextRow()); return true; diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp index 4667b7c2767..54d1f314140 100644 --- a/src/server/scripts/Commands/cs_modify.cpp +++ b/src/server/scripts/Commands/cs_modify.cpp @@ -136,7 +136,7 @@ public: return false; } - Player* target = handler->getSelectedPlayer(); + Player* target = handler->getSelectedPlayerOrSelf(); if (!target) { handler->SendSysMessage(LANG_NO_CHAR_SELECTED); @@ -164,17 +164,6 @@ public: if (!*args) return false; - // char* pmana = strtok((char*)args, " "); - // if (!pmana) - // return false; - - // char* pmanaMax = strtok(NULL, " "); - // if (!pmanaMax) - // return false; - - // int32 manam = atoi(pmanaMax); - // int32 mana = atoi(pmana); - int32 energy = atoi((char*)args)*10; int32 energym = atoi((char*)args)*10; @@ -185,7 +174,7 @@ public: return false; } - Player* target = handler->getSelectedPlayer(); + Player* target = handler->getSelectedPlayerOrSelf(); if (!target) { handler->SendSysMessage(LANG_NO_CHAR_SELECTED); @@ -215,17 +204,6 @@ public: if (!*args) return false; - // char* pmana = strtok((char*)args, " "); - // if (!pmana) - // return false; - - // char* pmanaMax = strtok(NULL, " "); - // if (!pmanaMax) - // return false; - - // int32 manam = atoi(pmanaMax); - // int32 mana = atoi(pmana); - int32 rage = atoi((char*)args)*10; int32 ragem = atoi((char*)args)*10; @@ -236,7 +214,7 @@ public: return false; } - Player* target = handler->getSelectedPlayer(); + Player* target = handler->getSelectedPlayerOrSelf(); if (!target) { handler->SendSysMessage(LANG_NO_CHAR_SELECTED); @@ -274,7 +252,7 @@ public: return false; } - Player* target = handler->getSelectedPlayer(); + Player* target = handler->getSelectedPlayerOrSelf(); if (!target) { handler->SendSysMessage(LANG_NO_CHAR_SELECTED); @@ -390,7 +368,7 @@ public: else mark = atoi(pmark); - Player* target = handler->getSelectedPlayer(); + Player* target = handler->getSelectedPlayerOrSelf(); if (target == NULL) { handler->SendSysMessage(LANG_NO_CHAR_SELECTED); @@ -945,7 +923,7 @@ public: return false; } - Player* target = handler->getSelectedPlayer(); + Player* target = handler->getSelectedPlayerOrSelf(); if (!target) { handler->SendSysMessage(LANG_NO_CHAR_SELECTED); @@ -986,7 +964,7 @@ public: if (!*args) return false; - Player* target = handler->getSelectedPlayer(); + Player* target = handler->getSelectedPlayerOrSelf(); if (!target) { handler->SendSysMessage(LANG_NO_CHAR_SELECTED); @@ -1107,7 +1085,7 @@ public: if (!*args) return false; - Player* target = handler->getSelectedPlayer(); + Player* target = handler->getSelectedPlayerOrSelf(); if (!target) { handler->SendSysMessage(LANG_PLAYER_NOT_FOUND); @@ -1137,7 +1115,7 @@ public: if (drunklevel > 100) drunklevel = 100; - if (Player* target = handler->getSelectedPlayer()) + if (Player* target = handler->getSelectedPlayerOrSelf()) target->SetDrunkValue(drunklevel); return true; @@ -1148,7 +1126,7 @@ public: if (!*args) return false; - Player* target = handler->getSelectedPlayer(); + Player* target = handler->getSelectedPlayerOrSelf(); if (!target) { handler->SendSysMessage(LANG_PLAYER_NOT_FOUND); @@ -1302,7 +1280,7 @@ public: if (!*args) return false; - Player* target = handler->getSelectedPlayer(); + Player* target = handler->getSelectedPlayerOrSelf(); if (!target) { handler->SendSysMessage(LANG_PLAYER_NOT_FOUND); @@ -1324,7 +1302,7 @@ public: if (!*args) return false; - Player* target = handler->getSelectedPlayer(); + Player* target = handler->getSelectedPlayerOrSelf(); if (!target) { diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp index 390be999d9d..09a41fd82b5 100644 --- a/src/server/scripts/Commands/cs_npc.cpp +++ b/src/server/scripts/Commands/cs_npc.cpp @@ -370,28 +370,13 @@ public: uint32 lowGuid = atoi((char*)guidStr); - Creature* creature = NULL; - - /* FIXME: impossible without entry - if (lowguid) - creature = ObjectAccessor::GetCreature(*handler->GetSession()->GetPlayer(), MAKE_GUID(lowguid, HIGHGUID_UNIT)); - */ - // attempt check creature existence by DB data - if (!creature) - { - CreatureData const* data = sObjectMgr->GetCreatureData(lowGuid); - if (!data) - { - handler->PSendSysMessage(LANG_COMMAND_CREATGUIDNOTFOUND, lowGuid); - handler->SetSentErrorMessage(true); - return false; - } - } - else + CreatureData const* data = sObjectMgr->GetCreatureData(lowGuid); + if (!data) { - // obtain real GUID for DB operations - lowGuid = creature->GetDBTableGUIDLow(); + handler->PSendSysMessage(LANG_COMMAND_CREATGUIDNOTFOUND, lowGuid); + handler->SetSentErrorMessage(true); + return false; } int wait = waitStr ? atoi(waitStr) : 0; @@ -407,18 +392,6 @@ public: WorldDatabase.Execute(stmt); - if (creature && creature->GetWaypointPath()) - { - creature->SetDefaultMovementType(WAYPOINT_MOTION_TYPE); - creature->GetMotionMaster()->Initialize(); - if (creature->IsAlive()) // dead creature will reset movement generator at respawn - { - creature->setDeathState(JUST_DIED); - creature->Respawn(true); - } - creature->SaveToDB(); - } - handler->SendSysMessage(LANG_WAYPOINT_ADDED); return true; @@ -830,34 +803,22 @@ public: lowguid = atoi(cId); - /* FIXME: impossible without entry - if (lowguid) - creature = ObjectAccessor::GetCreature(*handler->GetSession()->GetPlayer(), MAKE_GUID(lowguid, HIGHGUID_UNIT)); - */ - // Attempting creature load from DB data - if (!creature) + CreatureData const* data = sObjectMgr->GetCreatureData(lowguid); + if (!data) { - CreatureData const* data = sObjectMgr->GetCreatureData(lowguid); - if (!data) - { - handler->PSendSysMessage(LANG_COMMAND_CREATGUIDNOTFOUND, lowguid); - handler->SetSentErrorMessage(true); - return false; - } + handler->PSendSysMessage(LANG_COMMAND_CREATGUIDNOTFOUND, lowguid); + handler->SetSentErrorMessage(true); + return false; + } - uint32 map_id = data->mapid; + uint32 map_id = data->mapid; - if (handler->GetSession()->GetPlayer()->GetMapId() != map_id) - { - handler->PSendSysMessage(LANG_COMMAND_CREATUREATSAMEMAP, lowguid); - handler->SetSentErrorMessage(true); - return false; - } - } - else + if (handler->GetSession()->GetPlayer()->GetMapId() != map_id) { - lowguid = creature->GetDBTableGUIDLow(); + handler->PSendSysMessage(LANG_COMMAND_CREATUREATSAMEMAP, lowguid); + handler->SetSentErrorMessage(true); + return false; } } else diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp index 5e83c0c8653..8965b64767a 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp @@ -126,7 +126,7 @@ public: if (dist(xn, yn, xh, yh) >= dist(xn, yn, xp, yp) || dist(xp, yp, xh, yh) >= dist(xn, yn, xp, yp)) return false; // check distance from the beam - return (abs((xn-xp)*yh+(yp-yn)*xh-xn*yp+xp*yn)/dist(xn, yn, xp, yp) < 1.5f); + return (std::abs((xn-xp)*yh+(yp-yn)*xh-xn*yp+xp*yn)/dist(xn, yn, xp, yp) < 1.5f); } float dist(float xa, float ya, float xb, float yb) // auxiliary method for distance diff --git a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp index 1302c618e6f..e3ab206ac21 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp @@ -268,7 +268,7 @@ public: return ObjectGuid::Empty; } - void Load(char const* chrIn) + void Load(char const* chrIn) override { if (!chrIn) { diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp index 59f2ce1a2c9..92c3f83034d 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp @@ -360,17 +360,17 @@ public: case GOSSIP_ACTION_INFO_DEF+3: player->CLOSE_GOSSIP_MENU(); pBarnesAI->m_uiEventId = EVENT_OZ; - TC_LOG_INFO("scripts", "player (%s) manually set Opera event to EVENT_OZ", player->GetGUID().ToString().c_str()); + TC_LOG_DEBUG("scripts", "player (%s) manually set Opera event to EVENT_OZ", player->GetGUID().ToString().c_str()); break; case GOSSIP_ACTION_INFO_DEF+4: player->CLOSE_GOSSIP_MENU(); pBarnesAI->m_uiEventId = EVENT_HOOD; - TC_LOG_INFO("scripts", "player (%s) manually set Opera event to EVENT_HOOD", player->GetGUID().ToString().c_str()); + TC_LOG_DEBUG("scripts", "player (%s) manually set Opera event to EVENT_HOOD", player->GetGUID().ToString().c_str()); break; case GOSSIP_ACTION_INFO_DEF+5: player->CLOSE_GOSSIP_MENU(); pBarnesAI->m_uiEventId = EVENT_RAJ; - TC_LOG_INFO("scripts", "player (%s) manually set Opera event to EVENT_RAJ", player->GetGUID().ToString().c_str()); + TC_LOG_DEBUG("scripts", "player (%s) manually set Opera event to EVENT_RAJ", player->GetGUID().ToString().c_str()); break; } diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp index b21b2f8a73c..3df07562d50 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp @@ -1657,7 +1657,7 @@ public: { npc_the_lich_king_tirion_dawnAI(Creature* creature) : ScriptedAI(creature) { Reset(); } void Reset() override { } - void AttackStart(Unit* /*who*/) { } // very sample, just don't make them aggreesive override + void AttackStart(Unit* /*who*/) override { } // very sample, just don't make them aggreesive void UpdateAI(uint32 /*diff*/) override { } void JustDied(Unit* /*killer*/) override { } }; diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp index be544449b67..a085463f7ce 100644 --- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp +++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp @@ -236,7 +236,7 @@ public: OUT_LOAD_INST_DATA_COMPLETE; } - void Update(uint32 uiDiff) + void Update(uint32 uiDiff) override { if (GetData(TYPE_FENRUS) != DONE) return; diff --git a/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp b/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp index 1d7e1594d05..ca944f7037b 100644 --- a/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp +++ b/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp @@ -102,7 +102,7 @@ public: } } - virtual void Update(uint32 /*diff*/) // correct order goes form 1-6 + virtual void Update(uint32 /*diff*/) override // correct order goes form 1-6 { switch (State) { diff --git a/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.cpp b/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.cpp index 3ced85f09a2..97be139cefe 100644 --- a/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.cpp +++ b/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.cpp @@ -36,19 +36,27 @@ EndContentData */ # at_malfurion_Stormrage_trigger #####*/ -class at_malfurion_stormrage : public AreaTriggerScript +enum MalfurionMisc { -public: - at_malfurion_stormrage() : AreaTriggerScript("at_malfurion_stormrage") { } + NPC_MALFURION_STORMRAGE = 15362, + QUEST_ERANIKUS_TYRANT_OF_DREAMS = 8733, + QUEST_THE_CHARGE_OF_DRAGONFLIGHTS = 8555, +}; - bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override - { - if (player->GetInstanceScript() && !player->FindNearestCreature(15362, 15)) - player->SummonCreature(15362, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), -1.52f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 100000); - return false; - } +class at_malfurion_stormrage : public AreaTriggerScript +{ + public: + at_malfurion_stormrage() : AreaTriggerScript("at_malfurion_stormrage") { } + bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override + { + if (player->GetInstanceScript() && !player->FindNearestCreature(NPC_MALFURION_STORMRAGE, 15.0f) && + player->GetQuestStatus(QUEST_THE_CHARGE_OF_DRAGONFLIGHTS) == QUEST_STATUS_REWARDED && player->GetQuestStatus(QUEST_ERANIKUS_TYRANT_OF_DREAMS) != QUEST_STATUS_REWARDED) + player->SummonCreature(NPC_MALFURION_STORMRAGE, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), -1.52f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 100000); + return false; + } }; + /*##### # go_atalai_statue #####*/ diff --git a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp index ec2f41cc625..29002460b2a 100644 --- a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp +++ b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp @@ -41,14 +41,17 @@ enum Says enum Spells { - SPELL_GROUND_TREMOR = 6524, - SPELL_ARCHAEDAS_AWAKEN = 10347, - SPELL_BOSS_OBJECT_VISUAL = 11206, - SPELL_BOSS_AGGRO = 10340, - SPELL_SUB_BOSS_AGGRO = 11568, - SPELL_AWAKEN_VAULT_WALKER = 10258, - SPELL_AWAKEN_EARTHEN_GUARDIAN = 10252, - SPELL_SELF_DESTRUCT = 9874 + SPELL_GROUND_TREMOR = 6524, + SPELL_ARCHAEDAS_AWAKEN = 10347, + SPELL_BOSS_OBJECT_VISUAL = 11206, + SPELL_BOSS_AGGRO = 10340, + SPELL_SUB_BOSS_AGGRO = 11568, + SPELL_AWAKEN_VAULT_WALKER = 10258, + SPELL_AWAKEN_EARTHEN_GUARDIAN = 10252, + SPELL_SELF_DESTRUCT = 9874, + SPELL_FREEZE_ANIM = 16245, + SPELL_MINION_FREEZE_ANIM = 10255 + }; class boss_archaedas : public CreatureScript @@ -96,6 +99,7 @@ class boss_archaedas : public CreatureScript me->setFaction(35); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE); + me->AddAura(SPELL_FREEZE_ANIM, me); } void ActivateMinion(ObjectGuid uiGuid, bool flag) @@ -109,6 +113,7 @@ class boss_archaedas : public CreatureScript minion->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); minion->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE); minion->setFaction(14); + minion->RemoveAura(SPELL_MINION_FREEZE_ANIM); } } @@ -197,7 +202,7 @@ class boss_archaedas : public CreatureScript DoMeleeAttackIfReady(); } - void JustDied (Unit* /*killer*/) + void JustDied (Unit* /*killer*/) override { instance->SetData(DATA_ANCIENT_DOOR, DONE); // open the vault door instance->SetData(DATA_MINIONS, SPECIAL); // deactivate his minions @@ -258,6 +263,7 @@ class npc_archaedas_minions : public CreatureScript me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE); me->RemoveAllAuras(); + me->AddAura(SPELL_MINION_FREEZE_ANIM, me); } void EnterCombat(Unit* /*who*/) override @@ -297,7 +303,7 @@ class npc_archaedas_minions : public CreatureScript { bWakingUp = false; bAmIAwake = true; - // AttackStart(ObjectAccessor::GetUnit(*me, instance->GetGuidData(0))); // whoWokeArchaedasGUID + AttackStart(ObjectAccessor::GetUnit(*me, instance->GetGuidData(0))); // whoWokeArchaedasGUID return; // dont want to continue until we finish the AttackStart method } @@ -346,6 +352,7 @@ class npc_stonekeepers : public CreatureScript me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE); me->RemoveAllAuras(); + me->AddAura(SPELL_MINION_FREEZE_ANIM, me); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp b/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp index de899c04e1a..7f0faa138ec 100644 --- a/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp +++ b/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp @@ -28,10 +28,9 @@ EndScriptData */ enum Ironaya { - SAY_AGGRO = 0, SPELL_ARCINGSMASH = 8374, SPELL_KNOCKAWAY = 10101, - SPELL_WSTOMP = 11876, + SPELL_WSTOMP = 11876 }; class boss_ironaya : public CreatureScript @@ -66,10 +65,7 @@ class boss_ironaya : public CreatureScript Initialize(); } - void EnterCombat(Unit* /*who*/) override - { - Talk(SAY_AGGRO); - } + void EnterCombat(Unit* /*who*/) override { } void UpdateAI(uint32 uiDiff) override { diff --git a/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp b/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp index 9d33d41af62..11699d4ec43 100644 --- a/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp +++ b/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp @@ -18,12 +18,13 @@ /* ScriptData SDName: instance_uldaman -SD%Complete: 99 +SD%Complete: 80% SDComment: Need some cosmetics updates when archeadas door are closing (Guardians Waypoints). SDCategory: Uldaman EndScriptData */ #include "ScriptMgr.h" +#include "ScriptedCreature.h" #include "InstanceScript.h" #include "uldaman.h" @@ -31,6 +32,8 @@ enum Spells { SPELL_ARCHAEDAS_AWAKEN = 10347, SPELL_AWAKEN_VAULT_WALKER = 10258, + SPELL_FREEZE_ANIM = 16245, + SPELL_MINION_FREEZE_ANIM = 10255 }; enum Events @@ -38,6 +41,13 @@ enum Events EVENT_SUB_BOSS_AGGRO = 2228 }; +enum IronayaTalk +{ + SAY_AGGRO = 0 +}; + +const Position IronayaPoint = { -231.228f, 246.6135f, -49.01617f, 0.0f }; + class instance_uldaman : public InstanceMapScript { public: @@ -136,9 +146,9 @@ class instance_uldaman : public InstanceMapScript { creature->setFaction(35); creature->RemoveAllAuras(); - //creature->RemoveFlag (UNIT_FIELD_FLAGS, UNIT_FLAG_ANIMATION_FROZEN); creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE); + creature->AddAura(SPELL_MINION_FREEZE_ANIM, creature); } void SetDoor(ObjectGuid guid, bool open) @@ -171,6 +181,8 @@ class instance_uldaman : public InstanceMapScript target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE); target->setFaction(14); target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + target->RemoveAura(SPELL_MINION_FREEZE_ANIM); + return; // only want the first one we find } // if we get this far than all four are dead so open the door @@ -190,11 +202,13 @@ class instance_uldaman : public InstanceMapScript Creature* target = instance->GetCreature(*i); if (!target || !target->IsAlive() || target->getFaction() == 14) continue; - archaedas->CastSpell(target, SPELL_AWAKEN_VAULT_WALKER, true); - target->CastSpell(target, SPELL_ARCHAEDAS_AWAKEN, true); target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE); target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); target->setFaction(14); + target->RemoveAura(SPELL_MINION_FREEZE_ANIM); + archaedas->CastSpell(target, SPELL_AWAKEN_VAULT_WALKER, true); + target->CastSpell(target, SPELL_ARCHAEDAS_AWAKEN, true); + return; // only want the first one we find } } @@ -241,6 +255,7 @@ class instance_uldaman : public InstanceMapScript if (ObjectAccessor::GetUnit(*archaedas, target)) { + archaedas->RemoveAura(SPELL_FREEZE_ANIM); archaedas->CastSpell(archaedas, SPELL_ARCHAEDAS_AWAKEN, false); whoWokeuiArchaedasGUID = target; } @@ -255,6 +270,12 @@ class instance_uldaman : public InstanceMapScript ironaya->setFaction(415); ironaya->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE); ironaya->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + + ironaya->GetMotionMaster()->Clear(); + ironaya->GetMotionMaster()->MovePoint(0, IronayaPoint); + ironaya->SetHomePosition(IronayaPoint); + + ironaya->AI()->Talk(SAY_AGGRO); } void RespawnMinions() diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp index 1a98c081570..a9abb2c045d 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp @@ -694,7 +694,7 @@ class boss_gazakroth : public CreatureScript public: boss_gazakroth() : CreatureScript("boss_gazakroth") { } - + struct boss_gazakrothAI : public boss_hexlord_addAI { boss_gazakrothAI(Creature* creature) : boss_hexlord_addAI(creature) @@ -706,7 +706,7 @@ class boss_gazakroth : public CreatureScript { firebolt_timer = 2 * IN_MILLISECONDS; } - + void Reset() override { Initialize(); diff --git a/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp b/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp index 7c4190a648d..ac261f29287 100644 --- a/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp @@ -114,7 +114,7 @@ class npc_professor_phizzlethorpe : public CreatureScript Talk(SAY_AGGRO); } - void sQuestAccept(Player* player, Quest const* quest) + void sQuestAccept(Player* player, Quest const* quest) override { if (quest->GetQuestId() == QUEST_SUNKEN_TREASURE) { diff --git a/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp b/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp index a29bb9b75b3..5b63c509eaa 100644 --- a/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp @@ -75,7 +75,7 @@ public: summoned->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()); } - void sQuestAccept(Player* player, Quest const* quest) + void sQuestAccept(Player* player, Quest const* quest) override { if (quest->GetQuestId() == QUEST_RESQUE_OOX_09) { diff --git a/src/server/scripts/EasternKingdoms/zone_undercity.cpp b/src/server/scripts/EasternKingdoms/zone_undercity.cpp index 9ce694fb76c..d7d06a2e3ab 100644 --- a/src/server/scripts/EasternKingdoms/zone_undercity.cpp +++ b/src/server/scripts/EasternKingdoms/zone_undercity.cpp @@ -40,25 +40,44 @@ EndContentData */ enum Sylvanas { - QUEST_JOURNEY_TO_UNDERCITY = 9180, - EMOTE_LAMENT_END = 0, - SAY_LAMENT_END = 1, + QUEST_JOURNEY_TO_UNDERCITY = 9180, - SOUND_CREDIT = 10896, - ENTRY_HIGHBORNE_LAMENTER = 21628, - ENTRY_HIGHBORNE_BUNNY = 21641, + EMOTE_LAMENT_END = 0, + SAY_LAMENT_END = 1, + EMOTE_LAMENT = 2, - SPELL_HIGHBORNE_AURA = 37090, - SPELL_SYLVANAS_CAST = 36568, - SPELL_RIBBON_OF_SOULS = 34432, // the real one to use might be 37099 + // Ambassador Sunsorrow + SAY_SUNSORROW_WHISPER = 0, + + SOUND_CREDIT = 10896, + + NPC_HIGHBORNE_LAMENTER = 21628, + NPC_HIGHBORNE_BUNNY = 21641, + NPC_AMBASSADOR_SUNSORROW = 16287, + + SPELL_HIGHBORNE_AURA = 37090, + SPELL_SYLVANAS_CAST = 36568, + //SPELL_RIBBON_OF_SOULS = 34432, the real one to use might be 37099 + SPELL_RIBBON_OF_SOULS = 37099, // Combat spells - SPELL_BLACK_ARROW = 59712, - SPELL_FADE = 20672, - SPELL_FADE_BLINK = 29211, - SPELL_MULTI_SHOT = 59713, - SPELL_SHOT = 59710, - SPELL_SUMMON_SKELETON = 59711 + SPELL_BLACK_ARROW = 59712, + SPELL_FADE = 20672, + SPELL_FADE_BLINK = 29211, + SPELL_MULTI_SHOT = 59713, + SPELL_SHOT = 59710, + SPELL_SUMMON_SKELETON = 59711, + + // Events + EVENT_FADE = 1, + EVENT_SUMMON_SKELETON = 2, + EVENT_BLACK_ARROW = 3, + EVENT_SHOOT = 4, + EVENT_MULTI_SHOT = 5, + EVENT_LAMENT_OF_THE_HIGHBORN = 6, + EVENT_SUNSORROW_WHISPER = 7, + + GUID_EVENT_INVOKER = 1, }; float HighborneLoc[4][3]= @@ -77,26 +96,14 @@ class npc_lady_sylvanas_windrunner : public CreatureScript public: npc_lady_sylvanas_windrunner() : CreatureScript("npc_lady_sylvanas_windrunner") { } - bool OnQuestReward(Player* /*player*/, Creature* creature, const Quest *_Quest, uint32 /*slot*/) override + bool OnQuestReward(Player* player, Creature* creature, const Quest *_Quest, uint32 /*slot*/) override { if (_Quest->GetQuestId() == QUEST_JOURNEY_TO_UNDERCITY) - { - ENSURE_AI(npc_lady_sylvanas_windrunner::npc_lady_sylvanas_windrunnerAI, creature->AI())->LamentEvent = true; - ENSURE_AI(npc_lady_sylvanas_windrunner::npc_lady_sylvanas_windrunnerAI, creature->AI())->DoPlaySoundToSet(creature, SOUND_CREDIT); - creature->CastSpell(creature, SPELL_SYLVANAS_CAST, false); - - for (uint8 i = 0; i < 4; ++i) - creature->SummonCreature(ENTRY_HIGHBORNE_LAMENTER, HighborneLoc[i][0], HighborneLoc[i][1], HIGHBORNE_LOC_Y, HighborneLoc[i][2], TEMPSUMMON_TIMED_DESPAWN, 160000); - } + creature->AI()->SetGUID(player->GetGUID(), GUID_EVENT_INVOKER); return true; } - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_lady_sylvanas_windrunnerAI(creature); - } - struct npc_lady_sylvanas_windrunnerAI : public ScriptedAI { npc_lady_sylvanas_windrunnerAI(Creature* creature) : ScriptedAI(creature) @@ -106,41 +113,51 @@ public: void Initialize() { - LamentEventTimer = 5000; LamentEvent = false; targetGUID.Clear(); - - FadeTimer = 30000; - SummonSkeletonTimer = 20000; - BlackArrowTimer = 15000; - ShotTimer = 8000; - MultiShotTimer = 10000; + playerGUID.Clear(); } - uint32 LamentEventTimer; - bool LamentEvent; - ObjectGuid targetGUID; - - uint32 FadeTimer; - uint32 SummonSkeletonTimer; - uint32 BlackArrowTimer; - uint32 ShotTimer; - uint32 MultiShotTimer; - void Reset() override { Initialize(); + _events.Reset(); } - void EnterCombat(Unit* /*who*/) override { } + void EnterCombat(Unit* /*who*/) override + { + _events.ScheduleEvent(EVENT_FADE, 30000); + _events.ScheduleEvent(EVENT_SUMMON_SKELETON, 20000); + _events.ScheduleEvent(EVENT_BLACK_ARROW, 15000); + _events.ScheduleEvent(EVENT_SHOOT, 8000); + _events.ScheduleEvent(EVENT_MULTI_SHOT, 10000); + } + + void SetGUID(ObjectGuid guid, int32 type) override + { + if (type == GUID_EVENT_INVOKER) + { + Talk(EMOTE_LAMENT); + DoPlaySoundToSet(me, SOUND_CREDIT); + DoCast(me, SPELL_SYLVANAS_CAST, false); + playerGUID = guid; + LamentEvent = true; + + for (uint8 i = 0; i < 4; ++i) + me->SummonCreature(NPC_HIGHBORNE_LAMENTER, HighborneLoc[i][0], HighborneLoc[i][1], HIGHBORNE_LOC_Y, HighborneLoc[i][2], TEMPSUMMON_TIMED_DESPAWN, 160000); + + _events.ScheduleEvent(EVENT_LAMENT_OF_THE_HIGHBORN, 2000); + _events.ScheduleEvent(EVENT_SUNSORROW_WHISPER, 10000); + } + } void JustSummoned(Creature* summoned) override { - if (summoned->GetEntry() == ENTRY_HIGHBORNE_BUNNY) + if (summoned->GetEntry() == NPC_HIGHBORNE_BUNNY) { if (Creature* target = ObjectAccessor::GetCreature(*summoned, targetGUID)) { - target->MonsterMoveWithSpeed(target->GetPositionX(), target->GetPositionY(), me->GetPositionZ()+15.0f, 0); + target->GetMotionMaster()->MoveJump(target->GetPositionX(), target->GetPositionY(), me->GetPositionZ() + 15.0f, 0); target->SetPosition(target->GetPositionX(), target->GetPositionY(), me->GetPositionZ()+15.0f, 0.0f); summoned->CastSpell(target, SPELL_RIBBON_OF_SOULS, false); } @@ -152,75 +169,86 @@ public: void UpdateAI(uint32 diff) override { - if (LamentEvent) - { - if (LamentEventTimer <= diff) - { - DoSummon(ENTRY_HIGHBORNE_BUNNY, me, 10.0f, 3000, TEMPSUMMON_TIMED_DESPAWN); - - LamentEventTimer = 2000; - if (!me->HasAura(SPELL_SYLVANAS_CAST)) - { - Talk(SAY_LAMENT_END); - Talk(EMOTE_LAMENT_END); - LamentEvent = false; - } - } else LamentEventTimer -= diff; - } - - if (!UpdateVictim()) + if (!UpdateVictim() && !LamentEvent) return; - // Combat spells + _events.Update(diff); - if (FadeTimer <= diff) - { - DoCast(me, SPELL_FADE); - // add a blink to simulate a stealthed movement and reappearing elsewhere - DoCast(me, SPELL_FADE_BLINK); - FadeTimer = 30000 + rand32() % 5000; - // if the victim is out of melee range she cast multi shot - if (Unit* victim = me->GetVictim()) - if (me->GetDistance(victim) > 10.0f) - DoCast(victim, SPELL_MULTI_SHOT); - } else FadeTimer -= diff; - - if (SummonSkeletonTimer <= diff) - { - DoCast(me, SPELL_SUMMON_SKELETON); - SummonSkeletonTimer = 20000 + rand32() % 10000; - } else SummonSkeletonTimer -= diff; - - if (BlackArrowTimer <= diff) - { - if (Unit* victim = me->GetVictim()) - { - DoCast(victim, SPELL_BLACK_ARROW); - BlackArrowTimer = 15000 + rand32() % 5000; - } - } else BlackArrowTimer -= diff; - - if (ShotTimer <= diff) - { - if (Unit* victim = me->GetVictim()) - { - DoCast(victim, SPELL_SHOT); - ShotTimer = 8000 + rand32() % 2000; - } - } else ShotTimer -= diff; + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - if (MultiShotTimer <= diff) + while (uint32 eventId = _events.ExecuteEvent()) { - if (Unit* victim = me->GetVictim()) + switch (eventId) { - DoCast(victim, SPELL_MULTI_SHOT); - MultiShotTimer = 10000 + rand32() % 3000; + case EVENT_FADE: + DoCast(me, SPELL_FADE); + // add a blink to simulate a stealthed movement and reappearing elsewhere + DoCast(me, SPELL_FADE_BLINK); + // if the victim is out of melee range she cast multi shot + if (Unit* victim = me->GetVictim()) + if (me->GetDistance(victim) > 10.0f) + DoCast(victim, SPELL_MULTI_SHOT); + _events.ScheduleEvent(EVENT_FADE, urand(30000, 35000)); + break; + case EVENT_SUMMON_SKELETON: + DoCast(me, SPELL_SUMMON_SKELETON); + _events.ScheduleEvent(EVENT_SUMMON_SKELETON, urand(20000, 30000)); + break; + case EVENT_BLACK_ARROW: + if (Unit* victim = me->GetVictim()) + DoCast(victim, SPELL_BLACK_ARROW); + _events.ScheduleEvent(EVENT_BLACK_ARROW, urand(15000, 20000)); + break; + case EVENT_SHOOT: + if (Unit* victim = me->GetVictim()) + DoCast(victim, SPELL_SHOT); + _events.ScheduleEvent(EVENT_SHOOT, urand(8000, 10000)); + break; + case EVENT_MULTI_SHOT: + if (Unit* victim = me->GetVictim()) + DoCast(victim, SPELL_MULTI_SHOT); + _events.ScheduleEvent(EVENT_MULTI_SHOT, urand(10000, 13000)); + break; + case EVENT_LAMENT_OF_THE_HIGHBORN: + if (!me->HasAura(SPELL_SYLVANAS_CAST)) + { + Talk(SAY_LAMENT_END); + Talk(EMOTE_LAMENT_END); + LamentEvent = false; + me->HandleEmoteCommand(EMOTE_ONESHOT_KNEEL); + Reset(); + } + else + { + DoSummon(NPC_HIGHBORNE_BUNNY, me, 10.0f, 3000, TEMPSUMMON_TIMED_DESPAWN); + _events.ScheduleEvent(EVENT_LAMENT_OF_THE_HIGHBORN, 2000); + } + break; + case EVENT_SUNSORROW_WHISPER: + if (Creature* ambassador = me->FindNearestCreature(NPC_AMBASSADOR_SUNSORROW, 20.0f)) + if (Player* player = ObjectAccessor::GetPlayer(*me, playerGUID)) + ambassador->AI()->Talk(SAY_SUNSORROW_WHISPER, player); + break; + default: + break; } - } else MultiShotTimer -= diff; + } DoMeleeAttackIfReady(); } + + private: + EventMap _events; + bool LamentEvent; + ObjectGuid targetGUID; + ObjectGuid playerGUID; }; + + CreatureAI* GetAI(Creature* creature) const override + { + return new npc_lady_sylvanas_windrunnerAI(creature); + } }; /*###### diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp index 0311ed61c6a..ecda065fda9 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp @@ -32,8 +32,7 @@ enum Spells SPELL_CURSE_OF_EXERTION = 52772, SPELL_TIME_WARP = 52766, //Time slows down, reducing attack, casting and movement speed by 70% for 6 sec. SPELL_TIME_STOP = 58848, //Stops time in a 50 yard sphere for 2 sec. - SPELL_WOUNDING_STRIKE = 52771, //Used only on the tank - H_SPELL_WOUNDING_STRIKE = 58830 + SPELL_WOUNDING_STRIKE = 52771 //Used only on the tank }; enum Yells @@ -45,109 +44,78 @@ enum Yells SAY_DEATH = 4 }; -class boss_epoch : public CreatureScript +enum Events { -public: - boss_epoch() : CreatureScript("boss_epoch") { } - - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<boss_epochAI>(creature); - } - - struct boss_epochAI : public ScriptedAI - { - boss_epochAI(Creature* creature) : ScriptedAI(creature) - { - Initialize(); - instance = creature->GetInstanceScript(); - } - - void Initialize() - { - uiStep = 1; - uiStepTimer = 26000; - uiCurseOfExertionTimer = 9300; - uiTimeWarpTimer = 25300; - uiTimeStopTimer = 21300; - uiWoundingStrikeTimer = 5300; - } - - uint8 uiStep; - - uint32 uiStepTimer; - uint32 uiWoundingStrikeTimer; - uint32 uiTimeWarpTimer; - uint32 uiTimeStopTimer; - uint32 uiCurseOfExertionTimer; - - InstanceScript* instance; - - void Reset() override - { - Initialize(); - - instance->SetBossState(DATA_EPOCH, NOT_STARTED); - } - - void EnterCombat(Unit* /*who*/) override - { - Talk(SAY_AGGRO); + EVENT_CURSE_OF_EXERTION = 1, + EVENT_TIME_WARP, + EVENT_TIME_STOP, + EVENT_WOUNDING_STRIKE +}; - instance->SetBossState(DATA_EPOCH, IN_PROGRESS); - } +class boss_epoch : public CreatureScript +{ + public: + boss_epoch() : CreatureScript("boss_epoch") { } - void UpdateAI(uint32 diff) override + struct boss_epochAI : public BossAI { - //Return since we have no target - if (!UpdateVictim()) - return; + boss_epochAI(Creature* creature) : BossAI(creature, DATA_EPOCH) { } - if (uiCurseOfExertionTimer < diff) + void EnterCombat(Unit* /*who*/) override { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) - DoCast(target, SPELL_CURSE_OF_EXERTION); - uiCurseOfExertionTimer = 9300; - } else uiCurseOfExertionTimer -= diff; + Talk(SAY_AGGRO); + _EnterCombat(); - if (uiWoundingStrikeTimer < diff) - { - DoCastVictim(SPELL_WOUNDING_STRIKE); - uiWoundingStrikeTimer = 5300; - } else uiWoundingStrikeTimer -= diff; + events.ScheduleEvent(EVENT_CURSE_OF_EXERTION, 9300); + events.ScheduleEvent(EVENT_TIME_WARP, 25300); + events.ScheduleEvent(EVENT_TIME_STOP, 21300); + events.ScheduleEvent(EVENT_WOUNDING_STRIKE, 5300); + } - if (uiTimeStopTimer < diff) + void ExecuteEvent(uint32 eventId) override { - DoCastAOE(SPELL_TIME_STOP); - uiTimeStopTimer = 21300; - } else uiTimeStopTimer -= diff; - - if (uiTimeWarpTimer < diff) + switch (eventId) + { + case EVENT_CURSE_OF_EXERTION: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true)) + DoCast(target, SPELL_CURSE_OF_EXERTION); + events.ScheduleEvent(EVENT_CURSE_OF_EXERTION, 9300); + break; + case EVENT_TIME_WARP: + Talk(SAY_TIME_WARP); + DoCastAOE(SPELL_TIME_WARP); + events.ScheduleEvent(EVENT_TIME_WARP, 25300); + break; + case EVENT_TIME_STOP: + DoCastAOE(SPELL_TIME_STOP); + events.ScheduleEvent(EVENT_TIME_STOP, 21300); + break; + case EVENT_WOUNDING_STRIKE: + DoCastVictim(SPELL_WOUNDING_STRIKE); + events.ScheduleEvent(EVENT_WOUNDING_STRIKE, 5300); + break; + default: + break; + } + } + + void JustDied(Unit* /*killer*/) override { - Talk(SAY_TIME_WARP); - DoCastAOE(SPELL_TIME_WARP); - uiTimeWarpTimer = 25300; - } else uiTimeWarpTimer -= diff; + Talk(SAY_DEATH); + _JustDied(); + } - DoMeleeAttackIfReady(); - } - - void JustDied(Unit* /*killer*/) override - { - Talk(SAY_DEATH); - - instance->SetBossState(DATA_EPOCH, DONE); - } + void KilledUnit(Unit* victim) override + { + if (victim->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); + } + }; - void KilledUnit(Unit* victim) override + CreatureAI* GetAI(Creature* creature) const override { - if (victim->GetTypeId() != TYPEID_PLAYER) - return; - - Talk(SAY_SLAY); + return GetInstanceAI<boss_epochAI>(creature); } - }; - }; void AddSC_boss_epoch() diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp index f672871922a..b5d2931377f 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp @@ -421,7 +421,7 @@ public: gossipStep = 0; } - void AttackStart(Unit* who) + void AttackStart(Unit* who) override { if (who && !who->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC)) npc_escortAI::AttackStart(who); diff --git a/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp b/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp index 2b00254167d..d8966ec76c1 100644 --- a/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp +++ b/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp @@ -76,7 +76,7 @@ public: } } - void Update(uint32 /*diff*/) + void Update(uint32 /*diff*/) override { if (WardKeeperDeath == WARD_KEEPERS_NR) if (GameObject* go = instance->GetGameObject(DoorWardGUID)) diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp index f8873b06a75..d16a86f350f 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp @@ -57,7 +57,7 @@ class instance_ruins_of_ahnqiraj : public InstanceMapScript } } - bool SetBossState(uint32 bossId, EncounterState state) + bool SetBossState(uint32 bossId, EncounterState state) override { if (!InstanceScript::SetBossState(bossId, state)) return false; diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp index 50fd94e66ee..65ffb7fd696 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp @@ -99,7 +99,7 @@ struct boss_twinemperorsAI : public ScriptedAI uint32 EnrageTimer; virtual bool IAmVeklor() = 0; - virtual void Reset() = 0; + virtual void Reset() override = 0; virtual void CastSpellOnBug(Creature* target) = 0; void TwinReset() @@ -400,7 +400,7 @@ public: struct boss_veknilashAI : public boss_twinemperorsAI { - bool IAmVeklor() {return false;} + bool IAmVeklor() override {return false;} boss_veknilashAI(Creature* creature) : boss_twinemperorsAI(creature) { Initialize(); @@ -425,7 +425,7 @@ public: me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true); } - void CastSpellOnBug(Creature* target) + void CastSpellOnBug(Creature* target) override { target->setFaction(14); target->AI()->AttackStart(me->getThreatManager().getHostilTarget()); @@ -488,7 +488,7 @@ public: struct boss_veklorAI : public boss_twinemperorsAI { - bool IAmVeklor() {return true;} + bool IAmVeklor() override {return true;} boss_veklorAI(Creature* creature) : boss_twinemperorsAI(creature) { Initialize(); @@ -516,7 +516,7 @@ public: me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, true); } - void CastSpellOnBug(Creature* target) + void CastSpellOnBug(Creature* target) override { target->setFaction(14); target->AddAura(SPELL_EXPLODEBUG, target); diff --git a/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp b/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp index 244261a86c1..46e831b0f83 100644 --- a/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp +++ b/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp @@ -220,7 +220,7 @@ public: }; } - virtual void Update(uint32 diff) + virtual void Update(uint32 diff) override { switch (PyramidPhase) { diff --git a/src/server/scripts/Kalimdor/zone_ashenvale.cpp b/src/server/scripts/Kalimdor/zone_ashenvale.cpp index 76b43729517..b8e6bfb85e8 100644 --- a/src/server/scripts/Kalimdor/zone_ashenvale.cpp +++ b/src/server/scripts/Kalimdor/zone_ashenvale.cpp @@ -24,7 +24,6 @@ SDCategory: Ashenvale Forest EndScriptData */ /* ContentData -npc_torek npc_ruul_snowhoof EndContentData */ @@ -34,132 +33,6 @@ EndContentData */ #include "Player.h" /*#### -# npc_torek -####*/ - -enum Torek -{ - SAY_READY = 0, - SAY_MOVE = 1, - SAY_PREPARE = 2, - SAY_WIN = 3, - SAY_END = 4, - SPELL_REND = 11977, - SPELL_THUNDERCLAP = 8078, - QUEST_TOREK_ASSULT = 6544, - NPC_SPLINTERTREE_RAIDER = 12859, - NPC_DURIEL = 12860, - NPC_SILVERWING_SENTINEL = 12896, - NPC_SILVERWING_WARRIOR = 12897, - FACTION_QUEST = 113 -}; - -class npc_torek : public CreatureScript -{ -public: - npc_torek() : CreatureScript("npc_torek") { } - - struct npc_torekAI : public npc_escortAI - { - npc_torekAI(Creature* creature) : npc_escortAI(creature) - { - Initialize(); - } - - void Initialize() - { - rend_Timer = 5000; - thunderclap_Timer = 8000; - _completed = false; - } - - void Reset() override - { - Initialize(); - } - - void EnterCombat(Unit* /*who*/) override { } - - void JustSummoned(Creature* summoned) override - { - summoned->AI()->AttackStart(me); - } - - void sQuestAccept(Player* player, Quest const* quest) - { - if (quest->GetQuestId() == QUEST_TOREK_ASSULT) - { - /// @todo find companions, make them follow Torek, at any time (possibly done by core/database in future?) - Talk(SAY_READY, player); - me->setFaction(FACTION_QUEST); - npc_escortAI::Start(true, true, player->GetGUID()); - } - } - - void WaypointReached(uint32 waypointId) override - { - if (Player* player = GetPlayerForEscort()) - { - switch (waypointId) - { - case 1: - Talk(SAY_MOVE, player); - break; - case 8: - Talk(SAY_PREPARE, player); - break; - case 19: - /// @todo verify location and creatures amount. - me->SummonCreature(NPC_DURIEL, 1776.73f, -2049.06f, 109.83f, 1.54f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); - me->SummonCreature(NPC_SILVERWING_SENTINEL, 1774.64f, -2049.41f, 109.83f, 1.40f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); - me->SummonCreature(NPC_SILVERWING_WARRIOR, 1778.73f, -2049.50f, 109.83f, 1.67f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); - break; - case 20: - Talk(SAY_WIN, player); - _completed = true; - player->GroupEventHappens(QUEST_TOREK_ASSULT, me); - break; - case 21: - Talk(SAY_END, player); - break; - } - } - } - - void UpdateAI(uint32 diff) override - { - npc_escortAI::UpdateAI(diff); - - if (!UpdateVictim()) - return; - - if (rend_Timer <= diff) - { - DoCastVictim(SPELL_REND); - rend_Timer = 20000; - } else rend_Timer -= diff; - - if (thunderclap_Timer <= diff) - { - DoCast(me, SPELL_THUNDERCLAP); - thunderclap_Timer = 30000; - } else thunderclap_Timer -= diff; - } - - private: - uint32 rend_Timer; - uint32 thunderclap_Timer; - bool _completed; - - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_torekAI(creature); - } -}; - -/*#### # npc_ruul_snowhoof ####*/ @@ -169,6 +42,7 @@ enum RuulSnowhoof NPC_THISTLEFUR_TOTEMIC = 3922, NPC_THISTLEFUR_PATHFINDER = 3926, QUEST_FREEDOM_TO_RUUL = 6482, + FACTION_QUEST = 113, GO_CAGE = 178147 }; @@ -204,7 +78,7 @@ public: summoned->AI()->AttackStart(me); } - void sQuestAccept(Player* player, Quest const* quest) + void sQuestAccept(Player* player, Quest const* quest) override { if (quest->GetQuestId() == QUEST_FREEDOM_TO_RUUL) { @@ -346,7 +220,7 @@ public: summoned->AI()->AttackStart(me); } - void sQuestAccept(Player* player, Quest const* quest) + void sQuestAccept(Player* player, Quest const* quest) override { if (quest->GetQuestId() == QUEST_VORSHA) { @@ -472,7 +346,6 @@ class go_naga_brazier : public GameObjectScript void AddSC_ashenvale() { - new npc_torek(); new npc_ruul_snowhoof(); new npc_muglash(); new go_naga_brazier(); diff --git a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp index 1eb600cce99..5c9a57acec7 100644 --- a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp +++ b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp @@ -351,7 +351,7 @@ public: Talk(SAY_AGGRO, who); } - void sQuestAccept(Player* player, Quest const* quest) + void sQuestAccept(Player* player, Quest const* quest) override { if (quest->GetQuestId() == QUEST_A_CRY_FOR_SAY_HELP) { diff --git a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp index ca5e4697c35..ab2e82171f1 100644 --- a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp +++ b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp @@ -27,10 +27,14 @@ EndScriptData */ npc_webbed_creature EndContentData */ +#include "Player.h" +#include "Group.h" +#include "GridNotifiersImpl.h" #include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "ScriptedEscortAI.h" #include "PassiveAI.h" -#include "Player.h" +#include "CellImpl.h" /*###### ## npc_webbed_creature @@ -88,7 +92,731 @@ public: } }; +/*###### +## Quest 9759: Ending Their World +######*/ + +enum EndingTheirWorldMisc +{ + SAY_SIRONAS_1 = 0, + + SAY_LEGOSO_1 = 0, + SAY_LEGOSO_2 = 1, + SAY_LEGOSO_3 = 2, + SAY_LEGOSO_4 = 3, + SAY_LEGOSO_5 = 4, + SAY_LEGOSO_6 = 5, + SAY_LEGOSO_7 = 6, + SAY_LEGOSO_8 = 7, + SAY_LEGOSO_9 = 8, + SAY_LEGOSO_10 = 9, + SAY_LEGOSO_11 = 10, + SAY_LEGOSO_12 = 11, + SAY_LEGOSO_13 = 12, + SAY_LEGOSO_14 = 13, + SAY_LEGOSO_15 = 14, + SAY_LEGOSO_16 = 15, + SAY_LEGOSO_17 = 16, + SAY_LEGOSO_18 = 17, + SAY_LEGOSO_19 = 18, + SAY_LEGOSO_20 = 19, + SAY_LEGOSO_21 = 20, + + SPELL_BLOODMYST_TESLA = 31611, + SPELL_SIRONAS_CHANNELING = 31612, + + SPELL_UPPERCUT = 10966, + SPELL_IMMOLATE = 12742, + SPELL_CURSE_OF_BLOOD = 8282, + + SPELL_FROST_SHOCK = 8056, + SPELL_HEALING_SURGE = 8004, + SPELL_SEARING_TOTEM = 38116, + SPELL_STRENGTH_OF_EARTH_TOTEM = 31633, + + NPC_SIRONAS = 17678, + NPC_BLOODMYST_TESLA_COIL = 17979, + NPC_LEGOSO = 17982, + + GO_DRAENEI_EXPLOSIVES_1 = 182088, + GO_DRAENEI_EXPLOSIVES_2 = 182091, + GO_FIRE_EXPLOSION = 182071, + + ACTION_SIRONAS_CHANNEL_START = 1, + ACTION_SIRONAS_CHANNEL_STOP = 2, + + ACTION_LEGOSO_SIRONAS_KILLED = 1, + + EVENT_UPPERCUT = 1, + EVENT_IMMOLATE = 2, + EVENT_CURSE_OF_BLOOD = 3, + + EVENT_FROST_SHOCK = 1, + EVENT_HEALING_SURGE = 2, + EVENT_SEARING_TOTEM = 3, + EVENT_STRENGTH_OF_EARTH_TOTEM = 4, + + WP_START = 1, + WP_EXPLOSIVES_FIRST_POINT = 21, + WP_EXPLOSIVES_FIRST_PLANT = 22, + WP_EXPLOSIVES_FIRST_RUNOFF = 23, + WP_EXPLOSIVES_FIRST_DETONATE = 24, + WP_DEBUG_1 = 25, + WP_DEBUG_2 = 26, + WP_SIRONAS_HILL = 33, + WP_EXPLOSIVES_SECOND_BATTLEROAR = 35, + WP_EXPLOSIVES_SECOND_PLANT = 39, + WP_EXPLOSIVES_SECOND_DETONATE = 40, + + PHASE_NONE = 0, + PHASE_CONTINUE = -1, + PHASE_WP_26 = 1, + PHASE_WP_22 = 2, + PHASE_PLANT_FIRST_KNEEL = 3, + PHASE_PLANT_FIRST_STAND = 4, + PHASE_PLANT_FIRST_WORK = 5, + PHASE_PLANT_FIRST_FINISH = 6, + PHASE_PLANT_FIRST_TIMER_1 = 7, + PHASE_PLANT_FIRST_TIMER_2 = 8, + PHASE_PLANT_FIRST_TIMER_3 = 9, + PHASE_PLANT_FIRST_DETONATE = 10, + PHASE_PLANT_FIRST_SPEECH = 11, + PHASE_PLANT_FIRST_ROTATE = 12, + PHASE_PLANT_FIRST_POINT = 13, + PHASE_FEEL_SIRONAS_1 = 14, + PHASE_FEEL_SIRONAS_2 = 15, + PHASE_MEET_SIRONAS_ROAR = 16, + PHASE_MEET_SIRONAS_TURN = 17, + PHASE_MEET_SIRONAS_SPEECH = 18, + PHASE_PLANT_SECOND_KNEEL = 19, + PHASE_PLANT_SECOND_SPEECH = 20, + PHASE_PLANT_SECOND_STAND = 21, + PHASE_PLANT_SECOND_FINISH = 22, + PHASE_PLANT_SECOND_WAIT = 23, + PHASE_PLANT_SECOND_TIMER_1 = 24, + PHASE_PLANT_SECOND_TIMER_2 = 25, + PHASE_PLANT_SECOND_TIMER_3 = 26, + PHASE_PLANT_SECOND_DETONATE = 27, + PHASE_FIGHT_SIRONAS_STOP = 28, + PHASE_FIGHT_SIRONAS_SPEECH_1 = 29, + PHASE_FIGHT_SIRONAS_SPEECH_2 = 30, + PHASE_FIGHT_SIRONAS_START = 31, + PHASE_SIRONAS_SLAIN_SPEECH_1 = 32, + PHASE_SIRONAS_SLAIN_EMOTE_1 = 33, + PHASE_SIRONAS_SLAIN_EMOTE_2 = 34, + PHASE_SIRONAS_SLAIN_SPEECH_2 = 35, + + DATA_EVENT_STARTER_GUID = 0, + + MAX_EXPLOSIVES = 5, + + QUEST_ENDING_THEIR_WORLD = 9759 +}; + +Position const ExplosivesPos[2][MAX_EXPLOSIVES] = +{ + { + { -1954.946f, -10654.714f, 110.448f }, + { -1956.331f, -10654.494f, 110.869f }, + { -1955.906f, -10656.221f, 110.791f }, + { -1957.294f, -10656.000f, 111.219f }, + { -1954.462f, -10656.451f, 110.404f } + }, + { + { -1915.137f, -10583.651f, 178.365f }, + { -1914.006f, -10582.964f, 178.471f }, + { -1912.717f, -10582.398f, 178.658f }, + { -1915.056f, -10582.251f, 178.162f }, + { -1913.883f, -10581.778f, 178.346f } + } +}; + +/*###### +## npc_sironas +######*/ + +class npc_sironas : public CreatureScript +{ +public: + npc_sironas() : CreatureScript("npc_sironas") { } + + CreatureAI* GetAI(Creature* creature) const + { + return new npc_sironasAI(creature); + } + + struct npc_sironasAI : public ScriptedAI + { + npc_sironasAI(Creature* creature) : ScriptedAI(creature) { } + + void Reset() override + { + _events.Reset(); + me->SetDisplayId(me->GetCreatureTemplate()->Modelid2); + } + + void EnterCombat(Unit* /*who*/) override + { + _events.ScheduleEvent(EVENT_UPPERCUT, 15 * IN_MILLISECONDS); + _events.ScheduleEvent(EVENT_IMMOLATE, 10 * IN_MILLISECONDS); + _events.ScheduleEvent(EVENT_CURSE_OF_BLOOD, 5 * IN_MILLISECONDS); + } + + void JustDied(Unit* killer) override + { + me->SetObjectScale(1.0f); + _events.Reset(); + if (Creature* legoso = me->FindNearestCreature(NPC_LEGOSO, SIZE_OF_GRIDS)) + { + Group* group = me->GetLootRecipientGroup(); + + if (killer->GetGUID() == legoso->GetGUID() || + (group && group->IsMember(killer->GetGUID())) || + killer->GetGUIDLow() == legoso->AI()->GetData(DATA_EVENT_STARTER_GUID)) + legoso->AI()->DoAction(ACTION_LEGOSO_SIRONAS_KILLED); + } + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + + _events.Update(diff); + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_UPPERCUT: + DoCastVictim(SPELL_UPPERCUT); + _events.ScheduleEvent(EVENT_UPPERCUT, urand(10, 12) * IN_MILLISECONDS); + break; + case EVENT_IMMOLATE: + DoCastVictim(SPELL_IMMOLATE); + _events.ScheduleEvent(EVENT_IMMOLATE, urand(15, 20) * IN_MILLISECONDS); + break; + case EVENT_CURSE_OF_BLOOD: + DoCastVictim(SPELL_CURSE_OF_BLOOD); + _events.ScheduleEvent(EVENT_CURSE_OF_BLOOD, urand(20, 25) * IN_MILLISECONDS); + break; + default: + break; + } + } + + DoMeleeAttackIfReady(); + } + + void DoAction(int32 param) override + { + switch (param) + { + case ACTION_SIRONAS_CHANNEL_START: + { + DoCast(me, SPELL_SIRONAS_CHANNELING); + std::list<Creature*> BeamList; + _beamGuidList.clear(); + me->GetCreatureListWithEntryInGrid(BeamList, NPC_BLOODMYST_TESLA_COIL, SIZE_OF_GRIDS); + for (std::list<Creature*>::iterator itr = BeamList.begin(); itr != BeamList.end(); ++itr) + { + _beamGuidList.push_back((*itr)->GetGUID()); + (*itr)->CastSpell(*itr, SPELL_BLOODMYST_TESLA); + } + break; + } + case ACTION_SIRONAS_CHANNEL_STOP: + { + me->InterruptNonMeleeSpells(true, SPELL_SIRONAS_CHANNELING); + std::list<Creature*> creatureList; + GetCreatureListWithEntryInGrid(creatureList, me, NPC_BLOODMYST_TESLA_COIL, 500.0f); + if (!creatureList.empty()) + for (std::list<Creature*>::iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr) + (*itr)->InterruptNonMeleeSpells(true, SPELL_BLOODMYST_TESLA); + } + default: + break; + } + } + + private: + GuidList _beamGuidList; + EventMap _events; + }; +}; + +/*###### +## npc_demolitionist_legoso +######*/ + +class npc_demolitionist_legoso : public CreatureScript +{ +public: + npc_demolitionist_legoso() : CreatureScript("npc_demolitionist_legoso") { } + + CreatureAI* GetAI(Creature* creature) const + { + return new npc_demolitionist_legosoAI(creature); + } + + struct npc_demolitionist_legosoAI : public npc_escortAI + { + npc_demolitionist_legosoAI(Creature* creature) : npc_escortAI(creature) + { + Initialize(); + } + + void sQuestAccept(Player* player, Quest const* quest) override + { + if (quest->GetQuestId() == QUEST_ENDING_THEIR_WORLD) + { + SetData(DATA_EVENT_STARTER_GUID, player->GetGUIDLow()); + Start(true, true, player->GetGUID(), quest); + } + } + + uint32 GetData(uint32 id) const override + { + switch (id) + { + case DATA_EVENT_STARTER_GUID: + return _eventStarterGuidLow; + default: + return 0; + } + } + + void SetData(uint32 data, uint32 value) override + { + switch (data) + { + case DATA_EVENT_STARTER_GUID: + _eventStarterGuidLow = value; + break; + default: + break; + } + } + + void Initialize() + { + _phase = PHASE_NONE; + _moveTimer = 0; + _eventStarterGuidLow = 0; + } + + void Reset() override + { + Initialize(); + me->SetCanDualWield(true); + + _events.Reset(); + _events.ScheduleEvent(EVENT_FROST_SHOCK, 1 * IN_MILLISECONDS); + _events.ScheduleEvent(EVENT_HEALING_SURGE, 5 * IN_MILLISECONDS); + _events.ScheduleEvent(EVENT_SEARING_TOTEM, 15 * IN_MILLISECONDS); + _events.ScheduleEvent(EVENT_STRENGTH_OF_EARTH_TOTEM, 20 * IN_MILLISECONDS); + } + + void UpdateAI(uint32 diff) override + { + _events.Update(diff); + + if (UpdateVictim()) + { + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_FROST_SHOCK: + DoCastVictim(SPELL_FROST_SHOCK); + _events.DelayEvents(1 * IN_MILLISECONDS); + _events.ScheduleEvent(EVENT_FROST_SHOCK, urand(10, 15) * IN_MILLISECONDS); + break; + case EVENT_SEARING_TOTEM: + DoCast(me, SPELL_SEARING_TOTEM); + _events.DelayEvents(1 * IN_MILLISECONDS); + _events.ScheduleEvent(EVENT_SEARING_TOTEM, urand(110, 130) * IN_MILLISECONDS); + break; + case EVENT_STRENGTH_OF_EARTH_TOTEM: + DoCast(me, SPELL_STRENGTH_OF_EARTH_TOTEM); + _events.DelayEvents(1 * IN_MILLISECONDS); + _events.ScheduleEvent(EVENT_STRENGTH_OF_EARTH_TOTEM, urand(110, 130) * IN_MILLISECONDS); + break; + case EVENT_HEALING_SURGE: + { + Unit* target = NULL; + if (me->GetHealthPct() < 85) + target = me; + else if (Player* player = GetPlayerForEscort()) + if (player->GetHealthPct() < 85) + target = player; + if (target) + { + DoCast(target, SPELL_HEALING_SURGE); + _events.ScheduleEvent(EVENT_HEALING_SURGE, 10 * IN_MILLISECONDS); + } + else + _events.ScheduleEvent(EVENT_HEALING_SURGE, 2 * IN_MILLISECONDS); + break; + } + default: + break; + } + } + + DoMeleeAttackIfReady(); + } + + if (HasEscortState(STATE_ESCORT_NONE)) + return; + + npc_escortAI::UpdateAI(diff); + + if (_phase) + { + if (_moveTimer <= diff) + { + switch (_phase) + { + case PHASE_WP_26: //debug skip path to point 26, buggy path calculation + me->GetMotionMaster()->MovePoint(WP_DEBUG_2, -2021.77f, -10648.8f, 129.903f, false); + _moveTimer = 2 * IN_MILLISECONDS; + _phase = PHASE_CONTINUE; + break; + case PHASE_CONTINUE: // continue escort + SetEscortPaused(false); + _moveTimer = 0 * IN_MILLISECONDS; + _phase = PHASE_NONE; + break; + case PHASE_WP_22: //debug skip path to point 22, buggy path calculation + me->GetMotionMaster()->MovePoint(WP_EXPLOSIVES_FIRST_PLANT, -1958.026f, -10660.465f, 111.547f, false); + Talk(SAY_LEGOSO_3); + _moveTimer = 2 * IN_MILLISECONDS; + _phase = PHASE_PLANT_FIRST_KNEEL; + break; + case PHASE_PLANT_FIRST_KNEEL: // plant first explosives stage 1 kneel + me->SetStandState(UNIT_STAND_STATE_KNEEL); + _moveTimer = 10 * IN_MILLISECONDS; + _phase = PHASE_PLANT_FIRST_STAND; + break; + case PHASE_PLANT_FIRST_STAND: // plant first explosives stage 1 stand + me->SetStandState(UNIT_STAND_STATE_STAND); + _moveTimer = 0.5* IN_MILLISECONDS; + _phase = PHASE_PLANT_FIRST_WORK; + break; + case PHASE_PLANT_FIRST_WORK: // plant first explosives stage 2 work + Talk(SAY_LEGOSO_4); + _moveTimer = 17.5 * IN_MILLISECONDS; + _phase = PHASE_PLANT_FIRST_FINISH; + break; + case PHASE_PLANT_FIRST_FINISH: // plant first explosives finish + _explosivesGuids.clear(); + for (uint8 i = 0; i != MAX_EXPLOSIVES; ++i) + { + if (GameObject* explosive = me->SummonGameObject(GO_DRAENEI_EXPLOSIVES_1, ExplosivesPos[0][i].m_positionX, ExplosivesPos[0][i].m_positionY, ExplosivesPos[0][i].m_positionZ, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0)) + _explosivesGuids.push_back(explosive->GetGUID()); + } + me->HandleEmoteCommand(EMOTE_ONESHOT_NONE); // reset anim state + // force runoff movement so he will not screw up next waypoint + me->GetMotionMaster()->MovePoint(WP_EXPLOSIVES_FIRST_RUNOFF, -1955.6f, -10669.8f, 110.65f, false); + Talk(SAY_LEGOSO_5); + _moveTimer = 1.5 * IN_MILLISECONDS; + _phase = PHASE_CONTINUE; + break; + case PHASE_PLANT_FIRST_TIMER_1: // first explosives detonate timer 1 + Talk(SAY_LEGOSO_6); + _moveTimer = 1 * IN_MILLISECONDS; + _phase = PHASE_PLANT_FIRST_TIMER_2; + break; + case PHASE_PLANT_FIRST_TIMER_2: // first explosives detonate timer 2 + Talk(SAY_LEGOSO_7); + _moveTimer = 1 * IN_MILLISECONDS; + _phase = PHASE_PLANT_FIRST_TIMER_3; + break; + case PHASE_PLANT_FIRST_TIMER_3: // first explosives detonate timer 3 + Talk(SAY_LEGOSO_8); + _moveTimer = 1 * IN_MILLISECONDS; + _phase = PHASE_PLANT_FIRST_DETONATE; + break; + case PHASE_PLANT_FIRST_DETONATE: // first explosives detonate finish + for (GuidList::iterator itr = _explosivesGuids.begin(); itr != _explosivesGuids.end(); ++itr) + { + if (GameObject* explosive = sObjectAccessor->GetGameObject(*me, *itr)) + me->RemoveGameObject(explosive, true); + } + _explosivesGuids.clear(); + me->HandleEmoteCommand(EMOTE_ONESHOT_CHEER); + _moveTimer = 2 * IN_MILLISECONDS; + _phase = PHASE_PLANT_FIRST_SPEECH; + break; + case PHASE_PLANT_FIRST_SPEECH: // after detonation 1 speech + Talk(SAY_LEGOSO_9); + _moveTimer = 4 * IN_MILLISECONDS; + _phase = PHASE_PLANT_FIRST_ROTATE; + break; + case PHASE_PLANT_FIRST_ROTATE: // after detonation 1 rotate to next point + me->SetFacingTo(2.272f); + _moveTimer = 1 * IN_MILLISECONDS; + _phase = PHASE_PLANT_FIRST_POINT; + break; + case PHASE_PLANT_FIRST_POINT: // after detonation 1 send point anim and go on to next point + me->HandleEmoteCommand(EMOTE_ONESHOT_POINT); + _moveTimer = 2 * IN_MILLISECONDS; + _phase = PHASE_CONTINUE; + break; + case PHASE_FEEL_SIRONAS_1: // legoso exclamation before sironas 1.1 + Talk(SAY_LEGOSO_10); + _moveTimer = 4 * IN_MILLISECONDS; + _phase = PHASE_FEEL_SIRONAS_2; + break; + case PHASE_FEEL_SIRONAS_2: // legoso exclamation before sironas 1.2 + Talk(SAY_LEGOSO_11); + _moveTimer = 4 * IN_MILLISECONDS; + _phase = PHASE_CONTINUE; + break; + case PHASE_MEET_SIRONAS_ROAR: // legoso exclamation before sironas 2.1 + Talk(SAY_LEGOSO_12); + _moveTimer = 4 * IN_MILLISECONDS; + _phase = PHASE_MEET_SIRONAS_TURN; + break; + case PHASE_MEET_SIRONAS_TURN: // legoso exclamation before sironas 2.2 + if (Player* player = GetPlayerForEscort()) + me->SetFacingToObject(player); + _moveTimer = 1 * IN_MILLISECONDS; + _phase = PHASE_MEET_SIRONAS_SPEECH; + break; + case PHASE_MEET_SIRONAS_SPEECH: // legoso exclamation before sironas 2.3 + Talk(SAY_LEGOSO_13); + _moveTimer = 7 * IN_MILLISECONDS; + _phase = PHASE_CONTINUE; + break; + case PHASE_PLANT_SECOND_KNEEL: // plant second explosives stage 1 kneel + me->SetStandState(UNIT_STAND_STATE_KNEEL); + _moveTimer = 11 * IN_MILLISECONDS; + _phase = PHASE_PLANT_SECOND_SPEECH; + break; + case PHASE_PLANT_SECOND_SPEECH: // plant second explosives stage 2 kneel + Talk(SAY_LEGOSO_14); + _moveTimer = 13 * IN_MILLISECONDS; + _phase = PHASE_PLANT_SECOND_STAND; + break; + case PHASE_PLANT_SECOND_STAND: // plant second explosives finish + me->SetStandState(UNIT_STAND_STATE_STAND); + _moveTimer = 1 * IN_MILLISECONDS; + _phase = PHASE_PLANT_SECOND_FINISH; + break; + case PHASE_PLANT_SECOND_FINISH: // plant second explosives finish - create explosives + _explosivesGuids.clear(); + for (uint8 i = 0; i != MAX_EXPLOSIVES; ++i) + { + if (GameObject* explosive = me->SummonGameObject(GO_DRAENEI_EXPLOSIVES_2, ExplosivesPos[1][i].m_positionX, ExplosivesPos[1][i].m_positionY, ExplosivesPos[1][i].m_positionZ, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0)) + _explosivesGuids.push_back(explosive->GetGUID()); + } + Talk(SAY_LEGOSO_15); + _moveTimer = 1 * IN_MILLISECONDS; + _phase = PHASE_PLANT_SECOND_WAIT; + break; + case PHASE_PLANT_SECOND_WAIT: // plant second explosives finish - proceed to next point + _moveTimer = 1 * IN_MILLISECONDS; + _phase = PHASE_CONTINUE; + break; + case PHASE_PLANT_SECOND_TIMER_1: // second explosives detonate timer 1 + Talk(SAY_LEGOSO_16); + _moveTimer = 1 * IN_MILLISECONDS; + _phase = PHASE_PLANT_SECOND_TIMER_2; + break; + case PHASE_PLANT_SECOND_TIMER_2: // second explosives detonate timer 2 + Talk(SAY_LEGOSO_17); + _moveTimer = 1 * IN_MILLISECONDS; + _phase = PHASE_PLANT_SECOND_TIMER_3; + break; + case PHASE_PLANT_SECOND_TIMER_3: // second explosives detonate timer 3 + Talk(SAY_LEGOSO_18); + _moveTimer = 1 * IN_MILLISECONDS; + _phase = PHASE_PLANT_SECOND_DETONATE; + break; + case PHASE_PLANT_SECOND_DETONATE: // second explosives detonate finish + for (GuidList::iterator itr = _explosivesGuids.begin(); itr != _explosivesGuids.end(); ++itr) + { + if (GameObject* explosive = sObjectAccessor->GetGameObject(*me, *itr)) + me->RemoveGameObject(explosive, true); + } + _explosivesGuids.clear(); + if (Creature* sironas = me->FindNearestCreature(NPC_SIRONAS, SIZE_OF_GRIDS)) + { + sironas->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); + me->SetFacingToObject(sironas); + } + _moveTimer = 1 * IN_MILLISECONDS; + _phase = PHASE_FIGHT_SIRONAS_STOP; + break; + case PHASE_FIGHT_SIRONAS_STOP: // sironas channel stop + if (Creature* sironas = me->FindNearestCreature(NPC_SIRONAS, SIZE_OF_GRIDS)) + sironas->AI()->DoAction(ACTION_SIRONAS_CHANNEL_STOP); + _moveTimer = 1 * IN_MILLISECONDS; + _phase = PHASE_FIGHT_SIRONAS_SPEECH_1; + break; + case PHASE_FIGHT_SIRONAS_SPEECH_1: // sironas exclamation before aggro + if (Creature* sironas = me->FindNearestCreature(NPC_SIRONAS, SIZE_OF_GRIDS)) + sironas->AI()->Talk(SAY_SIRONAS_1); + _moveTimer = 1 * IN_MILLISECONDS; + _phase = PHASE_FIGHT_SIRONAS_SPEECH_2; + break; + case PHASE_FIGHT_SIRONAS_SPEECH_2: // legoso exclamation before aggro + if (Creature* sironas = me->FindNearestCreature(NPC_SIRONAS, SIZE_OF_GRIDS)) + sironas->SetObjectScale(3.0f); + Talk(SAY_LEGOSO_19); + _moveTimer = 1 * IN_MILLISECONDS; + _phase = PHASE_FIGHT_SIRONAS_START; + break; + case PHASE_FIGHT_SIRONAS_START: // legoso exclamation at aggro + if (Creature* sironas = me->FindNearestCreature(NPC_SIRONAS, SIZE_OF_GRIDS)) + { + Unit* target = GetPlayerForEscort(); + if (!target) + target = me; + + target->AddThreat(sironas, 0.001f); + sironas->Attack(target, true); + sironas->GetMotionMaster()->MoveChase(target); + } + _moveTimer = 10 * IN_MILLISECONDS; + _phase = PHASE_CONTINUE; + break; + case PHASE_SIRONAS_SLAIN_SPEECH_1: // legoso exclamation after battle - stage 1.1 + Talk(SAY_LEGOSO_20); + _moveTimer = 2 * IN_MILLISECONDS; + _phase = PHASE_SIRONAS_SLAIN_EMOTE_1; + break; + case PHASE_SIRONAS_SLAIN_EMOTE_1: // legoso exclamation after battle - stage 1.2 + me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); + _moveTimer = 2 * IN_MILLISECONDS; + _phase = PHASE_SIRONAS_SLAIN_EMOTE_2; + break; + case PHASE_SIRONAS_SLAIN_EMOTE_2: // legoso exclamation after battle - stage 1.3 + if (Player* player = GetPlayerForEscort()) + player->GroupEventHappens(QUEST_ENDING_THEIR_WORLD, me); + me->HandleEmoteCommand(EMOTE_ONESHOT_CHEER); + _moveTimer = 5 * IN_MILLISECONDS; + _phase = PHASE_SIRONAS_SLAIN_SPEECH_2; + break; + case PHASE_SIRONAS_SLAIN_SPEECH_2: // legoso exclamation after battle - stage 2 + Talk(SAY_LEGOSO_21); + _moveTimer = 30 * IN_MILLISECONDS; + _phase = PHASE_CONTINUE; + break; + default: + break; + } + } + else if (!me->IsInCombat()) + _moveTimer -= diff; + } + } + + void WaypointReached(uint32 waypointId) override + { + Player* player = GetPlayerForEscort(); + if (!player) + return; + + switch (waypointId) + { + case WP_START: + SetEscortPaused(true); + me->SetFacingToObject(player); + Talk(SAY_LEGOSO_1); + _moveTimer = 2.5 * IN_MILLISECONDS; + _phase = PHASE_CONTINUE; + break; + case WP_EXPLOSIVES_FIRST_POINT: + SetEscortPaused(true); + Talk(SAY_LEGOSO_2); + _moveTimer = 8 * IN_MILLISECONDS; + _phase = PHASE_WP_22; + break; + case WP_EXPLOSIVES_FIRST_PLANT: + me->SetFacingTo(1.46f); + break; + case WP_EXPLOSIVES_FIRST_DETONATE: + SetEscortPaused(true); + me->SetFacingTo(1.05f); + _moveTimer = 1 * IN_MILLISECONDS; + _phase = PHASE_PLANT_FIRST_TIMER_1; + break; + case WP_DEBUG_1: + SetEscortPaused(true); + _moveTimer = 0.5 * IN_MILLISECONDS; + _phase = PHASE_WP_26; + break; + case WP_SIRONAS_HILL: + { + SetEscortPaused(true); + + //Find Sironas and make it respawn if needed + Creature* sironas = NULL; + Trinity::AllCreaturesOfEntryInRange check(me, NPC_SIRONAS, SIZE_OF_GRIDS); + Trinity::CreatureSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(me, sironas, check); + me->VisitNearbyObject(SIZE_OF_GRIDS, searcher); + + if (sironas) + { + if (!sironas->IsAlive()) + sironas->Respawn(true); + + sironas->AI()->DoAction(ACTION_SIRONAS_CHANNEL_START); + me->SetFacingToObject(sironas); + } + _moveTimer = 1 * IN_MILLISECONDS; + _phase = PHASE_FEEL_SIRONAS_1; + break; + } + case WP_EXPLOSIVES_SECOND_BATTLEROAR: + SetEscortPaused(true); + _moveTimer = 0.2 * IN_MILLISECONDS; + _phase = PHASE_MEET_SIRONAS_ROAR; + break; + case WP_EXPLOSIVES_SECOND_PLANT: + SetEscortPaused(true); + _moveTimer = 0.5 * IN_MILLISECONDS; + _phase = PHASE_PLANT_SECOND_KNEEL; + break; + case WP_EXPLOSIVES_SECOND_DETONATE: + SetEscortPaused(true); + me->SetFacingTo(5.7f); + _moveTimer = 2 * IN_MILLISECONDS; + _phase = PHASE_PLANT_SECOND_TIMER_1; + break; + default: + break; + } + } + + void DoAction(int32 param) override + { + switch (param) + { + case ACTION_LEGOSO_SIRONAS_KILLED: + _phase = PHASE_SIRONAS_SLAIN_SPEECH_1; + _moveTimer = 5 * IN_MILLISECONDS; + break; + default: + break; + } + } + + private: + int8 _phase; + uint32 _moveTimer; + uint32 _eventStarterGuidLow; + GuidList _explosivesGuids; + EventMap _events; + }; +}; + void AddSC_bloodmyst_isle() { new npc_webbed_creature(); + new npc_sironas(); + new npc_demolitionist_legoso(); } diff --git a/src/server/scripts/Kalimdor/zone_desolace.cpp b/src/server/scripts/Kalimdor/zone_desolace.cpp index d5ff4c45d09..bb17de4fd6a 100644 --- a/src/server/scripts/Kalimdor/zone_desolace.cpp +++ b/src/server/scripts/Kalimdor/zone_desolace.cpp @@ -88,12 +88,20 @@ public: DoCast(me, SPELL_KODO_KOMBO_DESPAWN_BUFF, true); me->UpdateEntry(NPC_TAMED_KODO); + me->CombatStop(); + me->DeleteThreatList(); + me->SetSpeed(MOVE_RUN, 0.6f, true); me->GetMotionMaster()->MoveFollow(caster, PET_FOLLOW_DIST, me->GetFollowAngle()); + me->setActive(true); } } else if (spell->Id == SPELL_KODO_KOMBO_GOSSIP) { me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation()); + me->GetMotionMaster()->Clear(); + me->GetMotionMaster()->MoveIdle(); + me->setActive(false); me->DespawnOrUnsummon(60000); } } diff --git a/src/server/scripts/Kalimdor/zone_moonglade.cpp b/src/server/scripts/Kalimdor/zone_moonglade.cpp index 704fefe2678..163620230ef 100644 --- a/src/server/scripts/Kalimdor/zone_moonglade.cpp +++ b/src/server/scripts/Kalimdor/zone_moonglade.cpp @@ -384,6 +384,8 @@ public: } PlayerGUID = player->GetGUID(); Start(true, false, PlayerGUID); + me->SetDisplayId(me->GetCreatureTemplate()->Modelid1); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); } return; } diff --git a/src/server/scripts/Kalimdor/zone_winterspring.cpp b/src/server/scripts/Kalimdor/zone_winterspring.cpp index 194daf21807..5cb6e78b399 100644 --- a/src/server/scripts/Kalimdor/zone_winterspring.cpp +++ b/src/server/scripts/Kalimdor/zone_winterspring.cpp @@ -377,12 +377,12 @@ public: void DoSummonPriestess() { // Summon 2 Elune priestess and make each of them move to a different spot - if (Creature* priestess = me->SummonCreature(NPC_PRIESTESS_ELUNE, wingThicketLocations[0].m_positionX, wingThicketLocations[0].m_positionY, wingThicketLocations[0].m_positionZ, wingThicketLocations[0].m_orientation, TEMPSUMMON_CORPSE_DESPAWN, 0)) + if (Creature* priestess = me->SummonCreature(NPC_PRIESTESS_ELUNE, wingThicketLocations[0].m_positionX, wingThicketLocations[0].m_positionY, wingThicketLocations[0].m_positionZ, wingThicketLocations[0].GetOrientation(), TEMPSUMMON_CORPSE_DESPAWN, 0)) { priestess->GetMotionMaster()->MovePoint(0, wingThicketLocations[3].m_positionX, wingThicketLocations[3].m_positionY, wingThicketLocations[3].m_positionZ); _firstPriestessGUID = priestess->GetGUID(); } - if (Creature* priestess = me->SummonCreature(NPC_PRIESTESS_ELUNE, wingThicketLocations[1].m_positionX, wingThicketLocations[1].m_positionY, wingThicketLocations[1].m_positionZ, wingThicketLocations[1].m_orientation, TEMPSUMMON_CORPSE_DESPAWN, 0)) + if (Creature* priestess = me->SummonCreature(NPC_PRIESTESS_ELUNE, wingThicketLocations[1].m_positionX, wingThicketLocations[1].m_positionY, wingThicketLocations[1].m_positionZ, wingThicketLocations[1].GetOrientation(), TEMPSUMMON_CORPSE_DESPAWN, 0)) { // Left priestess should have a distinct move point because she is the one who starts the dialogue at point reach priestess->GetMotionMaster()->MovePoint(1, wingThicketLocations[4].m_positionX, wingThicketLocations[4].m_positionY, wingThicketLocations[4].m_positionZ); @@ -451,7 +451,7 @@ public: } } - void JustDidDialogueStep(int32 entry) + void JustDidDialogueStep(int32 entry) override { switch (entry) { @@ -480,7 +480,7 @@ public: break; case SAY_PRIESTESS_ALTAR_13: // summon the Guardian of Elune - if (Creature* guard = me->SummonCreature(NPC_GUARDIAN_ELUNE, wingThicketLocations[2].m_positionX, wingThicketLocations[2].m_positionY, wingThicketLocations[2].m_positionZ, wingThicketLocations[2].m_orientation, TEMPSUMMON_CORPSE_DESPAWN, 0)) + if (Creature* guard = me->SummonCreature(NPC_GUARDIAN_ELUNE, wingThicketLocations[2].m_positionX, wingThicketLocations[2].m_positionY, wingThicketLocations[2].m_positionZ, wingThicketLocations[2].GetOrientation(), TEMPSUMMON_CORPSE_DESPAWN, 0)) { guard->GetMotionMaster()->MovePoint(0, wingThicketLocations[5].m_positionX, wingThicketLocations[5].m_positionY, wingThicketLocations[5].m_positionZ); _guardEluneGUID = guard->GetGUID(); @@ -550,7 +550,7 @@ public: } } - Creature* GetSpeakerByEntry(int32 entry) + Creature* GetSpeakerByEntry(int32 entry) override { switch (entry) { diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp index 1482e884614..bb190e94cc8 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp @@ -108,7 +108,7 @@ class boss_prince_taldaram : public CreatureScript events.ScheduleEvent(EVENT_CONJURE_FLAME_SPHERES, 5000); } - void JustSummoned(Creature* summon) + void JustSummoned(Creature* summon) override { BossAI::JustSummoned(summon); diff --git a/src/server/scripts/Northrend/CMakeLists.txt b/src/server/scripts/Northrend/CMakeLists.txt index e04dcf0ec96..66d9021223f 100644 --- a/src/server/scripts/Northrend/CMakeLists.txt +++ b/src/server/scripts/Northrend/CMakeLists.txt @@ -78,8 +78,7 @@ set(scripts_STAT_SRCS Northrend/Nexus/Oculus/boss_urom.cpp Northrend/Nexus/Oculus/oculus.cpp Northrend/Nexus/Oculus/instance_oculus.cpp - Northrend/Nexus/Nexus/boss_commander_kolurg.cpp - Northrend/Nexus/Nexus/boss_commander_stoutbeard.cpp + Northrend/Nexus/Nexus/boss_nexus_commanders.cpp Northrend/Nexus/Nexus/boss_ormorok.cpp Northrend/Nexus/Nexus/boss_magus_telestra.cpp Northrend/Nexus/Nexus/instance_nexus.cpp diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp index ec668952a68..3130bf20a0c 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp @@ -44,7 +44,7 @@ class instance_ruby_sanctum : public InstanceMapScript BaltharusSharedHealth = 0; } - void OnPlayerEnter(Player* /*player*/) + void OnPlayerEnter(Player* /*player*/) override { if (!GetGuidData(DATA_HALION_CONTROLLER) && GetBossState(DATA_HALION) != DONE && GetBossState(DATA_GENERAL_ZARITHRIAN) == DONE) { diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp index 39c9fbe37a6..c56a49cb92c 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp @@ -741,7 +741,7 @@ class boss_dreadscale : public CreatureScript switch (pointId) { case 0: - instance->DoUseDoorOrButton(instance->GetGuidData(GO_MAIN_GATE_DOOR)); + instance->DoCloseDoorOrButton(instance->GetGuidData(GO_MAIN_GATE_DOOR)); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); me->SetReactState(REACT_AGGRESSIVE); me->SetInCombatWithZone(); diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp index 4f883fd7e90..23bfd773a9b 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp @@ -255,12 +255,6 @@ class instance_trial_of_the_crusader : public InstanceMapScript if (GetBossState(BOSS_VALKIRIES) == SPECIAL) state = DONE; break; - case DONE: - if (instance->GetPlayers().getFirst()->GetSource()->GetTeam() == ALLIANCE) - EventStage = 4020; - else - EventStage = 4030; - break; default: break; } @@ -336,7 +330,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript if (type < MAX_ENCOUNTERS) { - TC_LOG_INFO("scripts", "[ToCr] BossState(type %u) %u = state %u;", type, GetBossState(type), state); + TC_LOG_DEBUG("scripts", "[ToCr] BossState(type %u) %u = state %u;", type, GetBossState(type), state); if (state == FAIL) { if (instance->IsHeroic()) diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp index 16526b694e9..974bd4672f1 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp @@ -133,7 +133,7 @@ class npc_announcer_toc10 : public CreatureScript char const* _message = "We are ready!"; - if (player->IsInCombat() || instance->IsEncounterInProgress() || instance->GetData(TYPE_EVENT)) + if (player->IsInCombat() || instance->IsEncounterInProgress()) return true; uint8 i = 0; @@ -199,17 +199,11 @@ class npc_announcer_toc10 : public CreatureScript } else if (instance->GetBossState(BOSS_LICH_KING) != DONE) { - if (GameObject* floor = ObjectAccessor::GetGameObject(*player, instance->GetGuidData(GO_ARGENT_COLISEUM_FLOOR))) - floor->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED); - - creature->CastSpell(creature, SPELL_CORPSE_TELEPORT, false); - creature->CastSpell(creature, SPELL_DESTROY_FLOOR_KNOCKUP, false); - - if (!ObjectAccessor::GetCreature(*creature, instance->GetGuidData(NPC_ANUBARAK))) - creature->SummonCreature(NPC_ANUBARAK, AnubarakLoc[0], TEMPSUMMON_CORPSE_TIMED_DESPAWN, DESPAWN_TIME); - - if (creature->IsVisible()) - creature->SetVisible(false); + if (creature->GetMap()->GetPlayers().getFirst()->GetSource()->GetTeam() == ALLIANCE) + instance->SetData(TYPE_EVENT, 4020); + else + instance->SetData(TYPE_EVENT, 4030); + instance->SetBossState(BOSS_LICH_KING, NOT_STARTED); } creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); return true; diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp index 9edde447f32..12a745a34bc 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp @@ -2412,14 +2412,14 @@ enum QuelDelarMisc Position const QuelDelarCenterPos = { 5309.259f, 2006.390f, 718.046f, 0.0f }; Position const QuelDelarSummonPos = { 5298.473f, 1994.852f, 709.424f, 3.979351f }; Position const QuelDelarMovement[] = -{ +{ { 5292.870f, 1998.950f, 718.046f, 0.0f }, { 5295.819f, 1991.912f, 707.707f, 0.0f }, { 5295.301f, 1989.782f, 708.696f, 0.0f } }; Position const UtherQuelDelarMovement[] = -{ +{ { 5336.830f, 1981.700f, 709.319f, 0.0f }, { 5314.350f, 1993.440f, 707.726f, 0.0f } }; @@ -2640,13 +2640,7 @@ class npc_quel_delar_sword : public CreatureScript break; case EVENT_QUEL_DELAR_FLIGHT: { - Movement::MoveSplineInit init(me); - FillCirclePath(QuelDelarCenterPos, 18.0f, 718.046f, init.Path(), true); - init.SetFly(); - init.SetCyclic(); - init.SetAnimation(Movement::ToFly); - init.Launch(); - + me->GetMotionMaster()->MoveCirclePath(QuelDelarCenterPos.GetPositionX(), QuelDelarCenterPos.GetPositionY(), 718.046f, 18.0f, true, 16); _events.ScheduleEvent(EVENT_QUEL_DELAR_LAND, 15000); break; } @@ -2694,21 +2688,6 @@ class npc_quel_delar_sword : public CreatureScript } private: - void FillCirclePath(Position const& centerPos, float radius, float z, Movement::PointsArray& path, bool clockwise) - { - float step = clockwise ? -M_PI / 8.0f : M_PI / 8.0f; - float angle = centerPos.GetAngle(me->GetPositionX(), me->GetPositionY()); - - for (uint8 i = 0; i < 16; angle += step, ++i) - { - G3D::Vector3 point; - point.x = centerPos.GetPositionX() + radius * cosf(angle); - point.y = centerPos.GetPositionY() + radius * sinf(angle); - point.z = z; - path.push_back(point); - } - } - EventMap _events; InstanceScript* _instance; bool _intro; diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp index 660a639487f..fabe54303b8 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp @@ -196,7 +196,7 @@ class instance_halls_of_reflection : public InstanceMapScript } } - uint32 GetGameObjectEntry(uint32 /*guidLow*/, uint32 entry) override + uint32 GetGameObjectEntry(ObjectGuid::LowType /*guidLow*/, uint32 entry) override { if (!_teamInInstance) { diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp index 5f27830fd07..68430f6f0f7 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp @@ -24,6 +24,7 @@ #include "PassiveAI.h" #include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "SpellHistory.h" #include "SpellAuraEffects.h" #include "SpellScript.h" #include "Transport.h" @@ -644,10 +645,10 @@ protected: { if (Instance->GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) == IN_PROGRESS && !me->HasUnitState(UNIT_STATE_CASTING) && !me->HasReactState(REACT_PASSIVE) && - !me->HasSpellCooldown(BurningPitchId)) + !me->GetSpellHistory()->HasCooldown(BurningPitchId)) { DoCastAOE(BurningPitchId, true); - me->_AddCreatureSpellCooldown(BurningPitchId, time(NULL) + urand(3000, 4000) / IN_MILLISECONDS); + me->GetSpellHistory()->AddCooldown(BurningPitchId, 0, std::chrono::milliseconds(urand(3000, 4000))); } } @@ -1469,7 +1470,7 @@ struct npc_gunship_boarding_addAI : public gunship_npc_AI DoCast(me, SPELL_BATTLE_EXPERIENCE, true); DoCast(me, SPELL_TELEPORT_TO_ENEMY_SHIP, true); DoCast(me, Instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? SPELL_MELEE_TARGETING_ON_ORGRIMS_HAMMER : SPELL_MELEE_TARGETING_ON_SKYBREAKER, true); - me->_AddCreatureSpellCooldown(BurningPitchId, time(NULL) + 3); + me->GetSpellHistory()->AddCooldown(BurningPitchId, 0, std::chrono::seconds(3)); std::list<Player*> players; Trinity::UnitAuraCheck check(true, Instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? SPELL_ON_ORGRIMS_HAMMER_DECK : SPELL_ON_SKYBREAKER_DECK); @@ -1698,11 +1699,11 @@ class npc_gunship_rocketeer : public CreatureScript return; uint32 spellId = me->GetEntry() == NPC_SKYBREAKER_MORTAR_SOLDIER ? SPELL_ROCKET_ARTILLERY_A : SPELL_ROCKET_ARTILLERY_H; - if (me->HasSpellCooldown(spellId)) + if (me->GetSpellHistory()->HasCooldown(spellId)) return; DoCastAOE(spellId, true); - me->_AddCreatureSpellCooldown(spellId, time(NULL) + 9); + me->GetSpellHistory()->AddCooldown(spellId, 0, std::chrono::seconds(9)); } }; @@ -1873,7 +1874,7 @@ class spell_igb_rocket_pack_useable : public SpellScriptLoader { PrepareAuraScript(spell_igb_rocket_pack_useable_AuraScript); - bool Load() + bool Load() override { return GetOwner()->GetInstanceScript() != nullptr; } @@ -2001,7 +2002,7 @@ class spell_igb_cannon_blast : public SpellScriptLoader { PrepareSpellScript(spell_igb_cannon_blast_SpellScript); - bool Load() + bool Load() override { return GetCaster()->GetTypeId() == TYPEID_UNIT; } @@ -2343,7 +2344,7 @@ class spell_igb_gunship_fall_teleport : public SpellScriptLoader { PrepareSpellScript(spell_igb_gunship_fall_teleport_SpellScript); - bool Load() + bool Load() override { return GetCaster()->GetInstanceScript() != nullptr; } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp index 63082808e03..d7a580800bc 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -1060,8 +1060,8 @@ class spell_putricide_ooze_eruption_searcher : public SpellScriptLoader uint32 adhesiveId = sSpellMgr->GetSpellIdForDifficulty(SPELL_VOLATILE_OOZE_ADHESIVE, GetCaster()); if (GetHitUnit()->HasAura(adhesiveId)) { - GetCaster()->CastSpell(GetHitUnit(), SPELL_OOZE_ERUPTION, true); GetHitUnit()->RemoveAurasDueToSpell(adhesiveId, GetCaster()->GetGUID(), 0, AURA_REMOVE_BY_ENEMY_SPELL); + GetCaster()->CastSpell(GetHitUnit(), SPELL_OOZE_ERUPTION, true); } } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp index 4d7b9ec42b4..d56a3f80f75 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp @@ -18,7 +18,7 @@ #include "ObjectMgr.h" #include "ScriptMgr.h" #include "ScriptedCreature.h" -#include "SpellAuras.h" +#include "SpellAuraEffects.h" #include "GridNotifiers.h" #include "icecrown_citadel.h" @@ -213,7 +213,7 @@ class boss_rotface : public CreatureScript } break; case EVENT_MUTATED_INFECTION: - me->CastCustomSpell(SPELL_MUTATED_INFECTION, SPELLVALUE_MAX_TARGETS, 1, NULL, false); + DoCastAOE(SPELL_MUTATED_INFECTION); events.ScheduleEvent(EVENT_MUTATED_INFECTION, infectionCooldown); break; case EVENT_VILE_GAS: @@ -509,13 +509,6 @@ class spell_rotface_mutated_infection : public SpellScriptLoader { PrepareSpellScript(spell_rotface_mutated_infection_SpellScript); - public: - spell_rotface_mutated_infection_SpellScript() - { - _target = nullptr; - } - - private: void FilterTargets(std::list<WorldObject*>& targets) { // remove targets with this aura already @@ -527,14 +520,6 @@ class spell_rotface_mutated_infection : public SpellScriptLoader WorldObject* target = Trinity::Containers::SelectRandomContainerElement(targets); targets.clear(); targets.push_back(target); - _target = target; - } - - void ReplaceTargets(std::list<WorldObject*>& targets) - { - targets.clear(); - if (_target) - targets.push_back(_target); } void NotifyTargets() @@ -546,19 +531,43 @@ class spell_rotface_mutated_infection : public SpellScriptLoader void Register() override { - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_rotface_mutated_infection_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_rotface_mutated_infection_SpellScript::ReplaceTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY); - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_rotface_mutated_infection_SpellScript::ReplaceTargets, EFFECT_2, TARGET_UNIT_SRC_AREA_ENEMY); + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_rotface_mutated_infection_SpellScript::FilterTargets, EFFECT_ALL, TARGET_UNIT_SRC_AREA_ENEMY); AfterHit += SpellHitFn(spell_rotface_mutated_infection_SpellScript::NotifyTargets); } + }; + + class spell_rotface_mutated_infection_AuraScript : public AuraScript + { + PrepareAuraScript(spell_rotface_mutated_infection_AuraScript); - WorldObject* _target; + bool Validate(SpellInfo const* spellInfo) override + { + if (!sSpellMgr->GetSpellInfo(uint32(spellInfo->Effects[EFFECT_2].CalcValue()))) + return false; + return true; + } + + void HandleEffectRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) + { + Unit* target = GetTarget(); + target->CastSpell(target, uint32(GetSpellInfo()->Effects[EFFECT_2].CalcValue()), true, nullptr, aurEff, GetCasterGUID()); + } + + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_rotface_mutated_infection_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL); + } }; SpellScript* GetSpellScript() const override { return new spell_rotface_mutated_infection_SpellScript(); } + + AuraScript* GetAuraScript() const override + { + return new spell_rotface_mutated_infection_AuraScript(); + } }; class spell_rotface_little_ooze_combine : public SpellScriptLoader diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp index 60268fc8d87..e908d088554 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp @@ -348,7 +348,7 @@ class boss_sindragosa : public CreatureScript events.ScheduleEvent(EVENT_AIR_MOVEMENT, 1); break; case POINT_AIR_PHASE: - me->CastCustomSpell(SPELL_ICE_TOMB_TARGET, SPELLVALUE_MAX_TARGETS, RAID_MODE<int32>(2, 5, 2, 6), NULL); + me->CastCustomSpell(SPELL_ICE_TOMB_TARGET, SPELLVALUE_MAX_TARGETS, RAID_MODE<int32>(2, 5, 2, 6), NULL, TRIGGERED_FULL_MASK); me->SetFacingTo(float(M_PI)); events.ScheduleEvent(EVENT_AIR_MOVEMENT_FAR, 1); events.ScheduleEvent(EVENT_FROST_BOMB, 9000); @@ -491,7 +491,7 @@ class boss_sindragosa : public CreatureScript if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, FrostBeaconSelector(me))) { Talk(EMOTE_WARN_FROZEN_ORB, target); - DoCast(target, SPELL_ICE_TOMB_DUMMY, true); + me->CastCustomSpell(SPELL_ICE_TOMB_TARGET, SPELLVALUE_MAX_TARGETS, 1, nullptr, TRIGGERED_FULL_MASK); } events.ScheduleEvent(EVENT_ICE_TOMB, urand(16000, 23000)); break; @@ -1631,7 +1631,7 @@ void AddSC_boss_sindragosa() new spell_rimefang_icy_blast(); new spell_frostwarden_handler_order_whelp(); new spell_frostwarden_handler_focus_fire(); - new spell_trigger_spell_from_caster("spell_sindragosa_ice_tomb", SPELL_ICE_TOMB_DUMMY); + new spell_trigger_spell_from_caster("spell_sindragosa_ice_tomb", SPELL_ICE_TOMB_DUMMY, TRIGGERED_IGNORE_SET_FACING); new spell_trigger_spell_from_caster("spell_sindragosa_ice_tomb_dummy", SPELL_FROST_BEACON); new at_sindragosa_lair(); new achievement_all_you_can_eat(); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp index ae0e00cb849..07816ebbe39 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp @@ -2417,6 +2417,7 @@ class spell_the_lich_king_defile : public SpellScriptLoader void CorrectRange(std::list<WorldObject*>& targets) { targets.remove_if(ExactDistanceCheck(GetCaster(), 10.0f * GetCaster()->GetObjectScale())); + targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_HARVEST_SOUL_VALKYR)); } void ChangeDamageAndGrow() diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h index 8bf8e5ee6fb..091190b6b4e 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h @@ -524,14 +524,16 @@ enum AreaIds class spell_trigger_spell_from_caster : public SpellScriptLoader { public: - spell_trigger_spell_from_caster(char const* scriptName, uint32 triggerId) : SpellScriptLoader(scriptName), _triggerId(triggerId) { } + spell_trigger_spell_from_caster(char const* scriptName, uint32 triggerId, TriggerCastFlags triggerFlags = TRIGGERED_FULL_MASK) + : SpellScriptLoader(scriptName), _triggerId(triggerId), _triggerFlags(triggerFlags) { } class spell_trigger_spell_from_caster_SpellScript : public SpellScript { PrepareSpellScript(spell_trigger_spell_from_caster_SpellScript); public: - spell_trigger_spell_from_caster_SpellScript(uint32 triggerId) : SpellScript(), _triggerId(triggerId) { } + spell_trigger_spell_from_caster_SpellScript(uint32 triggerId, TriggerCastFlags triggerFlags) + : SpellScript(), _triggerId(triggerId), _triggerFlags(triggerFlags) { } bool Validate(SpellInfo const* /*spell*/) override { @@ -542,7 +544,7 @@ class spell_trigger_spell_from_caster : public SpellScriptLoader void HandleTrigger() { - GetCaster()->CastSpell(GetHitUnit(), _triggerId, true); + GetCaster()->CastSpell(GetHitUnit(), _triggerId, _triggerFlags); } void Register() override @@ -551,15 +553,17 @@ class spell_trigger_spell_from_caster : public SpellScriptLoader } uint32 _triggerId; + TriggerCastFlags _triggerFlags; }; SpellScript* GetSpellScript() const override { - return new spell_trigger_spell_from_caster_SpellScript(_triggerId); + return new spell_trigger_spell_from_caster_SpellScript(_triggerId, _triggerFlags); } private: uint32 _triggerId; + TriggerCastFlags _triggerFlags; }; template<class AI> diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp index f2236061f88..1b823b4a452 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp @@ -317,7 +317,7 @@ class instance_icecrown_citadel : public InstanceMapScript } // Weekly quest spawn prevention - uint32 GetCreatureEntry(uint32 /*guidLow*/, CreatureData const* data) + uint32 GetCreatureEntry(ObjectGuid::LowType /*guidLow*/, CreatureData const* data) override { uint32 entry = data->id; switch (entry) @@ -372,7 +372,7 @@ class instance_icecrown_citadel : public InstanceMapScript return entry; } - uint32 GetGameObjectEntry(uint32 /*guidLow*/, uint32 entry) override + uint32 GetGameObjectEntry(ObjectGuid::LowType /*guidLow*/, uint32 entry) override { switch (entry) { diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp index 173c6618cb0..3a431ab3ac0 100644 --- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp +++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp @@ -564,7 +564,7 @@ class instance_naxxramas : public InstanceMapScript return true; } - bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* /*source*/, Unit const* /*target = NULL*/, uint32 /*miscvalue1 = 0*/) + bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* /*source*/, Unit const* /*target = NULL*/, uint32 /*miscvalue1 = 0*/) override { switch (criteria_id) { diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp index 43069f10464..9c339e596a4 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp @@ -128,7 +128,6 @@ enum Spells SPELL_ARCANE_BARRAGE_DAMAGE = 63934, // the actual damage - cast by affected player by script spell // Transition /II-III/ - SPELL_SUMMOM_RED_DRAGON_BUDYY = 56070, SPELL_RIDE_RED_DRAGON_BUDDY = 56071, SPELL_SUMMON_RED_DRAGON_BUDDY_F_CAST = 58846, // After implicitly hit player targets they will force cast 56070 on self SPELL_DESTROY_PLATFORM_CHANNEL = 58842, @@ -520,11 +519,7 @@ public: _despawned = false; break; case ACTION_CYCLIC_MOVEMENT: - Movement::MoveSplineInit init(me); - FillCirclePath(MalygosPositions[3], 120.0f, 283.2763f, init.Path(), true); - init.SetFly(); - init.SetCyclic(); - init.Launch(); + me->GetMotionMaster()->MoveCirclePath(MalygosPositions[3].GetPositionX(), MalygosPositions[3].GetPositionY(), 283.2763f, 120.0f, true, 16); break; } } @@ -1020,22 +1015,6 @@ public: } private: - // Used to generate perfect cyclic movements (Enter Circle). - void FillCirclePath(Position const& centerPos, float radius, float z, Movement::PointsArray& path, bool clockwise) - { - float step = clockwise ? float(-M_PI) / 8.0f : float(M_PI) / 8.0f; - float angle = centerPos.GetAngle(me->GetPositionX(), me->GetPositionY()); - - for (uint8 i = 0; i < 16; angle += step, ++i) - { - G3D::Vector3 point; - point.x = centerPos.GetPositionX() + radius * cosf(angle); - point.y = centerPos.GetPositionY() + radius * sinf(angle); - point.z = z; // Don't use any height getters unless all bugs are fixed. - path.push_back(point); - } - } - uint8 _phase; // Counter for phases used with a getter. uint8 _summonDeaths; // Keeps count of arcane trash. uint8 _preparingPulsesChecker; // In retail they use 2 preparing pulses with 7 sec CD, after they pass 2 seconds. @@ -1326,11 +1305,7 @@ public: { if (action < ACTION_DELAYED_DESPAWN) { - Movement::MoveSplineInit init(me); - FillCirclePath(MalygosPositions[3], 35.0f, 282.3402f, init.Path(), true); - init.SetFly(); - init.SetCyclic(); - init.Launch(); + me->GetMotionMaster()->MoveCirclePath(MalygosPositions[3].GetPositionX(), MalygosPositions[3].GetPositionY(), 282.3402f, 35.0f, true, 16); } else { @@ -1339,21 +1314,6 @@ public: } private: - void FillCirclePath(Position const& centerPos, float radius, float z, Movement::PointsArray& path, bool clockwise) - { - float step = clockwise ? float(-M_PI) / 9.0f : float(M_PI) / 9.0f; - float angle = centerPos.GetAngle(me->GetPositionX(), me->GetPositionY()); - - for (uint8 i = 0; i < 18; angle += step, ++i) - { - G3D::Vector3 point; - point.x = centerPos.GetPositionX() + radius * cosf(angle); - point.y = centerPos.GetPositionY() + radius * sinf(angle); - point.z = z; // Don't use any height getters unless all bugs are fixed. - path.push_back(point); - } - } - InstanceScript* _instance; }; diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h b/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h index b6a0d3f9b62..d9b921b38a1 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h @@ -80,7 +80,8 @@ enum InstanceSpells SPELL_VORTEX_5 = 56263, // damage | used to enter to the vehicle SPELL_PORTAL_OPENED = 61236, SPELL_RIDE_RED_DRAGON_TRIGGERED = 56072, - SPELL_IRIS_OPENED = 61012 // visual when starting encounter + SPELL_IRIS_OPENED = 61012, // visual when starting encounter + SPELL_SUMMOM_RED_DRAGON_BUDDY = 56070 }; #endif diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp index fffdbbc3d1b..7b884f39a41 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp @@ -39,6 +39,12 @@ public: SetBossNumber(MAX_ENCOUNTER); } + void OnPlayerEnter(Player* player) override + { + if (GetBossState(DATA_MALYGOS_EVENT) == DONE) + player->CastSpell(player, SPELL_SUMMOM_RED_DRAGON_BUDDY, true); + } + bool SetBossState(uint32 type, EncounterState state) override { if (!InstanceScript::SetBossState(type, state)) diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_kolurg.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_kolurg.cpp deleted file mode 100644 index fc56f541a4b..00000000000 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_kolurg.cpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (C) 2008-2015 TrinityCore <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 (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, see <http://www.gnu.org/licenses/>. - */ - -/* Script Data Start -SDName: Boss Commander Kolurg -SDAuthor: LordVanMartin -SD%Complete: -SDComment: Only Alliance Heroic -SDCategory: -Script Data End */ - -#include "ScriptMgr.h" -#include "ScriptedCreature.h" - -enum Spells -{ - SPELL_BATTLE_SHOUT = 31403, - SPELL_CHARGE = 60067, - SPELL_FRIGHTENING_SHOUT = 19134, - SPELL_WHIRLWIND_1 = 38619, - SPELL_WHIRLWIND_2 = 38618 - -}; - -//not used -//Yell -#define SAY_AGGRO -1576024 -#define SAY_KILL -1576025 -#define SAY_DEATH -1576026 - -class boss_commander_kolurg : public CreatureScript -{ -public: - boss_commander_kolurg() : CreatureScript("boss_commander_kolurg") { } - - CreatureAI* GetAI(Creature* creature) const override - { - return new boss_commander_kolurgAI(creature); - } - - struct boss_commander_kolurgAI : public ScriptedAI - { - boss_commander_kolurgAI(Creature* creature) : ScriptedAI(creature) { } - - void Reset() override { } - void EnterCombat(Unit* /*who*/) override { } - void AttackStart(Unit* /*who*/) override { } - void MoveInLineOfSight(Unit* /*who*/) override { } - - void UpdateAI(uint32 /*diff*/) override - { - //Return since we have no target - if (!UpdateVictim()) - return; - - DoMeleeAttackIfReady(); - } - void JustDied(Unit* /*killer*/) override { } - }; - -}; - -void AddSC_boss_commander_kolurg() -{ - new boss_commander_kolurg(); -} diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard.cpp deleted file mode 100644 index ff08038d898..00000000000 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard.cpp +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2008-2015 TrinityCore <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 (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, see <http://www.gnu.org/licenses/>. - */ - -/* Script Data Start -SDName: Boss Commander Stoutbeard -SDAuthor: LordVanMartin -SD%Complete: -SDComment: Only Horde Heroic -SDCategory: -Script Data End */ - -#include "ScriptMgr.h" -#include "ScriptedCreature.h" - -enum CommanderStoutbeard -{ - SPELL_BATTLE_SHOUT = 31403, - SPELL_CHARGE = 60067, - SPELL_FRIGHTENING_SHOUT = 19134, - SPELL_WHIRLWIND_1 = 38619, - SPELL_WHIRLWIND_2 = 38618 -}; - - -class boss_commander_stoutbeard : public CreatureScript -{ -public: - boss_commander_stoutbeard() : CreatureScript("boss_commander_stoutbeard") { } - - CreatureAI* GetAI(Creature* creature) const override - { - return new boss_commander_stoutbeardAI(creature); - } - - struct boss_commander_stoutbeardAI : public ScriptedAI - { - boss_commander_stoutbeardAI(Creature* creature) : ScriptedAI(creature) { } - - void Reset() override { } - void AttackStart(Unit* /*who*/) override { } - void MoveInLineOfSight(Unit* /*who*/) override { } - - void UpdateAI(uint32 /*diff*/) override - { - //Return since we have no target - if (!UpdateVictim()) - return; - - DoMeleeAttackIfReady(); - } - }; - -}; - -void AddSC_boss_commander_stoutbeard() -{ - new boss_commander_stoutbeard(); -} diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_nexus_commanders.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_nexus_commanders.cpp new file mode 100644 index 00000000000..d40f9fecc6a --- /dev/null +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_nexus_commanders.cpp @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2008-2015 TrinityCore <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 (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, see <http://www.gnu.org/licenses/>. + */ + +#include "ScriptMgr.h" +#include "ScriptedCreature.h" +#include "nexus.h" + +enum Spells +{ + SPELL_BATTLE_SHOUT = 31403, + SPELL_CHARGE = 60067, + SPELL_FRIGHTENING_SHOUT = 19134, + SPELL_WHIRLWIND = 38618, + SPELL_FROZEN_PRISON = 47543 +}; + +enum Yells +{ + SAY_AGGRO = 0, + SAY_KILL = 1, + SAY_DEATH = 2 +}; + +enum Events +{ + EVENT_CHARGE_COMMANDER = 1, + EVENT_WHIRLWIND, + EVENT_FRIGHTENING_SHOUT +}; + +class boss_nexus_commanders : public CreatureScript +{ + public: + boss_nexus_commanders() : CreatureScript("boss_nexus_commanders") { } + + struct boss_nexus_commandersAI : public BossAI + { + boss_nexus_commandersAI(Creature* creature) : BossAI(creature, DATA_COMMANDER) { } + + void EnterCombat(Unit* /*who*/) override + { + _EnterCombat(); + Talk(SAY_AGGRO); + me->RemoveAurasDueToSpell(SPELL_FROZEN_PRISON); + DoCast(me, SPELL_BATTLE_SHOUT); + + events.ScheduleEvent(EVENT_CHARGE_COMMANDER, urand(3000, 4000)); + events.ScheduleEvent(EVENT_WHIRLWIND, urand(6000, 8000)); + events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, urand(13000, 15000)); + } + + void ExecuteEvent(uint32 eventId) override + { + switch (eventId) + { + case EVENT_CHARGE_COMMANDER: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true)) + DoCast(target, SPELL_CHARGE); + events.ScheduleEvent(EVENT_CHARGE_COMMANDER, urand(11000, 15000)); + break; + case EVENT_WHIRLWIND: + DoCast(me, SPELL_WHIRLWIND); + events.ScheduleEvent(EVENT_WHIRLWIND, urand(19500, 25000)); + break; + case EVENT_FRIGHTENING_SHOUT: + DoCastAOE(SPELL_FRIGHTENING_SHOUT); + events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, urand(45000, 55000)); + break; + default: + break; + } + } + + void JustDied(Unit* /*killer*/) override + { + _JustDied(); + Talk(SAY_DEATH); + } + + void KilledUnit(Unit* who) override + { + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_KILL); + } + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetInstanceAI<boss_nexus_commandersAI>(creature); + } +}; + +void AddSC_boss_nexus_commanders() +{ + new boss_nexus_commanders(); +} diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp index 74be65c62c2..41645a6ebb8 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp @@ -78,7 +78,7 @@ public: frenzy = false; } - void Reset() + void Reset() override { BossAI::Reset(); Initialize(); diff --git a/src/server/scripts/Northrend/Nexus/Nexus/nexus.h b/src/server/scripts/Northrend/Nexus/Nexus/nexus.h index 90866ea83f8..c48c7323301 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/nexus.h +++ b/src/server/scripts/Northrend/Nexus/Nexus/nexus.h @@ -21,32 +21,33 @@ #define NexusScriptName "instance_nexus" #define DataHeader "NEX" -uint32 const EncounterCount = 4; +uint32 const EncounterCount = 5; enum DataTypes { - DATA_MAGUS_TELESTRA = 0, - DATA_ANOMALUS = 1, - DATA_ORMOROK = 2, - DATA_KERISTRASZA = 3, + DATA_COMMANDER = 0, + DATA_MAGUS_TELESTRA = 1, + DATA_ANOMALUS = 2, + DATA_ORMOROK = 3, + DATA_KERISTRASZA = 4, - ANOMALUS_CONTAINMET_SPHERE = 4, - ORMOROKS_CONTAINMET_SPHERE = 5, - TELESTRAS_CONTAINMET_SPHERE = 6 + ANOMALUS_CONTAINMET_SPHERE = 5, + ORMOROKS_CONTAINMET_SPHERE = 6, + TELESTRAS_CONTAINMET_SPHERE = 7 }; enum CreatureIds { NPC_ANOMALUS = 26763, NPC_KERISTRASZA = 26723, - + // Alliance NPC_ALLIANCE_BERSERKER = 26800, NPC_ALLIANCE_RANGER = 26802, NPC_ALLIANCE_CLERIC = 26805, NPC_ALLIANCE_COMMANDER = 27949, NPC_COMMANDER_STOUTBEARD = 26796, - + // Horde NPC_HORDE_BERSERKER = 26799, NPC_HORDE_RANGER = 26801, @@ -59,7 +60,7 @@ enum GameObjectIds { GO_ANOMALUS_CONTAINMET_SPHERE = 188527, GO_ORMOROKS_CONTAINMET_SPHERE = 188528, - GO_TELESTRAS_CONTAINMET_SPHERE = 188526 + GO_TELESTRAS_CONTAINMET_SPHERE = 188526 }; #endif diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp index 384694cdd40..453423bd287 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp @@ -197,7 +197,7 @@ public: ++_healthAmountModifier; } } - + private: uint32 _healthAmountModifier; bool _isIntroDone; diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp index 536cae08483..3853b0aedfc 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp @@ -89,7 +89,7 @@ class boss_volkhan : public CreatureScript { public: boss_volkhan() : CreatureScript("boss_volkhan") { } - + struct boss_volkhanAI : public BossAI { boss_volkhanAI(Creature* creature) : BossAI(creature, DATA_VOLKHAN) @@ -104,7 +104,7 @@ public: m_bCanShatterGolem = false; m_uiDelay_Timer = 1000; m_uiSummonPhase = 0; - GolemsShattered = 0; + GolemsShattered = 0; m_uiHealthAmountModifier = 1; } diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp index 1e2ca666378..6233c7e8953 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp @@ -330,7 +330,7 @@ public: DespawnDwarf(); - instance->SetBossState(DATA_BRANN_EVENT, NOT_STARTED); + instance->SetBossState(DATA_TRIBUNAL_OF_AGES, NOT_STARTED); } } @@ -362,8 +362,10 @@ public: break; case 13: Talk(SAY_EVENT_INTRO_1); + instance->SetBossState(DATA_TRIBUNAL_OF_AGES, IN_PROGRESS); SetEscortPaused(true); JumpToNextStep(20000); + // @todo: There should be a pause here and a gossip should start the next step. break; case 17: Talk(SAY_EVENT_INTRO_2); @@ -421,9 +423,9 @@ public: Start(); } - void DamageTaken(Unit* /*done_by*/, uint32 & /*damage*/) override + void DamageTaken(Unit* /*done_by*/, uint32& /*damage*/) override { - if (brannSparklinNews) + if (instance->GetBossState(DATA_TRIBUNAL_OF_AGES) == IN_PROGRESS) brannSparklinNews = false; } @@ -442,9 +444,8 @@ public: switch (uiStep) { case 1: - if (instance->GetBossState(DATA_BRANN_EVENT) != NOT_STARTED) + if (instance->GetBossState(DATA_TRIBUNAL_OF_AGES) != NOT_STARTED) return; - instance->SetBossState(DATA_BRANN_EVENT, IN_PROGRESS); bIsBattle = false; Talk(SAY_ESCORT_START); SetRun(true); @@ -582,7 +583,7 @@ public: break; case 29: Talk(SAY_EVENT_END_02); - instance->SetBossState(DATA_BRANN_EVENT, DONE); + instance->SetBossState(DATA_TRIBUNAL_OF_AGES, DONE); me->CastSpell(me, SPELL_REWARD_ACHIEVEMENT, true); JumpToNextStep(5500); break; @@ -715,9 +716,7 @@ public: class achievement_brann_spankin_new : public AchievementCriteriaScript { public: - achievement_brann_spankin_new() : AchievementCriteriaScript("achievement_brann_spankin_new") - { - } + achievement_brann_spankin_new() : AchievementCriteriaScript("achievement_brann_spankin_new") { } bool OnCheck(Player* /*player*/, Unit* target) override { diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.h b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.h index 2ed47b42bbc..df56aadfe22 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.h +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.h @@ -28,7 +28,7 @@ enum DataTypes // Encounter States/Boss GUIDs DATA_KRYSTALLUS = 0, DATA_MAIDEN_OF_GRIEF = 1, - DATA_BRANN_EVENT = 2, + DATA_TRIBUNAL_OF_AGES = 2, DATA_SJONNIR = 3, // Additional data diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp index a70d1ff3a0d..c67e31c4cc0 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp @@ -23,8 +23,8 @@ DoorData const doorData[] = { - { GO_SJONNIR_DOOR, DATA_BRANN_EVENT, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END + { GO_SJONNIR_DOOR, DATA_TRIBUNAL_OF_AGES, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, + { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END }; class instance_halls_of_stone : public InstanceMapScript @@ -90,7 +90,7 @@ class instance_halls_of_stone : public InstanceMapScript case GO_TRIBUNAL_CHEST: case GO_TRIBUNAL_CHEST_HERO: TribunalChestGUID = go->GetGUID(); - if (GetBossState(DATA_BRANN_EVENT) == DONE) + if (GetBossState(DATA_TRIBUNAL_OF_AGES) == DONE) go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); break; case GO_TRIBUNAL_SKY_FLOOR: @@ -156,7 +156,7 @@ class instance_halls_of_stone : public InstanceMapScript switch (type) { - case DATA_BRANN_EVENT: + case DATA_TRIBUNAL_OF_AGES: if (state == DONE) { if (GameObject* go = instance->GetGameObject(TribunalChestGUID)) @@ -178,7 +178,7 @@ class instance_halls_of_stone : public InstanceMapScript switch (bossId) { case DATA_SJONNIR: - if (GetBossState(DATA_BRANN_EVENT) != DONE) + if (GetBossState(DATA_TRIBUNAL_OF_AGES) != DONE) return false; break; default: diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp index 23b86737f4c..a04c809f893 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp @@ -482,40 +482,47 @@ class boss_flame_leviathan : public CreatureScript if (action && action <= 4) // Tower destruction, debuff leviathan loot and reduce active tower count { if (me->HasLootMode(LOOT_MODE_DEFAULT | LOOT_MODE_HARD_MODE_1 | LOOT_MODE_HARD_MODE_2 | LOOT_MODE_HARD_MODE_3 | LOOT_MODE_HARD_MODE_4) && ActiveTowersCount == 4) - { me->RemoveLootMode(LOOT_MODE_HARD_MODE_4); - --ActiveTowersCount; - } + if (me->HasLootMode(LOOT_MODE_DEFAULT | LOOT_MODE_HARD_MODE_1 | LOOT_MODE_HARD_MODE_2 | LOOT_MODE_HARD_MODE_3) && ActiveTowersCount == 3) - { me->RemoveLootMode(LOOT_MODE_HARD_MODE_3); - --ActiveTowersCount; - } + if (me->HasLootMode(LOOT_MODE_DEFAULT | LOOT_MODE_HARD_MODE_1 | LOOT_MODE_HARD_MODE_2) && ActiveTowersCount == 2) - { me->RemoveLootMode(LOOT_MODE_HARD_MODE_2); - --ActiveTowersCount; - } + if (me->HasLootMode(LOOT_MODE_DEFAULT | LOOT_MODE_HARD_MODE_1) && ActiveTowersCount == 1) - { me->RemoveLootMode(LOOT_MODE_HARD_MODE_1); - --ActiveTowersCount; - } } switch (action) { case ACTION_TOWER_OF_STORM_DESTROYED: - towerOfStorms = false; + if (towerOfStorms) + { + towerOfStorms = false; + --ActiveTowersCount; + } break; case ACTION_TOWER_OF_FROST_DESTROYED: - towerOfFrost = false; + if (towerOfFrost) + { + towerOfFrost = false; + --ActiveTowersCount; + } break; case ACTION_TOWER_OF_FLAMES_DESTROYED: - towerOfFlames = false; + if (towerOfFlames) + { + towerOfFlames = false; + --ActiveTowersCount; + } break; case ACTION_TOWER_OF_LIFE_DESTROYED: - towerOfLife = false; + if (towerOfLife) + { + towerOfLife = false; + --ActiveTowersCount; + } break; case ACTION_START_HARD_MODE: // Activate hard-mode enable all towers, apply buffs on leviathan ActiveTowers = true; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp index 4841950d9d3..64403ad40ca 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp @@ -458,7 +458,7 @@ class spell_general_vezax_mark_of_the_faceless : public SpellScriptLoader { PrepareAuraScript(spell_general_vezax_mark_of_the_faceless_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) + bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_MARK_OF_THE_FACELESS_DAMAGE)) return false; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp index a682e405d08..d0e4b7be63b 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp @@ -903,17 +903,15 @@ class boss_yogg_saron : public CreatureScript DoCast(me, SPELL_KNOCK_AWAY); me->ResetLootMode(); - switch (_instance->GetData(DATA_KEEPERS_COUNT)) - { - case 0: - me->AddLootMode(LOOT_MODE_HARD_MODE_4); - case 1: - me->AddLootMode(LOOT_MODE_HARD_MODE_3); - case 2: - me->AddLootMode(LOOT_MODE_HARD_MODE_2); - case 3: - me->AddLootMode(LOOT_MODE_HARD_MODE_1); - } + uint32 keepersCount = _instance->GetData(DATA_KEEPERS_COUNT); + if (keepersCount == 0) + me->AddLootMode(LOOT_MODE_HARD_MODE_4); + if (keepersCount <= 1) + me->AddLootMode(LOOT_MODE_HARD_MODE_3); + if (keepersCount <= 2) + me->AddLootMode(LOOT_MODE_HARD_MODE_2); + if (keepersCount <= 3) + me->AddLootMode(LOOT_MODE_HARD_MODE_1); } void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override @@ -1126,30 +1124,11 @@ class npc_ominous_cloud : public CreatureScript DoCast(me, SPELL_OMINOUS_CLOUD_VISUAL); } - void FillCirclePath(Position const& centerPos, float radius, float z, Movement::PointsArray& path, bool clockwise) - { - float step = clockwise ? float(-M_PI) / 8.0f : float(M_PI) / 8.0f; - float angle = centerPos.GetAngle(me->GetPositionX(), me->GetPositionY()); - - for (uint8 i = 0; i < 16; angle += step, ++i) - { - G3D::Vector3 point; - point.x = centerPos.GetPositionX() + radius * cosf(angle); - point.y = centerPos.GetPositionY() + radius * sinf(angle); - point.z = me->GetMap()->GetHeight(me->GetPhaseMask(), point.x, point.y, z + 5.0f); - path.push_back(point); - } - } - void UpdateAI(uint32 /*diff*/) override { } - void DoAction(int32 action) override + void DoAction(int32 /*action*/) override { - Movement::MoveSplineInit init(me); - FillCirclePath(YoggSaronSpawnPos, me->GetDistance2d(YoggSaronSpawnPos.GetPositionX(), YoggSaronSpawnPos.GetPositionY()), me->GetPositionZ(), init.Path(), action != 0); - init.SetWalk(true); - init.SetCyclic(); - init.Launch(); + me->GetMotionMaster()->MoveCirclePath(YoggSaronSpawnPos.GetPositionX(), YoggSaronSpawnPos.GetPositionY(), me->GetPositionZ() + 5.0f, me->GetDistance2d(YoggSaronSpawnPos.GetPositionX(), YoggSaronSpawnPos.GetPositionY()), true, 16); } }; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp index 952e35642d0..ca3ea3a60ed 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp @@ -16,6 +16,7 @@ */ #include "InstanceScript.h" +#include "Vehicle.h" #include "Player.h" #include "ScriptedCreature.h" #include "ScriptMgr.h" @@ -91,6 +92,7 @@ class instance_ulduar : public InstanceMapScript // Creatures ObjectGuid LeviathanGUID; + GuidVector LeviathanVehicleGUIDs; ObjectGuid IgnisGUID; ObjectGuid RazorscaleGUID; ObjectGuid RazorscaleController; @@ -217,6 +219,11 @@ class instance_ulduar : public InstanceMapScript case NPC_LEVIATHAN: LeviathanGUID = creature->GetGUID(); break; + case NPC_SALVAGED_DEMOLISHER: + case NPC_SALVAGED_SIEGE_ENGINE: + case NPC_SALVAGED_CHOPPER: + LeviathanVehicleGUIDs.push_back(creature->GetGUID()); + break; case NPC_IGNIS: IgnisGUID = creature->GetGUID(); break; @@ -441,7 +448,7 @@ class instance_ulduar : public InstanceMapScript } } - void OnGameObjectCreate(GameObject* gameObject) + void OnGameObjectCreate(GameObject* gameObject) override { switch (gameObject->GetEntry()) { @@ -682,6 +689,24 @@ class instance_ulduar : public InstanceMapScript switch (type) { case BOSS_LEVIATHAN: + if (state == DONE) + { + // Eject all players from vehicles and make them untargetable. + // They will be despawned after a while + for (auto const& vehicleGuid : LeviathanVehicleGUIDs) + { + if (Creature* vehicleCreature = instance->GetCreature(vehicleGuid)) + { + if (Vehicle* vehicle = vehicleCreature->GetVehicleKit()) + { + vehicle->RemoveAllPassengers(); + vehicleCreature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + vehicleCreature->DespawnOrUnsummon(5 * MINUTE * IN_MILLISECONDS); + } + } + } + } + break; case BOSS_IGNIS: case BOSS_RAZORSCALE: case BOSS_XT002: @@ -1143,6 +1168,34 @@ class instance_ulduar : public InstanceMapScript } } + void UpdateDoorState(GameObject* door) override + { + // Leviathan doors are set to DOOR_TYPE_ROOM except the one it uses to enter the room + // which has to be set to DOOR_TYPE_PASSAGE + if (door->GetEntry() == GO_LEVIATHAN_DOOR && door->GetPositionX() > 400.f) + door->SetGoState(GetBossState(BOSS_LEVIATHAN) == DONE ? GO_STATE_ACTIVE : GO_STATE_READY); + else + InstanceScript::UpdateDoorState(door); + } + + void AddDoor(GameObject* door, bool add) override + { + // Leviathan doors are South except the one it uses to enter the room + // which is North and should not be used for boundary checks in BossAI::CheckBoundary() + if (door->GetEntry() == GO_LEVIATHAN_DOOR && door->GetPositionX() > 400.f) + { + if (add) + GetBossInfo(BOSS_LEVIATHAN)->door[DOOR_TYPE_PASSAGE].insert(door->GetGUID()); + else + GetBossInfo(BOSS_LEVIATHAN)->door[DOOR_TYPE_PASSAGE].erase(door->GetGUID()); + + if (add) + UpdateDoorState(door); + } + else + InstanceScript::AddDoor(door, add); + } + private: EventMap _events; uint32 _algalonTimer; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h index ddf293dd8b8..d40fb698658 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h @@ -54,6 +54,7 @@ enum UlduarNPCs NPC_LEVIATHAN = 33113, NPC_SALVAGED_DEMOLISHER = 33109, NPC_SALVAGED_SIEGE_ENGINE = 33060, + NPC_SALVAGED_CHOPPER = 33062, NPC_IGNIS = 33118, NPC_RAZORSCALE = 33186, NPC_RAZORSCALE_CONTROLLER = 33233, diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp index 571f73ea628..483beda43ee 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp @@ -141,7 +141,7 @@ class boss_ingvar_the_plunderer : public CreatureScript damage = 0; } - void DoAction(int32 actionId) + void DoAction(int32 actionId) override { if (actionId == ACTION_START_PHASE_2) StartZombiePhase(); diff --git a/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp b/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp index 36d2c5f8ed3..dc923e534b0 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp @@ -23,12 +23,9 @@ enum Spells { SPELL_ARCANE_VACUUM = 58694, SPELL_BLIZZARD = 58693, - H_SPELL_BLIZZARD = 59369, SPELL_MANA_DESTRUCTION = 59374, SPELL_TAIL_SWEEP = 58690, - H_SPELL_TAIL_SWEEP = 59283, SPELL_UNCONTROLLABLE_ENERGY = 58688, - H_SPELL_UNCONTROLLABLE_ENERGY = 59281, SPELL_TRANSFORM = 58668 }; @@ -48,17 +45,11 @@ class boss_cyanigosa : public CreatureScript public: boss_cyanigosa() : CreatureScript("boss_cyanigosa") { } - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<boss_cyanigosaAI>(creature); - } - - struct boss_cyanigosaAI : public ScriptedAI + struct boss_cyanigosaAI : public BossAI { - boss_cyanigosaAI(Creature* creature) : ScriptedAI(creature) + boss_cyanigosaAI(Creature* creature) : BossAI(creature, DATA_CYANIGOSA) { Initialize(); - instance = creature->GetInstanceScript(); } void Initialize() @@ -76,24 +67,20 @@ public: uint32 uiTailSweepTimer; uint32 uiUncontrollableEnergyTimer; - InstanceScript* instance; - void Reset() override { Initialize(); - instance->SetData(DATA_CYANIGOSA_EVENT, NOT_STARTED); + BossAI::Reset(); } - void EnterCombat(Unit* /*who*/) override + void EnterCombat(Unit* who) override { + BossAI::EnterCombat(who); Talk(SAY_AGGRO); - - instance->SetData(DATA_CYANIGOSA_EVENT, IN_PROGRESS); } void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) override { if (instance->GetData(DATA_REMOVE_NPC) == 1) @@ -102,13 +89,12 @@ public: instance->SetData(DATA_REMOVE_NPC, 0); } - //Return since we have no target if (!UpdateVictim()) return; if (uiArcaneVacuumTimer <= diff) { - DoCast(SPELL_ARCANE_VACUUM); + DoCastAOE(SPELL_ARCANE_VACUUM); uiArcaneVacuumTimer = 10000; } else uiArcaneVacuumTimer -= diff; @@ -121,7 +107,7 @@ public: if (uiTailSweepTimer <= diff) { - DoCast(SPELL_TAIL_SWEEP); + DoCastVictim(SPELL_TAIL_SWEEP); uiTailSweepTimer = 20000; } else uiTailSweepTimer -= diff; @@ -144,22 +130,23 @@ public: DoMeleeAttackIfReady(); } - void JustDied(Unit* /*killer*/) override + void JustDied(Unit* killer) override { + BossAI::JustDied(killer); Talk(SAY_DEATH); - - instance->SetData(DATA_CYANIGOSA_EVENT, DONE); } void KilledUnit(Unit* victim) override { - if (victim->GetTypeId() != TYPEID_PLAYER) - return; - - Talk(SAY_SLAY); + if (victim->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); } }; + CreatureAI* GetAI(Creature* creature) const override + { + return GetInstanceAI<boss_cyanigosaAI>(creature); + } }; class achievement_defenseless : public AchievementCriteriaScript diff --git a/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp b/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp index e990b8796de..5c8d4b8691a 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp @@ -24,9 +24,7 @@ enum Spells SPELL_BLOODLUST = 54516, SPELL_BREAK_BONDS = 59463, SPELL_CHAIN_HEAL = 54481, - H_SPELL_CHAIN_HEAL = 59473, SPELL_EARTH_SHIELD = 54479, - H_SPELL_EARTH_SHIELD = 59471, SPELL_EARTH_SHOCK = 54511, SPELL_LIGHTNING_BOLT = 53044, SPELL_STORMSTRIKE = 51876 @@ -47,11 +45,6 @@ class boss_erekem : public CreatureScript public: boss_erekem() : CreatureScript("boss_erekem") { } - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<boss_erekemAI>(creature); - } - struct boss_erekemAI : public ScriptedAI { boss_erekemAI(Creature* creature) : ScriptedAI(creature) @@ -81,9 +74,9 @@ public: { Initialize(); if (instance->GetData(DATA_WAVE_COUNT) == 6) - instance->SetData(DATA_1ST_BOSS_EVENT, NOT_STARTED); + instance->SetBossState(DATA_1ST_BOSS_EVENT, NOT_STARTED); else if (instance->GetData(DATA_WAVE_COUNT) == 12) - instance->SetData(DATA_2ND_BOSS_EVENT, NOT_STARTED); + instance->SetBossState(DATA_2ND_BOSS_EVENT, NOT_STARTED); if (Creature* pGuard1 = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_EREKEM_GUARD_1))) { @@ -129,25 +122,23 @@ public: Talk(SAY_AGGRO); DoCast(me, SPELL_EARTH_SHIELD); - if (GameObject* pDoor = instance->instance->GetGameObject(instance->GetGuidData(DATA_EREKEM_CELL))) - if (pDoor->GetGoState() == GO_STATE_READY) + if (GameObject* door = instance->GetGameObject(DATA_EREKEM_CELL)) + if (door->GetGoState() == GO_STATE_READY) { EnterEvadeMode(); return; } if (instance->GetData(DATA_WAVE_COUNT) == 6) - instance->SetData(DATA_1ST_BOSS_EVENT, IN_PROGRESS); + instance->SetBossState(DATA_1ST_BOSS_EVENT, IN_PROGRESS); else if (instance->GetData(DATA_WAVE_COUNT) == 12) - instance->SetData(DATA_2ND_BOSS_EVENT, IN_PROGRESS); + instance->SetBossState(DATA_2ND_BOSS_EVENT, IN_PROGRESS); } void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) override { - //Return since we have no target if (!UpdateVictim()) return; @@ -212,22 +203,20 @@ public: if (instance->GetData(DATA_WAVE_COUNT) == 6) { - instance->SetData(DATA_1ST_BOSS_EVENT, DONE); + instance->SetBossState(DATA_1ST_BOSS_EVENT, DONE); instance->SetData(DATA_WAVE_COUNT, 7); } else if (instance->GetData(DATA_WAVE_COUNT) == 12) { - instance->SetData(DATA_2ND_BOSS_EVENT, DONE); + instance->SetBossState(DATA_2ND_BOSS_EVENT, DONE); instance->SetData(DATA_WAVE_COUNT, 13); } } void KilledUnit(Unit* victim) override { - if (victim->GetTypeId() != TYPEID_PLAYER) - return; - - Talk(SAY_SLAY); + if (victim->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); } ObjectGuid GetChainHealTargetGUID() @@ -247,6 +236,10 @@ public: } }; + CreatureAI* GetAI(Creature* creature) const override + { + return GetInstanceAI<boss_erekemAI>(creature); + } }; enum GuardSpells @@ -261,11 +254,6 @@ class npc_erekem_guard : public CreatureScript public: npc_erekem_guard() : CreatureScript("npc_erekem_guard") { } - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<npc_erekem_guardAI>(creature); - } - struct npc_erekem_guardAI : public ScriptedAI { npc_erekem_guardAI(Creature* creature) : ScriptedAI(creature) @@ -308,7 +296,6 @@ public: void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) override { if (!UpdateVictim()) @@ -336,6 +323,10 @@ public: } }; + CreatureAI* GetAI(Creature* creature) const override + { + return GetInstanceAI<npc_erekem_guardAI>(creature); + } }; void AddSC_boss_erekem() diff --git a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp index 48fe8049d19..9be73febd52 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp @@ -23,19 +23,16 @@ enum Spells { SPELL_DRAINED = 59820, SPELL_FRENZY = 54312, - SPELL_FRENZY_H = 59522, SPELL_PROTECTIVE_BUBBLE = 54306, SPELL_WATER_BLAST = 54237, - SPELL_WATER_BLAST_H = 59520, SPELL_WATER_BOLT_VOLLEY = 54241, - SPELL_WATER_BOLT_VOLLEY_H = 59521, SPELL_SPLASH = 59516, SPELL_WATER_GLOBULE = 54268 }; enum IchoronCreatures { - NPC_ICHOR_GLOBULE = 29321, + NPC_ICHOR_GLOBULE = 29321 }; enum Yells @@ -52,18 +49,18 @@ enum Yells enum Actions { ACTION_WATER_ELEMENT_HIT = 1, - ACTION_WATER_ELEMENT_KILLED = 2, + ACTION_WATER_ELEMENT_KILLED = 2 }; /// @todo get those positions from spawn of creature 29326 #define MAX_SPAWN_LOC 5 -static Position SpawnLoc[MAX_SPAWN_LOC]= +static Position const SpawnLoc[MAX_SPAWN_LOC]= { {1840.64f, 795.407f, 44.079f, 1.676f}, {1886.24f, 757.733f, 47.750f, 5.201f}, {1877.91f, 845.915f, 43.417f, 3.560f}, {1918.97f, 850.645f, 47.225f, 4.136f}, - {1935.50f, 796.224f, 52.492f, 4.224f}, + {1935.50f, 796.224f, 52.492f, 4.224f} }; enum Misc @@ -76,11 +73,6 @@ class boss_ichoron : public CreatureScript public: boss_ichoron() : CreatureScript("boss_ichoron") { } - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<boss_ichoronAI>(creature); - } - struct boss_ichoronAI : public ScriptedAI { boss_ichoronAI(Creature* creature) : ScriptedAI(creature), m_waterElements(creature) @@ -117,9 +109,9 @@ public: DespawnWaterElements(); if (instance->GetData(DATA_WAVE_COUNT) == 6) - instance->SetData(DATA_1ST_BOSS_EVENT, NOT_STARTED); + instance->SetBossState(DATA_1ST_BOSS_EVENT, NOT_STARTED); else if (instance->GetData(DATA_WAVE_COUNT) == 12) - instance->SetData(DATA_2ND_BOSS_EVENT, NOT_STARTED); + instance->SetBossState(DATA_2ND_BOSS_EVENT, NOT_STARTED); } void EnterCombat(Unit* /*who*/) override @@ -128,16 +120,17 @@ public: DoCast(me, SPELL_PROTECTIVE_BUBBLE); - if (GameObject* pDoor = instance->instance->GetGameObject(instance->GetGuidData(DATA_ICHORON_CELL))) - if (pDoor->GetGoState() == GO_STATE_READY) + if (GameObject* door = instance->GetGameObject(DATA_ICHORON_CELL)) + if (door->GetGoState() == GO_STATE_READY) { EnterEvadeMode(); return; } + if (instance->GetData(DATA_WAVE_COUNT) == 6) - instance->SetData(DATA_1ST_BOSS_EVENT, IN_PROGRESS); + instance->SetBossState(DATA_1ST_BOSS_EVENT, IN_PROGRESS); else if (instance->GetData(DATA_WAVE_COUNT) == 12) - instance->SetData(DATA_2ND_BOSS_EVENT, IN_PROGRESS); + instance->SetBossState(DATA_2ND_BOSS_EVENT, IN_PROGRESS); } void AttackStart(Unit* who) override @@ -208,7 +201,6 @@ public: void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 uiDiff) override { if (!UpdateVictim()) @@ -230,7 +222,7 @@ public: if (!me->HasAura(SPELL_PROTECTIVE_BUBBLE)) { Talk(SAY_SHATTER); - DoCast(me, SPELL_WATER_BLAST); + DoCast(me, SPELL_WATER_BLAST); // wrong target DoCast(me, SPELL_DRAINED); bIsExploded = true; me->AttackStop(); @@ -291,12 +283,12 @@ public: if (instance->GetData(DATA_WAVE_COUNT) == 6) { - instance->SetData(DATA_1ST_BOSS_EVENT, DONE); + instance->SetBossState(DATA_1ST_BOSS_EVENT, DONE); instance->SetData(DATA_WAVE_COUNT, 7); } else if (instance->GetData(DATA_WAVE_COUNT) == 12) { - instance->SetData(DATA_2ND_BOSS_EVENT, DONE); + instance->SetBossState(DATA_2ND_BOSS_EVENT, DONE); instance->SetData(DATA_WAVE_COUNT, 13); } } @@ -323,13 +315,15 @@ public: void KilledUnit(Unit* victim) override { - if (victim->GetTypeId() != TYPEID_PLAYER) - return; - - Talk(SAY_SLAY); + if (victim->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); } }; + CreatureAI* GetAI(Creature* creature) const override + { + return GetInstanceAI<boss_ichoronAI>(creature); + } }; class npc_ichor_globule : public CreatureScript @@ -337,11 +331,6 @@ class npc_ichor_globule : public CreatureScript public: npc_ichor_globule() : CreatureScript("npc_ichor_globule") { } - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<npc_ichor_globuleAI>(creature); - } - struct npc_ichor_globuleAI : public ScriptedAI { npc_ichor_globuleAI(Creature* creature) : ScriptedAI(creature) @@ -367,19 +356,18 @@ public: void AttackStart(Unit* /*who*/) override { - return; } void UpdateAI(uint32 uiDiff) override { if (uiRangeCheck_Timer < uiDiff) { - if (Creature* pIchoron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_ICHORON))) + if (Creature* ichoron = instance->GetCreature(DATA_ICHORON)) { - if (me->IsWithinDist(pIchoron, 2.0f, false)) + if (me->IsWithinDist(ichoron, 2.0f, false)) { - if (pIchoron->AI()) - pIchoron->AI()->DoAction(ACTION_WATER_ELEMENT_HIT); + if (ichoron->AI()) + ichoron->AI()->DoAction(ACTION_WATER_ELEMENT_HIT); me->DespawnOrUnsummon(); } } @@ -391,12 +379,16 @@ public: void JustDied(Unit* /*killer*/) override { DoCast(me, SPELL_SPLASH); - if (Creature* pIchoron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_ICHORON))) - if (pIchoron->AI()) - pIchoron->AI()->DoAction(ACTION_WATER_ELEMENT_KILLED); + if (Creature* ichoron = instance->GetCreature(DATA_ICHORON)) + if (ichoron->AI()) + ichoron->AI()->DoAction(ACTION_WATER_ELEMENT_KILLED); } }; + CreatureAI* GetAI(Creature* creature) const override + { + return GetInstanceAI<npc_ichor_globuleAI>(creature); + } }; class achievement_dehydration : public AchievementCriteriaScript diff --git a/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp b/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp index c3df7b71b83..5040dccfa36 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp @@ -21,13 +21,10 @@ enum Spells { - SPELL_CAUTERIZING_FLAMES = 59466, //Only in heroic - SPELL_FIREBOLT = 54235, - H_SPELL_FIREBOLT = 59468, - SPELL_FLAME_BREATH = 54282, - H_SPELL_FLAME_BREATH = 59469, - SPELL_LAVA_BURN = 54249, - H_SPELL_LAVA_BURN = 59594 + SPELL_CAUTERIZING_FLAMES = 59466, // Only in heroic + SPELL_FIREBOLT = 54235, + SPELL_FLAME_BREATH = 54282, + SPELL_LAVA_BURN = 54249 }; class boss_lavanthor : public CreatureScript @@ -35,11 +32,6 @@ class boss_lavanthor : public CreatureScript public: boss_lavanthor() : CreatureScript("boss_lavanthor") { } - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<boss_lavanthorAI>(creature); - } - struct boss_lavanthorAI : public ScriptedAI { boss_lavanthorAI(Creature* creature) : ScriptedAI(creature) @@ -67,23 +59,24 @@ public: { Initialize(); if (instance->GetData(DATA_WAVE_COUNT) == 6) - instance->SetData(DATA_1ST_BOSS_EVENT, NOT_STARTED); + instance->SetBossState(DATA_1ST_BOSS_EVENT, NOT_STARTED); else if (instance->GetData(DATA_WAVE_COUNT) == 12) - instance->SetData(DATA_2ND_BOSS_EVENT, NOT_STARTED); + instance->SetBossState(DATA_2ND_BOSS_EVENT, NOT_STARTED); } void EnterCombat(Unit* /*who*/) override { - if (GameObject* pDoor = instance->instance->GetGameObject(instance->GetGuidData(DATA_LAVANTHOR_CELL))) - if (pDoor->GetGoState() == GO_STATE_READY) - { - EnterEvadeMode(); - return; - } - if (instance->GetData(DATA_WAVE_COUNT) == 6) - instance->SetData(DATA_1ST_BOSS_EVENT, IN_PROGRESS); - else if (instance->GetData(DATA_WAVE_COUNT) == 12) - instance->SetData(DATA_2ND_BOSS_EVENT, IN_PROGRESS); + if (GameObject* door = instance->GetGameObject(DATA_LAVANTHOR_CELL)) + if (door->GetGoState() == GO_STATE_READY) + { + EnterEvadeMode(); + return; + } + + if (instance->GetData(DATA_WAVE_COUNT) == 6) + instance->SetBossState(DATA_1ST_BOSS_EVENT, IN_PROGRESS); + else if (instance->GetData(DATA_WAVE_COUNT) == 12) + instance->SetBossState(DATA_2ND_BOSS_EVENT, IN_PROGRESS); } void AttackStart(Unit* who) override @@ -102,10 +95,8 @@ public: void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) override { - //Return since we have no target if (!UpdateVictim()) return; @@ -123,9 +114,10 @@ public: if (uiLavaBurnTimer <= diff) { - DoCastVictim(SPELL_LAVA_BURN); + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 50.0f, true)) + DoCast(target, SPELL_LAVA_BURN); uiLavaBurnTimer = urand(15000, 23000); - } + } else uiLavaBurnTimer -= diff; if (IsHeroic()) { @@ -143,17 +135,21 @@ public: { if (instance->GetData(DATA_WAVE_COUNT) == 6) { - instance->SetData(DATA_1ST_BOSS_EVENT, DONE); + instance->SetBossState(DATA_1ST_BOSS_EVENT, DONE); instance->SetData(DATA_WAVE_COUNT, 7); } else if (instance->GetData(DATA_WAVE_COUNT) == 12) { - instance->SetData(DATA_2ND_BOSS_EVENT, DONE); + instance->SetBossState(DATA_2ND_BOSS_EVENT, DONE); instance->SetData(DATA_WAVE_COUNT, 13); } } }; + CreatureAI* GetAI(Creature* creature) const override + { + return GetInstanceAI<boss_lavanthorAI>(creature); + } }; void AddSC_boss_lavanthor() diff --git a/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp b/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp index 9a6422dec32..1c98806b127 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp @@ -19,11 +19,12 @@ #include "ScriptedCreature.h" #include "violet_hold.h" -//Spells enum Spells { SPELL_CORROSIVE_SALIVA = 54527, - SPELL_OPTIC_LINK = 54396 + SPELL_OPTIC_LINK = 54396, + SPELL_RAY_OF_PAIN = 54438, // NYI missing spelldifficulty + SPELL_RAY_OF_SUFFERING = 54442 // NYI missing spelldifficulty }; class boss_moragg : public CreatureScript @@ -31,11 +32,6 @@ class boss_moragg : public CreatureScript public: boss_moragg() : CreatureScript("boss_moragg") { } - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<boss_moraggAI>(creature); - } - struct boss_moraggAI : public ScriptedAI { boss_moraggAI(Creature* creature) : ScriptedAI(creature) @@ -60,23 +56,24 @@ public: Initialize(); if (instance->GetData(DATA_WAVE_COUNT) == 6) - instance->SetData(DATA_1ST_BOSS_EVENT, NOT_STARTED); + instance->SetBossState(DATA_1ST_BOSS_EVENT, NOT_STARTED); else if (instance->GetData(DATA_WAVE_COUNT) == 12) - instance->SetData(DATA_2ND_BOSS_EVENT, NOT_STARTED); + instance->SetBossState(DATA_2ND_BOSS_EVENT, NOT_STARTED); } void EnterCombat(Unit* /*who*/) override { - if (GameObject* pDoor = instance->instance->GetGameObject(instance->GetGuidData(DATA_MORAGG_CELL))) - if (pDoor->GetGoState() == GO_STATE_READY) + if (GameObject* door = instance->GetGameObject(DATA_MORAGG_CELL)) + if (door->GetGoState() == GO_STATE_READY) { EnterEvadeMode(); return; } + if (instance->GetData(DATA_WAVE_COUNT) == 6) - instance->SetData(DATA_1ST_BOSS_EVENT, IN_PROGRESS); + instance->SetBossState(DATA_1ST_BOSS_EVENT, IN_PROGRESS); else if (instance->GetData(DATA_WAVE_COUNT) == 12) - instance->SetData(DATA_2ND_BOSS_EVENT, IN_PROGRESS); + instance->SetBossState(DATA_2ND_BOSS_EVENT, IN_PROGRESS); } void AttackStart(Unit* who) override @@ -95,10 +92,8 @@ public: void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) override { - //Return since we have no target if (!UpdateVictim()) return; @@ -117,21 +112,26 @@ public: DoMeleeAttackIfReady(); } + void JustDied(Unit* /*killer*/) override { if (instance->GetData(DATA_WAVE_COUNT) == 6) { - instance->SetData(DATA_1ST_BOSS_EVENT, DONE); + instance->SetBossState(DATA_1ST_BOSS_EVENT, DONE); instance->SetData(DATA_WAVE_COUNT, 7); } else if (instance->GetData(DATA_WAVE_COUNT) == 12) { - instance->SetData(DATA_2ND_BOSS_EVENT, DONE); + instance->SetBossState(DATA_2ND_BOSS_EVENT, DONE); instance->SetData(DATA_WAVE_COUNT, 13); } } }; + CreatureAI* GetAI(Creature* creature) const override + { + return GetInstanceAI<boss_moraggAI>(creature); + } }; void AddSC_boss_moragg() diff --git a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp index 833b06cfbff..d1efcb8ca7a 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp @@ -23,9 +23,7 @@ enum Spells { SPELL_ARCANE_BARRAGE_VOLLEY = 54202, - SPELL_ARCANE_BARRAGE_VOLLEY_H = 59483, SPELL_ARCANE_BUFFET = 54226, - SPELL_ARCANE_BUFFET_H = 59485, SPELL_SUMMON_ETHEREAL_SPHERE_1 = 54102, SPELL_SUMMON_ETHEREAL_SPHERE_2 = 54137, SPELL_SUMMON_ETHEREAL_SPHERE_3 = 54138 @@ -40,7 +38,6 @@ enum NPCs enum CreatureSpells { SPELL_ARCANE_POWER = 54160, - H_SPELL_ARCANE_POWER = 59474, SPELL_SUMMON_PLAYERS = 54164, SPELL_POWER_BALL_VISUAL = 54141 }; @@ -61,11 +58,6 @@ class boss_xevozz : public CreatureScript public: boss_xevozz() : CreatureScript("boss_xevozz") { } - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<boss_xevozzAI>(creature); - } - struct boss_xevozzAI : public ScriptedAI { boss_xevozzAI(Creature* creature) : ScriptedAI(creature) @@ -90,9 +82,9 @@ public: void Reset() override { if (instance->GetData(DATA_WAVE_COUNT) == 6) - instance->SetData(DATA_1ST_BOSS_EVENT, NOT_STARTED); + instance->SetBossState(DATA_1ST_BOSS_EVENT, NOT_STARTED); else if (instance->GetData(DATA_WAVE_COUNT) == 12) - instance->SetData(DATA_2ND_BOSS_EVENT, NOT_STARTED); + instance->SetBossState(DATA_2ND_BOSS_EVENT, NOT_STARTED); Initialize(); DespawnSphere(); @@ -139,46 +131,46 @@ public: void EnterCombat(Unit* /*who*/) override { - Talk(SAY_AGGRO); - if (GameObject* pDoor = instance->instance->GetGameObject(instance->GetGuidData(DATA_XEVOZZ_CELL))) - if (pDoor->GetGoState() == GO_STATE_READY) + if (GameObject* door = instance->GetGameObject(DATA_XEVOZZ_CELL)) + if (door->GetGoState() == GO_STATE_READY) { EnterEvadeMode(); return; } + + Talk(SAY_AGGRO); + if (instance->GetData(DATA_WAVE_COUNT) == 6) - instance->SetData(DATA_1ST_BOSS_EVENT, IN_PROGRESS); + instance->SetBossState(DATA_1ST_BOSS_EVENT, IN_PROGRESS); else if (instance->GetData(DATA_WAVE_COUNT) == 12) - instance->SetData(DATA_2ND_BOSS_EVENT, IN_PROGRESS); + instance->SetBossState(DATA_2ND_BOSS_EVENT, IN_PROGRESS); } void MoveInLineOfSight(Unit* /*who*/) override { } - - void UpdateAI(uint32 uiDiff) override + void UpdateAI(uint32 diff) override { - //Return since we have no target if (!UpdateVictim()) return; - if (uiArcaneBarrageVolley_Timer < uiDiff) + if (uiArcaneBarrageVolley_Timer < diff) { DoCast(me, SPELL_ARCANE_BARRAGE_VOLLEY); uiArcaneBarrageVolley_Timer = urand(20000, 22000); } - else uiArcaneBarrageVolley_Timer -= uiDiff; + else uiArcaneBarrageVolley_Timer -= diff; if (uiArcaneBuffet_Timer) { - if (uiArcaneBuffet_Timer < uiDiff) + if (uiArcaneBuffet_Timer < diff) { DoCastVictim(SPELL_ARCANE_BUFFET); uiArcaneBuffet_Timer = 0; } - else uiArcaneBuffet_Timer -= uiDiff; + else uiArcaneBuffet_Timer -= diff; } - if (uiSummonEtherealSphere_Timer < uiDiff) + if (uiSummonEtherealSphere_Timer < diff) { Talk(SAY_SPAWN); DoCast(me, SPELL_SUMMON_ETHEREAL_SPHERE_1); @@ -188,7 +180,7 @@ public: uiSummonEtherealSphere_Timer = urand(45000, 47000); uiArcaneBuffet_Timer = urand(5000, 6000); } - else uiSummonEtherealSphere_Timer -= uiDiff; + else uiSummonEtherealSphere_Timer -= diff; DoMeleeAttackIfReady(); } @@ -201,24 +193,27 @@ public: if (instance->GetData(DATA_WAVE_COUNT) == 6) { - instance->SetData(DATA_1ST_BOSS_EVENT, DONE); + instance->SetBossState(DATA_1ST_BOSS_EVENT, DONE); instance->SetData(DATA_WAVE_COUNT, 7); } else if (instance->GetData(DATA_WAVE_COUNT) == 12) { - instance->SetData(DATA_2ND_BOSS_EVENT, NOT_STARTED); + instance->SetBossState(DATA_2ND_BOSS_EVENT, NOT_STARTED); instance->SetData(DATA_WAVE_COUNT, 13); } } + void KilledUnit(Unit* victim) override { - if (victim->GetTypeId() != TYPEID_PLAYER) - return; - - Talk(SAY_SLAY); + if (victim->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); } }; + CreatureAI* GetAI(Creature* creature) const override + { + return GetInstanceAI<boss_xevozzAI>(creature); + } }; class npc_ethereal_sphere : public CreatureScript @@ -226,11 +221,6 @@ class npc_ethereal_sphere : public CreatureScript public: npc_ethereal_sphere() : CreatureScript("npc_ethereal_sphere") { } - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<npc_ethereal_sphereAI>(creature); - } - struct npc_ethereal_sphereAI : public ScriptedAI { npc_ethereal_sphereAI(Creature* creature) : ScriptedAI(creature) @@ -255,16 +245,15 @@ public: Initialize(); } - void UpdateAI(uint32 uiDiff) override + void UpdateAI(uint32 diff) override { - //Return since we have no target if (!UpdateVictim()) return; if (!me->HasAura(SPELL_POWER_BALL_VISUAL)) DoCast(me, SPELL_POWER_BALL_VISUAL); - if (uiRangeCheck_Timer < uiDiff) + if (uiRangeCheck_Timer < diff) { if (Creature* pXevozz = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_XEVOZZ))) { @@ -276,9 +265,9 @@ public: } uiRangeCheck_Timer = 1000; } - else uiRangeCheck_Timer -= uiDiff; + else uiRangeCheck_Timer -= diff; - if (uiSummonPlayers_Timer < uiDiff) + if (uiSummonPlayers_Timer < diff) { DoCast(me, SPELL_SUMMON_PLAYERS); // not working right @@ -295,10 +284,14 @@ public: uiSummonPlayers_Timer = urand(33000, 35000); } - else uiSummonPlayers_Timer -= uiDiff; + else uiSummonPlayers_Timer -= diff; } }; + CreatureAI* GetAI(Creature* creature) const override + { + return GetInstanceAI<npc_ethereal_sphereAI>(creature); + } }; void AddSC_boss_xevozz() diff --git a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp index 90fd936e853..c29861f08a4 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp @@ -22,15 +22,13 @@ enum Spells { SPELL_SHROUD_OF_DARKNESS = 54524, - H_SPELL_SHROUD_OF_DARKNESS = 59745, SPELL_SUMMON_VOID_SENTRY = 54369, - SPELL_VOID_SHIFT = 54361, - H_SPELL_VOID_SHIFT = 59743, + SPELL_VOID_SHIFT = 54361 }; enum Creatures { - NPC_VOID_SENTRY = 29364 + NPC_VOID_SENTRY = 29364 }; enum Yells @@ -53,11 +51,6 @@ class boss_zuramat : public CreatureScript public: boss_zuramat() : CreatureScript("boss_zuramat") { } - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<boss_zuramatAI>(creature); - } - struct boss_zuramatAI : public ScriptedAI { boss_zuramatAI(Creature* creature) : ScriptedAI(creature) @@ -107,25 +100,25 @@ public: void EnterCombat(Unit* /*who*/) override { - Talk(SAY_AGGRO); - if (GameObject* pDoor = instance->instance->GetGameObject(instance->GetGuidData(DATA_ZURAMAT_CELL))) - if (pDoor->GetGoState() == GO_STATE_READY) + if (GameObject* door = instance->GetGameObject(DATA_ZURAMAT_CELL)) + if (door->GetGoState() == GO_STATE_READY) { EnterEvadeMode(); return; } + + Talk(SAY_AGGRO); + if (instance->GetData(DATA_WAVE_COUNT) == 6) - instance->SetData(DATA_1ST_BOSS_EVENT, IN_PROGRESS); + instance->SetBossState(DATA_1ST_BOSS_EVENT, IN_PROGRESS); else if (instance->GetData(DATA_WAVE_COUNT) == 12) - instance->SetData(DATA_2ND_BOSS_EVENT, IN_PROGRESS); + instance->SetBossState(DATA_2ND_BOSS_EVENT, IN_PROGRESS); } void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) override { - //Return since we have no target if (!UpdateVictim()) return; @@ -171,26 +164,27 @@ public: if (instance->GetData(DATA_WAVE_COUNT) == 6) { - instance->SetData(DATA_1ST_BOSS_EVENT, DONE); + instance->SetBossState(DATA_1ST_BOSS_EVENT, DONE); instance->SetData(DATA_WAVE_COUNT, 7); } else if (instance->GetData(DATA_WAVE_COUNT) == 12) { - instance->SetData(DATA_2ND_BOSS_EVENT, DONE); + instance->SetBossState(DATA_2ND_BOSS_EVENT, DONE); instance->SetData(DATA_WAVE_COUNT, 13); } } void KilledUnit(Unit* victim) override { - if (victim->GetTypeId() != TYPEID_PLAYER) - return; - - Talk(SAY_SLAY); + if (victim->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); } - }; + CreatureAI* GetAI(Creature* creature) const override + { + return GetInstanceAI<boss_zuramatAI>(creature); + } }; class achievement_void_dance : public AchievementCriteriaScript diff --git a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp index 3e3ce5cde75..28c56a02255 100644 --- a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp @@ -22,8 +22,6 @@ #include "Player.h" #include "TemporarySummon.h" -#define MAX_ENCOUNTER 3 - /* Violet Hold encounters: 0 - First boss 1 - Second boss @@ -38,21 +36,6 @@ 6 - Zuramat 7 - Cyanigosa */ -enum GameObjects -{ - GO_MAIN_DOOR = 191723, - GO_XEVOZZ_DOOR = 191556, - GO_LAVANTHOR_DOOR = 191566, - GO_ICHORON_DOOR = 191722, - GO_ZURAMAT_DOOR = 191565, - GO_EREKEM_DOOR = 191564, - GO_EREKEM_GUARD_1_DOOR = 191563, - GO_EREKEM_GUARD_2_DOOR = 191562, - GO_MORAGG_DOOR = 191606, - GO_INTRO_ACTIVATION_CRYSTAL = 193615, - GO_ACTIVATION_CRYSTAL = 193611 -}; - enum AzureSaboteurSpells { SABOTEUR_SHIELD_DISRUPTION = 58291, @@ -64,7 +47,7 @@ enum CrystalSpells SPELL_ARCANE_LIGHTNING = 57930 }; -const Position PortalLocation[] = +Position const PortalLocation[] = { {1877.51f, 850.104f, 44.6599f, 4.7822f }, // WP 1 {1918.37f, 853.437f, 47.1624f, 4.12294f}, // WP 2 @@ -74,21 +57,21 @@ const Position PortalLocation[] = {1908.31f, 809.657f, 38.7037f, 3.08701f} // WP 6 }; -const Position ArcaneSphere = {1887.060059f, 806.151001f, 61.321602f, 0.0f}; -const Position BossStartMove1 = {1894.684448f, 739.390503f, 47.668003f, 0.0f}; -const Position BossStartMove2 = {1875.173950f, 860.832703f, 43.333565f, 0.0f}; -const Position BossStartMove21 = {1858.854614f, 855.071411f, 43.333565f, 0.0f}; -const Position BossStartMove22 = {1891.926636f, 863.388977f, 43.333565f, 0.0f}; -const Position BossStartMove3 = {1916.138062f, 778.152222f, 35.772308f, 0.0f}; -const Position BossStartMove4 = {1853.618286f, 758.557617f, 38.657505f, 0.0f}; -const Position BossStartMove5 = {1906.683960f, 842.348022f, 38.637459f, 0.0f}; -const Position BossStartMove6 = {1928.207031f, 852.864441f, 47.200813f, 0.0f}; - -const Position CyanigosasSpawnLocation = {1930.281250f, 804.407715f, 52.410946f, 3.139621f}; -const Position MiddleRoomLocation = {1892.291260f, 805.696838f, 38.438862f, 3.139621f}; -const Position MiddleRoomPortalSaboLocation = {1896.622925f, 804.854126f, 38.504772f, 3.139621f}; - -//Cyanigosa's prefight event data +Position const ArcaneSphere = {1887.060059f, 806.151001f, 61.321602f, 0.0f}; +Position const BossStartMove1 = {1894.684448f, 739.390503f, 47.668003f, 0.0f}; +Position const BossStartMove2 = {1875.173950f, 860.832703f, 43.333565f, 0.0f}; +Position const BossStartMove21 = {1858.854614f, 855.071411f, 43.333565f, 0.0f}; +Position const BossStartMove22 = {1891.926636f, 863.388977f, 43.333565f, 0.0f}; +Position const BossStartMove3 = {1916.138062f, 778.152222f, 35.772308f, 0.0f}; +Position const BossStartMove4 = {1853.618286f, 758.557617f, 38.657505f, 0.0f}; +Position const BossStartMove5 = {1906.683960f, 842.348022f, 38.637459f, 0.0f}; +Position const BossStartMove6 = {1928.207031f, 852.864441f, 47.200813f, 0.0f}; + +Position const CyanigosasSpawnLocation = {1930.281250f, 804.407715f, 52.410946f, 3.139621f}; +Position const MiddleRoomLocation = {1892.291260f, 805.696838f, 38.438862f, 3.139621f}; +Position const MiddleRoomPortalSaboLocation = {1896.622925f, 804.854126f, 38.504772f, 3.139621f}; + +// Cyanigosa's prefight event data enum Yells { CYANIGOSA_SAY_SPAWN = 0 @@ -100,21 +83,45 @@ enum Spells CYANIGOSA_BLUE_AURA = 47759, }; +ObjectData const creatureData[] = +{ + { NPC_XEVOZZ, DATA_XEVOZZ }, + { NPC_LAVANTHOR, DATA_LAVANTHOR }, + { NPC_ICHORON, DATA_ICHORON }, + { NPC_ZURAMAT, DATA_ZURAMAT }, + { NPC_EREKEM, DATA_EREKEM }, + { NPC_MORAGG, DATA_MORAGG }, + { NPC_CYANIGOSA, DATA_CYANIGOSA }, + { NPC_SINCLARI, DATA_SINCLARI }, + { 0, 0 } // END +}; + +ObjectData const gameObjectData[] = +{ + { GO_EREKEM_GUARD_1_DOOR, DATA_EREKEM_LEFT_GUARD_CELL }, + { GO_EREKEM_GUARD_2_DOOR, DATA_EREKEM_RIGHT_GUARD_CELL }, + { GO_EREKEM_DOOR, DATA_EREKEM_CELL }, + { GO_ZURAMAT_DOOR, DATA_ZURAMAT_CELL }, + { GO_LAVANTHOR_DOOR, DATA_LAVANTHOR_CELL }, + { GO_MORAGG_DOOR, DATA_MORAGG_CELL }, + { GO_ICHORON_DOOR, DATA_ICHORON_CELL }, + { GO_XEVOZZ_DOOR, DATA_XEVOZZ_CELL }, + { GO_MAIN_DOOR, DATA_MAIN_DOOR }, + { 0, 0 } // END +}; + class instance_violet_hold : public InstanceMapScript { public: instance_violet_hold() : InstanceMapScript("instance_violet_hold", 608) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const override - { - return new instance_violet_hold_InstanceMapScript(map); - } - struct instance_violet_hold_InstanceMapScript : public InstanceScript { instance_violet_hold_InstanceMapScript(Map* map) : InstanceScript(map) { SetHeaders(DataHeader); + SetBossNumber(EncounterCount); + LoadObjectData(creatureData, gameObjectData); uiRemoveNpc = 0; @@ -133,33 +140,15 @@ public: uiCyanigosaEventTimer = 3 * IN_MILLISECONDS; bActive = false; + bWiped = false; bIsDoorSpellCast = false; bCrystalActivated = false; defenseless = true; uiMainEventPhase = NOT_STARTED; - - memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); } - ObjectGuid uiMoragg; - ObjectGuid uiErekem; ObjectGuid uiErekemGuard[2]; - ObjectGuid uiIchoron; - ObjectGuid uiLavanthor; - ObjectGuid uiXevozz; - ObjectGuid uiZuramat; - ObjectGuid uiCyanigosa; - ObjectGuid uiSinclari; - - ObjectGuid uiMoraggCell; - ObjectGuid uiErekemCell; - ObjectGuid uiErekemLeftGuardCell; - ObjectGuid uiErekemRightGuardCell; - ObjectGuid uiIchoronCell; - ObjectGuid uiLavanthorCell; - ObjectGuid uiXevozzCell; - ObjectGuid uiZuramatCell; - ObjectGuid uiMainDoor; + ObjectGuid uiTeleportationPortal; ObjectGuid uiSaboteurPortal; @@ -179,7 +168,6 @@ public: uint8 uiDoorIntegrity; - uint16 m_auiEncounter[MAX_ENCOUNTER]; uint8 uiCountErekemGuards; uint8 uiCountActivationCrystals; uint8 uiCyanigosaEventPhase; @@ -193,52 +181,23 @@ public: std::list<uint8> NpcAtDoorCastingList; - std::string str_data; - - bool IsEncounterInProgress() const override - { - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - if (m_auiEncounter[i] == IN_PROGRESS) - return true; - - return false; - } - void OnCreatureCreate(Creature* creature) override { + InstanceScript::OnCreatureCreate(creature); + switch (creature->GetEntry()) { - case CREATURE_XEVOZZ: - uiXevozz = creature->GetGUID(); - break; - case CREATURE_LAVANTHOR: - uiLavanthor = creature->GetGUID(); - break; - case CREATURE_ICHORON: - uiIchoron = creature->GetGUID(); - break; - case CREATURE_ZURAMAT: - uiZuramat = creature->GetGUID(); - break; - case CREATURE_EREKEM: - uiErekem = creature->GetGUID(); - break; - case CREATURE_EREKEM_GUARD: + case NPC_EREKEM_GUARD: if (uiCountErekemGuards < 2) { uiErekemGuard[uiCountErekemGuards++] = creature->GetGUID(); - creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_NON_ATTACKABLE); + creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NON_ATTACKABLE); } break; - case CREATURE_MORAGG: - uiMoragg = creature->GetGUID(); + case NPC_CYANIGOSA: + creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NON_ATTACKABLE); break; - case CREATURE_CYANIGOSA: - uiCyanigosa = creature->GetGUID(); - creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_NON_ATTACKABLE); - break; - case CREATURE_SINCLARI: - uiSinclari = creature->GetGUID(); + default: break; } @@ -254,68 +213,53 @@ public: void OnGameObjectCreate(GameObject* go) override { + InstanceScript::OnGameObjectCreate(go); + switch (go->GetEntry()) { - case GO_EREKEM_GUARD_1_DOOR: - uiErekemLeftGuardCell = go->GetGUID(); - break; - case GO_EREKEM_GUARD_2_DOOR: - uiErekemRightGuardCell = go->GetGUID(); - break; - case GO_EREKEM_DOOR: - uiErekemCell = go->GetGUID(); - break; - case GO_ZURAMAT_DOOR: - uiZuramatCell = go->GetGUID(); - break; - case GO_LAVANTHOR_DOOR: - uiLavanthorCell = go->GetGUID(); - break; - case GO_MORAGG_DOOR: - uiMoraggCell = go->GetGUID(); - break; - case GO_ICHORON_DOOR: - uiIchoronCell = go->GetGUID(); - break; - case GO_XEVOZZ_DOOR: - uiXevozzCell = go->GetGUID(); - break; - case GO_MAIN_DOOR: - uiMainDoor = go->GetGUID(); - break; case GO_ACTIVATION_CRYSTAL: if (uiCountActivationCrystals < 4) uiActivationCrystal[uiCountActivationCrystals++] = go->GetGUID(); break; + default: + break; } } - void SetData(uint32 type, uint32 data) override + bool SetBossState(uint32 type, EncounterState state) override { + if (!InstanceScript::SetBossState(type, state)) + return false; + switch (type) { case DATA_1ST_BOSS_EVENT: - UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, CREATURE_EREKEM, NULL); - m_auiEncounter[0] = data; - if (data == DONE) - SaveToDB(); + if (state == DONE) + UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, NPC_EREKEM, nullptr); break; case DATA_2ND_BOSS_EVENT: - UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, CREATURE_MORAGG, NULL); - m_auiEncounter[1] = data; - if (data == DONE) - SaveToDB(); - break; - case DATA_CYANIGOSA_EVENT: - m_auiEncounter[2] = data; - if (data == DONE) + if (state == DONE) + UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, NPC_MORAGG, nullptr); + break; + case DATA_CYANIGOSA: + if (state == DONE) { - SaveToDB(); uiMainEventPhase = DONE; - if (GameObject* pMainDoor = instance->GetGameObject(uiMainDoor)) - pMainDoor->SetGoState(GO_STATE_ACTIVE); + if (GameObject* mainDoor = GetGameObject(DATA_MAIN_DOOR)) + mainDoor->SetGoState(GO_STATE_ACTIVE); } break; + default: + break; + } + + return true; + } + + void SetData(uint32 type, uint32 data) override + { + switch (type) + { case DATA_WAVE_COUNT: uiWaveCount = data; bActive = true; @@ -339,21 +283,8 @@ public: NpcAtDoorCastingList.pop_back(); break; case DATA_MAIN_DOOR: - if (GameObject* pMainDoor = instance->GetGameObject(uiMainDoor)) - { - switch (data) - { - case GO_STATE_ACTIVE: - pMainDoor->SetGoState(GO_STATE_ACTIVE); - break; - case GO_STATE_READY: - pMainDoor->SetGoState(GO_STATE_READY); - break; - case GO_STATE_ACTIVE_ALTERNATIVE: - pMainDoor->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE); - break; - } - } + if (GameObject* mainDoor = GetGameObject(type)) + mainDoor->SetGoState(GOState(data)); break; case DATA_START_BOSS_ENCOUNTER: switch (uiWaveCount) @@ -373,7 +304,7 @@ public: uiMainEventPhase = data; if (data == IN_PROGRESS) // Start event { - if (GameObject* mainDoor = instance->GetGameObject(uiMainDoor)) + if (GameObject* mainDoor = GetGameObject(DATA_MAIN_DOOR)) mainDoor->SetGoState(GO_STATE_READY); uiWaveCount = 1; bActive = true; @@ -403,9 +334,6 @@ public: { switch (type) { - case DATA_1ST_BOSS_EVENT: return m_auiEncounter[0]; - case DATA_2ND_BOSS_EVENT: return m_auiEncounter[1]; - case DATA_CYANIGOSA_EVENT: return m_auiEncounter[2]; case DATA_WAVE_COUNT: return uiWaveCount; case DATA_REMOVE_NPC: return uiRemoveNpc; case DATA_PORTAL_LOCATION: return uiLocation; @@ -420,125 +348,107 @@ public: return 0; } - ObjectGuid GetGuidData(uint32 identifier) const override + ObjectGuid GetGuidData(uint32 type) const override { - switch (identifier) + switch (type) { - case DATA_MORAGG: return uiMoragg; - case DATA_EREKEM: return uiErekem; case DATA_EREKEM_GUARD_1: return uiErekemGuard[0]; case DATA_EREKEM_GUARD_2: return uiErekemGuard[1]; - case DATA_ICHORON: return uiIchoron; - case DATA_LAVANTHOR: return uiLavanthor; - case DATA_XEVOZZ: return uiXevozz; - case DATA_ZURAMAT: return uiZuramat; - case DATA_CYANIGOSA: return uiCyanigosa; - case DATA_MORAGG_CELL: return uiMoraggCell; - case DATA_EREKEM_CELL: return uiErekemCell; - case DATA_EREKEM_RIGHT_GUARD_CELL: return uiErekemRightGuardCell; - case DATA_EREKEM_LEFT_GUARD_CELL: return uiErekemLeftGuardCell; - case DATA_ICHORON_CELL: return uiIchoronCell; - case DATA_LAVANTHOR_CELL: return uiLavanthorCell; - case DATA_XEVOZZ_CELL: return uiXevozzCell; - case DATA_ZURAMAT_CELL: return uiZuramatCell; - case DATA_MAIN_DOOR: return uiMainDoor; - case DATA_SINCLARI: return uiSinclari; case DATA_TELEPORTATION_PORTAL: return uiTeleportationPortal; case DATA_SABOTEUR_PORTAL: return uiSaboteurPortal; } - return ObjectGuid::Empty; + return InstanceScript::GetGuidData(type); } void SpawnPortal() { SetData(DATA_PORTAL_LOCATION, (GetData(DATA_PORTAL_LOCATION) + urand(1, 5))%6); - if (Creature* pSinclari = instance->GetCreature(uiSinclari)) - if (Creature* portal = pSinclari->SummonCreature(CREATURE_TELEPORTATION_PORTAL, PortalLocation[GetData(DATA_PORTAL_LOCATION)], TEMPSUMMON_CORPSE_DESPAWN)) + if (Creature* sinclari = GetCreature(DATA_SINCLARI)) + if (Creature* portal = sinclari->SummonCreature(NPC_TELEPORTATION_PORTAL, PortalLocation[GetData(DATA_PORTAL_LOCATION)], TEMPSUMMON_CORPSE_DESPAWN)) uiTeleportationPortal = portal->GetGUID(); } void StartBossEncounter(uint8 uiBoss, bool bForceRespawn = true) { - Creature* pBoss = NULL; + Creature* boss = nullptr; switch (uiBoss) { case BOSS_MORAGG: - HandleGameObject(uiMoraggCell, bForceRespawn); - pBoss = instance->GetCreature(uiMoragg); - if (pBoss) - pBoss->GetMotionMaster()->MovePoint(0, BossStartMove1); + HandleGameObject(GetObjectGuid(DATA_MORAGG_CELL), bForceRespawn); + boss = GetCreature(DATA_MORAGG); + if (boss) + boss->GetMotionMaster()->MovePoint(0, BossStartMove1); break; case BOSS_EREKEM: - HandleGameObject(uiErekemCell, bForceRespawn); - HandleGameObject(uiErekemRightGuardCell, bForceRespawn); - HandleGameObject(uiErekemLeftGuardCell, bForceRespawn); - - pBoss = instance->GetCreature(uiErekem); + HandleGameObject(GetObjectGuid(DATA_EREKEM_CELL), bForceRespawn); + HandleGameObject(GetObjectGuid(DATA_EREKEM_LEFT_GUARD_CELL), bForceRespawn); + HandleGameObject(GetObjectGuid(DATA_EREKEM_RIGHT_GUARD_CELL), bForceRespawn); - if (pBoss) - pBoss->GetMotionMaster()->MovePoint(0, BossStartMove2); + boss = GetCreature(DATA_EREKEM); + if (boss) + boss->GetMotionMaster()->MovePoint(0, BossStartMove2); if (Creature* pGuard1 = instance->GetCreature(uiErekemGuard[0])) { if (bForceRespawn) - pGuard1->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_NON_ATTACKABLE); + pGuard1->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NON_ATTACKABLE); else - pGuard1->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_NON_ATTACKABLE); + pGuard1->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NON_ATTACKABLE); pGuard1->GetMotionMaster()->MovePoint(0, BossStartMove21); } if (Creature* pGuard2 = instance->GetCreature(uiErekemGuard[1])) { if (bForceRespawn) - pGuard2->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_NON_ATTACKABLE); + pGuard2->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NON_ATTACKABLE); else - pGuard2->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_NON_ATTACKABLE); + pGuard2->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NON_ATTACKABLE); pGuard2->GetMotionMaster()->MovePoint(0, BossStartMove22); } break; case BOSS_ICHORON: - HandleGameObject(uiIchoronCell, bForceRespawn); - pBoss = instance->GetCreature(uiIchoron); - if (pBoss) - pBoss->GetMotionMaster()->MovePoint(0, BossStartMove3); + HandleGameObject(GetObjectGuid(DATA_ICHORON_CELL), bForceRespawn); + boss = GetCreature(DATA_ICHORON); + if (boss) + boss->GetMotionMaster()->MovePoint(0, BossStartMove3); break; case BOSS_LAVANTHOR: - HandleGameObject(uiLavanthorCell, bForceRespawn); - pBoss = instance->GetCreature(uiLavanthor); - if (pBoss) - pBoss->GetMotionMaster()->MovePoint(0, BossStartMove4); + HandleGameObject(GetObjectGuid(DATA_LAVANTHOR_CELL), bForceRespawn); + boss = GetCreature(DATA_LAVANTHOR); + if (boss) + boss->GetMotionMaster()->MovePoint(0, BossStartMove4); break; case BOSS_XEVOZZ: - HandleGameObject(uiXevozzCell, bForceRespawn); - pBoss = instance->GetCreature(uiXevozz); - if (pBoss) - pBoss->GetMotionMaster()->MovePoint(0, BossStartMove5); + HandleGameObject(GetObjectGuid(DATA_XEVOZZ_CELL), bForceRespawn); + boss = GetCreature(DATA_XEVOZZ); + if (boss) + boss->GetMotionMaster()->MovePoint(0, BossStartMove5); break; case BOSS_ZURAMAT: - HandleGameObject(uiZuramatCell, bForceRespawn); - pBoss = instance->GetCreature(uiZuramat); - if (pBoss) - pBoss->GetMotionMaster()->MovePoint(0, BossStartMove6); + HandleGameObject(GetObjectGuid(DATA_ZURAMAT_CELL), bForceRespawn); + boss = GetCreature(DATA_ZURAMAT); + if (boss) + boss->GetMotionMaster()->MovePoint(0, BossStartMove6); break; } // generic boss state changes - if (pBoss) + if (boss) { - pBoss->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_NON_ATTACKABLE); - pBoss->SetReactState(REACT_AGGRESSIVE); + boss->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_NON_ATTACKABLE); + boss->SetReactState(REACT_AGGRESSIVE); if (!bForceRespawn) { - if (pBoss->isDead()) + if (boss->isDead()) { // respawn but avoid to be looted again - pBoss->Respawn(); - pBoss->RemoveLootMode(1); + boss->Respawn(); + boss->RemoveLootMode(1); } - pBoss->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_NON_ATTACKABLE); + boss->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_NON_ATTACKABLE); uiWaveCount = 0; } } @@ -554,12 +464,12 @@ public: case 6: if (uiFirstBoss == 0) uiFirstBoss = urand(1, 6); - if (Creature* pSinclari = instance->GetCreature(uiSinclari)) + if (Creature* sinclari = GetCreature(DATA_SINCLARI)) { - if (Creature* pPortal = pSinclari->SummonCreature(CREATURE_TELEPORTATION_PORTAL, MiddleRoomPortalSaboLocation, TEMPSUMMON_CORPSE_DESPAWN)) - uiSaboteurPortal = pPortal->GetGUID(); - if (Creature* pAzureSaboteur = pSinclari->SummonCreature(CREATURE_SABOTEOUR, MiddleRoomLocation, TEMPSUMMON_DEAD_DESPAWN)) - pAzureSaboteur->CastSpell(pAzureSaboteur, SABOTEUR_SHIELD_EFFECT, false); + if (Creature* portal = sinclari->SummonCreature(NPC_TELEPORTATION_PORTAL, MiddleRoomPortalSaboLocation, TEMPSUMMON_CORPSE_DESPAWN)) + uiSaboteurPortal = portal->GetGUID(); + if (Creature* azureSaboteur = sinclari->SummonCreature(NPC_SABOTEOUR, MiddleRoomLocation, TEMPSUMMON_DEAD_DESPAWN)) + azureSaboteur->CastSpell(azureSaboteur, SABOTEUR_SHIELD_EFFECT, false); } break; case 12: @@ -568,25 +478,22 @@ public: { uiSecondBoss = urand(1, 6); } while (uiSecondBoss == uiFirstBoss); - if (Creature* pSinclari = instance->GetCreature(uiSinclari)) + if (Creature* sinclari = GetCreature(DATA_SINCLARI)) { - if (Creature* pPortal = pSinclari->SummonCreature(CREATURE_TELEPORTATION_PORTAL, MiddleRoomPortalSaboLocation, TEMPSUMMON_CORPSE_DESPAWN)) + if (Creature* pPortal = sinclari->SummonCreature(NPC_TELEPORTATION_PORTAL, MiddleRoomPortalSaboLocation, TEMPSUMMON_CORPSE_DESPAWN)) uiSaboteurPortal = pPortal->GetGUID(); - if (Creature* pAzureSaboteur = pSinclari->SummonCreature(CREATURE_SABOTEOUR, MiddleRoomLocation, TEMPSUMMON_DEAD_DESPAWN)) + if (Creature* pAzureSaboteur = sinclari->SummonCreature(NPC_SABOTEOUR, MiddleRoomLocation, TEMPSUMMON_DEAD_DESPAWN)) pAzureSaboteur->CastSpell(pAzureSaboteur, SABOTEUR_SHIELD_EFFECT, false); } break; case 18: - { - Creature* pSinclari = instance->GetCreature(uiSinclari); - if (pSinclari) - pSinclari->SummonCreature(CREATURE_CYANIGOSA, CyanigosasSpawnLocation, TEMPSUMMON_DEAD_DESPAWN); + if (Creature* sinclari = GetCreature(DATA_SINCLARI)) + sinclari->SummonCreature(NPC_CYANIGOSA, CyanigosasSpawnLocation, TEMPSUMMON_DEAD_DESPAWN); break; - } case 1: { - if (GameObject* pMainDoor = instance->GetGameObject(uiMainDoor)) - pMainDoor->SetGoState(GO_STATE_READY); + if (GameObject* mainDoor = GetGameObject(DATA_MAIN_DOOR)) + mainDoor->SetGoState(GO_STATE_READY); DoUpdateWorldState(WORLD_STATE_VH_PRISON_STATE, 100); // no break } @@ -596,54 +503,15 @@ public: } } - std::string GetSaveData() override + void WriteSaveDataMore(std::ostringstream& data) override { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "V H " << (uint16)m_auiEncounter[0] - << ' ' << (uint16)m_auiEncounter[1] - << ' ' << (uint16)m_auiEncounter[2] - << ' ' << (uint16)uiFirstBoss - << ' ' << (uint16)uiSecondBoss; - - str_data = saveStream.str(); - - OUT_SAVE_INST_DATA_COMPLETE; - return str_data; + data << uiFirstBoss << ' ' << uiSecondBoss; } - void Load(const char* in) override + void ReadSaveDataMore(std::istringstream& data) override { - if (!in) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(in); - - char dataHead1, dataHead2; - uint16 data0, data1, data2, data3, data4; - - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2 >> data0 >> data1 >> data2 >> data3 >> data4; - - if (dataHead1 == 'V' && dataHead2 == 'H') - { - m_auiEncounter[0] = data0; - m_auiEncounter[1] = data1; - m_auiEncounter[2] = data2; - - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - if (m_auiEncounter[i] == IN_PROGRESS) - m_auiEncounter[i] = NOT_STARTED; - - uiFirstBoss = uint8(data3); - uiSecondBoss = uint8(data4); - } else OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; + data >> uiFirstBoss; + data >> uiSecondBoss; } bool CheckWipe() @@ -694,54 +562,51 @@ public: if (GameObject* crystal = instance->GetGameObject(uiActivationCrystal[i])) crystal->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); - if (Creature* pSinclari = instance->GetCreature(uiSinclari)) + if (Creature* sinclari = GetCreature(DATA_SINCLARI)) { - pSinclari->SetVisible(true); + sinclari->SetVisible(true); std::list<Creature*> GuardList; - pSinclari->GetCreatureListWithEntryInGrid(GuardList, NPC_VIOLET_HOLD_GUARD, 40.0f); + sinclari->GetCreatureListWithEntryInGrid(GuardList, NPC_VIOLET_HOLD_GUARD, 40.0f); if (!GuardList.empty()) { - for (std::list<Creature*>::const_iterator itr = GuardList.begin(); itr != GuardList.end(); ++itr) + for (Creature* guard : GuardList) { - if (Creature* pGuard = *itr) - { - pGuard->SetVisible(true); - pGuard->SetReactState(REACT_AGGRESSIVE); - pGuard->GetMotionMaster()->MovePoint(1, pGuard->GetHomePosition()); - } + guard->SetVisible(true); + guard->SetReactState(REACT_AGGRESSIVE); + guard->GetMotionMaster()->MovePoint(1, guard->GetHomePosition()); } } - pSinclari->GetMotionMaster()->MovePoint(1, pSinclari->GetHomePosition()); - pSinclari->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + sinclari->GetMotionMaster()->MovePoint(1, sinclari->GetHomePosition()); + sinclari->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); } } // Cyanigosa is spawned but not tranformed, prefight event - Creature* pCyanigosa = instance->GetCreature(uiCyanigosa); - if (pCyanigosa && !pCyanigosa->HasAura(CYANIGOSA_SPELL_TRANSFORM)) + Creature* cyanigosa = GetCreature(DATA_CYANIGOSA); + if (cyanigosa && !cyanigosa->HasAura(CYANIGOSA_SPELL_TRANSFORM)) { if (uiCyanigosaEventTimer <= diff) { switch (uiCyanigosaEventPhase) { case 1: - pCyanigosa->CastSpell(pCyanigosa, CYANIGOSA_BLUE_AURA, false); - pCyanigosa->AI()->Talk(CYANIGOSA_SAY_SPAWN); + cyanigosa->CastSpell(cyanigosa, CYANIGOSA_BLUE_AURA, false); + cyanigosa->AI()->Talk(CYANIGOSA_SAY_SPAWN); uiCyanigosaEventTimer = 7*IN_MILLISECONDS; ++uiCyanigosaEventPhase; break; case 2: - pCyanigosa->GetMotionMaster()->MoveJump(MiddleRoomLocation.GetPositionX(), MiddleRoomLocation.GetPositionY(), MiddleRoomLocation.GetPositionZ(), 10.0f, 20.0f); - pCyanigosa->CastSpell(pCyanigosa, CYANIGOSA_BLUE_AURA, false); + cyanigosa->GetMotionMaster()->MoveJump(MiddleRoomLocation.GetPositionX(), MiddleRoomLocation.GetPositionY(), MiddleRoomLocation.GetPositionZ(), 10.0f, 20.0f); + cyanigosa->CastSpell(cyanigosa, CYANIGOSA_BLUE_AURA, false); uiCyanigosaEventTimer = 7*IN_MILLISECONDS; ++uiCyanigosaEventPhase; break; case 3: - pCyanigosa->RemoveAurasDueToSpell(CYANIGOSA_BLUE_AURA); - pCyanigosa->CastSpell(pCyanigosa, CYANIGOSA_SPELL_TRANSFORM, 0); - pCyanigosa->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_NON_ATTACKABLE); - pCyanigosa->SetReactState(REACT_AGGRESSIVE); + cyanigosa->RemoveAurasDueToSpell(CYANIGOSA_BLUE_AURA); + cyanigosa->CastSpell(cyanigosa, CYANIGOSA_SPELL_TRANSFORM, 0); + cyanigosa->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_NON_ATTACKABLE); + cyanigosa->SetReactState(REACT_AGGRESSIVE); uiCyanigosaEventTimer = 2*IN_MILLISECONDS; ++uiCyanigosaEventPhase; break; @@ -793,15 +658,17 @@ public: trigger->CastSpell(trigger, spellInfoLightning, true, 0, 0, trigger->GetGUID()); // Kill all mobs registered with SetGuidData(ADD_TRASH_MOB) - for (GuidSet::const_iterator itr = trashMobs.begin(); itr != trashMobs.end(); ++itr) + for (GuidSet::const_iterator itr = trashMobs.begin(); itr != trashMobs.end();) { Creature* creature = instance->GetCreature(*itr); + // Increment the iterator before killing the creature because the kill will remove itr from trashMobs + ++itr; if (creature && creature->IsAlive()) trigger->Kill(creature); } } - void ProcessEvent(WorldObject* /*go*/, uint32 uiEventId) + void ProcessEvent(WorldObject* /*go*/, uint32 uiEventId) override { switch (uiEventId) { @@ -812,6 +679,11 @@ public: } } }; + + InstanceScript* GetInstanceScript(InstanceMap* map) const override + { + return new instance_violet_hold_InstanceMapScript(map); + } }; void AddSC_instance_violet_hold() diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp index 645a9da4764..8bcc80b5a84 100644 --- a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp @@ -32,18 +32,18 @@ enum PortalCreatures { - CREATURE_AZURE_INVADER_1 = 30661, - CREATURE_AZURE_INVADER_2 = 30961, - CREATURE_AZURE_SPELLBREAKER_1 = 30662, - CREATURE_AZURE_SPELLBREAKER_2 = 30962, - CREATURE_AZURE_BINDER_1 = 30663, - CREATURE_AZURE_BINDER_2 = 30918, - CREATURE_AZURE_MAGE_SLAYER_1 = 30664, - CREATURE_AZURE_MAGE_SLAYER_2 = 30963, - CREATURE_AZURE_CAPTAIN = 30666, - CREATURE_AZURE_SORCEROR = 30667, - CREATURE_AZURE_RAIDER = 30668, - CREATURE_AZURE_STALKER = 32191 + NPC_AZURE_INVADER_1 = 30661, + NPC_AZURE_INVADER_2 = 30961, + NPC_AZURE_SPELLBREAKER_1 = 30662, + NPC_AZURE_SPELLBREAKER_2 = 30962, + NPC_AZURE_BINDER_1 = 30663, + NPC_AZURE_BINDER_2 = 30918, + NPC_AZURE_MAGE_SLAYER_1 = 30664, + NPC_AZURE_MAGE_SLAYER_2 = 30963, + NPC_AZURE_CAPTAIN = 30666, + NPC_AZURE_SORCEROR = 30667, + NPC_AZURE_RAIDER = 30668, + NPC_AZURE_STALKER = 32191 }; enum AzureInvaderSpells @@ -258,7 +258,7 @@ public: { case GOSSIP_ACTION_INFO_DEF+1: player->CLOSE_GOSSIP_MENU(); - ENSURE_AI(npc_sinclari_vh::npc_sinclariAI, (creature->AI()))->uiPhase = 1; + ENSURE_AI(npc_sinclari_vh::npc_sinclariAI, creature->AI())->uiPhase = 1; if (InstanceScript* instance = creature->GetInstanceScript()) instance->SetData(DATA_MAIN_EVENT_PHASE, SPECIAL); break; @@ -296,17 +296,12 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<npc_sinclariAI>(creature); - } - struct npc_sinclariAI : public ScriptedAI { npc_sinclariAI(Creature* creature) : ScriptedAI(creature) { Initialize(); - instance = creature->GetInstanceScript(); + instance = creature->GetInstanceScript(); } void Initialize() @@ -345,8 +340,6 @@ public: void UpdateAI(uint32 uiDiff) override { - ScriptedAI::UpdateAI(uiDiff); - if (uiPhase) { if (uiTimer <= uiDiff) @@ -415,6 +408,10 @@ public: } }; + CreatureAI* GetAI(Creature* creature) const override + { + return GetInstanceAI<npc_sinclariAI>(creature); + } }; class npc_azure_saboteur : public CreatureScript @@ -422,14 +419,9 @@ class npc_azure_saboteur : public CreatureScript public: npc_azure_saboteur() : CreatureScript("npc_azure_saboteur") { } - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<npc_azure_saboteurAI>(creature); - } - struct npc_azure_saboteurAI : public npc_escortAI { - npc_azure_saboteurAI(Creature* creature):npc_escortAI(creature) + npc_azure_saboteurAI(Creature* creature) : npc_escortAI(creature) { instance = creature->GetInstanceScript(); bHasGotMovingPoints = false; @@ -532,13 +524,16 @@ public: { me->CastSpell(me, SABOTEUR_SHIELD_DISRUPTION, false); me->DisappearAndDie(); - Creature* pSaboPort = ObjectAccessor::GetCreature((*me), instance->GetGuidData(DATA_SABOTEUR_PORTAL)); - if (pSaboPort) + if (Creature* pSaboPort = ObjectAccessor::GetCreature((*me), instance->GetGuidData(DATA_SABOTEUR_PORTAL))) pSaboPort->DisappearAndDie(); instance->SetData(DATA_START_BOSS_ENCOUNTER, 1); } }; + CreatureAI* GetAI(Creature* creature) const override + { + return GetInstanceAI<npc_azure_saboteurAI>(creature); + } }; class npc_teleportation_portal_vh : public CreatureScript @@ -546,11 +541,6 @@ class npc_teleportation_portal_vh : public CreatureScript public: npc_teleportation_portal_vh() : CreatureScript("npc_teleportation_portal_vh") { } - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<npc_teleportation_portalAI>(creature); - } - struct npc_teleportation_portalAI : public ScriptedAI { npc_teleportation_portalAI(Creature* creature) : ScriptedAI(creature), listOfMobs(me) @@ -583,7 +573,6 @@ public: void MoveInLineOfSight(Unit* /*who*/) override { } - void UpdateAI(uint32 diff) override { if (instance->GetData(DATA_REMOVE_NPC) == 1) @@ -608,7 +597,7 @@ public: uint8 k = uiWaveCount < 12 ? 2 : 3; for (uint8 i = 0; i < k; ++i) { - uint32 entry = RAND(CREATURE_AZURE_CAPTAIN, CREATURE_AZURE_RAIDER, CREATURE_AZURE_STALKER, CREATURE_AZURE_SORCEROR); + uint32 entry = RAND(NPC_AZURE_CAPTAIN, NPC_AZURE_RAIDER, NPC_AZURE_STALKER, NPC_AZURE_SORCEROR); DoSummon(entry, me, 2.0f, 20000, TEMPSUMMON_DEAD_DESPAWN); } me->SetVisible(false); @@ -633,14 +622,14 @@ public: uint8 k = instance->GetData(DATA_WAVE_COUNT) < 12 ? 3 : 4; for (uint8 i = 0; i < k; ++i) { - uint32 entry = RAND(CREATURE_AZURE_INVADER_1, CREATURE_AZURE_INVADER_2, CREATURE_AZURE_SPELLBREAKER_1, CREATURE_AZURE_SPELLBREAKER_2, CREATURE_AZURE_MAGE_SLAYER_1, CREATURE_AZURE_MAGE_SLAYER_2, CREATURE_AZURE_BINDER_1, CREATURE_AZURE_BINDER_2); + uint32 entry = RAND(NPC_AZURE_INVADER_1, NPC_AZURE_INVADER_2, NPC_AZURE_SPELLBREAKER_1, NPC_AZURE_SPELLBREAKER_2, NPC_AZURE_MAGE_SLAYER_1, NPC_AZURE_MAGE_SLAYER_2, NPC_AZURE_BINDER_1, NPC_AZURE_BINDER_2); DoSummon(entry, me, 2.0f, 20000, TEMPSUMMON_DEAD_DESPAWN); } } else { bPortalGuardianOrKeeperOrEliteSpawn = true; - uint32 entry = RAND(CREATURE_PORTAL_GUARDIAN, CREATURE_PORTAL_KEEPER); + uint32 entry = RAND(NPC_PORTAL_GUARDIAN, NPC_PORTAL_KEEPER); if (Creature* pPortalKeeper = DoSummon(entry, me, 2.0f, 0, TEMPSUMMON_DEAD_DESPAWN)) me->CastSpell(pPortalKeeper, SPELL_PORTAL_CHANNEL, false); } @@ -674,11 +663,15 @@ public: } }; + CreatureAI* GetAI(Creature* creature) const override + { + return GetInstanceAI<npc_teleportation_portalAI>(creature); + } }; struct violet_hold_trashAI : public npc_escortAI { - violet_hold_trashAI(Creature* creature):npc_escortAI(creature) + violet_hold_trashAI(Creature* creature) : npc_escortAI(creature) { instance = creature->GetInstanceScript(); bHasGotMovingPoints = false; @@ -723,7 +716,7 @@ struct violet_hold_trashAI : public npc_escortAI } } - void UpdateAI(uint32) override + void UpdateAI(uint32 diff) override { if (instance->GetData(DATA_MAIN_EVENT_PHASE) != IN_PROGRESS) me->CastStop(); @@ -778,6 +771,8 @@ struct violet_hold_trashAI : public npc_escortAI SetDespawnAtEnd(false); Start(true, true); } + + npc_escortAI::UpdateAI(diff); } void JustDied(Unit* /*killer*/) override @@ -791,7 +786,6 @@ struct violet_hold_trashAI : public npc_escortAI DoCast(SPELL_DESTROY_DOOR_SEAL); instance->SetData(DATA_NPC_PRESENCE_AT_DOOR_ADD, 1); } - }; class npc_azure_invader : public CreatureScript @@ -799,11 +793,6 @@ class npc_azure_invader : public CreatureScript public: npc_azure_invader() : CreatureScript("npc_azure_invader") { } - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<npc_azure_invaderAI>(creature); - } - struct npc_azure_invaderAI : public violet_hold_trashAI { npc_azure_invaderAI(Creature* creature) : violet_hold_trashAI(creature) @@ -833,12 +822,11 @@ public: void UpdateAI(uint32 diff) override { violet_hold_trashAI::UpdateAI(diff); - npc_escortAI::UpdateAI(diff); if (!UpdateVictim()) return; - if (me->GetEntry() == CREATURE_AZURE_INVADER_1) + if (me->GetEntry() == NPC_AZURE_INVADER_1) { if (uiCleaveTimer <= diff) { @@ -848,14 +836,13 @@ public: if (uiImpaleTimer <= diff) { - Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true); - if (target) + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) DoCast(target, SPELL_IMPALE); uiImpaleTimer = 4000; } else uiImpaleTimer -= diff; } - if (me->GetEntry() == CREATURE_AZURE_INVADER_2) + if (me->GetEntry() == NPC_AZURE_INVADER_2) { if (uiBrutalStrikeTimer <= diff) { @@ -876,6 +863,10 @@ public: } }; + CreatureAI* GetAI(Creature* creature) const override + { + return GetInstanceAI<npc_azure_invaderAI>(creature); + } }; class npc_azure_binder : public CreatureScript @@ -883,11 +874,6 @@ class npc_azure_binder : public CreatureScript public: npc_azure_binder() : CreatureScript("npc_azure_binder") { } - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<npc_azure_binderAI>(creature); - } - struct npc_azure_binderAI : public violet_hold_trashAI { npc_azure_binderAI(Creature* creature) : violet_hold_trashAI(creature) @@ -917,12 +903,11 @@ public: void UpdateAI(uint32 diff) override { violet_hold_trashAI::UpdateAI(diff); - npc_escortAI::UpdateAI(diff); if (!UpdateVictim()) return; - if (me->GetEntry() == CREATURE_AZURE_BINDER_1) + if (me->GetEntry() == NPC_AZURE_BINDER_1) { if (uiArcaneExplosionTimer <= diff) { @@ -930,16 +915,15 @@ public: uiArcaneExplosionTimer = 5000; } else uiArcaneExplosionTimer -= diff; - if (uiArcainBarrageTimer <= diff) + if (uiArcainBarrageTimer <= diff) { - Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true); - if (target) - DoCast(target, SPELL_ARCANE_BARRAGE); + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) + DoCast(target, SPELL_ARCANE_BARRAGE); uiArcainBarrageTimer = 6000; } else uiArcainBarrageTimer -= diff; } - if (me->GetEntry() == CREATURE_AZURE_BINDER_2) + if (me->GetEntry() == NPC_AZURE_BINDER_2) { if (uiFrostNovaTimer <= diff) { @@ -949,8 +933,7 @@ public: if (uiFrostboltTimer <= diff) { - Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true); - if (target) + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) DoCast(target, SPELL_FROSTBOLT); uiFrostboltTimer = 6000; } else uiFrostboltTimer -= diff; @@ -960,6 +943,10 @@ public: } }; + CreatureAI* GetAI(Creature* creature) const override + { + return GetInstanceAI<npc_azure_binderAI>(creature); + } }; class npc_azure_mage_slayer : public CreatureScript @@ -967,11 +954,6 @@ class npc_azure_mage_slayer : public CreatureScript public: npc_azure_mage_slayer() : CreatureScript("npc_azure_mage_slayer") { } - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<npc_azure_mage_slayerAI>(creature); - } - struct npc_azure_mage_slayerAI : public violet_hold_trashAI { npc_azure_mage_slayerAI(Creature* creature) : violet_hold_trashAI(creature) @@ -997,12 +979,11 @@ public: void UpdateAI(uint32 diff) override { violet_hold_trashAI::UpdateAI(diff); - npc_escortAI::UpdateAI(diff); if (!UpdateVictim()) return; - if (me->GetEntry() == CREATURE_AZURE_MAGE_SLAYER_1) + if (me->GetEntry() == NPC_AZURE_MAGE_SLAYER_1) { if (uiArcaneEmpowermentTimer <= diff) { @@ -1011,12 +992,11 @@ public: } else uiArcaneEmpowermentTimer -= diff; } - if (me->GetEntry() == CREATURE_AZURE_MAGE_SLAYER_2) + if (me->GetEntry() == NPC_AZURE_MAGE_SLAYER_2) { if (uiSpellLockTimer <= diff) { - Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true); - if (target) + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) DoCast(target, SPELL_SPELL_LOCK); uiSpellLockTimer = 9000; } else uiSpellLockTimer -= diff; @@ -1026,6 +1006,10 @@ public: } }; + CreatureAI* GetAI(Creature* creature) const override + { + return GetInstanceAI<npc_azure_mage_slayerAI>(creature); + } }; class npc_azure_raider : public CreatureScript @@ -1033,11 +1017,6 @@ class npc_azure_raider : public CreatureScript public: npc_azure_raider() : CreatureScript("npc_azure_raider") { } - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<npc_azure_raiderAI>(creature); - } - struct npc_azure_raiderAI : public violet_hold_trashAI { npc_azure_raiderAI(Creature* creature) : violet_hold_trashAI(creature) @@ -1063,7 +1042,6 @@ public: void UpdateAI(uint32 diff) override { violet_hold_trashAI::UpdateAI(diff); - npc_escortAI::UpdateAI(diff); if (!UpdateVictim()) return; @@ -1084,6 +1062,10 @@ public: } }; + CreatureAI* GetAI(Creature* creature) const override + { + return GetInstanceAI<npc_azure_raiderAI>(creature); + } }; class npc_azure_stalker : public CreatureScript @@ -1114,7 +1096,6 @@ public: void UpdateAI(uint32 diff) override { violet_hold_trashAI::UpdateAI(diff); - npc_escortAI::UpdateAI(diff); if (!UpdateVictim()) return; @@ -1123,8 +1104,7 @@ public: { if (_tacticalBlinkTimer <= diff) { - Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40, true); - if (target) + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40, true)) DoCast(target, SPELL_TACTICAL_BLINK); _tacticalBlinkTimer = 6000; _tacticalBlinkCast = true; @@ -1135,8 +1115,8 @@ public: { if (_backstabTimer <= diff) { - Unit* target = SelectTarget(SELECT_TARGET_NEAREST, 0, 10, true); - DoCast(target, SPELL_BACKSTAB); + if (Unit* target = SelectTarget(SELECT_TARGET_NEAREST, 0, 10, true)) + DoCast(target, SPELL_BACKSTAB); _tacticalBlinkCast = false; _backstabTimer =1300; } else _backstabTimer -= diff; @@ -1191,36 +1171,32 @@ public: void UpdateAI(uint32 diff) override { violet_hold_trashAI::UpdateAI(diff); - npc_escortAI::UpdateAI(diff); if (!UpdateVictim()) return; - if (me->GetEntry() == CREATURE_AZURE_SPELLBREAKER_1) + if (me->GetEntry() == NPC_AZURE_SPELLBREAKER_1) { if (uiArcaneBlastTimer <= diff) { - Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true); - if (target) + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) DoCast(target, SPELL_ARCANE_BLAST); uiArcaneBlastTimer = 6000; } else uiArcaneBlastTimer -= diff; if (uiSlowTimer <= diff) { - Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true); - if (target) + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) DoCast(target, SPELL_SLOW); uiSlowTimer = 5000; } else uiSlowTimer -= diff; } - if (me->GetEntry() == CREATURE_AZURE_SPELLBREAKER_2) + if (me->GetEntry() == NPC_AZURE_SPELLBREAKER_2) { if (uiChainsOfIceTimer <= diff) { - Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true); - if (target) + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) DoCast(target, SPELL_CHAINS_OF_ICE); uiChainsOfIceTimer = 7000; } else uiChainsOfIceTimer -= diff; @@ -1247,11 +1223,6 @@ class npc_azure_captain : public CreatureScript public: npc_azure_captain() : CreatureScript("npc_azure_captain") { } - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<npc_azure_captainAI>(creature); - } - struct npc_azure_captainAI : public violet_hold_trashAI { npc_azure_captainAI(Creature* creature) : violet_hold_trashAI(creature) @@ -1277,7 +1248,6 @@ public: void UpdateAI(uint32 diff) override { violet_hold_trashAI::UpdateAI(diff); - npc_escortAI::UpdateAI(diff); if (!UpdateVictim()) return; @@ -1298,6 +1268,10 @@ public: } }; + CreatureAI* GetAI(Creature* creature) const override + { + return GetInstanceAI<npc_azure_captainAI>(creature); + } }; class npc_azure_sorceror : public CreatureScript @@ -1305,11 +1279,6 @@ class npc_azure_sorceror : public CreatureScript public: npc_azure_sorceror() : CreatureScript("npc_azure_sorceror") { } - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<npc_azure_sorcerorAI>(creature); - } - struct npc_azure_sorcerorAI : public violet_hold_trashAI { npc_azure_sorcerorAI(Creature* creature) : violet_hold_trashAI(creature) @@ -1337,15 +1306,13 @@ public: void UpdateAI(uint32 diff) override { violet_hold_trashAI::UpdateAI(diff); - npc_escortAI::UpdateAI(diff); if (!UpdateVictim()) return; if (uiArcaneStreamTimer <= diff) { - Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true); - if (target) + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) DoCast(target, SPELL_ARCANE_STREAM); uiArcaneStreamTimer = urand(0, 5000)+5000; uiArcaneStreamTimerStartingValueHolder = uiArcaneStreamTimer; @@ -1360,6 +1327,11 @@ public: DoMeleeAttackIfReady(); } }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetInstanceAI<npc_azure_sorcerorAI>(creature); + } }; diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.h b/src/server/scripts/Northrend/VioletHold/violet_hold.h index 404d1f493e6..275a7467d83 100644 --- a/src/server/scripts/Northrend/VioletHold/violet_hold.h +++ b/src/server/scripts/Northrend/VioletHold/violet_hold.h @@ -18,13 +18,18 @@ #ifndef DEF_VIOLET_HOLD_H #define DEF_VIOLET_HOLD_H -#define DataHeader "VIO" +#define DataHeader "VH" + +uint32 const EncounterCount = 3; enum Data { + // Main encounters DATA_1ST_BOSS_EVENT, DATA_2ND_BOSS_EVENT, - DATA_CYANIGOSA_EVENT, + DATA_CYANIGOSA, + + // Misc DATA_WAVE_COUNT, DATA_REMOVE_NPC, DATA_PORTAL_LOCATION, @@ -38,10 +43,8 @@ enum Data DATA_ACTIVATE_CRYSTAL, DATA_MAIN_EVENT_PHASE, DATA_DEFENSELESS, -}; -enum Data64 -{ + // Bosses DATA_MORAGG, DATA_EREKEM, DATA_EREKEM_GUARD_1, @@ -50,7 +53,8 @@ enum Data64 DATA_LAVANTHOR, DATA_XEVOZZ, DATA_ZURAMAT, - DATA_CYANIGOSA, + + // Cells DATA_MORAGG_CELL, DATA_EREKEM_CELL, DATA_EREKEM_LEFT_GUARD_CELL, @@ -59,6 +63,8 @@ enum Data64 DATA_LAVANTHOR_CELL, DATA_XEVOZZ_CELL, DATA_ZURAMAT_CELL, + + // Misc DATA_MAIN_DOOR, DATA_SINCLARI, DATA_TELEPORTATION_PORTAL, @@ -81,33 +87,48 @@ enum Bosses enum CreaturesIds { - CREATURE_TELEPORTATION_PORTAL = 31011, - CREATURE_PORTAL_GUARDIAN = 30660, - CREATURE_PORTAL_KEEPER = 30695, - CREATURE_XEVOZZ = 29266, - CREATURE_LAVANTHOR = 29312, - CREATURE_ICHORON = 29313, - CREATURE_ZURAMAT = 29314, - CREATURE_EREKEM = 29315, - CREATURE_EREKEM_GUARD = 29395, - CREATURE_MORAGG = 29316, - CREATURE_CYANIGOSA = 31134, - CREATURE_SINCLARI = 30658, - CREATURE_SABOTEOUR = 31079, - NPC_VIOLET_HOLD_GUARD = 30659, - NPC_DEFENSE_SYSTEM = 30837 + NPC_TELEPORTATION_PORTAL = 31011, + NPC_PORTAL_GUARDIAN = 30660, + NPC_PORTAL_KEEPER = 30695, + NPC_XEVOZZ = 29266, + NPC_LAVANTHOR = 29312, + NPC_ICHORON = 29313, + NPC_ZURAMAT = 29314, + NPC_EREKEM = 29315, + NPC_EREKEM_GUARD = 29395, + NPC_MORAGG = 29316, + NPC_CYANIGOSA = 31134, + NPC_SINCLARI = 30658, + NPC_SABOTEOUR = 31079, + NPC_VIOLET_HOLD_GUARD = 30659, + NPC_DEFENSE_SYSTEM = 30837 +}; + +enum GameObjectIds +{ + GO_MAIN_DOOR = 191723, + GO_XEVOZZ_DOOR = 191556, + GO_LAVANTHOR_DOOR = 191566, + GO_ICHORON_DOOR = 191722, + GO_ZURAMAT_DOOR = 191565, + GO_EREKEM_DOOR = 191564, + GO_EREKEM_GUARD_1_DOOR = 191563, + GO_EREKEM_GUARD_2_DOOR = 191562, + GO_MORAGG_DOOR = 191606, + GO_INTRO_ACTIVATION_CRYSTAL = 193615, + GO_ACTIVATION_CRYSTAL = 193611 }; enum WorldStateIds { - WORLD_STATE_VH = 3816, - WORLD_STATE_VH_PRISON_STATE = 3815, - WORLD_STATE_VH_WAVE_COUNT = 3810, + WORLD_STATE_VH = 3816, + WORLD_STATE_VH_PRISON_STATE = 3815, + WORLD_STATE_VH_WAVE_COUNT = 3810, }; enum Events { - EVENT_ACTIVATE_CRYSTAL = 20001 + EVENT_ACTIVATE_CRYSTAL = 20001 }; #endif diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp index 9b341180c99..280a94aa21f 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -395,6 +395,9 @@ enum NesingwaryTrapper GO_CARIBOU_TRAP_15 = 188008, SPELL_TRAPPED = 46104, + + // Texts + SAY_NESINGWARY_1 = 0 }; #define CaribouTrapsNum 15 @@ -471,7 +474,7 @@ public: phase = 3; break; case 3: - //Talk(SAY_NESINGWARY_1); + Talk(SAY_NESINGWARY_1); phaseTimer = 2000; phase = 4; break; @@ -1703,7 +1706,7 @@ public: break; } creature->SetStandState(UNIT_STAND_STATE_STAND); - creature->AI()->Talk(SAY_1); + creature->AI()->Talk(SAY_1, player); ENSURE_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID()); } return true; diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp index b7efa7c3d3e..dc5b75d425d 100644 --- a/src/server/scripts/Northrend/zone_dragonblight.cpp +++ b/src/server/scripts/Northrend/zone_dragonblight.cpp @@ -174,7 +174,7 @@ class npc_commander_eligor_dawnbringer : public CreatureScript { if (id == 1) { - me->SetFacingTo(PosTalkLocations[talkWing].m_orientation); + me->SetFacingTo(PosTalkLocations[talkWing].GetOrientation()); TurnAudience(); switch (talkWing) diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp index dad71ab0c24..83fd3859716 100644 --- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp +++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp @@ -816,6 +816,44 @@ class spell_shredder_delivery : public SpellScriptLoader } }; +enum InfectedWorgenBite +{ + SPELL_INFECTED_WORGEN_BITE = 53094, + SPELL_WORGENS_CALL = 53095 +}; + +class spell_infected_worgen_bite : public SpellScriptLoader +{ + public: + spell_infected_worgen_bite() : SpellScriptLoader("spell_infected_worgen_bite") { } + + class spell_infected_worgen_bite_AuraScript : public AuraScript + { + PrepareAuraScript(spell_infected_worgen_bite_AuraScript); + + void HandleAfterEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Unit* target = GetTarget(); + if (target->GetTypeId() == TYPEID_PLAYER) + if (GetStackAmount() == GetSpellInfo()->StackAmount) + { + Remove(); + target->CastSpell(target, SPELL_WORGENS_CALL, true); + } + } + + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_infected_worgen_bite_AuraScript::HandleAfterEffectApply, EFFECT_1, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAPPLY); + } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_infected_worgen_bite_AuraScript(); + } +}; + void AddSC_grizzly_hills() { new npc_emily(); @@ -827,4 +865,5 @@ void AddSC_grizzly_hills() new npc_venture_co_straggler(); new npc_lake_frog(); new spell_shredder_delivery(); + new spell_infected_worgen_bite(); } diff --git a/src/server/scripts/Northrend/zone_icecrown.cpp b/src/server/scripts/Northrend/zone_icecrown.cpp index 7f29a6621bd..2e426fd77cf 100644 --- a/src/server/scripts/Northrend/zone_icecrown.cpp +++ b/src/server/scripts/Northrend/zone_icecrown.cpp @@ -25,53 +25,6 @@ #include "CombatAI.h" /*###### -## npc_squire_david -######*/ - -enum SquireDavid -{ - QUEST_THE_ASPIRANT_S_CHALLENGE_H = 13680, - QUEST_THE_ASPIRANT_S_CHALLENGE_A = 13679, - - NPC_ARGENT_VALIANT = 33448, - - GOSSIP_TEXTID_SQUIRE = 14407 -}; - -#define GOSSIP_SQUIRE_ITEM_1 "I am ready to fight!" -#define GOSSIP_SQUIRE_ITEM_2 "How do the Argent Crusader raiders fight?" - -class npc_squire_david : public CreatureScript -{ -public: - npc_squire_david() : CreatureScript("npc_squire_david") { } - - bool OnGossipHello(Player* player, Creature* creature) override - { - if (player->GetQuestStatus(QUEST_THE_ASPIRANT_S_CHALLENGE_H) == QUEST_STATUS_INCOMPLETE || - player->GetQuestStatus(QUEST_THE_ASPIRANT_S_CHALLENGE_A) == QUEST_STATUS_INCOMPLETE)//We need more info about it. - { - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SQUIRE_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SQUIRE_ITEM_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2); - } - - player->SEND_GOSSIP_MENU(GOSSIP_TEXTID_SQUIRE, creature->GetGUID()); - return true; - } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override - { - player->PlayerTalkClass->ClearMenus(); - if (action == GOSSIP_ACTION_INFO_DEF+1) - { - player->CLOSE_GOSSIP_MENU(); - creature->SummonCreature(NPC_ARGENT_VALIANT, 8575.451f, 952.472f, 547.554f, 0.38f); - } - return true; - } -}; - -/*###### ## npc_argent_valiant ######*/ @@ -837,7 +790,6 @@ class npc_frostbrood_skytalon : public CreatureScript void AddSC_icecrown() { - new npc_squire_david; new npc_argent_valiant; new npc_guardian_pavilion; new npc_tournament_training_dummy; diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp index bfdea4a1435..d5d9f8ae77e 100644 --- a/src/server/scripts/Northrend/zone_storm_peaks.cpp +++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp @@ -19,6 +19,7 @@ #include "ScriptedCreature.h" #include "ScriptedGossip.h" #include "ScriptedEscortAI.h" +#include "SpellHistory.h" #include "SpellScript.h" #include "SpellAuraEffects.h" #include "Vehicle.h" @@ -641,97 +642,6 @@ enum JokkumScriptcast EVENT_KROLMIR_9 = 24, }; -class npc_king_jokkum_vehicle : public CreatureScript -{ -public: - npc_king_jokkum_vehicle() : CreatureScript("npc_king_jokkum_vehicle") { } - - struct npc_king_jokkum_vehicleAI : public VehicleAI - { - npc_king_jokkum_vehicleAI(Creature* creature) : VehicleAI(creature) - { - pathEnd = false; - } - - void Reset() override - { - playerGUID.Clear(); - pathEnd = false; - } - - void OnCharmed(bool /*apply*/) override { } - - void PassengerBoarded(Unit* who, int8 /*seat*/, bool apply) override - { - if (apply) - { - playerGUID = who->GetGUID(); - Talk(SAY_HOLD_ON, who); - me->CastSpell(who, SPELL_JOKKUM_KILL_CREDIT, true); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC); - me->GetMotionMaster()->MovePath(PATH_JOKKUM, false); - } - } - - void MovementInform(uint32 type, uint32 id) override - { - if (type != WAYPOINT_MOTION_TYPE) - return; - - if (pathEnd) - { - if (id == 4) - { - - } - } - else - { - if (id == 19) - { - pathEnd = true; - me->SetFacingTo(0.418879f); - Talk(SAY_JOKKUM_1); - if (Player* player = ObjectAccessor::GetPlayer(*me, playerGUID)) - me->CastSpell(player, SPELL_PLAYER_CAST_VERANUS_SUMMON); - me->CastSpell(me, SPELL_EJECT_ALL_PASSENGERS); - - } - } - } - - void UpdateAI(uint32 diff) override - { - if (!pathEnd) - return; - - events.Update(diff); - - while (uint32 eventId = events.ExecuteEvent()) - { - switch (eventId) - { - case EVENT_KROLMIR_1: - Talk(SAY_JOKKUM_2); - events.ScheduleEvent(EVENT_KROLMIR_2, 4000); - break; - } - } - } - - private: - EventMap events; - ObjectGuid playerGUID; - bool pathEnd; - - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_king_jokkum_vehicleAI(creature); - } -}; - class spell_jokkum_scriptcast : public SpellScriptLoader { public: spell_jokkum_scriptcast() : SpellScriptLoader("spell_jokkum_scriptcast") { } @@ -855,7 +765,6 @@ void AddSC_storm_peaks() new npc_icefang(); new npc_hyldsmeet_protodrake(); new npc_brann_bronzebeard_keystone(); - new npc_king_jokkum_vehicle(); new spell_jokkum_scriptcast(); new spell_veranus_summon(); new spell_close_rift(); diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h index 80c8041bc6d..fac9d8fa357 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h @@ -261,13 +261,13 @@ class OPvPCapturePointNA : public OPvPCapturePoint public: OPvPCapturePointNA(OutdoorPvP* pvp); - bool Update(uint32 diff); + bool Update(uint32 diff) override; - void ChangeState(); + void ChangeState() override; - void FillInitialWorldStates(WorldPacket & data); + void FillInitialWorldStates(WorldPacket & data) override; - bool HandleCustomSpell(Player* player, uint32 spellId, GameObject* go); + bool HandleCustomSpell(Player* player, uint32 spellId, GameObject* go) override; int32 HandleOpenGo(Player* player, ObjectGuid guid) override; diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h index a08e141294d..9c76b35937e 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h @@ -184,9 +184,9 @@ class OPvPCapturePointZM_GraveYard : public OPvPCapturePoint public: OPvPCapturePointZM_GraveYard(OutdoorPvP* pvp); - bool Update(uint32 diff); + bool Update(uint32 diff) override; - void ChangeState() { } + void ChangeState() override { } void FillInitialWorldStates(WorldPacket & data); @@ -196,11 +196,11 @@ class OPvPCapturePointZM_GraveYard : public OPvPCapturePoint void SetBeaconState(uint32 controlling_team); // not good atm - bool HandleGossipOption(Player* player, ObjectGuid guid, uint32 gossipid); + bool HandleGossipOption(Player* player, ObjectGuid guid, uint32 gossipid) override; - bool HandleDropFlag(Player* player, uint32 spellId); + bool HandleDropFlag(Player* player, uint32 spellId) override; - bool CanTalkTo(Player* player, Creature* creature, GossipMenuItems const& gso); + bool CanTalkTo(Player* player, Creature* creature, GossipMenuItems const& gso) override; uint32 GetGraveYardState() const; diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp index 662bad46162..263fd8340b9 100644 --- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp +++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp @@ -113,7 +113,7 @@ public: 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() && (dist = i_pl->IsWithinDist(me, 45))) + if (i_pl->IsAlive() && (dist = i_pl->GetDistance(me)) < 45) { i_pl->RemoveAurasDueToSpell(SPELL_INHIBITMAGIC); me->AddAura(SPELL_INHIBITMAGIC, i_pl); diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp index 2b5ad18022a..9667b4e3bb0 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp @@ -93,7 +93,7 @@ class boss_ambassador_hellmaw : public CreatureScript { } - void DoAction(int32 actionId) + void DoAction(int32 actionId) override { if (actionId == ACTION_AMBASSADOR_HELLMAW_INTRO) DoIntro(); diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp index 9d2737c8ba5..f984272f4d5 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp @@ -92,7 +92,7 @@ class instance_shadow_labyrinth : public InstanceMapScript } } - void OnUnitDeath(Unit* unit) + void OnUnitDeath(Unit* unit) override { Creature* creature = unit->ToCreature(); if (!creature) diff --git a/src/server/scripts/Outland/CMakeLists.txt b/src/server/scripts/Outland/CMakeLists.txt index 24658dbc21f..42621b76941 100644 --- a/src/server/scripts/Outland/CMakeLists.txt +++ b/src/server/scripts/Outland/CMakeLists.txt @@ -27,6 +27,7 @@ set(scripts_STAT_SRCS Outland/HellfireCitadel/ShatteredHalls/shattered_halls.h Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp + Outland/HellfireCitadel/ShatteredHalls/shattered_halls.cpp Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp index 2750476db76..096777163a6 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp @@ -280,7 +280,7 @@ public: Map::PlayerList const &PlayerList = map->GetPlayers(); for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) { - if (i->GetSource() && i->GetSource()->IsAlive() && me->HasInArc(float(diff/20000*M_PI*2), i->GetSource()) && me->IsWithinDist(i->GetSource(), SPOUT_DIST) && !i->GetSource()->IsInWater()) + if (i->GetSource() && i->GetSource()->IsAlive() && me->HasInArc(diff/20000.f*float(M_PI)*2.f, i->GetSource()) && me->IsWithinDist(i->GetSource(), SPOUT_DIST) && !i->GetSource()->IsInWater()) DoCast(i->GetSource(), SPELL_SPOUT, true); // only knock back players in arc, in 100yards, not in water } } diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp index 1657b178327..d7ba0a34939 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp @@ -275,8 +275,8 @@ class instance_serpent_shrine : public InstanceMapScript if (data == DONE) { HandleGameObject(BridgePart[0], true); - HandleGameObject(BridgePart[0], true); - HandleGameObject(BridgePart[0], true); + HandleGameObject(BridgePart[1], true); + HandleGameObject(BridgePart[2], true); } break; case DATA_TRASH: diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp index 30444caa496..4cc522c7523 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp @@ -43,7 +43,7 @@ class go_main_chambers_access_panel : public GameObjectScript } }; -ObjectData const gameObjectData[] = +ObjectData const gameObjectData[] = { { GO_ACCESS_PANEL_HYDRO, DATA_ACCESS_PANEL_HYDRO }, { GO_ACCESS_PANEL_MEK, DATA_ACCESS_PANEL_MEK }, diff --git a/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp b/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp index 374ce3cd957..88dbeff09f5 100644 --- a/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp +++ b/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp @@ -123,7 +123,7 @@ public: instance->SetBossState(DATA_MAULGAR, DONE); } - void DoAction(int32 actionId) + void DoAction(int32 actionId) override { if (actionId == ACTION_ADD_DEATH) Talk(SAY_OGRE_DEATH); diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp index fb44a403d86..dfc5f5992a6 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp @@ -108,6 +108,7 @@ class boss_grand_warlock_nethekurse : public CreatureScript void Reset() override { + _Reset(); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); Initialize(); @@ -115,9 +116,8 @@ class boss_grand_warlock_nethekurse : public CreatureScript void JustDied(Unit* /*killer*/) override { + _JustDied(); Talk(SAY_DIE); - - instance->SetBossState(DATA_NETHEKURSE, DONE); } void SetData(uint32 data, uint32 value) override diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp index 0d7fe11956b..a950882eddd 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp @@ -160,6 +160,7 @@ class boss_warbringer_omrogg : public CreatureScript void Reset() override { + _Reset(); if (Unit* LeftHead = ObjectAccessor::GetUnit(*me, LeftHeadGUID)) { LeftHead->setDeathState(JUST_DIED); @@ -257,14 +258,14 @@ class boss_warbringer_omrogg : public CreatureScript Creature* LeftHead = ObjectAccessor::GetCreature(*me, LeftHeadGUID); Creature* RightHead = ObjectAccessor::GetCreature(*me, RightHeadGUID); + _JustDied(); + if (!LeftHead || !RightHead) return; LeftHead->AI()->Talk(YELL_DIE_L); RightHead->AI()->SetData(SETDATA_DATA, SETDATA_YELL); - - instance->SetBossState(DATA_OMROGG, DONE); } void UpdateAI(uint32 diff) override @@ -416,7 +417,7 @@ class npc_omrogg_heads : public CreatureScript void EnterCombat(Unit* /*who*/) override { } - void SetData(uint32 data, uint32 value) + void SetData(uint32 data, uint32 value) override { if (data == SETDATA_DATA && value == SETDATA_YELL) { diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp index b44ae46c78c..7f2e08b39ca 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp @@ -35,7 +35,10 @@ enum Says { SAY_AGGRO = 0, SAY_SLAY = 1, - SAY_DEATH = 2 + SAY_DEATH = 2, + + SAY_CALL_EXECUTIONER_A = 3, + SAY_CALL_EXECUTIONER_H = 4 }; enum Spells @@ -84,10 +87,28 @@ class boss_warchief_kargath_bladefist : public CreatureScript resetcheck_timer = 5000; } + void DoAction(int32 action) override + { + if (action == ACTION_EXECUTIONER_TAUNT) + { + switch (instance->GetData(DATA_TEAM_IN_INSTANCE)) + { + case ALLIANCE: + Talk(SAY_CALL_EXECUTIONER_A); + break; + case HORDE: + Talk(SAY_CALL_EXECUTIONER_H); + break; + default: + break; + } + } + } + void Reset() override { removeAdds(); - + _Reset(); me->SetSpeed(MOVE_RUN, 2); me->SetWalk(false); @@ -96,10 +117,9 @@ class boss_warchief_kargath_bladefist : public CreatureScript void JustDied(Unit* /*killer*/) override { + _JustDied(); Talk(SAY_DEATH); removeAdds(); - - instance->SetBossState(DATA_KARGATH, DONE); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp index c6b08bdada1..5cfae286f9b 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp @@ -24,9 +24,21 @@ SDCategory: Hellfire Citadel, Shattered Halls EndScriptData */ #include "ScriptMgr.h" +#include "ScriptedCreature.h" +#include "SpellScript.h" +#include "SpellAuraEffects.h" #include "InstanceScript.h" +#include "Player.h" +#include "SpellAuras.h" #include "shattered_halls.h" +DoorData const doorData[] = +{ + { GO_GRAND_WARLOCK_CHAMBER_DOOR_1, DATA_NETHEKURSE, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, + { GO_GRAND_WARLOCK_CHAMBER_DOOR_2, DATA_NETHEKURSE, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, + { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } +}; + class instance_shattered_halls : public InstanceMapScript { public: @@ -43,6 +55,41 @@ class instance_shattered_halls : public InstanceMapScript { SetHeaders(DataHeader); SetBossNumber(EncounterCount); + LoadDoorData(doorData); + executionTimer = 0; + executed = 0; + _team = 0; + } + + void OnPlayerEnter(Player* player) override + { + Aura* ex = nullptr; + + if (!_team) + _team = player->GetTeam(); + + player->CastSpell(player, SPELL_REMOVE_KARGATH_EXECUTIONER, true); + + if (!executionTimer || executionerGUID.IsEmpty()) + return; + + switch (executed) + { + case 0: + ex = player->AddAura(SPELL_KARGATH_EXECUTIONER_1, player); + break; + case 1: + ex = player->AddAura(SPELL_KARGATH_EXECUTIONER_2, player); + break; + case 2: + ex = player->AddAura(SPELL_KARGATH_EXECUTIONER_3, player); + break; + default: + break; + } + + if (ex) + ex->SetDuration(executionTimer); } void OnGameObjectCreate(GameObject* go) override @@ -50,21 +97,65 @@ class instance_shattered_halls : public InstanceMapScript switch (go->GetEntry()) { case GO_GRAND_WARLOCK_CHAMBER_DOOR_1: - nethekurseDoor1GUID = go->GetGUID(); + case GO_GRAND_WARLOCK_CHAMBER_DOOR_2: + AddDoor(go, true); + default: break; + } + } + + void OnGameObjectRemove(GameObject* go) override + { + switch (go->GetEntry()) + { + case GO_GRAND_WARLOCK_CHAMBER_DOOR_1: case GO_GRAND_WARLOCK_CHAMBER_DOOR_2: - nethekurseDoor2GUID = go->GetGUID(); + AddDoor(go, false); + default: break; } } void OnCreatureCreate(Creature* creature) override { + if (!_team) + { + Map::PlayerList const &players = instance->GetPlayers(); + if (!players.isEmpty()) + if (Player* player = players.begin()->GetSource()) + _team = player->GetTeam(); + } + switch (creature->GetEntry()) { case NPC_GRAND_WARLOCK_NETHEKURSE: nethekurseGUID = creature->GetGUID(); break; + case NPC_KARGATH_BLADEFIST: + kargathGUID = creature->GetGUID(); + break; + case NPC_RANDY_WHIZZLESPROCKET: + if (_team == HORDE) + creature->UpdateEntry(NPC_DRISELLA); + break; + case NPC_SHATTERED_EXECUTIONER: + executionTimer = 55 * MINUTE * IN_MILLISECONDS; + DoCastSpellOnPlayers(SPELL_KARGATH_EXECUTIONER_1); + executionerGUID = creature->GetGUID(); + SaveToDB(); + break; + case NPC_CAPTAIN_ALINA: + case NPC_CAPTAIN_BONESHATTER: + victimsGUID[0] = creature->GetGUID(); + break; + case NPC_ALLIANCE_VICTIM_1: + case NPC_HORDE_VICTIM_1: + victimsGUID[1] = creature->GetGUID(); + break; + case NPC_ALLIANCE_VICTIM_2: + case NPC_HORDE_VICTIM_2: + victimsGUID[2] = creature->GetGUID(); + break; } } @@ -75,18 +166,18 @@ class instance_shattered_halls : public InstanceMapScript switch (type) { - case DATA_NETHEKURSE: - if (state == IN_PROGRESS) - { - HandleGameObject(nethekurseDoor1GUID, false); - HandleGameObject(nethekurseDoor2GUID, false); - } - else + case DATA_SHATTERED_EXECUTIONER: + if (state == DONE) { - HandleGameObject(nethekurseDoor1GUID, true); - HandleGameObject(nethekurseDoor2GUID, true); + DoCastSpellOnPlayers(SPELL_REMOVE_KARGATH_EXECUTIONER); + executionTimer = 0; + SaveToDB(); } break; + case DATA_KARGATH: + if (Creature* executioner = instance->GetCreature(executionerGUID)) + executioner->AI()->Reset(); // trigger removal of IMMUNE_TO_PC flag + break; case DATA_OMROGG: break; } @@ -99,21 +190,116 @@ class instance_shattered_halls : public InstanceMapScript { case NPC_GRAND_WARLOCK_NETHEKURSE: return nethekurseGUID; - break; - case GO_GRAND_WARLOCK_CHAMBER_DOOR_1: - return nethekurseDoor1GUID; - break; - case GO_GRAND_WARLOCK_CHAMBER_DOOR_2: - return nethekurseDoor2GUID; - break; + case NPC_KARGATH_BLADEFIST: + return kargathGUID; + case NPC_SHATTERED_EXECUTIONER: + return executionerGUID; + case DATA_FIRST_PRISONER: + case DATA_SECOND_PRISONER: + case DATA_THIRD_PRISONER: + return victimsGUID[data - DATA_FIRST_PRISONER]; + default: + return ObjectGuid::Empty; + } + } + + void WriteSaveDataMore(std::ostringstream& data) override + { + if (!instance->IsHeroic()) + return; + + data << uint32(executed) << ' ' + << executionTimer << ' '; + } + + void ReadSaveDataMore(std::istringstream& data) override + { + if (!instance->IsHeroic()) + return; + + uint32 readbuff; + data >> readbuff; + executed = uint8(readbuff); + data >> readbuff; + + if (executed > VictimCount) + { + executed = VictimCount; + executionTimer = 0; + return; + } + + if (!readbuff) + return; + + Creature* executioner = nullptr; + + instance->LoadGrid(Executioner.GetPositionX(), Executioner.GetPositionY()); + if (Creature* kargath = instance->GetCreature(kargathGUID)) + if (executionerGUID.IsEmpty()) + executioner = kargath->SummonCreature(NPC_SHATTERED_EXECUTIONER, Executioner); + + if (executioner) + for (uint8 i = executed; i < VictimCount; ++i) + executioner->SummonCreature(executionerVictims[i](GetData(DATA_TEAM_IN_INSTANCE)), executionerVictims[i].GetPos()); + + executionTimer = readbuff; + } + + uint32 GetData(uint32 type) const override + { + switch (type) + { + case DATA_PRISONERS_EXECUTED: + return executed; + case DATA_TEAM_IN_INSTANCE: + return _team; + default: + return 0; } - return ObjectGuid::Empty; } - protected: + void Update(uint32 diff) override + { + if (!executionTimer) + return; + + if (executionTimer <= diff) + { + DoCastSpellOnPlayers(SPELL_REMOVE_KARGATH_EXECUTIONER); + switch (++executed) + { + case 1: + DoCastSpellOnPlayers(SPELL_KARGATH_EXECUTIONER_2); + executionTimer = 10 * MINUTE * IN_MILLISECONDS; + break; + case 2: + DoCastSpellOnPlayers(SPELL_KARGATH_EXECUTIONER_3); + executionTimer = 15 * MINUTE * IN_MILLISECONDS; + break; + default: + executionTimer = 0; + break; + } + + if (Creature* executioner = instance->GetCreature(executionerGUID)) + executioner->AI()->SetData(DATA_PRISONERS_EXECUTED, executed); + + SaveToDB(); + } + else + executionTimer -= diff; + } + + private: ObjectGuid nethekurseGUID; - ObjectGuid nethekurseDoor1GUID; - ObjectGuid nethekurseDoor2GUID; + ObjectGuid kargathGUID; + ObjectGuid executionerGUID; + ObjectGuid victimsGUID[3]; + + uint8 executed; + uint32 executionTimer; + uint32 _team; }; }; diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.cpp new file mode 100644 index 00000000000..500b0ae4bcb --- /dev/null +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.cpp @@ -0,0 +1,255 @@ +/* + * Copyright (C) 2008-2015 TrinityCore <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 (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, see <http://www.gnu.org/licenses/>. + */ + +#include "ScriptMgr.h" +#include "ScriptedCreature.h" +#include "SpellScript.h" +#include "SpellAuraEffects.h" +#include "InstanceScript.h" +#include "Player.h" +#include "SpellAuras.h" +#include "shattered_halls.h" + +class at_nethekurse_exit : public AreaTriggerScript +{ + public: + at_nethekurse_exit() : AreaTriggerScript("at_nethekurse_exit") { }; + + bool OnTrigger(Player* player, AreaTriggerEntry const*) override + { + if (InstanceScript* is = player->GetInstanceScript()) + { + if (is->instance->IsHeroic()) + { + Creature* executioner = nullptr; + + is->instance->LoadGrid(Executioner.GetPositionX(), Executioner.GetPositionY()); + if (Creature* kargath = ObjectAccessor::GetCreature(*player, is->GetGuidData(NPC_KARGATH_BLADEFIST))) + { + if (is->GetGuidData(NPC_SHATTERED_EXECUTIONER).IsEmpty()) + { + executioner = kargath->SummonCreature(NPC_SHATTERED_EXECUTIONER, Executioner); + kargath->AI()->DoAction(ACTION_EXECUTIONER_TAUNT); + } + } + + if (executioner) + for (uint8 i = 0; i < VictimCount; ++i) + executioner->SummonCreature(executionerVictims[i](is->GetData(DATA_TEAM_IN_INSTANCE)), executionerVictims[i].GetPos()); + } + } + + return false; + } +}; + +enum Spells +{ + SPELL_CLEAVE = 15284 +}; + +class boss_shattered_executioner : public CreatureScript +{ + public: + boss_shattered_executioner() : CreatureScript("boss_shattered_executioner") { } + + struct boss_shattered_executionerAI : public BossAI + { + boss_shattered_executionerAI(Creature* creature) : BossAI(creature, DATA_SHATTERED_EXECUTIONER) + { + Initialize(); + }; + + void Initialize() + { + cleaveTimer = 500; + } + + void Reset() override + { + _Reset(); + + // _Reset() resets the loot mode, so we add them again, if any + uint32 prisonersExecuted = instance->GetData(DATA_PRISONERS_EXECUTED); + if (prisonersExecuted == 0) + me->AddLootMode(LOOT_MODE_HARD_MODE_3); + if (prisonersExecuted <= 1) + me->AddLootMode(LOOT_MODE_HARD_MODE_2); + if (prisonersExecuted <= 2) + me->AddLootMode(LOOT_MODE_HARD_MODE_1); + + if (instance->GetBossState(DATA_KARGATH) == DONE) + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + else + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + + Initialize(); + } + + void JustSummoned(Creature*) override { } // avoid despawn of prisoners on death/reset + + void JustDied(Unit*) override + { + _JustDied(); + + if (instance->GetData(DATA_PRISONERS_EXECUTED) > 0) + return; + + Map::PlayerList const &players = instance->instance->GetPlayers(); + for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) + { + Player* pl = itr->GetSource(); + uint32 qId = pl->GetTeam() == ALLIANCE ? QUEST_IMPRISONED_A : QUEST_IMPRISONED_H; + if (pl->GetQuestStatus(qId) == QUEST_STATUS_INCOMPLETE) + pl->CompleteQuest(qId); + } + } + + void SetData(uint32 type, uint32 data) override + { + if (type == DATA_PRISONERS_EXECUTED && data <= 3) + { + if (Creature* victim = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FIRST_PRISONER + data - 1))) + me->Kill(victim); + + if (data == 1) + { + Map::PlayerList const &players = instance->instance->GetPlayers(); + for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) + { + Player* pl = itr->GetSource(); + uint32 qId = pl->GetTeam() == ALLIANCE ? QUEST_IMPRISONED_A : QUEST_IMPRISONED_H; + if (pl->GetQuestStatus(qId) == QUEST_STATUS_INCOMPLETE) + pl->FailQuest(qId); + } + } + + switch (data) + { + case 3: + me->RemoveLootMode(LOOT_MODE_HARD_MODE_1); + case 2: + me->RemoveLootMode(LOOT_MODE_HARD_MODE_2); + case 1: + me->RemoveLootMode(LOOT_MODE_HARD_MODE_3); + default: + break; + } + } + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + + if (cleaveTimer <= diff) + { + DoCast(SPELL_CLEAVE); + cleaveTimer = urand(5000, 7000); + } + else + cleaveTimer -= diff; + + DoMeleeAttackIfReady(); + } + private: + uint32 cleaveTimer; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetInstanceAI<boss_shattered_executionerAI>(creature); + } +}; + +class spell_kargath_executioner : public SpellScriptLoader +{ + public: + spell_kargath_executioner() : SpellScriptLoader("spell_kargath_executioner") { } + + class spell_kargath_executioner_AuraScript : public AuraScript + { + PrepareAuraScript(spell_kargath_executioner_AuraScript); + + bool AreaCheck(Unit* target) + { + if (target->GetMap()->GetId() != 540) + return false; + + return true; + } + + bool Load() override + { + return GetCaster()->GetTypeId() == TYPEID_PLAYER; + } + + void Register() override + { + DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_kargath_executioner_AuraScript::AreaCheck); + } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_kargath_executioner_AuraScript(); + } +}; + +class spell_remove_kargath_executioner : public SpellScriptLoader +{ + public: + spell_remove_kargath_executioner() : SpellScriptLoader("spell_remove_kargath_executioner") { } + + class spell_remove_kargath_executioner_SpellScript : public SpellScript + { + PrepareSpellScript(spell_remove_kargath_executioner_SpellScript); + + void HandleScript(SpellEffIndex /*effIndex*/) + { + Unit* target = GetCaster(); + + target->RemoveAurasDueToSpell(SPELL_KARGATH_EXECUTIONER_1); + target->RemoveAurasDueToSpell(SPELL_KARGATH_EXECUTIONER_2); + target->RemoveAurasDueToSpell(SPELL_KARGATH_EXECUTIONER_3); + } + + bool Load() override + { + return GetCaster()->GetTypeId() == TYPEID_PLAYER; + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_remove_kargath_executioner_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_remove_kargath_executioner_SpellScript(); + } +}; + +void AddSC_shattered_halls() +{ + new at_nethekurse_exit(); + new boss_shattered_executioner(); + new spell_kargath_executioner(); + new spell_remove_kargath_executioner(); +} diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.h b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.h index 90cbbe2a438..894cc9c40a6 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.h +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.h @@ -21,18 +21,45 @@ #define DataHeader "SH" -uint32 const EncounterCount = 3; +uint32 const EncounterCount = 4; +uint32 const VictimCount = 3; enum DataTypes { - DATA_NETHEKURSE = 1, - DATA_OMROGG = 2, - DATA_KARGATH = 3 + DATA_NETHEKURSE = 0, + DATA_OMROGG = 1, + DATA_KARGATH = 2, + + DATA_SHATTERED_EXECUTIONER = 3, + DATA_PRISONERS_EXECUTED = 4, + + DATA_TEAM_IN_INSTANCE = 5, + + DATA_FIRST_PRISONER, + DATA_SECOND_PRISONER, + DATA_THIRD_PRISONER }; enum CreatureIds { - NPC_GRAND_WARLOCK_NETHEKURSE = 16807 + NPC_GRAND_WARLOCK_NETHEKURSE = 16807, + NPC_KARGATH_BLADEFIST = 16808, + + NPC_SHATTERED_EXECUTIONER = 17301, + + // Alliance Ids + NPC_RANDY_WHIZZLESPROCKET = 17288, + + NPC_CAPTAIN_ALINA = 17290, + NPC_ALLIANCE_VICTIM_1 = 17289, + NPC_ALLIANCE_VICTIM_2 = 17292, + + // Horde Ids + NPC_DRISELLA = 17294, + + NPC_CAPTAIN_BONESHATTER = 17296, + NPC_HORDE_VICTIM_1 = 17295, + NPC_HORDE_VICTIM_2 = 17297 }; enum GameobjectIds @@ -41,4 +68,47 @@ enum GameobjectIds GO_GRAND_WARLOCK_CHAMBER_DOOR_2 = 182540 }; +enum QuestIds +{ + QUEST_IMPRISONED_A = 9524, + QUEST_IMPRISONED_H = 9525 +}; + +enum InstanceSpells +{ + SPELL_KARGATH_EXECUTIONER_1 = 39288, + SPELL_KARGATH_EXECUTIONER_2 = 39289, + SPELL_KARGATH_EXECUTIONER_3 = 39290, + + SPELL_REMOVE_KARGATH_EXECUTIONER = 39291 +}; + +enum Actions +{ + ACTION_EXECUTIONER_TAUNT = 1 +}; + +const Position Executioner = { 152.8524f, -83.63912f, 2.021005f, 0.06981317f }; + +struct FactionSpawnerHelper +{ + FactionSpawnerHelper(uint32 allianceEntry, uint32 hordeEntry, const Position& pos) : _allianceNPC(allianceEntry), _hordeNPC(hordeEntry), _spawnPos(pos) { } + + inline uint32 operator()(uint32 teamID) const { return teamID == ALLIANCE ? _allianceNPC : _hordeNPC; } + inline Position const& GetPos() const { return _spawnPos; } + +private: + const uint32 _allianceNPC; + const uint32 _hordeNPC; + const Position _spawnPos; +}; + +const FactionSpawnerHelper executionerVictims[VictimCount] = +{ + { NPC_CAPTAIN_ALINA, NPC_CAPTAIN_BONESHATTER, { 138.8807f, -84.22707f, 1.992269f, 0.06981317f } }, + { NPC_ALLIANCE_VICTIM_1, NPC_HORDE_VICTIM_1, { 151.2411f, -91.02930f, 2.019741f, 1.57079600f } }, + { NPC_ALLIANCE_VICTIM_2, NPC_HORDE_VICTIM_2, { 151.0459f, -77.51981f, 2.021008f, 4.74729500f } } +}; + + #endif diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp index cc825afd3a0..48508aa4790 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp @@ -77,12 +77,11 @@ class boss_alar : public CreatureScript public: boss_alar() : CreatureScript("boss_alar") { } - struct boss_alarAI : public ScriptedAI + struct boss_alarAI : public BossAI { - boss_alarAI(Creature* creature) : ScriptedAI(creature) + boss_alarAI(Creature* creature) : BossAI(creature, DATA_ALAR) { Initialize(); - instance = creature->GetInstanceScript(); DefaultMoveSpeedRate = creature->GetSpeedRate(MOVE_RUN); DiveBomb_Timer = 0; MeltArmor_Timer = 0; @@ -105,8 +104,6 @@ class boss_alar : public CreatureScript cur_wp = 4; } - InstanceScript* instance; - WaitEventType WaitEvent; uint32 WaitTimer; @@ -129,9 +126,8 @@ class boss_alar : public CreatureScript void Reset() override { - instance->SetData(DATA_ALAREVENT, NOT_STARTED); - Initialize(); + _Reset(); me->SetDisplayId(me->GetNativeDisplayId()); me->SetSpeed(MOVE_RUN, DefaultMoveSpeedRate); @@ -145,18 +141,11 @@ class boss_alar : public CreatureScript void EnterCombat(Unit* /*who*/) override { - instance->SetData(DATA_ALAREVENT, IN_PROGRESS); - + _EnterCombat(); me->SetDisableGravity(true); // after enterevademode will be set walk movement - DoZoneInCombat(); me->setActive(true); } - void JustDied(Unit* /*killer*/) override - { - instance->SetData(DATA_ALAREVENT, DONE); - } - void JustSummoned(Creature* summon) override { if (summon->GetEntry() == CREATURE_EMBER_OF_ALAR) @@ -508,7 +497,7 @@ class npc_ember_of_alar : public CreatureScript DoCast(me, SPELL_EMBER_BLAST, true); me->SetDisplayId(11686); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - if (instance->GetData(DATA_ALAREVENT) == 2) + if (instance->GetBossState(DATA_ALAR) == IN_PROGRESS) { if (Unit* Alar = ObjectAccessor::GetUnit(*me, instance->GetGuidData(DATA_ALAR))) { diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp index ee12d8c4d0d..ff9bdf15276 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp @@ -92,17 +92,13 @@ class boss_high_astromancer_solarian : public CreatureScript { public: - boss_high_astromancer_solarian() - : CreatureScript("boss_high_astromancer_solarian") - { - } + boss_high_astromancer_solarian() : CreatureScript("boss_high_astromancer_solarian") { } - struct boss_high_astromancer_solarianAI : public ScriptedAI + struct boss_high_astromancer_solarianAI : public BossAI { - boss_high_astromancer_solarianAI(Creature* creature) : ScriptedAI(creature), Summons(me) + boss_high_astromancer_solarianAI(Creature* creature) : BossAI(creature, DATA_HIGH_ASTROMANCER_SOLARIAN) { Initialize(); - instance = creature->GetInstanceScript(); defaultarmor = creature->GetArmor(); defaultsize = creature->GetObjectScale(); @@ -126,9 +122,6 @@ class boss_high_astromancer_solarian : public CreatureScript Phase = 1; } - InstanceScript* instance; - SummonList Summons; - uint8 Phase; uint32 ArcaneMissiles_Timer; @@ -152,16 +145,13 @@ class boss_high_astromancer_solarian : public CreatureScript void Reset() override { Initialize(); - - instance->SetData(DATA_HIGHASTROMANCERSOLARIANEVENT, NOT_STARTED); - + _Reset(); me->SetArmor(defaultarmor); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->SetVisible(true); me->SetObjectScale(defaultsize); me->SetDisplayId(MODEL_HUMAN); - Summons.DespawnAll(); } void KilledUnit(Unit* /*victim*/) override @@ -174,15 +164,13 @@ class boss_high_astromancer_solarian : public CreatureScript me->SetObjectScale(defaultsize); me->SetDisplayId(MODEL_HUMAN); Talk(SAY_DEATH); - instance->SetData(DATA_HIGHASTROMANCERSOLARIANEVENT, DONE); + _JustDied(); } void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); - DoZoneInCombat(); - - instance->SetData(DATA_HIGHASTROMANCERSOLARIANEVENT, IN_PROGRESS); + _EnterCombat(); } void SummonMinion(uint32 entry, float x, float y, float z) @@ -193,7 +181,7 @@ class boss_high_astromancer_solarian : public CreatureScript if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) Summoned->AI()->AttackStart(target); - Summons.Summon(Summoned); + summons.Summon(Summoned); } } @@ -316,10 +304,10 @@ class boss_high_astromancer_solarian : public CreatureScript Portals[i][2] = PORTAL_Z; } } - if ((abs(Portals[2][0] - Portals[1][0]) < 7) && (abs(Portals[2][1] - Portals[1][1]) < 7)) + if ((std::abs(Portals[2][0] - Portals[1][0]) < 7) && (std::abs(Portals[2][1] - Portals[1][1]) < 7)) { int i=1; - if (abs(CENTER_X + 26.0f - Portals[2][0]) < 7) + if (std::abs(CENTER_X + 26.0f - Portals[2][0]) < 7) i = -1; Portals[2][0] = Portals[2][0]+7*i; Portals[2][1] = Portal_Y(Portals[2][0], LARGE_PORTAL_RADIUS); @@ -431,10 +419,7 @@ class npc_solarium_priest : public CreatureScript { public: - npc_solarium_priest() - : CreatureScript("npc_solarium_priest") - { - } + npc_solarium_priest() : CreatureScript("npc_solarium_priest") { } struct npc_solarium_priestAI : public ScriptedAI { @@ -462,9 +447,7 @@ class npc_solarium_priest : public CreatureScript Initialize(); } - void EnterCombat(Unit* /*who*/) override - { - } + void EnterCombat(Unit* /*who*/) override { } void UpdateAI(uint32 diff) override { diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp index 9aa1981eabb..f5583c0bc53 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp @@ -286,17 +286,13 @@ class boss_kaelthas : public CreatureScript { public: - boss_kaelthas() - : CreatureScript("boss_kaelthas") - { - } - //Kael'thas AI - struct boss_kaelthasAI : public ScriptedAI + boss_kaelthas() : CreatureScript("boss_kaelthas") { } + + struct boss_kaelthasAI : public BossAI { - boss_kaelthasAI(Creature* creature) : ScriptedAI(creature), summons(me) + boss_kaelthasAI(Creature* creature) : BossAI(creature, DATA_KAELTHAS) { Initialize(); - instance = creature->GetInstanceScript(); PhaseSubphase = 0; Phase_Timer = 0; } @@ -320,8 +316,6 @@ class boss_kaelthas : public CreatureScript ChainPyros = false; } - InstanceScript* instance; - uint32 Fireball_Timer; uint32 ArcaneDisruption_Timer; uint32 Phoenix_Timer; @@ -341,8 +335,6 @@ class boss_kaelthas : public CreatureScript bool IsCastingFireball; bool ChainPyros; - SummonList summons; - ObjectGuid m_auiAdvisorGuid[MAX_ADVISORS]; void Reset() override @@ -351,8 +343,8 @@ class boss_kaelthas : public CreatureScript if (me->IsInCombat()) PrepareAdvisors(); - - summons.DespawnAll(); + + _Reset(); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); @@ -413,7 +405,6 @@ class boss_kaelthas : public CreatureScript } void MoveInLineOfSight(Unit* who) override - { if (!me->HasUnitState(UNIT_STATE_STUNNED) && me->CanCreatureAttack(who)) { @@ -444,6 +435,8 @@ class boss_kaelthas : public CreatureScript { if (!instance->GetData(DATA_KAELTHASEVENT) && !Phase) StartEvent(); + + instance->SetBossState(DATA_KAELTHAS, IN_PROGRESS); } void KilledUnit(Unit* /*victim*/) override @@ -463,11 +456,6 @@ class boss_kaelthas : public CreatureScript } } - void SummonedCreatureDespawn(Creature* summon) override - { - summons.Despawn(summon); - } - void JustDied(Unit* /*killer*/) override { me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); @@ -475,8 +463,6 @@ class boss_kaelthas : public CreatureScript Talk(SAY_DEATH); - summons.DespawnAll(); - instance->SetData(DATA_KAELTHASEVENT, 0); for (uint8 i = 0; i < MAX_ADVISORS; ++i) @@ -484,6 +470,7 @@ class boss_kaelthas : public CreatureScript if (Unit* pAdvisor = ObjectAccessor::GetUnit(*me, m_auiAdvisorGuid[i])) pAdvisor->Kill(pAdvisor); } + _JustDied(); } void UpdateAI(uint32 diff) override @@ -1024,10 +1011,8 @@ class boss_thaladred_the_darkener : public CreatureScript { public: - boss_thaladred_the_darkener() - : CreatureScript("boss_thaladred_the_darkener") - { - } + boss_thaladred_the_darkener() : CreatureScript("boss_thaladred_the_darkener") { } + struct boss_thaladred_the_darkenerAI : public advisorbase_ai { boss_thaladred_the_darkenerAI(Creature* creature) : advisorbase_ai(creature) @@ -1130,10 +1115,8 @@ class boss_lord_sanguinar : public CreatureScript { public: - boss_lord_sanguinar() - : CreatureScript("boss_lord_sanguinar") - { - } + boss_lord_sanguinar() : CreatureScript("boss_lord_sanguinar") { } + struct boss_lord_sanguinarAI : public advisorbase_ai { boss_lord_sanguinarAI(Creature* creature) : advisorbase_ai(creature) @@ -1205,10 +1188,8 @@ class boss_grand_astromancer_capernian : public CreatureScript { public: - boss_grand_astromancer_capernian() - : CreatureScript("boss_grand_astromancer_capernian") - { - } + boss_grand_astromancer_capernian() : CreatureScript("boss_grand_astromancer_capernian") { } + struct boss_grand_astromancer_capernianAI : public advisorbase_ai { boss_grand_astromancer_capernianAI(Creature* creature) : advisorbase_ai(creature) @@ -1358,10 +1339,8 @@ class boss_master_engineer_telonicus : public CreatureScript { public: - boss_master_engineer_telonicus() - : CreatureScript("boss_master_engineer_telonicus") - { - } + boss_master_engineer_telonicus() : CreatureScript("boss_master_engineer_telonicus") { } + struct boss_master_engineer_telonicusAI : public advisorbase_ai { boss_master_engineer_telonicusAI(Creature* creature) : advisorbase_ai(creature) @@ -1449,10 +1428,8 @@ class npc_kael_flamestrike : public CreatureScript { public: - npc_kael_flamestrike() - : CreatureScript("npc_kael_flamestrike") - { - } + npc_kael_flamestrike() : CreatureScript("npc_kael_flamestrike") { } + struct npc_kael_flamestrikeAI : public ScriptedAI { npc_kael_flamestrikeAI(Creature* creature) : ScriptedAI(creature) @@ -1482,7 +1459,6 @@ class npc_kael_flamestrike : public CreatureScript void MoveInLineOfSight(Unit* /*who*/) override { } - void EnterCombat(Unit* /*who*/) override { } void UpdateAI(uint32 diff) override @@ -1523,10 +1499,8 @@ class npc_phoenix_tk : public CreatureScript { public: - npc_phoenix_tk() - : CreatureScript("npc_phoenix_tk") - { - } + npc_phoenix_tk() : CreatureScript("npc_phoenix_tk") { } + struct npc_phoenix_tkAI : public ScriptedAI { npc_phoenix_tkAI(Creature* creature) : ScriptedAI(creature) @@ -1585,10 +1559,8 @@ class npc_phoenix_egg_tk : public CreatureScript { public: - npc_phoenix_egg_tk() - : CreatureScript("npc_phoenix_egg_tk") - { - } + npc_phoenix_egg_tk() : CreatureScript("npc_phoenix_egg_tk") { } + struct npc_phoenix_egg_tkAI : public ScriptedAI { npc_phoenix_egg_tkAI(Creature* creature) : ScriptedAI(creature) @@ -1611,7 +1583,6 @@ class npc_phoenix_egg_tk : public CreatureScript //ignore any void MoveInLineOfSight(Unit* /*who*/) override { } - void AttackStart(Unit* who) override { if (me->Attack(who, false)) diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp index 9186b491fa4..1aa7d5298e5 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp @@ -47,17 +47,13 @@ class boss_void_reaver : public CreatureScript { public: - boss_void_reaver() - : CreatureScript("boss_void_reaver") - { - } + boss_void_reaver() : CreatureScript("boss_void_reaver") { } - struct boss_void_reaverAI : public ScriptedAI + struct boss_void_reaverAI : public BossAI { - boss_void_reaverAI(Creature* creature) : ScriptedAI(creature) + boss_void_reaverAI(Creature* creature) : BossAI(creature, DATA_VOID_REAVER) { Initialize(); - instance = creature->GetInstanceScript(); } void Initialize() @@ -70,8 +66,6 @@ class boss_void_reaver : public CreatureScript Enraged = false; } - InstanceScript* instance; - uint32 Pounding_Timer; uint32 ArcaneOrb_Timer; uint32 KnockAway_Timer; @@ -82,9 +76,7 @@ class boss_void_reaver : public CreatureScript void Reset() override { Initialize(); - - if (me->IsAlive()) - instance->SetData(DATA_VOIDREAVEREVENT, NOT_STARTED); + _Reset(); } void KilledUnit(Unit* /*victim*/) override @@ -96,15 +88,13 @@ class boss_void_reaver : public CreatureScript { Talk(SAY_DEATH); DoZoneInCombat(); - - instance->SetData(DATA_VOIDREAVEREVENT, DONE); + _JustDied(); } void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); - - instance->SetData(DATA_VOIDREAVEREVENT, IN_PROGRESS); + _EnterCombat(); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp b/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp index 38c9cdd487c..c421b9974ce 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp @@ -27,8 +27,6 @@ EndScriptData */ #include "InstanceScript.h" #include "the_eye.h" -#define MAX_ENCOUNTER 5 - /* The Eye encounters: 0 - Kael'thas event 1 - Al' ar event @@ -39,20 +37,16 @@ EndScriptData */ class instance_the_eye : public InstanceMapScript { public: - instance_the_eye() - : InstanceMapScript("instance_the_eye", 550) - { - } + instance_the_eye() : InstanceMapScript("instance_the_eye", 550) { } struct instance_the_eye_InstanceMapScript : public InstanceScript { instance_the_eye_InstanceMapScript(Map* map) : InstanceScript(map) { SetHeaders(DataHeader); - memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); + SetBossNumber(EncounterCount); KaelthasEventPhase = 0; - AlarEventPhase = 0; } ObjectGuid ThaladredTheDarkener; @@ -63,44 +57,34 @@ class instance_the_eye : public InstanceMapScript ObjectGuid Astromancer; ObjectGuid Alar; uint8 KaelthasEventPhase; - uint8 AlarEventPhase; - - uint32 m_auiEncounter[MAX_ENCOUNTER]; - - bool IsEncounterInProgress() const override - { - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - if (m_auiEncounter[i] == IN_PROGRESS) - return true; - - return false; - } void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { - case 20064: - ThaladredTheDarkener = creature->GetGUID(); - break; - case 20063: - MasterEngineerTelonicus = creature->GetGUID(); - break; - case 20062: - GrandAstromancerCapernian = creature->GetGUID(); - break; - case 20060: - LordSanguinar = creature->GetGUID(); - break; - case 19622: - Kaelthas = creature->GetGUID(); - break; - case 18805: - Astromancer = creature->GetGUID(); - break; - case 19514: - Alar = creature->GetGUID(); - break; + case NPC_SANGUINAR: + LordSanguinar = creature->GetGUID(); + break; + case NPC_CAPERNIAN: + GrandAstromancerCapernian = creature->GetGUID(); + break; + case NPC_TELONICUS: + MasterEngineerTelonicus = creature->GetGUID(); + break; + case NPC_THALADRED: + ThaladredTheDarkener = creature->GetGUID(); + break; + case NPC_KAELTHAS: + Kaelthas = creature->GetGUID(); + break; + case NPC_HIGH_ASTROMANCER_SOLARIAN: + Astromancer = creature->GetGUID(); + break; + case NPC_ALAR: + Alar = creature->GetGUID(); + break; + default: + break; } } @@ -113,7 +97,7 @@ class instance_the_eye : public InstanceMapScript case DATA_GRANDASTROMANCERCAPERNIAN: return GrandAstromancerCapernian; case DATA_MASTERENGINEERTELONICUS: return MasterEngineerTelonicus; case DATA_KAELTHAS: return Kaelthas; - case DATA_ASTROMANCER: return Astromancer; + case DATA_HIGH_ASTROMANCER_SOLARIAN: return Astromancer; case DATA_ALAR: return Alar; } return ObjectGuid::Empty; @@ -123,64 +107,23 @@ class instance_the_eye : public InstanceMapScript { switch (type) { - case DATA_ALAREVENT: - AlarEventPhase = data; - m_auiEncounter[0] = data; - break; - case DATA_HIGHASTROMANCERSOLARIANEVENT: - m_auiEncounter[1] = data; - break; - case DATA_VOIDREAVEREVENT: - m_auiEncounter[2] = data; - break; - case DATA_KAELTHASEVENT: - KaelthasEventPhase = data; - m_auiEncounter[3] = data; - break; + case DATA_KAELTHASEVENT: + KaelthasEventPhase = data; + break; + default: + break; } - if (data == DONE) - SaveToDB(); } uint32 GetData(uint32 type) const override { switch (type) { - case DATA_ALAREVENT: return AlarEventPhase; - case DATA_HIGHASTROMANCERSOLARIANEVENT: return m_auiEncounter[1]; - case DATA_VOIDREAVEREVENT: return m_auiEncounter[2]; - case DATA_KAELTHASEVENT: return KaelthasEventPhase; + case DATA_KAELTHASEVENT: + return KaelthasEventPhase; } return 0; } - - std::string GetSaveData() override - { - OUT_SAVE_INST_DATA; - - std::ostringstream stream; - stream << m_auiEncounter[0] << ' ' << m_auiEncounter[1] << ' ' << m_auiEncounter[2] << ' ' << m_auiEncounter[3]; - - OUT_SAVE_INST_DATA_COMPLETE; - return stream.str(); - } - - void Load(const char* in) override - { - if (!in) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - OUT_LOAD_INST_DATA(in); - - std::istringstream stream(in); - stream >> m_auiEncounter[0] >> m_auiEncounter[1] >> m_auiEncounter[2] >> m_auiEncounter[3]; - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - if (m_auiEncounter[i] == IN_PROGRESS) // Do not load an encounter as "In Progress" - reset it instead. - m_auiEncounter[i] = NOT_STARTED; - OUT_LOAD_INST_DATA_COMPLETE; - } }; InstanceScript* GetInstanceScript(InstanceMap* map) const override diff --git a/src/server/scripts/Outland/TempestKeep/Eye/the_eye.h b/src/server/scripts/Outland/TempestKeep/Eye/the_eye.h index 718f37861d9..c46fe408274 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/the_eye.h +++ b/src/server/scripts/Outland/TempestKeep/Eye/the_eye.h @@ -21,19 +21,33 @@ #define DataHeader "TE" +uint32 const EncounterCount = 4; + enum DataTypes { - DATA_ALAREVENT = 1, - DATA_ASTROMANCER = 2, - DATA_GRANDASTROMANCERCAPERNIAN = 3, - DATA_HIGHASTROMANCERSOLARIANEVENT = 4, - DATA_KAELTHAS = 5, + // Encounter States/Boss GUIDs + DATA_KAELTHAS = 0, + DATA_ALAR = 1, + DATA_HIGH_ASTROMANCER_SOLARIAN = 2, + DATA_VOID_REAVER = 3, + + DATA_ASTROMANCER = 4, + DATA_GRANDASTROMANCERCAPERNIAN = 5, DATA_KAELTHASEVENT = 6, DATA_LORDSANGUINAR = 7, DATA_MASTERENGINEERTELONICUS = 8, - DATA_THALADREDTHEDARKENER = 10, - DATA_VOIDREAVEREVENT = 11, - DATA_ALAR = 12 + DATA_THALADREDTHEDARKENER = 9 +}; + +enum CreatureIds +{ + NPC_SANGUINAR = 20060, + NPC_CAPERNIAN = 20062, + NPC_TELONICUS = 20063, + NPC_THALADRED = 20064, + NPC_KAELTHAS = 19622, + NPC_HIGH_ASTROMANCER_SOLARIAN = 18805, + NPC_ALAR = 19514 }; #endif diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp index 4955a2201e5..b2d63315029 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp @@ -42,7 +42,7 @@ class instance_mechanar : public InstanceMapScript LoadDoorData(doorData); } - void OnGameObjectCreate(GameObject* gameObject) + void OnGameObjectCreate(GameObject* gameObject) override { switch (gameObject->GetEntry()) { diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp index 50b77aac410..03e2154792b 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp @@ -283,7 +283,10 @@ class boss_harbinger_skyriss_illusion : public CreatureScript { boss_harbinger_skyriss_illusionAI(Creature* creature) : ScriptedAI(creature) { } - void Reset() override { } + void Reset() override + { + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + } void EnterCombat(Unit* /*who*/) override { } }; diff --git a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp index 72355b05ec1..aaf006f6c5f 100644 --- a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp +++ b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp @@ -24,12 +24,9 @@ SDCategory: Blade's Edge Mountains EndScriptData */ /* ContentData -npc_bloodmaul_brutebane -npc_bloodmaul_brute npc_nether_drake npc_daranelle go_legion_obelisk -go_thunderspike EndContentData */ #include "ScriptMgr.h" @@ -45,171 +42,6 @@ EndContentData */ #include "SpellAuraEffects.h" /*###### -## npc_bloodmaul_brutebane -######*/ - -enum Bloodmaul -{ - NPC_OGRE_BRUTE = 19995, - NPC_QUEST_CREDIT = 21241, - GO_KEG = 184315, - QUEST_GETTING_THE_BLADESPIRE_TANKED = 10512, - QUEST_BLADESPIRE_KEGGER = 10545 -}; - -class npc_bloodmaul_brutebane : public CreatureScript -{ -public: - npc_bloodmaul_brutebane() : CreatureScript("npc_bloodmaul_brutebane") { } - - struct npc_bloodmaul_brutebaneAI : public ScriptedAI - { - npc_bloodmaul_brutebaneAI(Creature* creature) : ScriptedAI(creature) - { - if (Creature* Ogre = me->FindNearestCreature(NPC_OGRE_BRUTE, 50, true)) - { - Ogre->SetReactState(REACT_DEFENSIVE); - Ogre->GetMotionMaster()->MovePoint(1, me->GetPositionX()-1, me->GetPositionY()+1, me->GetPositionZ()); - } - } - - void UpdateAI(uint32 /*diff*/) override { } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_bloodmaul_brutebaneAI(creature); - } -}; - -/*###### -## npc_bloodmaul_brute -######*/ - -enum BloodmaulBrute -{ - EVENT_CLEAVE = 1, - EVENT_DEBILITATING_STRIKE = 2, - SAY_AGGRO = 0, - SAY_DEATH = 1, - SAY_ENRAGE = 2, - SPELL_CLEAVE = 15496, - SPELL_DEBILITATING_STRIKE = 37577, - SPELL_ENRAGE = 8599, - QUEST_INTO_THE_SOULGRINDER = 11000 -}; - -class npc_bloodmaul_brute : public CreatureScript -{ -public: - npc_bloodmaul_brute() : CreatureScript("npc_bloodmaul_brute") { } - - struct npc_bloodmaul_bruteAI : public ScriptedAI - { - npc_bloodmaul_bruteAI(Creature* creature) : ScriptedAI(creature) - { - hp30 = false; - } - - void Reset() override - { - PlayerGUID.Clear(); - hp30 = false; - } - - void EnterCombat(Unit* /*who*/) override - { - if (urand (0, 100) < 35) - Talk(SAY_AGGRO); - - events.ScheduleEvent(EVENT_CLEAVE, urand(9000,12000)); - events.ScheduleEvent(EVENT_DEBILITATING_STRIKE, 15000); - } - - void JustDied(Unit* killer) override - { - if (killer->GetTypeId() == TYPEID_PLAYER) - if (killer->ToPlayer()->GetQuestRewardStatus(QUEST_INTO_THE_SOULGRINDER)) - Talk(SAY_DEATH); - } - - void MoveInLineOfSight(Unit* who) override - { - if (!who || (!who->IsAlive())) - return; - - if (me->IsWithinDistInMap(who, 50.0f)) - { - if (who->GetTypeId() == TYPEID_PLAYER) - if (who->ToPlayer()->GetQuestStatus(QUEST_GETTING_THE_BLADESPIRE_TANKED) == QUEST_STATUS_INCOMPLETE - || who->ToPlayer()->GetQuestStatus(QUEST_BLADESPIRE_KEGGER) == QUEST_STATUS_INCOMPLETE) - PlayerGUID = who->GetGUID(); - } - } - - void MovementInform(uint32 /*type*/, uint32 id) override - { - if (id == 1) - { - if (GameObject* Keg = me->FindNearestGameObject(GO_KEG, 20)) - Keg->Delete(); - - me->HandleEmoteCommand(7); - me->SetReactState(REACT_AGGRESSIVE); - me->GetMotionMaster()->MoveTargetedHome(); - - Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID); - Creature* Credit = me->FindNearestCreature(NPC_QUEST_CREDIT, 50, true); - if (player && Credit) - player->KilledMonster(Credit->GetCreatureTemplate(), Credit->GetGUID()); - } - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - - while (uint32 eventId = events.ExecuteEvent()) - { - switch (eventId) - { - case EVENT_CLEAVE: - DoCast(me, SPELL_CLEAVE); - events.ScheduleEvent(EVENT_CLEAVE, urand(9000,12000)); - break; - case EVENT_DEBILITATING_STRIKE: - DoCastVictim(SPELL_DEBILITATING_STRIKE); - events.ScheduleEvent(EVENT_DEBILITATING_STRIKE, urand(18000,22000)); - break; - } - } - - if (!hp30 && HealthBelowPct(30)) - { - hp30 = true; - Talk(SAY_ENRAGE); - DoCast(me, SPELL_ENRAGE); - } - - DoMeleeAttackIfReady(); - } - - private: - EventMap events; - ObjectGuid PlayerGUID; - bool hp30; - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_bloodmaul_bruteAI(creature); - } -}; - -/*###### ## npc_nether_drake ######*/ @@ -507,31 +339,6 @@ public: } }; -/*###### -## go_thunderspike -######*/ - -enum TheThunderspike -{ - NPC_GOR_GRIMGUT = 21319, - QUEST_THUNDERSPIKE = 10526, -}; - -class go_thunderspike : public GameObjectScript -{ - public: - go_thunderspike() : GameObjectScript("go_thunderspike") { } - - bool OnGossipHello(Player* player, GameObject* go) override - { - if (player->GetQuestStatus(QUEST_THUNDERSPIKE) == QUEST_STATUS_INCOMPLETE && !go->FindNearestCreature(NPC_GOR_GRIMGUT, 25.0f, true)) - if (Creature* gorGrimgut = go->SummonCreature(NPC_GOR_GRIMGUT, -2413.4f, 6914.48f, 25.01f, 3.67f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 300000)) - gorGrimgut->AI()->AttackStart(player); - - return true; - } -}; - enum SimonGame { NPC_SIMON_BUNNY = 22923, @@ -1219,12 +1026,9 @@ class spell_oscillating_field : public SpellScriptLoader void AddSC_blades_edge_mountains() { - new npc_bloodmaul_brutebane(); - new npc_bloodmaul_brute(); new npc_nether_drake(); new npc_daranelle(); new go_legion_obelisk(); - new go_thunderspike(); new npc_simon_bunny(); new go_simon_cluster(); new go_apexis_relic(); diff --git a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp index 97777cd5f6e..d1a31906d58 100644 --- a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp +++ b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp @@ -289,7 +289,7 @@ public: summoned->AI()->AttackStart(me); } - void sQuestAccept(Player* player, Quest const* quest) + void sQuestAccept(Player* player, Quest const* quest) override { if (quest->GetQuestId() == QUEST_ROAD_TO_FALCON_WATCH) { @@ -420,10 +420,482 @@ public: } }; +enum ExorcismSpells +{ + SPELL_JULES_GOES_PRONE = 39283, + SPELL_JULES_THREATENS_AURA = 39284, + SPELL_JULES_GOES_UPRIGHT = 39294, + SPELL_JULES_VOMITS_AURA = 39295, + + SPELL_BARADAS_COMMAND = 39277, + SPELL_BARADA_FALTERS = 39278, +}; + +enum ExorcismTexts +{ + SAY_BARADA_1 = 0, + SAY_BARADA_2 = 1, + SAY_BARADA_3 = 2, + SAY_BARADA_4 = 3, + SAY_BARADA_5 = 4, + SAY_BARADA_6 = 5, + SAY_BARADA_7 = 6, + SAY_BARADA_8 = 7, + + SAY_JULES_1 = 0, + SAY_JULES_2 = 1, + SAY_JULES_3 = 2, + SAY_JULES_4 = 3, + SAY_JULES_5 = 4, +}; + +Position const exorcismPos[11] = +{ + { -707.123f, 2751.686f, 101.592f, 4.577416f }, //Barada Waypoint-1 0 + { -710.731f, 2749.075f, 101.592f, 1.513286f }, //Barada Cast position 1 + { -710.332f, 2754.394f, 102.948f, 3.207566f }, //Jules 2 + { -714.261f, 2747.754f, 103.391f, 0.0f }, //Jules Waypoint-1 3 + { -713.113f, 2750.194f, 103.391f, 0.0f }, //Jules Waypoint-2 4 + { -710.385f, 2750.896f, 103.391f, 0.0f }, //Jules Waypoint-3 5 + { -708.309f, 2750.062f, 103.391f, 0.0f }, //Jules Waypoint-4 6 + { -707.401f, 2747.696f, 103.391f, 0.0f }, //Jules Waypoint-5 7 + { -708.591f, 2745.266f, 103.391f, 0.0f }, //Jules Waypoint-6 8 + { -710.597f, 2744.035f, 103.391f, 0.0f }, //Jules Waypoint-7 9 + { -713.089f, 2745.302f, 103.391f, 0.0f }, //Jules Waypoint-8 10 +}; + +enum ExorcismMisc +{ + NPC_DARKNESS_RELEASED = 22507, + NPC_FOUL_PURGE = 22506, + NPC_COLONEL_JULES = 22432, + + BARADAS_GOSSIP_MESSAGE = 10683, + + QUEST_THE_EXORCISM_OF_COLONEL_JULES = 10935, + + ACTION_START_EVENT = 1, + ACTION_JULES_HOVER = 2, + ACTION_JULES_FLIGHT = 3, + ACTION_JULES_MOVE_HOME = 4, +}; + +enum ExorcismEvents +{ + EVENT_BARADAS_TALK = 1, + + //Colonel Jules + EVENT_SUMMON_SKULL = 1, +}; + +/*###### +## npc_barada +######*/ + +class npc_barada : public CreatureScript +{ +public: + npc_barada() : CreatureScript("npc_barada") { } + + struct npc_baradaAI : public ScriptedAI + { + npc_baradaAI(Creature* creature) : ScriptedAI(creature) + { + Initialize(); + } + + void Initialize() + { + step = 0; + } + + void Reset() override + { + events.Reset(); + Initialize(); + + playerGUID.Clear(); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED); + } + + void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override + { + player->PlayerTalkClass->ClearMenus(); + switch (gossipListId) + { + case 1: + player->PlayerTalkClass->SendCloseGossip(); + me->AI()->Talk(SAY_BARADA_1); + me->AI()->DoAction(ACTION_START_EVENT); + break; + default: + break; + } + } + + void DoAction(int32 action) override + { + if (action == ACTION_START_EVENT) + { + if (Creature* jules = me->FindNearestCreature(NPC_COLONEL_JULES, 20.0f, true)) + { + julesGUID = jules->GetGUID(); + jules->AI()->Talk(SAY_JULES_1); + } + + me->GetMotionMaster()->MovePoint(0, exorcismPos[1]); + Talk(SAY_BARADA_2); + + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED); + } + } + + void MovementInform(uint32 type, uint32 id) override + { + if (type != POINT_MOTION_TYPE) + return; + + if (id == 0) + me->GetMotionMaster()->MovePoint(1, exorcismPos[1]); + + if (id == 1) + events.ScheduleEvent(EVENT_BARADAS_TALK, 2000); + } + + void JustDied(Unit* /*killer*/) override + { + if (Creature* jules = ObjectAccessor::GetCreature(*me, julesGUID)) + { + jules->AI()->DoAction(ACTION_JULES_MOVE_HOME); + jules->RemoveAllAuras(); + } + } + + void UpdateAI(uint32 diff) override + { + events.Update(diff); + + while (uint32 eventId = events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_BARADAS_TALK: + switch (step) + { + case 0: + me->SetFacingTo(1.513286f); + + me->HandleEmoteCommand(EMOTE_ONESHOT_KNEEL); + events.ScheduleEvent(EVENT_BARADAS_TALK, 3000); + step++; + break; + case 1: + DoCast(SPELL_BARADAS_COMMAND); + events.ScheduleEvent(EVENT_BARADAS_TALK, 5000); + step++; + break; + case 2: + Talk(SAY_BARADA_3); + events.ScheduleEvent(EVENT_BARADAS_TALK, 7000); + step++; + break; + case 3: + if (Creature* jules = ObjectAccessor::GetCreature(*me, julesGUID)) + jules->AI()->Talk(SAY_JULES_2); + + events.ScheduleEvent(EVENT_BARADAS_TALK, 18000); + step++; + break; + case 4: + DoCast(SPELL_BARADA_FALTERS); + me->HandleEmoteCommand(EMOTE_STAND_STATE_NONE); + + if (Creature* jules = ObjectAccessor::GetCreature(*me, julesGUID)) + jules->AI()->DoAction(ACTION_JULES_HOVER); + + events.ScheduleEvent(EVENT_BARADAS_TALK, 11000); + step++; + break; + case 5: + if (Creature* jules = ObjectAccessor::GetCreature(*me, julesGUID)) + jules->AI()->Talk(SAY_JULES_3); + + events.ScheduleEvent(EVENT_BARADAS_TALK, 13000); + step++; + break; + case 6: + Talk(SAY_BARADA_4); + events.ScheduleEvent(EVENT_BARADAS_TALK, 5000); + step++; + break; + case 7: + if (Creature* jules = ObjectAccessor::GetCreature(*me, julesGUID)) + jules->AI()->Talk(SAY_JULES_3); + + events.ScheduleEvent(EVENT_BARADAS_TALK, 13000); + step++; + break; + case 8: + Talk(SAY_BARADA_4); + events.ScheduleEvent(EVENT_BARADAS_TALK, 12000); + step++; + break; + case 9: + if (Creature* jules = ObjectAccessor::GetCreature(*me, julesGUID)) + jules->AI()->Talk(SAY_JULES_4); + + events.ScheduleEvent(EVENT_BARADAS_TALK, 12000); + step++; + break; + case 10: + Talk(SAY_BARADA_4); + events.ScheduleEvent(EVENT_BARADAS_TALK, 5000); + step++; + break; + case 11: + if (Creature* jules = ObjectAccessor::GetCreature(*me, julesGUID)) + jules->AI()->DoAction(ACTION_JULES_FLIGHT); + + events.ScheduleEvent(EVENT_BARADAS_TALK, 10000); + step++; + break; + case 12: + if (Creature* jules = ObjectAccessor::GetCreature(*me, julesGUID)) + jules->AI()->Talk(SAY_JULES_4); + + events.ScheduleEvent(EVENT_BARADAS_TALK, 8000); + step++; + break; + case 13: + Talk(SAY_BARADA_5); + events.ScheduleEvent(EVENT_BARADAS_TALK, 10000); + step++; + break; + case 14: + if (Creature* jules = ObjectAccessor::GetCreature(*me, julesGUID)) + jules->AI()->Talk(SAY_JULES_4); + + events.ScheduleEvent(EVENT_BARADAS_TALK, 10000); + step++; + break; + case 15: + Talk(SAY_BARADA_6); + events.ScheduleEvent(EVENT_BARADAS_TALK, 10000); + step++; + break; + case 16: + if (Creature* jules = ObjectAccessor::GetCreature(*me, julesGUID)) + jules->AI()->Talk(SAY_JULES_5); + + events.ScheduleEvent(EVENT_BARADAS_TALK, 10000); + step++; + break; + case 17: + Talk(SAY_BARADA_7); + events.ScheduleEvent(EVENT_BARADAS_TALK, 10000); + step++; + break; + case 18: + if (Creature* jules = ObjectAccessor::GetCreature(*me, julesGUID)) + jules->AI()->Talk(SAY_JULES_3); + + events.ScheduleEvent(EVENT_BARADAS_TALK, 10000); + step++; + break; + case 19: + Talk(SAY_BARADA_7); + events.ScheduleEvent(EVENT_BARADAS_TALK, 10000); + step++; + break; + case 20: + if (Creature* jules = ObjectAccessor::GetCreature(*me, julesGUID)) + { + jules->AI()->DoAction(ACTION_JULES_MOVE_HOME); + jules->RemoveAura(SPELL_JULES_VOMITS_AURA); + } + + events.ScheduleEvent(EVENT_BARADAS_TALK, 10000); + step++; + break; + case 21: + //End + if (Player* player = ObjectAccessor::FindPlayer(playerGUID)) + player->KilledMonsterCredit(NPC_COLONEL_JULES, ObjectGuid::Empty); + + if (Creature* jules = ObjectAccessor::GetCreature(*me, julesGUID)) + jules->RemoveAllAuras(); + + me->RemoveAura(SPELL_BARADAS_COMMAND); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED); + + Talk(SAY_BARADA_8); + me->GetMotionMaster()->MoveTargetedHome(); + EnterEvadeMode(); + break; + } + break; + } + } + } + + private: + EventMap events; + uint8 step; + ObjectGuid julesGUID; + ObjectGuid playerGUID; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return new npc_baradaAI(creature); + } +}; + +/*###### +## npc_colonel_jules +######*/ + +class npc_colonel_jules : public CreatureScript +{ +public: + npc_colonel_jules() : CreatureScript("npc_colonel_jules") { } + + struct npc_colonel_julesAI : public ScriptedAI + { + npc_colonel_julesAI(Creature* creature) : ScriptedAI(creature), summons(me) + { + Initialize(); + } + + void Initialize() + { + circleRounds = 0; + point = 3; + wpreached = false; + } + + void Reset() override + { + events.Reset(); + + summons.DespawnAll(); + Initialize(); + } + + void DoAction(int32 action) override + { + switch (action) + { + case ACTION_JULES_HOVER: + me->AddAura(SPELL_JULES_GOES_PRONE, me); + me->AddAura(SPELL_JULES_THREATENS_AURA, me); + + me->SetCanFly(true); + me->SetSpeed(MOVE_RUN, 0.2f); + + me->SetFacingTo(3.207566f); + me->GetMotionMaster()->MoveJump(exorcismPos[2], 2.0f, 2.0f); + + events.ScheduleEvent(EVENT_SUMMON_SKULL, 10000); + break; + case ACTION_JULES_FLIGHT: + circleRounds++; + + me->RemoveAura(SPELL_JULES_GOES_PRONE); + + me->AddAura(SPELL_JULES_GOES_UPRIGHT, me); + me->AddAura(SPELL_JULES_VOMITS_AURA, me); + + wpreached = true; + me->GetMotionMaster()->MovePoint(point, exorcismPos[point]); + break; + case ACTION_JULES_MOVE_HOME: + wpreached = false; + me->SetSpeed(MOVE_RUN, 1.0f); + me->GetMotionMaster()->MovePoint(11, exorcismPos[2]); + + events.CancelEvent(EVENT_SUMMON_SKULL); + break; + } + } + + void JustSummoned(Creature* summon) override + { + summons.Summon(summon); + summon->GetMotionMaster()->MoveRandom(10.0f); + } + + void MovementInform(uint32 type, uint32 id) override + { + if (type != POINT_MOTION_TYPE) + return; + + if (id < 10) + wpreached = true; + + if (id == 8) + { + for (uint8 i = 0; i < circleRounds; i++) + DoSummon(NPC_FOUL_PURGE, exorcismPos[8]); + } + + if (id == 10) + { + wpreached = true; + point = 3; + circleRounds++; + } + } + + void UpdateAI(uint32 diff) override + { + if (wpreached) + { + me->GetMotionMaster()->MovePoint(point, exorcismPos[point]); + point++; + wpreached = false; + } + + events.Update(diff); + + while (uint32 eventId = events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_SUMMON_SKULL: + uint8 summonCount = urand(1,3); + + for (uint8 i = 0; i < summonCount; i++) + me->SummonCreature(NPC_DARKNESS_RELEASED, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 1.5f, 0, TEMPSUMMON_MANUAL_DESPAWN); + + events.ScheduleEvent(EVENT_SUMMON_SKULL, urand(10000, 15000)); + break; + } + } + } + + private: + EventMap events; + SummonList summons; + + uint8 circleRounds; + uint8 point; + + bool wpreached; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return new npc_colonel_julesAI(creature); + } +}; + void AddSC_hellfire_peninsula() { new npc_aeranas(); new npc_ancestral_wolf(); new npc_wounded_blood_elf(); new npc_fel_guard_hound(); + new npc_barada(); + new npc_colonel_jules(); } diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp index c661e19a98d..318214978ae 100644 --- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp +++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp @@ -31,7 +31,6 @@ npc_enslaved_netherwing_drake npc_drake_dealer_hurlunk npcs_flanis_swiftwing_and_kagrosh npc_karynaku -npc_overlord_morghor npc_earthmender_wilda npc_torloth_the_magnificent npc_illidari_spawn @@ -677,331 +676,6 @@ class npc_karynaku : public CreatureScript }; /*#### -# npc_overlord_morghor -# this whole script is wrong and needs a rewrite.even the illidan npc used is the wrong one.npc id 23467 may be the correct one -####*/ -enum OverlordData -{ - QUEST_LORD_ILLIDAN_STORMRAGE = 11108, - - C_ILLIDAN = 22083, - C_YARZILL = 23141, - - SPELL_ONE = 39990, // Red Lightning Bolt - SPELL_TWO = 41528, // Mark of Stormrage - SPELL_THREE = 40216, // Dragonaw Faction - SPELL_FOUR = 42016, // Dragonaw Trasform - - OVERLORD_SAY_1 = 0, - OVERLORD_SAY_2 = 1, - //OVERLORD_SAY_3 = 2, - OVERLORD_SAY_4 = 3, - OVERLORD_SAY_5 = 4, - OVERLORD_SAY_6 = 5, - - OVERLORD_YELL_1 = 6, - OVERLORD_YELL_2 = 7, - - LORD_ILLIDAN_SAY_1 = 0, - LORD_ILLIDAN_SAY_2 = 1, - LORD_ILLIDAN_SAY_3 = 2, - LORD_ILLIDAN_SAY_4 = 3, - LORD_ILLIDAN_SAY_5 = 4, - LORD_ILLIDAN_SAY_6 = 5, - LORD_ILLIDAN_SAY_7 = 6, - - YARZILL_THE_MERC_SAY = 0 -}; - -class npc_overlord_morghor : public CreatureScript -{ -public: - npc_overlord_morghor() : CreatureScript("npc_overlord_morghor") { } - - bool OnQuestAccept(Player* player, Creature* creature, const Quest *_Quest) override - { - if (_Quest->GetQuestId() == QUEST_LORD_ILLIDAN_STORMRAGE) - { - ENSURE_AI(npc_overlord_morghor::npc_overlord_morghorAI, creature->AI())->PlayerGUID = player->GetGUID(); - ENSURE_AI(npc_overlord_morghor::npc_overlord_morghorAI, creature->AI())->StartEvent(); - return true; - } - return false; - } - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_overlord_morghorAI(creature); - } - - struct npc_overlord_morghorAI : public ScriptedAI - { - npc_overlord_morghorAI(Creature* creature) : ScriptedAI(creature) - { - Initialize(); - } - - void Initialize() - { - PlayerGUID.Clear(); - IllidanGUID.Clear(); - - ConversationTimer = 0; - Step = 0; - - Event = false; - } - - ObjectGuid PlayerGUID; - ObjectGuid IllidanGUID; - - uint32 ConversationTimer; - uint32 Step; - - bool Event; - - void Reset() override - { - Initialize(); - me->SetUInt32Value(UNIT_NPC_FLAGS, 2); - } - - void StartEvent() - { - me->SetUInt32Value(UNIT_NPC_FLAGS, 0); - me->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); - Unit* Illidan = me->SummonCreature(C_ILLIDAN, -5107.83f, 602.584f, 85.2393f, 4.92598f, TEMPSUMMON_CORPSE_DESPAWN, 0); - if (Illidan) - { - IllidanGUID = Illidan->GetGUID(); - Illidan->SetVisible(false); - } - if (PlayerGUID) - { - Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID); - if (player) - Talk(OVERLORD_SAY_1, player); - } - ConversationTimer = 4200; - Step = 0; - Event = true; - } - - uint32 NextStep(uint32 Step) - { - Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID); - Creature* Illi = ObjectAccessor::GetCreature(*me, IllidanGUID); - - if (!player) - { - EnterEvadeMode(); - return 0; - } - - switch (Step) - { - case 0: - return 0; - break; - case 1: - me->GetMotionMaster()->MovePoint(0, -5104.41f, 595.297f, 85.6838f); - return 9000; - break; - case 2: - Talk(OVERLORD_YELL_1, player); - return 4500; - break; - case 3: - me->SetInFront(player); - return 3200; - break; - case 4: - Talk(OVERLORD_SAY_2, player); - return 2000; - break; - case 5: - if (Illi) - { - Illi->SetVisible(true); - Illi->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - Illi->SetDisplayId(21526); - } - return 350; - break; - case 6: - if (Illi) - { - Illi->CastSpell(Illi, SPELL_ONE, true); - Illi->SetTarget(me->GetGUID()); - me->SetTarget(IllidanGUID); - } - return 2000; - break; - case 7: - Talk(OVERLORD_YELL_2); - return 4500; - break; - case 8: - me->SetUInt32Value(UNIT_FIELD_BYTES_1, 8); - return 2500; - break; - case 9: - // missing text "Lord Illidan, this is the Dragonmaw that I, and others, have told you about. He will lead us to victory!" - return 5000; - break; - case 10: - if (Illi) - Illi->AI()->Talk(LORD_ILLIDAN_SAY_1); - return 5000; - break; - case 11: - Talk(OVERLORD_SAY_4, player); - return 6000; - break; - case 12: - if (Illi) - Illi->AI()->Talk(LORD_ILLIDAN_SAY_2); - return 5500; - break; - case 13: - if (Illi) - Illi->AI()->Talk(LORD_ILLIDAN_SAY_3); - return 4000; - break; - case 14: - if (Illi) - Illi->SetTarget(PlayerGUID); - return 1500; - break; - case 15: - if (Illi) - Illi->AI()->Talk(LORD_ILLIDAN_SAY_4); - return 1500; - break; - case 16: - if (Illi) - Illi->CastSpell(player, SPELL_TWO, true); - player->RemoveAurasDueToSpell(SPELL_THREE); - player->RemoveAurasDueToSpell(SPELL_FOUR); - return 5000; - break; - case 17: - if (Illi) - Illi->AI()->Talk(LORD_ILLIDAN_SAY_5); - return 5000; - break; - case 18: - if (Illi) - Illi->AI()->Talk(LORD_ILLIDAN_SAY_6); - return 5000; - break; - case 19: - if (Illi) - Illi->AI()->Talk(LORD_ILLIDAN_SAY_7); - return 5000; - break; - case 20: - if (Illi) - { - Illi->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF); - Illi->SetDisableGravity(true); - } - return 500; - break; - case 21: - Talk(OVERLORD_SAY_5); - return 500; - break; - case 22: - if (Illi) - { - Illi->SetVisible(false); - Illi->setDeathState(JUST_DIED); - } - return 1000; - break; - case 23: - me->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); - return 2000; - break; - case 24: - me->SetTarget(PlayerGUID); - return 5000; - break; - case 25: - Talk(OVERLORD_SAY_6); - return 2000; - break; - case 26: - player->GroupEventHappens(QUEST_LORD_ILLIDAN_STORMRAGE, me); - return 6000; - break; - case 27: - { - Unit* Yarzill = me->FindNearestCreature(C_YARZILL, 50.0f); - if (Yarzill) - Yarzill->SetTarget(PlayerGUID); - return 500; - } - break; - case 28: - player->RemoveAurasDueToSpell(SPELL_TWO); - player->RemoveAurasDueToSpell(41519); - player->CastSpell(player, SPELL_THREE, true); - player->CastSpell(player, SPELL_FOUR, true); - return 1000; - break; - case 29: - { - if (Creature* Yarzill = me->FindNearestCreature(C_YARZILL, 50.0f)) - Yarzill->AI()->Talk(YARZILL_THE_MERC_SAY, player); - return 5000; - } - break; - case 30: - { - if (Creature* Yarzill = me->FindNearestCreature(C_YARZILL, 50.0f)) - Yarzill->SetTarget(ObjectGuid::Empty); - return 5000; - } - break; - case 31: - { - if (Creature* Yarzill = me->FindNearestCreature(C_YARZILL, 50.0f)) - Yarzill->CastSpell(player, 41540, true); - return 1000; - } - break; - case 32: - me->GetMotionMaster()->MovePoint(0, -5085.77f, 577.231f, 86.6719f); - return 5000; - break; - case 33: - me->SetTarget(ObjectGuid::Empty); - Reset(); - return 100; - break; - default : - return 0; - break; - } - } - - void UpdateAI(uint32 diff) override - { - if (!ConversationTimer) - return; - - if (ConversationTimer <= diff) - { - if (Event && PlayerGUID) - ConversationTimer = NextStep(++Step); - } else ConversationTimer -= diff; - } - }; -}; - -/*#### # npc_earthmender_wilda ####*/ @@ -2026,7 +1700,6 @@ void AddSC_shadowmoon_valley() new npc_drake_dealer_hurlunk(); new npcs_flanis_swiftwing_and_kagrosh(); new npc_karynaku(); - new npc_overlord_morghor(); new npc_earthmender_wilda(); new npc_lord_illidan_stormrage(); new go_crystal_prison(); diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index ee70cca2e50..68c115f9faf 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -34,6 +34,7 @@ #include "Pet.h" #include "ReputationMgr.h" #include "SkillDiscovery.h" +#include "SpellHistory.h" #include "SpellScript.h" #include "SpellAuraEffects.h" #include "Vehicle.h" @@ -1293,8 +1294,8 @@ class spell_gen_divine_storm_cd_reset : public SpellScriptLoader void HandleScript(SpellEffIndex /*effIndex*/) { Player* caster = GetCaster()->ToPlayer(); - if (caster->HasSpellCooldown(SPELL_DIVINE_STORM)) - caster->RemoveSpellCooldown(SPELL_DIVINE_STORM, true); + if (caster->GetSpellHistory()->HasCooldown(SPELL_DIVINE_STORM)) + caster->GetSpellHistory()->ResetCooldown(SPELL_DIVINE_STORM, true); } void Register() override @@ -3330,7 +3331,7 @@ class spell_pvp_trinket_wotf_shared_cd : public SpellScriptLoader { // This is only needed because spells cast from spell_linked_spell are triggered by default // Spell::SendSpellCooldown() skips all spells with TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD - GetCaster()->ToPlayer()->AddSpellAndCategoryCooldowns(GetSpellInfo(), GetCastItem() ? GetCastItem()->GetEntry() : 0, GetSpell()); + GetCaster()->GetSpellHistory()->StartCooldown(GetSpellInfo(), 0, GetSpell()); } void Register() override @@ -3629,6 +3630,43 @@ class spell_gen_eject_all_passengers : public SpellScriptLoader } }; +class spell_gen_eject_passenger : public SpellScriptLoader +{ + public: + spell_gen_eject_passenger() : SpellScriptLoader("spell_gen_eject_passenger") { } + + class spell_gen_eject_passenger_SpellScript : public SpellScript + { + PrepareSpellScript(spell_gen_eject_passenger_SpellScript); + + bool Validate(SpellInfo const* spellInfo) override + { + if (spellInfo->Effects[EFFECT_0].CalcValue() < 1) + return false; + return true; + } + + void EjectPassenger(SpellEffIndex /*effIndex*/) + { + if (Vehicle* vehicle = GetHitUnit()->GetVehicleKit()) + { + if (Unit* passenger = vehicle->GetPassenger(GetEffectValue() - 1)) + passenger->ExitVehicle(); + } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_gen_eject_passenger_SpellScript::EjectPassenger, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_gen_eject_passenger_SpellScript(); + } +}; + enum GMFreeze { SPELL_GM_FREEZE = 9454 @@ -4121,6 +4159,7 @@ void AddSC_generic_spell_scripts() new spell_gen_wg_water(); new spell_gen_whisper_gulch_yogg_saron_whisper(); new spell_gen_eject_all_passengers(); + new spell_gen_eject_passenger(); new spell_gen_gm_freeze(); new spell_gen_stand(); new spell_gen_mixology_bonus(); diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp index 3ee337f81d4..75df264360f 100644 --- a/src/server/scripts/Spells/spell_hunter.cpp +++ b/src/server/scripts/Spells/spell_hunter.cpp @@ -27,6 +27,7 @@ #include "CellImpl.h" #include "GridNotifiers.h" #include "GridNotifiersImpl.h" +#include "SpellHistory.h" #include "SpellScript.h" #include "SpellAuraEffects.h" @@ -246,7 +247,7 @@ class spell_hun_chimera_shot : public SpellScriptLoader if (spellId) caster->CastCustomSpell(unitTarget, spellId, &basePoint, 0, 0, true); if (spellId == SPELL_HUNTER_CHIMERA_SHOT_SCORPID && caster->ToPlayer()) // Scorpid Sting - Add 1 minute cooldown - caster->ToPlayer()->AddSpellCooldown(spellId, 0, uint32(time(NULL) + 60)); + caster->GetSpellHistory()->AddCooldown(spellId, 0, std::chrono::minutes(1)); } } @@ -654,24 +655,20 @@ class spell_hun_readiness : public SpellScriptLoader void HandleDummy(SpellEffIndex /*effIndex*/) { - Player* caster = GetCaster()->ToPlayer(); // immediately finishes the cooldown on your other Hunter abilities except Bestial Wrath - const SpellCooldowns& cm = caster->ToPlayer()->GetSpellCooldownMap(); - for (SpellCooldowns::const_iterator itr = cm.begin(); itr != cm.end();) + GetCaster()->GetSpellHistory()->ResetCooldowns([](SpellHistory::CooldownStorageType::iterator itr) -> bool { - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(itr->first); + SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(itr->first); ///! If spellId in cooldown map isn't valid, the above will return a null pointer. - if (spellInfo && - spellInfo->SpellFamilyName == SPELLFAMILY_HUNTER && + if (spellInfo->SpellFamilyName == SPELLFAMILY_HUNTER && spellInfo->Id != SPELL_HUNTER_READINESS && spellInfo->Id != SPELL_HUNTER_BESTIAL_WRATH && spellInfo->Id != SPELL_DRAENEI_GIFT_OF_THE_NAARU && spellInfo->GetRecoveryTime() > 0) - caster->RemoveSpellCooldown((itr++)->first, true); - else - ++itr; - } + return true; + return false; + }, true); } void Register() override diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index 9843a472971..717382a0e36 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -24,6 +24,7 @@ #include "Player.h" #include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "SpellHistory.h" #include "SpellScript.h" #include "SpellAuraEffects.h" #include "SkillDiscovery.h" @@ -477,7 +478,7 @@ class spell_item_flask_of_the_north : public SpellScriptLoader break; } - caster->CastSpell(caster, possibleSpells[irand(0, (possibleSpells.size() - 1))], true, NULL); + caster->CastSpell(caster, possibleSpells[urand(0, (possibleSpells.size() - 1))], true, NULL); } void Register() override @@ -1349,7 +1350,7 @@ class spell_item_red_rider_air_rifle : public SpellScriptLoader caster->CastSpell(caster, SPELL_AIR_RIFLE_HOLD_VISUAL, true); // needed because this spell shares GCD with its triggered spells (which must not be cast with triggered flag) if (Player* player = caster->ToPlayer()) - player->GetGlobalCooldownMgr().CancelGlobalCooldown(GetSpellInfo()); + player->GetSpellHistory()->CancelGlobalCooldown(GetSpellInfo()); if (urand(0, 4)) caster->CastSpell(target, SPELL_AIR_RIFLE_SHOOT, false); else @@ -2368,7 +2369,7 @@ class spell_item_rocket_boots : public SpellScriptLoader if (Battleground* bg = caster->GetBattleground()) bg->EventPlayerDroppedFlag(caster); - caster->RemoveSpellCooldown(SPELL_ROCKET_BOOTS_PROC); + caster->GetSpellHistory()->ResetCooldown(SPELL_ROCKET_BOOTS_PROC); caster->CastSpell(caster, SPELL_ROCKET_BOOTS_PROC, true, NULL); } @@ -2548,14 +2549,14 @@ class spell_item_refocus : public SpellScriptLoader if (!caster || caster->getClass() != CLASS_HUNTER) return; - if (caster->HasSpellCooldown(SPELL_AIMED_SHOT)) - caster->RemoveSpellCooldown(SPELL_AIMED_SHOT, true); + if (caster->GetSpellHistory()->HasCooldown(SPELL_AIMED_SHOT)) + caster->GetSpellHistory()->ResetCooldown(SPELL_AIMED_SHOT, true); - if (caster->HasSpellCooldown(SPELL_MULTISHOT)) - caster->RemoveSpellCooldown(SPELL_MULTISHOT, true); + if (caster->GetSpellHistory()->HasCooldown(SPELL_MULTISHOT)) + caster->GetSpellHistory()->ResetCooldown(SPELL_MULTISHOT, true); - if (caster->HasSpellCooldown(SPELL_VOLLEY)) - caster->RemoveSpellCooldown(SPELL_VOLLEY, true); + if (caster->GetSpellHistory()->HasCooldown(SPELL_VOLLEY)) + caster->GetSpellHistory()->ResetCooldown(SPELL_VOLLEY, true); } void Register() override diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp index ba9f66d255b..4edbf8822f7 100644 --- a/src/server/scripts/Spells/spell_mage.cpp +++ b/src/server/scripts/Spells/spell_mage.cpp @@ -23,6 +23,7 @@ #include "Player.h" #include "ScriptMgr.h" +#include "SpellHistory.h" #include "SpellScript.h" #include "SpellAuraEffects.h" @@ -171,22 +172,12 @@ class spell_mage_cold_snap : public SpellScriptLoader void HandleDummy(SpellEffIndex /*effIndex*/) { - Player* caster = GetCaster()->ToPlayer(); - // immediately finishes the cooldown on Frost spells - const SpellCooldowns& cm = caster->GetSpellCooldownMap(); - for (SpellCooldowns::const_iterator itr = cm.begin(); itr != cm.end();) + GetCaster()->GetSpellHistory()->ResetCooldowns([](SpellHistory::CooldownStorageType::iterator itr) -> bool { SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(itr->first); - - if (spellInfo->SpellFamilyName == SPELLFAMILY_MAGE && - (spellInfo->GetSchoolMask() & SPELL_SCHOOL_MASK_FROST) && - spellInfo->Id != SPELL_MAGE_COLD_SNAP && spellInfo->GetRecoveryTime() > 0) - { - caster->RemoveSpellCooldown((itr++)->first, true); - } - else - ++itr; - } + return spellInfo->SpellFamilyName == SPELLFAMILY_MAGE && (spellInfo->GetSchoolMask() & SPELL_SCHOOL_MASK_FROST) && + spellInfo->Id != SPELL_MAGE_COLD_SNAP && spellInfo->GetRecoveryTime() > 0; + }, true); } void Register() override diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp index cf320a05346..197d55486a8 100644 --- a/src/server/scripts/Spells/spell_paladin.cpp +++ b/src/server/scripts/Spells/spell_paladin.cpp @@ -25,6 +25,7 @@ #include "ScriptMgr.h" #include "SpellScript.h" #include "SpellAuraEffects.h" +#include "SpellHistory.h" #include "Group.h" enum PaladinSpells @@ -133,7 +134,7 @@ class spell_pal_ardent_defender : public SpellScriptLoader int32 remainingHealth = victim->GetHealth() - dmgInfo.GetDamage(); uint32 allowedHealth = victim->CountPctFromMaxHealth(35); // If damage kills us - if (remainingHealth <= 0 && !victim->ToPlayer()->HasSpellCooldown(PAL_SPELL_ARDENT_DEFENDER_HEAL)) + if (remainingHealth <= 0 && !victim->GetSpellHistory()->HasCooldown(PAL_SPELL_ARDENT_DEFENDER_HEAL)) { // Cast healing spell, completely avoid damage absorbAmount = dmgInfo.GetDamage(); @@ -148,7 +149,7 @@ class spell_pal_ardent_defender : public SpellScriptLoader int32 healAmount = int32(victim->CountPctFromMaxHealth(uint32(healPct * pctFromDefense))); victim->CastCustomSpell(victim, PAL_SPELL_ARDENT_DEFENDER_HEAL, &healAmount, NULL, NULL, true, NULL, aurEff); - victim->ToPlayer()->AddSpellCooldown(PAL_SPELL_ARDENT_DEFENDER_HEAL, 0, time(NULL) + 120); + victim->GetSpellHistory()->AddCooldown(PAL_SPELL_ARDENT_DEFENDER_HEAL, 0, std::chrono::minutes(2)); } else if (remainingHealth < int32(allowedHealth)) { diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp index 629630d0bef..60ff67d74c0 100644 --- a/src/server/scripts/Spells/spell_quest.cpp +++ b/src/server/scripts/Spells/spell_quest.cpp @@ -208,22 +208,23 @@ class spell_q6124_6129_apply_salve : public SpellScriptLoader if (GetCastItem()) if (Creature* creatureTarget = GetHitCreature()) { - uint32 uiNewEntry = 0; + uint32 newEntry = 0; switch (caster->GetTeam()) { case HORDE: if (creatureTarget->GetEntry() == NPC_SICKLY_GAZELLE) - uiNewEntry = NPC_CURED_GAZELLE; + newEntry = NPC_CURED_GAZELLE; break; case ALLIANCE: if (creatureTarget->GetEntry() == NPC_SICKLY_DEER) - uiNewEntry = NPC_CURED_DEER; + newEntry = NPC_CURED_DEER; break; } - if (uiNewEntry) + if (newEntry) { - creatureTarget->UpdateEntry(uiNewEntry); + creatureTarget->UpdateEntry(newEntry); creatureTarget->DespawnOrUnsummon(DESPAWN_TIME); + caster->KilledMonsterCredit(newEntry); } } } @@ -338,7 +339,7 @@ class spell_q11396_11399_scourging_crystal_controller : public SpellScriptLoader SpellScript* GetSpellScript() const override { return new spell_q11396_11399_scourging_crystal_controller_SpellScript(); - }; + } }; // 43882 Scourging Crystal Controller Dummy @@ -374,7 +375,7 @@ class spell_q11396_11399_scourging_crystal_controller_dummy : public SpellScript SpellScript* GetSpellScript() const override { return new spell_q11396_11399_scourging_crystal_controller_dummy_SpellScript(); - }; + } }; // http://www.wowhead.com/quest=11515 Blood for Blood @@ -855,7 +856,7 @@ class spell_symbol_of_life_dummy : public SpellScriptLoader SpellScript* GetSpellScript() const override { return new spell_symbol_of_life_dummy_SpellScript(); - }; + } }; // http://www.wowhead.com/quest=12659 Scalps! @@ -898,7 +899,7 @@ class spell_q12659_ahunaes_knife : public SpellScriptLoader SpellScript* GetSpellScript() const override { return new spell_q12659_ahunaes_knife_SpellScript(); - }; + } }; enum StoppingTheSpread @@ -944,7 +945,7 @@ class spell_q9874_liquid_fire : public SpellScriptLoader SpellScript* GetSpellScript() const override { return new spell_q9874_liquid_fire_SpellScript(); - }; + } }; enum SalvagingLifesStength @@ -988,7 +989,7 @@ class spell_q12805_lifeblood_dummy : public SpellScriptLoader SpellScript* GetSpellScript() const override { return new spell_q12805_lifeblood_dummy_SpellScript(); - }; + } }; /* @@ -2422,6 +2423,36 @@ class spell_q10929_fumping : SpellScriptLoader } }; +class spell_q12414_hand_over_reins : public SpellScriptLoader +{ + public: + spell_q12414_hand_over_reins() : SpellScriptLoader("spell_q12414_hand_over_reins") { } + + class spell_q12414_hand_over_reins_SpellScript : public SpellScript + { + PrepareSpellScript(spell_q12414_hand_over_reins_SpellScript); + + void HandleScript(SpellEffIndex /*effIndex*/) + { + Creature* caster = GetCaster()->ToCreature(); + GetHitUnit()->ExitVehicle(); + + if (caster) + caster->DespawnOrUnsummon(); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_q12414_hand_over_reins_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_q12414_hand_over_reins_SpellScript(); + } +}; + void AddSC_quest_spell_scripts() { new spell_q55_sacred_cleansing(); @@ -2480,4 +2511,5 @@ void AddSC_quest_spell_scripts() new spell_q13400_illidan_kill_master(); new spell_q14100_q14111_make_player_destroy_totems(); new spell_q10929_fumping(); + new spell_q12414_hand_over_reins(); } diff --git a/src/server/scripts/Spells/spell_rogue.cpp b/src/server/scripts/Spells/spell_rogue.cpp index edb5cd5260c..da50f471f1c 100644 --- a/src/server/scripts/Spells/spell_rogue.cpp +++ b/src/server/scripts/Spells/spell_rogue.cpp @@ -25,6 +25,7 @@ #include "ScriptMgr.h" #include "SpellScript.h" #include "SpellAuraEffects.h" +#include "SpellHistory.h" #include "Containers.h" enum RogueSpells @@ -139,11 +140,11 @@ class spell_rog_cheat_death : public SpellScriptLoader void Absorb(AuraEffect* /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount) { Player* target = GetTarget()->ToPlayer(); - if (dmgInfo.GetDamage() < target->GetHealth() || target->HasSpellCooldown(SPELL_ROGUE_CHEAT_DEATH_COOLDOWN) || !roll_chance_i(absorbChance)) + if (dmgInfo.GetDamage() < target->GetHealth() || target->GetSpellHistory()->HasCooldown(SPELL_ROGUE_CHEAT_DEATH_COOLDOWN) || !roll_chance_i(absorbChance)) return; target->CastSpell(target, SPELL_ROGUE_CHEAT_DEATH_COOLDOWN, true); - target->AddSpellCooldown(SPELL_ROGUE_CHEAT_DEATH_COOLDOWN, 0, time(NULL) + 60); + target->GetSpellHistory()->AddCooldown(SPELL_ROGUE_CHEAT_DEATH_COOLDOWN, 0, std::chrono::minutes(1)); uint32 health10 = target->CountPctFromMaxHealth(10); @@ -443,35 +444,21 @@ class spell_rog_preparation : public SpellScriptLoader void HandleDummy(SpellEffIndex /*effIndex*/) { - Player* caster = GetCaster()->ToPlayer(); - - //immediately finishes the cooldown on certain Rogue abilities - const SpellCooldowns& cm = caster->GetSpellCooldownMap(); - for (SpellCooldowns::const_iterator itr = cm.begin(); itr != cm.end();) + Unit* caster = GetCaster(); + caster->GetSpellHistory()->ResetCooldowns([caster](SpellHistory::CooldownStorageType::iterator itr) -> bool { SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(itr->first); - - if (spellInfo->SpellFamilyName == SPELLFAMILY_ROGUE) - { - if (spellInfo->SpellFamilyFlags[1] & SPELLFAMILYFLAG1_ROGUE_COLDB_SHADOWSTEP || // Cold Blood, Shadowstep - spellInfo->SpellFamilyFlags[0] & SPELLFAMILYFLAG_ROGUE_VAN_EVAS_SPRINT) // Vanish, Evasion, Sprint - caster->RemoveSpellCooldown((itr++)->first, true); - else if (caster->HasAura(SPELL_ROGUE_GLYPH_OF_PREPARATION)) - { - if (spellInfo->SpellFamilyFlags[1] & SPELLFAMILYFLAG1_ROGUE_DISMANTLE || // Dismantle - spellInfo->SpellFamilyFlags[0] & SPELLFAMILYFLAG_ROGUE_KICK || // Kick - (spellInfo->SpellFamilyFlags[0] & SPELLFAMILYFLAG_ROGUE_BLADE_FLURRY && // Blade Flurry - spellInfo->SpellFamilyFlags[1] & SPELLFAMILYFLAG1_ROGUE_BLADE_FLURRY)) - caster->RemoveSpellCooldown((itr++)->first, true); - else - ++itr; - } - else - ++itr; - } - else - ++itr; - } + if (spellInfo->SpellFamilyName != SPELLFAMILY_ROGUE) + return false; + + return (spellInfo->SpellFamilyFlags[1] & SPELLFAMILYFLAG1_ROGUE_COLDB_SHADOWSTEP || // Cold Blood, Shadowstep + spellInfo->SpellFamilyFlags[0] & SPELLFAMILYFLAG_ROGUE_VAN_EVAS_SPRINT) || // Vanish, Evasion, Sprint + (caster->HasAura(SPELL_ROGUE_GLYPH_OF_PREPARATION) && + (spellInfo->SpellFamilyFlags[1] & SPELLFAMILYFLAG1_ROGUE_DISMANTLE || // Dismantle + spellInfo->SpellFamilyFlags[0] & SPELLFAMILYFLAG_ROGUE_KICK || // Kick + (spellInfo->SpellFamilyFlags[0] & SPELLFAMILYFLAG_ROGUE_BLADE_FLURRY && // Blade Flurry + spellInfo->SpellFamilyFlags[1] & SPELLFAMILYFLAG1_ROGUE_BLADE_FLURRY))); + }, true); } void Register() override diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp index 2ee0d5091b5..5564a8275c8 100644 --- a/src/server/scripts/Spells/spell_shaman.cpp +++ b/src/server/scripts/Spells/spell_shaman.cpp @@ -25,6 +25,7 @@ #include "ScriptMgr.h" #include "GridNotifiers.h" #include "Unit.h" +#include "SpellHistory.h" #include "SpellScript.h" #include "SpellAuraEffects.h" @@ -338,7 +339,7 @@ class spell_sha_earth_shield : public SpellScriptLoader { //! HACK due to currenct proc system implementation if (Player* player = GetTarget()->ToPlayer()) - if (player->HasSpellCooldown(SPELL_SHAMAN_EARTH_SHIELD_HEAL)) + if (player->GetSpellHistory()->HasCooldown(SPELL_SHAMAN_EARTH_SHIELD_HEAL)) return false; return true; } @@ -351,7 +352,7 @@ class spell_sha_earth_shield : public SpellScriptLoader /// @hack: due to currenct proc system implementation if (Player* player = GetTarget()->ToPlayer()) - player->AddSpellCooldown(SPELL_SHAMAN_EARTH_SHIELD_HEAL, 0, time(NULL) + 3); + player->GetSpellHistory()->AddCooldown(SPELL_SHAMAN_EARTH_SHIELD_HEAL, 0, std::chrono::seconds(3)); } void Register() override @@ -804,7 +805,7 @@ class spell_sha_item_t10_elemental_2p_bonus : public SpellScriptLoader { PreventDefaultAction(); if (Player* target = GetTarget()->ToPlayer()) - target->ModifySpellCooldown(SPELL_SHAMAN_ELEMENTAL_MASTERY, -aurEff->GetAmount()); + target->GetSpellHistory()->ModifyCooldown(SPELL_SHAMAN_ELEMENTAL_MASTERY, -aurEff->GetAmount()); } void Register() override diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp index fa2b323e220..c7839a59608 100644 --- a/src/server/scripts/Spells/spell_warrior.cpp +++ b/src/server/scripts/Spells/spell_warrior.cpp @@ -23,6 +23,7 @@ #include "Player.h" #include "ScriptMgr.h" +#include "SpellHistory.h" #include "SpellScript.h" #include "SpellAuraEffects.h" @@ -847,7 +848,7 @@ class spell_warr_vigilance_trigger : public SpellScriptLoader // Remove Taunt cooldown if (Player* target = GetHitPlayer()) - target->RemoveSpellCooldown(SPELL_WARRIOR_TAUNT, true); + target->GetSpellHistory()->ResetCooldown(SPELL_WARRIOR_TAUNT, true); } void Register() override diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp index 93010f06283..d1d2ddc8a80 100644 --- a/src/server/scripts/World/npcs_special.cpp +++ b/src/server/scripts/World/npcs_special.cpp @@ -53,6 +53,7 @@ EndContentData */ #include "GridNotifiersImpl.h" #include "Cell.h" #include "CellImpl.h" +#include "SpellHistory.h" #include "SpellAuras.h" #include "Pet.h" #include "CreatureTextMgr.h" @@ -1214,14 +1215,14 @@ public: if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); - if (player->HasSpellCooldown(SPELL_INT) || - player->HasSpellCooldown(SPELL_ARM) || - player->HasSpellCooldown(SPELL_DMG) || - player->HasSpellCooldown(SPELL_RES) || - player->HasSpellCooldown(SPELL_STR) || - player->HasSpellCooldown(SPELL_AGI) || - player->HasSpellCooldown(SPELL_STM) || - player->HasSpellCooldown(SPELL_SPI)) + if (player->GetSpellHistory()->HasCooldown(SPELL_INT) || + player->GetSpellHistory()->HasCooldown(SPELL_ARM) || + player->GetSpellHistory()->HasCooldown(SPELL_DMG) || + player->GetSpellHistory()->HasCooldown(SPELL_RES) || + player->GetSpellHistory()->HasCooldown(SPELL_STR) || + player->GetSpellHistory()->HasCooldown(SPELL_AGI) || + player->GetSpellHistory()->HasCooldown(SPELL_STM) || + player->GetSpellHistory()->HasCooldown(SPELL_SPI)) player->SEND_GOSSIP_MENU(7393, creature->GetGUID()); else { @@ -1281,52 +1282,44 @@ public: bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) override { player->PlayerTalkClass->ClearMenus(); + uint32 spellId = 0; switch (sender) { case GOSSIP_SENDER_MAIN: SendAction(player, creature, action); break; case GOSSIP_SENDER_MAIN + 1: - creature->CastSpell(player, SPELL_DMG, false); - player->AddSpellCooldown(SPELL_DMG, 0, time(NULL) + 7200); - SendAction(player, creature, action); + spellId = SPELL_DMG; break; case GOSSIP_SENDER_MAIN + 2: - creature->CastSpell(player, SPELL_RES, false); - player->AddSpellCooldown(SPELL_RES, 0, time(NULL) + 7200); - SendAction(player, creature, action); + spellId = SPELL_RES; break; case GOSSIP_SENDER_MAIN + 3: - creature->CastSpell(player, SPELL_ARM, false); - player->AddSpellCooldown(SPELL_ARM, 0, time(NULL) + 7200); - SendAction(player, creature, action); + spellId = SPELL_ARM; break; case GOSSIP_SENDER_MAIN + 4: - creature->CastSpell(player, SPELL_SPI, false); - player->AddSpellCooldown(SPELL_SPI, 0, time(NULL) + 7200); - SendAction(player, creature, action); + spellId = SPELL_SPI; break; case GOSSIP_SENDER_MAIN + 5: - creature->CastSpell(player, SPELL_INT, false); - player->AddSpellCooldown(SPELL_INT, 0, time(NULL) + 7200); - SendAction(player, creature, action); + spellId = SPELL_INT; break; case GOSSIP_SENDER_MAIN + 6: - creature->CastSpell(player, SPELL_STM, false); - player->AddSpellCooldown(SPELL_STM, 0, time(NULL) + 7200); - SendAction(player, creature, action); + spellId = SPELL_STM; break; case GOSSIP_SENDER_MAIN + 7: - creature->CastSpell(player, SPELL_STR, false); - player->AddSpellCooldown(SPELL_STR, 0, time(NULL) + 7200); - SendAction(player, creature, action); + spellId = SPELL_STR; break; case GOSSIP_SENDER_MAIN + 8: - creature->CastSpell(player, SPELL_AGI, false); - player->AddSpellCooldown(SPELL_AGI, 0, time(NULL) + 7200); - SendAction(player, creature, action); + spellId = SPELL_AGI; break; } + + if (spellId) + { + creature->CastSpell(player, spellId, false); + player->GetSpellHistory()->AddCooldown(spellId, 0, std::chrono::hours(2)); + SendAction(player, creature, action); + } return true; } }; diff --git a/src/server/shared/CMakeLists.txt b/src/server/shared/CMakeLists.txt index fb86ac7db18..abc019863b1 100644 --- a/src/server/shared/CMakeLists.txt +++ b/src/server/shared/CMakeLists.txt @@ -21,6 +21,7 @@ file(GLOB_RECURSE sources_Logging Logging/*.cpp Logging/*.h) file(GLOB_RECURSE sources_Networking Networking/*.cpp Networking/*.h) file(GLOB_RECURSE sources_Packets Packets/*.cpp Packets/*.h) file(GLOB_RECURSE sources_Threading Threading/*.cpp Threading/*.h) +file(GLOB_RECURSE sources_Updater Updater/*.cpp Updater/*.h) file(GLOB_RECURSE sources_Utilities Utilities/*.cpp Utilities/*.h) file(GLOB sources_localdir *.cpp *.h) @@ -51,6 +52,7 @@ set(shared_STAT_SRCS ${sources_Networking} ${sources_Packets} ${sources_Threading} + ${sources_Updater} ${sources_Utilities} ${sources_localdir} ) @@ -59,8 +61,9 @@ include_directories( ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour ${CMAKE_SOURCE_DIR}/dep/SFMT - ${CMAKE_SOURCE_DIR}/dep/sockets/include + ${CMAKE_SOURCE_DIR}/dep/cppformat ${CMAKE_SOURCE_DIR}/dep/utf8cpp + ${CMAKE_SOURCE_DIR}/dep/process ${CMAKE_SOURCE_DIR}/src/server ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/Configuration @@ -74,12 +77,15 @@ include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/Packets ${CMAKE_CURRENT_SOURCE_DIR}/Threading ${CMAKE_CURRENT_SOURCE_DIR}/Utilities + ${CMAKE_CURRENT_SOURCE_DIR}/Updater ${CMAKE_SOURCE_DIR}/src/server/game/Entities/Object ${MYSQL_INCLUDE_DIR} ${OPENSSL_INCLUDE_DIR} ${VALGRIND_INCLUDE_DIR} ) +GroupSources(${CMAKE_CURRENT_SOURCE_DIR}) + add_library(shared STATIC ${shared_STAT_SRCS} ${shared_STAT_PCH_SRC} diff --git a/src/server/shared/Configuration/Config.cpp b/src/server/shared/Configuration/Config.cpp index 1e1f8c7c3c6..ea426a5d33e 100644 --- a/src/server/shared/Configuration/Config.cpp +++ b/src/server/shared/Configuration/Config.cpp @@ -21,7 +21,6 @@ #include <boost/property_tree/ptree.hpp> #include <boost/property_tree/ini_parser.hpp> #include "Config.h" -#include "Errors.h" using namespace boost::property_tree; diff --git a/src/server/shared/Cryptography/ARC4.cpp b/src/server/shared/Cryptography/ARC4.cpp index 28c3da8d228..d1082b39347 100644 --- a/src/server/shared/Cryptography/ARC4.cpp +++ b/src/server/shared/Cryptography/ARC4.cpp @@ -17,7 +17,6 @@ */ #include "ARC4.h" -#include <openssl/sha.h> ARC4::ARC4(uint8 len) : m_ctx() { diff --git a/src/server/shared/Cryptography/BigNumber.cpp b/src/server/shared/Cryptography/BigNumber.cpp index 434268097fe..720e8e30441 100644 --- a/src/server/shared/Cryptography/BigNumber.cpp +++ b/src/server/shared/Cryptography/BigNumber.cpp @@ -18,7 +18,6 @@ #include "Cryptography/BigNumber.h" #include <openssl/bn.h> -#include <openssl/crypto.h> #include <cstring> #include <algorithm> #include <memory> @@ -171,19 +170,20 @@ bool BigNumber::isZero() const std::unique_ptr<uint8[]> BigNumber::AsByteArray(int32 minSize, bool littleEndian) { - int length = (minSize >= GetNumBytes()) ? minSize : GetNumBytes(); + int numBytes = GetNumBytes(); + int length = (minSize >= numBytes) ? minSize : numBytes; uint8* array = new uint8[length]; // If we need more bytes than length of BigNumber set the rest to 0 - if (length > GetNumBytes()) + if (length > numBytes) memset((void*)array, 0, length); BN_bn2bin(_bn, (unsigned char *)array); // openssl's BN stores data internally in big endian format, reverse if little endian desired if (littleEndian) - std::reverse(array, array + length); + std::reverse(array, array + numBytes); std::unique_ptr<uint8[]> ret(array); return ret; diff --git a/src/server/shared/Cryptography/SHA1.h b/src/server/shared/Cryptography/SHA1.h index ebd9f721d4a..f59bdc25556 100644 --- a/src/server/shared/Cryptography/SHA1.h +++ b/src/server/shared/Cryptography/SHA1.h @@ -39,8 +39,8 @@ class SHA1Hash void Initialize(); void Finalize(); - uint8 *GetDigest(void) { return mDigest; }; - int GetLength(void) const { return SHA_DIGEST_LENGTH; }; + uint8 *GetDigest(void) { return mDigest; } + int GetLength(void) const { return SHA_DIGEST_LENGTH; } private: SHA_CTX mC; diff --git a/src/server/shared/Database/AdhocStatement.h b/src/server/shared/Database/AdhocStatement.h index 8d9365900d9..8195d9add98 100644 --- a/src/server/shared/Database/AdhocStatement.h +++ b/src/server/shared/Database/AdhocStatement.h @@ -40,4 +40,4 @@ class BasicStatementTask : public SQLOperation QueryResultPromise* m_result; }; -#endif
\ No newline at end of file +#endif diff --git a/src/server/shared/Database/DatabaseLoader.cpp b/src/server/shared/Database/DatabaseLoader.cpp new file mode 100644 index 00000000000..36ee4b12c83 --- /dev/null +++ b/src/server/shared/Database/DatabaseLoader.cpp @@ -0,0 +1,191 @@ +/* + * Copyright (C) 2008-2015 TrinityCore <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 (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, see <http://www.gnu.org/licenses/>. + */ + +#include "DatabaseLoader.h" +#include "DBUpdater.h" +#include "Config.h" + +#include <mysqld_error.h> + +DatabaseLoader::DatabaseLoader(std::string const& logger, uint32 const defaultUpdateMask) + : _logger(logger), _autoSetup(sConfigMgr->GetBoolDefault("Updates.AutoSetup", true)), + _updateFlags(sConfigMgr->GetIntDefault("Updates.EnableDatabases", defaultUpdateMask)) +{ +} + +template <class T> +DatabaseLoader& DatabaseLoader::AddDatabase(DatabaseWorkerPool<T>& pool, std::string const& name) +{ + bool const updatesEnabledForThis = DBUpdater<T>::IsEnabled(_updateFlags); + + _open.push(std::make_pair([this, name, updatesEnabledForThis, &pool]() -> bool + { + std::string const dbString = sConfigMgr->GetStringDefault(name + "DatabaseInfo", ""); + if (dbString.empty()) + { + TC_LOG_ERROR(_logger.c_str(), "Database %s not specified in configuration file!", name.c_str()); + return false; + } + + uint8 const asyncThreads = uint8(sConfigMgr->GetIntDefault(name + "Database.WorkerThreads", 1)); + if (asyncThreads < 1 || asyncThreads > 32) + { + TC_LOG_ERROR(_logger.c_str(), "%s database: invalid number of worker threads specified. " + "Please pick a value between 1 and 32.", name.c_str()); + return false; + } + + uint8 const synchThreads = uint8(sConfigMgr->GetIntDefault(name + "Database.SynchThreads", 1)); + + pool.SetConnectionInfo(dbString, asyncThreads, synchThreads); + if (uint32 error = pool.Open()) + { + // Database does not exist + if ((error == ER_BAD_DB_ERROR) && updatesEnabledForThis && _autoSetup) + { + // Try to create the database and connect again if auto setup is enabled + if (DBUpdater<T>::Create(pool) && (!pool.Open())) + error = 0; + } + + // If the error wasn't handled quit + if (error) + { + TC_LOG_ERROR("sql.driver", "\nDatabasePool %s NOT opened. There were errors opening the MySQL connections. Check your SQLDriverLogFile " + "for specific errors. Read wiki at http://collab.kpsn.org/display/tc/TrinityCore+Home", name.c_str()); + + return false; + } + } + return true; + }, + [&pool]() + { + pool.Close(); + })); + + // Populate and update only if updates are enabled for this pool + if (updatesEnabledForThis) + { + _populate.push([this, name, &pool]() -> bool + { + if (!DBUpdater<T>::Populate(pool)) + { + TC_LOG_ERROR(_logger.c_str(), "Could not populate the %s database, see log for details.", name.c_str()); + return false; + } + return true; + }); + + _update.push([this, name, &pool]() -> bool + { + if (!DBUpdater<T>::Update(pool)) + { + TC_LOG_ERROR(_logger.c_str(), "Could not update the %s database, see log for details.", name.c_str()); + return false; + } + return true; + }); + } + + _prepare.push([this, name, &pool]() -> bool + { + if (!pool.PrepareStatements()) + { + TC_LOG_ERROR(_logger.c_str(), "Could not prepare statements of the %s database, see log for details.", name.c_str()); + return false; + } + return true; + }); + + return *this; +} + +bool DatabaseLoader::Load() +{ + if (!OpenDatabases()) + return false; + + if (!PopulateDatabases()) + return false; + + if (!UpdateDatabases()) + return false; + + if (!PrepareStatements()) + return false; + + return true; +} + +bool DatabaseLoader::OpenDatabases() +{ + while (!_open.empty()) + { + std::pair<Predicate, std::function<void()>> const load = _open.top(); + if (load.first()) + _close.push(load.second); + else + { + // Close all loaded databases + while (!_close.empty()) + { + _close.top()(); + _close.pop(); + } + return false; + } + + _open.pop(); + } + return true; +} + +// Processes the elements of the given stack until a predicate returned false. +bool DatabaseLoader::Process(std::stack<Predicate>& stack) +{ + while (!stack.empty()) + { + if (!stack.top()()) + return false; + + stack.pop(); + } + return true; +} + +bool DatabaseLoader::PopulateDatabases() +{ + return Process(_populate); +} + +bool DatabaseLoader::UpdateDatabases() +{ + return Process(_update); +} + +bool DatabaseLoader::PrepareStatements() +{ + return Process(_prepare); +} + +template +DatabaseLoader& DatabaseLoader::AddDatabase<LoginDatabaseConnection>(DatabaseWorkerPool<LoginDatabaseConnection>& pool, std::string const& name); +template +DatabaseLoader& DatabaseLoader::AddDatabase<WorldDatabaseConnection>(DatabaseWorkerPool<WorldDatabaseConnection>& pool, std::string const& name); +template +DatabaseLoader& DatabaseLoader::AddDatabase<CharacterDatabaseConnection>(DatabaseWorkerPool<CharacterDatabaseConnection>& pool, std::string const& name); diff --git a/src/server/shared/Database/DatabaseLoader.h b/src/server/shared/Database/DatabaseLoader.h new file mode 100644 index 00000000000..d35597ba807 --- /dev/null +++ b/src/server/shared/Database/DatabaseLoader.h @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2008-2015 TrinityCore <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 (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, see <http://www.gnu.org/licenses/>. + */ + +#ifndef DatabaseLoader_h__ +#define DatabaseLoader_h__ + +#include "DatabaseWorkerPool.h" +#include "DatabaseEnv.h" + +#include <stack> +#include <functional> + +// A helper class to initiate all database worker pools, +// handles updating, delays preparing of statements and cleans up on failure. +class DatabaseLoader +{ +public: + DatabaseLoader(std::string const& logger, uint32 const defaultUpdateMask); + + // Register a database to the loader (lazy implemented) + template <class T> + DatabaseLoader& AddDatabase(DatabaseWorkerPool<T>& pool, std::string const& name); + + // Load all databases + bool Load(); + + enum DatabaseTypeFlags + { + DATABASE_NONE = 0, + + DATABASE_LOGIN = 1, + DATABASE_CHARACTER = 2, + DATABASE_WORLD = 4, + + DATABASE_MASK_ALL = DATABASE_LOGIN | DATABASE_CHARACTER | DATABASE_WORLD + }; + +private: + bool OpenDatabases(); + bool PopulateDatabases(); + bool UpdateDatabases(); + bool PrepareStatements(); + + using Predicate = std::function<bool()>; + + static bool Process(std::stack<Predicate>& stack); + + std::string const _logger; + bool const _autoSetup; + uint32 const _updateFlags; + + std::stack<std::pair<Predicate, std::function<void()>>> _open; + std::stack<std::function<void()>> _close; + std::stack<Predicate> _populate, _update, _prepare; +}; + +#endif // DatabaseLoader_h__ diff --git a/src/server/shared/Database/DatabaseWorker.cpp b/src/server/shared/Database/DatabaseWorker.cpp index 1fe638552a0..56757ce12a0 100644 --- a/src/server/shared/Database/DatabaseWorker.cpp +++ b/src/server/shared/Database/DatabaseWorker.cpp @@ -18,8 +18,6 @@ #include "DatabaseEnv.h" #include "DatabaseWorker.h" #include "SQLOperation.h" -#include "MySQLConnection.h" -#include "MySQLThreading.h" #include "ProducerConsumerQueue.h" DatabaseWorker::DatabaseWorker(ProducerConsumerQueue<SQLOperation*>* newQueue, MySQLConnection* connection) diff --git a/src/server/shared/Database/DatabaseWorkerPool.h b/src/server/shared/Database/DatabaseWorkerPool.h index f0ddbe91ad8..6bc204fbf76 100644 --- a/src/server/shared/Database/DatabaseWorkerPool.h +++ b/src/server/shared/Database/DatabaseWorkerPool.h @@ -28,8 +28,10 @@ #include "QueryResult.h" #include "QueryHolder.h" #include "AdhocStatement.h" +#include "StringFormat.h" #include <mysqld_error.h> +#include <memory> #define MIN_MYSQL_SERVER_VERSION 50100u #define MIN_MYSQL_CLIENT_VERSION 50100u @@ -57,9 +59,9 @@ class DatabaseWorkerPool public: /* Activity state */ - DatabaseWorkerPool() : _connectionInfo(NULL) + DatabaseWorkerPool() : _queue(new ProducerConsumerQueue<SQLOperation*>()), + _async_threads(0), _synch_threads(0) { - _queue = new ProducerConsumerQueue<SQLOperation*>(); memset(_connectionCount, 0, sizeof(_connectionCount)); _connections.resize(IDX_SIZE); @@ -70,31 +72,37 @@ class DatabaseWorkerPool ~DatabaseWorkerPool() { _queue->Cancel(); + } - delete _queue; + void SetConnectionInfo(std::string const& infoString, uint8 const asyncThreads, uint8 const synchThreads) + { + _connectionInfo.reset(new MySQLConnectionInfo(infoString)); - delete _connectionInfo; + _async_threads = asyncThreads; + _synch_threads = synchThreads; } - bool Open(const std::string& infoString, uint8 async_threads, uint8 synch_threads) + uint32 Open() { - _connectionInfo = new MySQLConnectionInfo(infoString); + WPFatal(_connectionInfo.get(), "Connection info was not set!"); TC_LOG_INFO("sql.driver", "Opening DatabasePool '%s'. Asynchronous connections: %u, synchronous connections: %u.", - GetDatabaseName(), async_threads, synch_threads); + GetDatabaseName(), _async_threads, _synch_threads); - bool res = OpenConnections(IDX_ASYNC, async_threads); + uint32 error = OpenConnections(IDX_ASYNC, _async_threads); - if (!res) - return res; + if (error) + return error; - res = OpenConnections(IDX_SYNCH, synch_threads); + error = OpenConnections(IDX_SYNCH, _synch_threads); - if (res) + if (!error) + { TC_LOG_INFO("sql.driver", "DatabasePool '%s' opened successfully. %u total connections running.", GetDatabaseName(), (_connectionCount[IDX_SYNCH] + _connectionCount[IDX_ASYNC])); + } - return res; + return error; } void Close() @@ -120,6 +128,32 @@ class DatabaseWorkerPool TC_LOG_INFO("sql.driver", "All connections on DatabasePool '%s' closed.", GetDatabaseName()); } + //! Prepares all prepared statements + bool PrepareStatements() + { + for (uint8 i = 0; i < IDX_SIZE; ++i) + for (uint32 c = 0; c < _connectionCount[i]; ++c) + { + T* t = _connections[i][c]; + t->LockIfReady(); + if (!t->PrepareStatements()) + { + t->Unlock(); + Close(); + return false; + } + else + t->Unlock(); + } + + return true; + } + + inline MySQLConnectionInfo const* GetConnectionInfo() const + { + return _connectionInfo.get(); + } + /** Delayed one-way statement methods. */ @@ -137,18 +171,13 @@ class DatabaseWorkerPool //! Enqueues a one-way SQL operation in string format -with variable args- that will be executed asynchronously. //! This method should only be used for queries that are only executed once, e.g during startup. - void PExecute(const char* sql, ...) + template<typename... Args> + void PExecute(const char* sql, Args const&... args) { if (!sql) return; - va_list ap; - char szQuery[MAX_QUERY_LEN]; - va_start(ap, sql); - vsnprintf(szQuery, MAX_QUERY_LEN, sql, ap); - va_end(ap); - - Execute(szQuery); + Execute(Trinity::StringFormat(sql, args...).c_str()); } //! Enqueues a one-way SQL operation in prepared statement format that will be executed asynchronously. @@ -177,18 +206,13 @@ class DatabaseWorkerPool //! Directly executes a one-way SQL operation in string format -with variable args-, that will block the calling thread until finished. //! This method should only be used for queries that are only executed once, e.g during startup. - void DirectPExecute(const char* sql, ...) + template<typename... Args> + void DirectPExecute(const char* sql, Args const&... args) { if (!sql) return; - va_list ap; - char szQuery[MAX_QUERY_LEN]; - va_start(ap, sql); - vsnprintf(szQuery, MAX_QUERY_LEN, sql, ap); - va_end(ap); - - return DirectExecute(szQuery); + DirectExecute(Trinity::StringFormat(sql, args...).c_str()); } //! Directly executes a one-way SQL operation in prepared statement format, that will block the calling thread until finished. @@ -227,34 +251,24 @@ class DatabaseWorkerPool //! Directly executes an SQL query in string format -with variable args- that will block the calling thread until finished. //! Returns reference counted auto pointer, no need for manual memory management in upper level code. - QueryResult PQuery(const char* sql, T* conn, ...) + template<typename... Args> + QueryResult PQuery(const char* sql, T* conn, Args const&... args) { if (!sql) return QueryResult(NULL); - va_list ap; - char szQuery[MAX_QUERY_LEN]; - va_start(ap, conn); - vsnprintf(szQuery, MAX_QUERY_LEN, sql, ap); - va_end(ap); - - return Query(szQuery, conn); + return Query(Trinity::StringFormat(sql, args...).c_str(), conn); } //! Directly executes an SQL query in string format -with variable args- that will block the calling thread until finished. //! Returns reference counted auto pointer, no need for manual memory management in upper level code. - QueryResult PQuery(const char* sql, ...) + template<typename... Args> + QueryResult PQuery(const char* sql, Args const&... args) { if (!sql) return QueryResult(NULL); - va_list ap; - char szQuery[MAX_QUERY_LEN]; - va_start(ap, sql); - vsnprintf(szQuery, MAX_QUERY_LEN, sql, ap); - va_end(ap); - - return Query(szQuery); + return Query(Trinity::StringFormat(sql, args...).c_str()); } //! Directly executes an SQL query in prepared format that will block the calling thread until finished. @@ -295,15 +309,10 @@ class DatabaseWorkerPool //! Enqueues a query in string format -with variable args- that will set the value of the QueryResultFuture return object as soon as the query is executed. //! The return value is then processed in ProcessQueryCallback methods. - QueryResultFuture AsyncPQuery(const char* sql, ...) + template<typename... Args> + QueryResultFuture AsyncPQuery(const char* sql, Args const&... args) { - va_list ap; - char szQuery[MAX_QUERY_LEN]; - va_start(ap, sql); - vsnprintf(szQuery, MAX_QUERY_LEN, sql, ap); - va_end(ap); - - return AsyncQuery(szQuery); + return AsyncQuery(Trinity::StringFormat(sql, args...).c_str()); } //! Enqueues a query in prepared format that will set the value of the PreparedQueryResultFuture return object as soon as the query is executed. @@ -461,7 +470,7 @@ class DatabaseWorkerPool } private: - bool OpenConnections(InternalIndex type, uint8 numConnections) + uint32 OpenConnections(InternalIndex type, uint8 numConnections) { _connections[type].resize(numConnections); for (uint8 i = 0; i < numConnections; ++i) @@ -469,7 +478,7 @@ class DatabaseWorkerPool T* t; if (type == IDX_ASYNC) - t = new T(_queue, *_connectionInfo); + t = new T(_queue.get(), *_connectionInfo); else if (type == IDX_SYNCH) t = new T(*_connectionInfo); else @@ -478,35 +487,32 @@ class DatabaseWorkerPool _connections[type][i] = t; ++_connectionCount[type]; - bool res = t->Open(); + uint32 error = t->Open(); - if (res) + if (!error) { if (mysql_get_server_version(t->GetHandle()) < MIN_MYSQL_SERVER_VERSION) { TC_LOG_ERROR("sql.driver", "TrinityCore does not support MySQL versions below 5.1"); - res = false; + error = 1; } } // Failed to open a connection or invalid version, abort and cleanup - if (!res) + if (error) { - TC_LOG_ERROR("sql.driver", "DatabasePool %s NOT opened. There were errors opening the MySQL connections. Check your SQLDriverLogFile " - "for specific errors. Read wiki at http://collab.kpsn.org/display/tc/TrinityCore+Home", GetDatabaseName()); - while (_connectionCount[type] != 0) { T* t = _connections[type][i--]; delete t; --_connectionCount[type]; } - - return false; + return error; } } - return true; + // Everything is fine + return 0; } unsigned long EscapeString(char *to, const char *from, unsigned long length) @@ -546,10 +552,13 @@ class DatabaseWorkerPool return _connectionInfo->database.c_str(); } - ProducerConsumerQueue<SQLOperation*>* _queue; //! Queue shared by async worker threads. - std::vector< std::vector<T*> > _connections; - uint32 _connectionCount[2]; //! Counter of MySQL connections; - MySQLConnectionInfo* _connectionInfo; + //! Queue shared by async worker threads. + std::unique_ptr<ProducerConsumerQueue<SQLOperation*>> _queue; + std::vector<std::vector<T*>> _connections; + //! Counter of MySQL connections; + uint32 _connectionCount[IDX_SIZE]; + std::unique_ptr<MySQLConnectionInfo> _connectionInfo; + uint8 _async_threads, _synch_threads; }; #endif diff --git a/src/server/shared/Database/Field.h b/src/server/shared/Database/Field.h index b88fb56cb06..1bbd264482f 100644 --- a/src/server/shared/Database/Field.h +++ b/src/server/shared/Database/Field.h @@ -255,11 +255,7 @@ class Field Field(); ~Field(); - #if defined(__GNUC__) - #pragma pack(1) - #else #pragma pack(push, 1) - #endif struct { uint32 length; // Length (prepared strings only) @@ -267,11 +263,7 @@ class Field enum_field_types type; // Field type bool raw; // Raw bytes? (Prepared statement or ad hoc) } data; - #if defined(__GNUC__) - #pragma pack() - #else #pragma pack(pop) - #endif void SetByteValue(void const* newValue, size_t const newSize, enum_field_types newType, uint32 length); void SetStructuredValue(char* newValue, enum_field_types newType); diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.cpp b/src/server/shared/Database/Implementation/CharacterDatabase.cpp index 265b0578841..1ca01501d01 100644 --- a/src/server/shared/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/shared/Database/Implementation/CharacterDatabase.cpp @@ -60,7 +60,8 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_SEL_CHAR_POSITION_XYZ, "SELECT map, position_x, position_y, position_z FROM characters WHERE guid = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_CHAR_POSITION, "SELECT position_x, position_y, position_z, orientation, map, taxi_path FROM characters WHERE guid = ?", CONNECTION_SYNCH); - PrepareStatement(CHAR_DEL_BATTLEGROUND_RANDOM, "DELETE FROM character_battleground_random", CONNECTION_ASYNC); + PrepareStatement(CHAR_DEL_BATTLEGROUND_RANDOM_ALL, "DELETE FROM character_battleground_random", CONNECTION_ASYNC); + PrepareStatement(CHAR_DEL_BATTLEGROUND_RANDOM, "DELETE FROM character_battleground_random WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_INS_BATTLEGROUND_RANDOM, "INSERT INTO character_battleground_random (guid) VALUES (?)", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_CHARACTER, "SELECT guid, account, name, race, class, gender, level, xp, money, playerBytes, playerBytes2, playerFlags, " @@ -104,7 +105,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_SEL_MAIL_COUNT, "SELECT COUNT(*) FROM mail WHERE receiver = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_CHARACTER_SOCIALLIST, "SELECT friend, flags, note FROM character_social JOIN characters ON characters.guid = character_social.friend WHERE character_social.guid = ? AND deleteinfos_name IS NULL LIMIT 255", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_CHARACTER_HOMEBIND, "SELECT mapId, zoneId, posX, posY, posZ FROM character_homebind WHERE guid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_SEL_CHARACTER_SPELLCOOLDOWNS, "SELECT spell, item, time FROM character_spell_cooldown WHERE guid = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_SEL_CHARACTER_SPELLCOOLDOWNS, "SELECT spell, item, time FROM character_spell_cooldown WHERE guid = ? AND time > UNIX_TIMESTAMP()", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_CHARACTER_DECLINEDNAMES, "SELECT genitive, dative, accusative, instrumental, prepositional FROM character_declinedname WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_GUILD_MEMBER, "SELECT guildid, rank FROM guild_member WHERE guid = ?", CONNECTION_BOTH); PrepareStatement(CHAR_SEL_GUILD_MEMBER_EXTENDED, "SELECT g.guildid, g.name, gr.rname, gr.rid, gm.pnote, gm.offnote " @@ -300,6 +301,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_DEL_ARENA_TEAM_MEMBER, "DELETE FROM arena_team_member WHERE arenaTeamId = ? AND guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_ARENA_TEAM_STATS, "UPDATE arena_team SET rating = ?, weekGames = ?, weekWins = ?, seasonGames = ?, seasonWins = ?, rank = ? WHERE arenaTeamId = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_ARENA_TEAM_MEMBER, "UPDATE arena_team_member SET personalRating = ?, weekGames = ?, weekWins = ?, seasonGames = ?, seasonWins = ? WHERE arenaTeamId = ? AND guid = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_DEL_CHARACTER_ARENA_STATS, "DELETE FROM character_arena_stats WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_REP_CHARACTER_ARENA_STATS, "REPLACE INTO character_arena_stats (guid, slot, matchMakerRating) VALUES (?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_PLAYER_ARENA_TEAMS, "SELECT arena_team_member.arenaTeamId FROM arena_team_member JOIN arena_team ON arena_team_member.arenaTeamId = arena_team.arenaTeamId WHERE guid = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_UPD_ARENA_TEAM_NAME, "UPDATE arena_team SET name = ? WHERE arenaTeamId = ?", CONNECTION_ASYNC); @@ -495,7 +497,8 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_UPD_CHAR_REP_FACTION_CHANGE, "UPDATE character_reputation SET faction = ?, standing = ? WHERE faction = ? AND guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_CHAR_TITLES_FACTION_CHANGE, "UPDATE characters SET knownTitles = ? WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_RES_CHAR_TITLES_FACTION_CHANGE, "UPDATE characters SET chosenTitle = 0 WHERE guid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_DEL_CHAR_SPELL_COOLDOWN, "DELETE FROM character_spell_cooldown WHERE guid = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_DEL_CHAR_SPELL_COOLDOWNS, "DELETE FROM character_spell_cooldown WHERE guid = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_INS_CHAR_SPELL_COOLDOWN, "INSERT INTO character_spell_cooldown (guid, spell, item, time) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHARACTER, "DELETE FROM characters WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_ACTION, "DELETE FROM character_action WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_AURA, "DELETE FROM character_aura WHERE guid = ?", CONNECTION_ASYNC); @@ -575,7 +578,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_INS_CHAR_PET_DECLINEDNAME, "INSERT INTO character_pet_declinedname (id, owner, genitive, dative, accusative, instrumental, prepositional) VALUES (?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_PET_AURA, "SELECT caster_guid, spell, effect_mask, recalculate_mask, stackcount, amount0, amount1, amount2, base_amount0, base_amount1, base_amount2, maxduration, remaintime, remaincharges FROM pet_aura WHERE guid = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_PET_SPELL, "SELECT spell, active FROM pet_spell WHERE guid = ?", CONNECTION_SYNCH); - PrepareStatement(CHAR_SEL_PET_SPELL_COOLDOWN, "SELECT spell, time FROM pet_spell_cooldown WHERE guid = ?", CONNECTION_SYNCH); + PrepareStatement(CHAR_SEL_PET_SPELL_COOLDOWN, "SELECT spell, time FROM pet_spell_cooldown WHERE guid = ? AND time > UNIX_TIMESTAMP()", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_PET_DECLINED_NAME, "SELECT genitive, dative, accusative, instrumental, prepositional FROM character_pet_declinedname WHERE owner = ? AND id = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_DEL_PET_AURAS, "DELETE FROM pet_aura WHERE guid = ?", CONNECTION_BOTH); PrepareStatement(CHAR_DEL_PET_SPELLS, "DELETE FROM pet_spell WHERE guid = ?", CONNECTION_ASYNC); diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.h b/src/server/shared/Database/Implementation/CharacterDatabase.h index f7ff5b9186e..f88a912e022 100644 --- a/src/server/shared/Database/Implementation/CharacterDatabase.h +++ b/src/server/shared/Database/Implementation/CharacterDatabase.h @@ -72,6 +72,7 @@ enum CharacterDatabaseStatements CHAR_SEL_CHAR_POSITION_XYZ, CHAR_SEL_CHAR_POSITION, + CHAR_DEL_BATTLEGROUND_RANDOM_ALL, CHAR_DEL_BATTLEGROUND_RANDOM, CHAR_INS_BATTLEGROUND_RANDOM, @@ -253,6 +254,7 @@ enum CharacterDatabaseStatements CHAR_DEL_ARENA_TEAM_MEMBER, CHAR_UPD_ARENA_TEAM_STATS, CHAR_UPD_ARENA_TEAM_MEMBER, + CHAR_DEL_CHARACTER_ARENA_STATS, CHAR_REP_CHARACTER_ARENA_STATS, CHAR_SEL_PLAYER_ARENA_TEAMS, CHAR_UPD_ARENA_TEAM_NAME, @@ -434,7 +436,8 @@ enum CharacterDatabaseStatements CHAR_UPD_CHAR_REP_FACTION_CHANGE, CHAR_UPD_CHAR_TITLES_FACTION_CHANGE, CHAR_RES_CHAR_TITLES_FACTION_CHANGE, - CHAR_DEL_CHAR_SPELL_COOLDOWN, + CHAR_DEL_CHAR_SPELL_COOLDOWNS, + CHAR_INS_CHAR_SPELL_COOLDOWN, CHAR_DEL_CHARACTER, CHAR_DEL_CHAR_ACTION, CHAR_DEL_CHAR_AURA, diff --git a/src/server/shared/Database/MySQLConnection.cpp b/src/server/shared/Database/MySQLConnection.cpp index 1a9f973d47b..10f4a7baa18 100644 --- a/src/server/shared/Database/MySQLConnection.cpp +++ b/src/server/shared/Database/MySQLConnection.cpp @@ -22,11 +22,9 @@ #include <winsock2.h> #endif #include <mysql.h> -#include <mysqld_error.h> #include <errmsg.h> #include "MySQLConnection.h" -#include "MySQLThreading.h" #include "QueryResult.h" #include "SQLOperation.h" #include "PreparedStatement.h" @@ -72,14 +70,14 @@ void MySQLConnection::Close() delete this; } -bool MySQLConnection::Open() +uint32 MySQLConnection::Open() { MYSQL *mysqlInit; mysqlInit = mysql_init(NULL); if (!mysqlInit) { TC_LOG_ERROR("sql.sql", "Could not initialize Mysql connection to database `%s`", m_connectionInfo.database.c_str()); - return false; + return CR_UNKNOWN_ERROR; } int port; @@ -137,13 +135,13 @@ bool MySQLConnection::Open() // set connection properties to UTF8 to properly handle locales for different // server configs - core sends data in UTF8, so MySQL must expect UTF8 too mysql_set_character_set(m_Mysql, "utf8"); - return PrepareStatements(); + return 0; } else { - TC_LOG_ERROR("sql.sql", "Could not connect to MySQL database at %s: %s\n", m_connectionInfo.host.c_str(), mysql_error(mysqlInit)); + TC_LOG_ERROR("sql.sql", "Could not connect to MySQL database at %s: %s", m_connectionInfo.host.c_str(), mysql_error(mysqlInit)); mysql_close(mysqlInit); - return false; + return mysql_errno(mysqlInit); } } @@ -491,8 +489,18 @@ bool MySQLConnection::_HandleMySQLErrno(uint32 errNo) m_reconnecting = true; uint64 oldThreadId = mysql_thread_id(GetHandle()); mysql_close(GetHandle()); - if (this->Open()) // Don't remove 'this' pointer unless you want to skip loading all prepared statements.... + + uint32 const lErrno = Open(); + if (!lErrno) { + // Don't remove 'this' pointer unless you want to skip loading all prepared statements... + if (!this->PrepareStatements()) + { + TC_LOG_ERROR("sql.sql", "Could not re-prepare statements!"); + Close(); + return false; + } + TC_LOG_INFO("sql.sql", "Connection to the MySQL server is active."); if (oldThreadId != mysql_thread_id(GetHandle())) TC_LOG_INFO("sql.sql", "Successfully reconnected to %s @%s:%s (%s).", @@ -503,7 +511,7 @@ bool MySQLConnection::_HandleMySQLErrno(uint32 errNo) return true; } - uint32 lErrno = mysql_errno(GetHandle()); // It's possible this attempted reconnect throws 2006 at us. To prevent crazy recursive calls, sleep here. + // It's possible this attempted reconnect throws 2006 at us. To prevent crazy recursive calls, sleep here. std::this_thread::sleep_for(std::chrono::seconds(3)); // Sleep 3 seconds return _HandleMySQLErrno(lErrno); // Call self (recursive) } diff --git a/src/server/shared/Database/MySQLConnection.h b/src/server/shared/Database/MySQLConnection.h index d486f5b4679..78d8d2fb5dd 100644 --- a/src/server/shared/Database/MySQLConnection.h +++ b/src/server/shared/Database/MySQLConnection.h @@ -72,9 +72,11 @@ class MySQLConnection MySQLConnection(ProducerConsumerQueue<SQLOperation*>* queue, MySQLConnectionInfo& connInfo); //! Constructor for asynchronous connections. virtual ~MySQLConnection(); - virtual bool Open(); + virtual uint32 Open(); void Close(); + bool PrepareStatements(); + public: bool Execute(const char* sql); bool Execute(PreparedStatement* stmt); @@ -111,7 +113,6 @@ class MySQLConnection MySQLPreparedStatement* GetPreparedStatement(uint32 index); void PrepareStatement(uint32 index, const char* sql, ConnectionFlags flags); - bool PrepareStatements(); virtual void DoPrepareStatements() = 0; protected: diff --git a/src/server/shared/Database/QueryHolder.cpp b/src/server/shared/Database/QueryHolder.cpp index 75b96e1996c..2fdb3825526 100644 --- a/src/server/shared/Database/QueryHolder.cpp +++ b/src/server/shared/Database/QueryHolder.cpp @@ -40,29 +40,6 @@ bool SQLQueryHolder::SetQuery(size_t index, const char *sql) return true; } -bool SQLQueryHolder::SetPQuery(size_t index, const char *format, ...) -{ - if (!format) - { - TC_LOG_ERROR("sql.sql", "Query (index: %u) is empty.", uint32(index)); - return false; - } - - va_list ap; - char szQuery [MAX_QUERY_LEN]; - va_start(ap, format); - int res = vsnprintf(szQuery, MAX_QUERY_LEN, format, ap); - va_end(ap); - - if (res == -1) - { - TC_LOG_ERROR("sql.sql", "SQL Query truncated (and not execute) for format: %s", format); - return false; - } - - return SetQuery(index, szQuery); -} - bool SQLQueryHolder::SetPreparedQuery(size_t index, PreparedStatement* stmt) { if (m_queries.size() <= index) diff --git a/src/server/shared/Database/QueryHolder.h b/src/server/shared/Database/QueryHolder.h index 6fd1901447e..4102bba1223 100644 --- a/src/server/shared/Database/QueryHolder.h +++ b/src/server/shared/Database/QueryHolder.h @@ -29,8 +29,9 @@ class SQLQueryHolder public: SQLQueryHolder() { } ~SQLQueryHolder(); - bool SetQuery(size_t index, const char *sql); - bool SetPQuery(size_t index, const char *format, ...) ATTR_PRINTF(3, 4); + bool SetQuery(size_t index, const char* sql); + template<typename... Args> + bool SetPQuery(size_t index, const char* sql, Args const&... args) { return SetQuery(index, Trinity::StringFormat(sql, args...).c_str()); } bool SetPreparedQuery(size_t index, PreparedStatement* stmt); void SetSize(size_t size); QueryResult GetResult(size_t index); diff --git a/src/server/shared/Database/Transaction.cpp b/src/server/shared/Database/Transaction.cpp index 9f36d198bde..f657411f716 100644 --- a/src/server/shared/Database/Transaction.cpp +++ b/src/server/shared/Database/Transaction.cpp @@ -30,17 +30,6 @@ void Transaction::Append(const char* sql) m_queries.push_back(data); } -void Transaction::PAppend(const char* sql, ...) -{ - va_list ap; - char szQuery [MAX_QUERY_LEN]; - va_start(ap, sql); - vsnprintf(szQuery, MAX_QUERY_LEN, sql, ap); - va_end(ap); - - Append(szQuery); -} - //- Append a prepared statement to the transaction void Transaction::Append(PreparedStatement* stmt) { diff --git a/src/server/shared/Database/Transaction.h b/src/server/shared/Database/Transaction.h index 83d59006ddc..a51c96ea93b 100644 --- a/src/server/shared/Database/Transaction.h +++ b/src/server/shared/Database/Transaction.h @@ -19,6 +19,7 @@ #define _TRANSACTION_H #include "SQLOperation.h" +#include "StringFormat.h" //- Forward declare (don't include header to prevent circular includes) class PreparedStatement; @@ -38,7 +39,8 @@ class Transaction void Append(PreparedStatement* statement); void Append(const char* sql); - void PAppend(const char* sql, ...); + template<typename... Args> + void PAppend(const char* sql, Args const&... args) { Append(Trinity::StringFormat(sql, args...).c_str()); } size_t GetSize() const { return m_queries.size(); } @@ -59,8 +61,8 @@ class TransactionTask : public SQLOperation friend class DatabaseWorker; public: - TransactionTask(SQLTransaction trans) : m_trans(trans) { } ; - ~TransactionTask(){ }; + TransactionTask(SQLTransaction trans) : m_trans(trans) { } + ~TransactionTask() { } protected: bool Execute() override; diff --git a/src/server/shared/Debugging/WheatyExceptionReport.cpp b/src/server/shared/Debugging/WheatyExceptionReport.cpp index e9f4f9ca9ac..e9f888f280d 100644 --- a/src/server/shared/Debugging/WheatyExceptionReport.cpp +++ b/src/server/shared/Debugging/WheatyExceptionReport.cpp @@ -61,6 +61,9 @@ HANDLE WheatyExceptionReport::m_hDumpFile; HANDLE WheatyExceptionReport::m_hProcess; SymbolPairs WheatyExceptionReport::symbols; std::stack<SymbolDetail> WheatyExceptionReport::symbolDetails; +bool WheatyExceptionReport::stackOverflowException; +bool WheatyExceptionReport::alreadyCrashed; +std::mutex WheatyExceptionReport::alreadyCrashedLock; // Declare global instance of class WheatyExceptionReport g_WheatyExceptionReport; @@ -72,6 +75,8 @@ WheatyExceptionReport::WheatyExceptionReport() // Constructor // Install the unhandled exception filter function m_previousFilter = SetUnhandledExceptionFilter(WheatyUnhandledExceptionFilter); m_hProcess = GetCurrentProcess(); + stackOverflowException = false; + alreadyCrashed = false; if (!IsDebuggerPresent()) { _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE); @@ -97,6 +102,16 @@ WheatyExceptionReport::~WheatyExceptionReport() LONG WINAPI WheatyExceptionReport::WheatyUnhandledExceptionFilter( PEXCEPTION_POINTERS pExceptionInfo) { + std::unique_lock<std::mutex> guard(alreadyCrashedLock); + // Handle only 1 exception in the whole process lifetime + if (alreadyCrashed) + return EXCEPTION_EXECUTE_HANDLER; + + alreadyCrashed = true; + + if (pExceptionInfo->ExceptionRecord->ExceptionCode == STATUS_STACK_OVERFLOW) + stackOverflowException = true; + TCHAR module_folder_name[MAX_PATH]; GetModuleFileName(0, module_folder_name, MAX_PATH); TCHAR* pos = _tcsrchr(module_folder_name, '\\'); @@ -419,107 +434,114 @@ void WheatyExceptionReport::printTracesForAllThreads(bool bWriteVariables) void WheatyExceptionReport::GenerateExceptionReport( PEXCEPTION_POINTERS pExceptionInfo) { - SYSTEMTIME systime; - GetLocalTime(&systime); - - // Start out with a banner - _tprintf(_T("Revision: %s\r\n"), _FULLVERSION); - _tprintf(_T("Date %u:%u:%u. Time %u:%u \r\n"), systime.wDay, systime.wMonth, systime.wYear, systime.wHour, systime.wMinute); - PEXCEPTION_RECORD pExceptionRecord = pExceptionInfo->ExceptionRecord; - - PrintSystemInfo(); - // First print information about the type of fault - _tprintf(_T("\r\n//=====================================================\r\n")); - _tprintf(_T("Exception code: %08X %s\r\n"), - pExceptionRecord->ExceptionCode, - GetExceptionString(pExceptionRecord->ExceptionCode)); - - // Now print information about where the fault occured - TCHAR szFaultingModule[MAX_PATH]; - DWORD section; - DWORD_PTR offset; - GetLogicalAddress(pExceptionRecord->ExceptionAddress, - szFaultingModule, - sizeof(szFaultingModule), - section, offset); + __try + { + SYSTEMTIME systime; + GetLocalTime(&systime); + + // Start out with a banner + _tprintf(_T("Revision: %s\r\n"), _FULLVERSION); + _tprintf(_T("Date %u:%u:%u. Time %u:%u \r\n"), systime.wDay, systime.wMonth, systime.wYear, systime.wHour, systime.wMinute); + PEXCEPTION_RECORD pExceptionRecord = pExceptionInfo->ExceptionRecord; + + PrintSystemInfo(); + // First print information about the type of fault + _tprintf(_T("\r\n//=====================================================\r\n")); + _tprintf(_T("Exception code: %08X %s\r\n"), + pExceptionRecord->ExceptionCode, + GetExceptionString(pExceptionRecord->ExceptionCode)); + + // Now print information about where the fault occured + TCHAR szFaultingModule[MAX_PATH]; + DWORD section; + DWORD_PTR offset; + GetLogicalAddress(pExceptionRecord->ExceptionAddress, + szFaultingModule, + sizeof(szFaultingModule), + section, offset); #ifdef _M_IX86 - _tprintf(_T("Fault address: %08X %02X:%08X %s\r\n"), - pExceptionRecord->ExceptionAddress, - section, offset, szFaultingModule); + _tprintf(_T("Fault address: %08X %02X:%08X %s\r\n"), + pExceptionRecord->ExceptionAddress, + section, offset, szFaultingModule); #endif #ifdef _M_X64 - _tprintf(_T("Fault address: %016I64X %02X:%016I64X %s\r\n"), - pExceptionRecord->ExceptionAddress, - section, offset, szFaultingModule); + _tprintf(_T("Fault address: %016I64X %02X:%016I64X %s\r\n"), + pExceptionRecord->ExceptionAddress, + section, offset, szFaultingModule); #endif - PCONTEXT pCtx = pExceptionInfo->ContextRecord; + PCONTEXT pCtx = pExceptionInfo->ContextRecord; - // Show the registers - #ifdef _M_IX86 // X86 Only! - _tprintf(_T("\r\nRegisters:\r\n")); + // Show the registers +#ifdef _M_IX86 // X86 Only! + _tprintf(_T("\r\nRegisters:\r\n")); - _tprintf(_T("EAX:%08X\r\nEBX:%08X\r\nECX:%08X\r\nEDX:%08X\r\nESI:%08X\r\nEDI:%08X\r\n") - , pCtx->Eax, pCtx->Ebx, pCtx->Ecx, pCtx->Edx, - pCtx->Esi, pCtx->Edi); + _tprintf(_T("EAX:%08X\r\nEBX:%08X\r\nECX:%08X\r\nEDX:%08X\r\nESI:%08X\r\nEDI:%08X\r\n") + , pCtx->Eax, pCtx->Ebx, pCtx->Ecx, pCtx->Edx, + pCtx->Esi, pCtx->Edi); - _tprintf(_T("CS:EIP:%04X:%08X\r\n"), pCtx->SegCs, pCtx->Eip); - _tprintf(_T("SS:ESP:%04X:%08X EBP:%08X\r\n"), - pCtx->SegSs, pCtx->Esp, pCtx->Ebp); - _tprintf(_T("DS:%04X ES:%04X FS:%04X GS:%04X\r\n"), - pCtx->SegDs, pCtx->SegEs, pCtx->SegFs, pCtx->SegGs); - _tprintf(_T("Flags:%08X\r\n"), pCtx->EFlags); - #endif + _tprintf(_T("CS:EIP:%04X:%08X\r\n"), pCtx->SegCs, pCtx->Eip); + _tprintf(_T("SS:ESP:%04X:%08X EBP:%08X\r\n"), + pCtx->SegSs, pCtx->Esp, pCtx->Ebp); + _tprintf(_T("DS:%04X ES:%04X FS:%04X GS:%04X\r\n"), + pCtx->SegDs, pCtx->SegEs, pCtx->SegFs, pCtx->SegGs); + _tprintf(_T("Flags:%08X\r\n"), pCtx->EFlags); +#endif - #ifdef _M_X64 - _tprintf(_T("\r\nRegisters:\r\n")); - _tprintf(_T("RAX:%016I64X\r\nRBX:%016I64X\r\nRCX:%016I64X\r\nRDX:%016I64X\r\nRSI:%016I64X\r\nRDI:%016I64X\r\n") - _T("R8: %016I64X\r\nR9: %016I64X\r\nR10:%016I64X\r\nR11:%016I64X\r\nR12:%016I64X\r\nR13:%016I64X\r\nR14:%016I64X\r\nR15:%016I64X\r\n") - , pCtx->Rax, pCtx->Rbx, pCtx->Rcx, pCtx->Rdx, - pCtx->Rsi, pCtx->Rdi, pCtx->R9, pCtx->R10, pCtx->R11, pCtx->R12, pCtx->R13, pCtx->R14, pCtx->R15); - _tprintf(_T("CS:RIP:%04X:%016I64X\r\n"), pCtx->SegCs, pCtx->Rip); - _tprintf(_T("SS:RSP:%04X:%016X RBP:%08X\r\n"), - pCtx->SegSs, pCtx->Rsp, pCtx->Rbp); - _tprintf(_T("DS:%04X ES:%04X FS:%04X GS:%04X\r\n"), - pCtx->SegDs, pCtx->SegEs, pCtx->SegFs, pCtx->SegGs); - _tprintf(_T("Flags:%08X\r\n"), pCtx->EFlags); - #endif +#ifdef _M_X64 + _tprintf(_T("\r\nRegisters:\r\n")); + _tprintf(_T("RAX:%016I64X\r\nRBX:%016I64X\r\nRCX:%016I64X\r\nRDX:%016I64X\r\nRSI:%016I64X\r\nRDI:%016I64X\r\n") + _T("R8: %016I64X\r\nR9: %016I64X\r\nR10:%016I64X\r\nR11:%016I64X\r\nR12:%016I64X\r\nR13:%016I64X\r\nR14:%016I64X\r\nR15:%016I64X\r\n") + , pCtx->Rax, pCtx->Rbx, pCtx->Rcx, pCtx->Rdx, + pCtx->Rsi, pCtx->Rdi, pCtx->R9, pCtx->R10, pCtx->R11, pCtx->R12, pCtx->R13, pCtx->R14, pCtx->R15); + _tprintf(_T("CS:RIP:%04X:%016I64X\r\n"), pCtx->SegCs, pCtx->Rip); + _tprintf(_T("SS:RSP:%04X:%016X RBP:%08X\r\n"), + pCtx->SegSs, pCtx->Rsp, pCtx->Rbp); + _tprintf(_T("DS:%04X ES:%04X FS:%04X GS:%04X\r\n"), + pCtx->SegDs, pCtx->SegEs, pCtx->SegFs, pCtx->SegGs); + _tprintf(_T("Flags:%08X\r\n"), pCtx->EFlags); +#endif - SymSetOptions(SYMOPT_DEFERRED_LOADS); + SymSetOptions(SYMOPT_DEFERRED_LOADS); - // Initialize DbgHelp - if (!SymInitialize(GetCurrentProcess(), 0, TRUE)) - { - _tprintf(_T("\n\rCRITICAL ERROR.\n\r Couldn't initialize the symbol handler for process.\n\rError [%s].\n\r\n\r"), - ErrorMessage(GetLastError())); - } + // Initialize DbgHelp + if (!SymInitialize(GetCurrentProcess(), 0, TRUE)) + { + _tprintf(_T("\n\rCRITICAL ERROR.\n\r Couldn't initialize the symbol handler for process.\n\rError [%s].\n\r\n\r"), + ErrorMessage(GetLastError())); + } - CONTEXT trashableContext = *pCtx; + CONTEXT trashableContext = *pCtx; - WriteStackDetails(&trashableContext, false, NULL); - printTracesForAllThreads(false); + WriteStackDetails(&trashableContext, false, NULL); + printTracesForAllThreads(false); -// #ifdef _M_IX86 // X86 Only! + // #ifdef _M_IX86 // X86 Only! - _tprintf(_T("========================\r\n")); - _tprintf(_T("Local Variables And Parameters\r\n")); + _tprintf(_T("========================\r\n")); + _tprintf(_T("Local Variables And Parameters\r\n")); - trashableContext = *pCtx; - WriteStackDetails(&trashableContext, true, NULL); - printTracesForAllThreads(true); + trashableContext = *pCtx; + WriteStackDetails(&trashableContext, true, NULL); + printTracesForAllThreads(true); - /*_tprintf(_T("========================\r\n")); - _tprintf(_T("Global Variables\r\n")); + /*_tprintf(_T("========================\r\n")); + _tprintf(_T("Global Variables\r\n")); - SymEnumSymbols(GetCurrentProcess(), + SymEnumSymbols(GetCurrentProcess(), (UINT_PTR)GetModuleHandle(szFaultingModule), 0, EnumerateSymbolsCallback, 0);*/ - // #endif // X86 Only! + // #endif // X86 Only! - SymCleanup(GetCurrentProcess()); + SymCleanup(GetCurrentProcess()); - _tprintf(_T("\r\n")); + _tprintf(_T("\r\n")); + } + __except (EXCEPTION_EXECUTE_HANDLER) + { + _tprintf(_T("Error writing the crash log\r\n")); + } } //====================================================================== @@ -1068,7 +1090,7 @@ bool logChildren) { case btChar: case btStdString: - FormatOutputValue(buffer, basicType, length, (PVOID)offset, sizeof(buffer)); + FormatOutputValue(buffer, basicType, length, (PVOID)offset, sizeof(buffer), elementsCount); symbolDetails.top().Value = buffer; break; default: @@ -1196,7 +1218,8 @@ void WheatyExceptionReport::FormatOutputValue(char * pszCurrBuffer, BasicType basicType, DWORD64 length, PVOID pAddress, -size_t bufferSize) +size_t bufferSize, +size_t countOverride) { __try { @@ -1204,10 +1227,15 @@ size_t bufferSize) { case btChar: { - if (strlen((char*)pAddress) > bufferSize - 6) + // Special case handling for char[] type + if (countOverride != 0) + length = countOverride; + else + length = strlen((char*)pAddress); + if (length > bufferSize - 6) pszCurrBuffer += sprintf(pszCurrBuffer, "\"%.*s...\"", bufferSize - 6, (char*)pAddress); else - pszCurrBuffer += sprintf(pszCurrBuffer, "\"%s\"", (char*)pAddress); + pszCurrBuffer += sprintf(pszCurrBuffer, "\"%.*s\"", length, (char*)pAddress); break; } case btStdString: @@ -1307,16 +1335,43 @@ DWORD_PTR WheatyExceptionReport::DereferenceUnsafePointer(DWORD_PTR address) //============================================================================ int __cdecl WheatyExceptionReport::_tprintf(const TCHAR * format, ...) { - TCHAR szBuff[WER_LARGE_BUFFER_SIZE]; int retValue; - DWORD cbWritten; va_list argptr; - va_start(argptr, format); + if (stackOverflowException) + { + retValue = heapprintf(format, argptr); + va_end(argptr); + } + else + { + retValue = stackprintf(format, argptr); + va_end(argptr); + } + + return retValue; +} + +int __cdecl WheatyExceptionReport::stackprintf(const TCHAR * format, va_list argptr) +{ + int retValue; + DWORD cbWritten; + + TCHAR szBuff[WER_LARGE_BUFFER_SIZE]; retValue = vsprintf(szBuff, format, argptr); - va_end(argptr); + WriteFile(m_hReportFile, szBuff, retValue * sizeof(TCHAR), &cbWritten, 0); + + return retValue; +} +int __cdecl WheatyExceptionReport::heapprintf(const TCHAR * format, va_list argptr) +{ + int retValue; + DWORD cbWritten; + TCHAR* szBuff = (TCHAR*)malloc(sizeof(TCHAR) * WER_LARGE_BUFFER_SIZE); + retValue = vsprintf(szBuff, format, argptr); WriteFile(m_hReportFile, szBuff, retValue * sizeof(TCHAR), &cbWritten, 0); + free(szBuff); return retValue; } diff --git a/src/server/shared/Debugging/WheatyExceptionReport.h b/src/server/shared/Debugging/WheatyExceptionReport.h index 9137b91aac9..ef6334add16 100644 --- a/src/server/shared/Debugging/WheatyExceptionReport.h +++ b/src/server/shared/Debugging/WheatyExceptionReport.h @@ -172,12 +172,14 @@ class WheatyExceptionReport static char * DumpTypeIndex(char *, DWORD64, DWORD, unsigned, DWORD_PTR, bool &, const char*, char*, bool, bool); - static void FormatOutputValue(char * pszCurrBuffer, BasicType basicType, DWORD64 length, PVOID pAddress, size_t bufferSize); + static void FormatOutputValue(char * pszCurrBuffer, BasicType basicType, DWORD64 length, PVOID pAddress, size_t bufferSize, size_t countOverride = 0); static BasicType GetBasicType(DWORD typeIndex, DWORD64 modBase); static DWORD_PTR DereferenceUnsafePointer(DWORD_PTR address); static int __cdecl _tprintf(const TCHAR * format, ...); + static int __cdecl stackprintf(const TCHAR * format, va_list argptr); + static int __cdecl heapprintf(const TCHAR * format, va_list argptr); static bool StoreSymbol(DWORD type , DWORD_PTR offset); static void ClearSymbols(); @@ -191,6 +193,9 @@ class WheatyExceptionReport static HANDLE m_hProcess; static SymbolPairs symbols; static std::stack<SymbolDetail> symbolDetails; + static bool stackOverflowException; + static bool alreadyCrashed; + static std::mutex alreadyCrashedLock; static char* PushSymbolDetail(char* pszCurrBuffer); static char* PopSymbolDetail(char* pszCurrBuffer); diff --git a/src/server/shared/Define.h b/src/server/shared/Define.h index add7995ad8f..97e07cef8b3 100644 --- a/src/server/shared/Define.h +++ b/src/server/shared/Define.h @@ -78,9 +78,9 @@ #endif //!COREDEBUG #if COMPILER == COMPILER_GNU -# define ATTR_NORETURN __attribute__((noreturn)) -# define ATTR_PRINTF(F, V) __attribute__ ((format (printf, F, V))) -# define ATTR_DEPRECATED __attribute__((deprecated)) +# define ATTR_NORETURN __attribute__((__noreturn__)) +# define ATTR_PRINTF(F, V) __attribute__ ((__format__ (__printf__, F, V))) +# define ATTR_DEPRECATED __attribute__((__deprecated__)) #else //COMPILER != COMPILER_GNU # define ATTR_NORETURN # define ATTR_PRINTF(F, V) diff --git a/src/server/shared/Dynamic/ObjectRegistry.h b/src/server/shared/Dynamic/ObjectRegistry.h index be253f947a7..1eb9368be61 100644 --- a/src/server/shared/Dynamic/ObjectRegistry.h +++ b/src/server/shared/Dynamic/ObjectRegistry.h @@ -47,12 +47,12 @@ class ObjectRegistry } /// Inserts a registry item - bool InsertItem(T *obj, Key key, bool override = false) + bool InsertItem(T *obj, Key key, bool _override = false) { typename RegistryMapType::iterator iter = i_registeredObjects.find(key); if ( iter != i_registeredObjects.end() ) { - if ( !override ) + if ( !_override ) return false; delete iter->second; i_registeredObjects.erase(iter); diff --git a/src/server/shared/Logging/Appender.cpp b/src/server/shared/Logging/Appender.cpp index dff931e3da8..31db3ae1b86 100644 --- a/src/server/shared/Logging/Appender.cpp +++ b/src/server/shared/Logging/Appender.cpp @@ -18,6 +18,10 @@ #include "Appender.h" #include "Common.h" #include "Util.h" +#include "StringFormat.h" + +#include <utility> +#include <sstream> std::string LogMessage::getTimeStr(time_t time) { @@ -68,38 +72,23 @@ void Appender::setLogLevel(LogLevel _level) level = _level; } -void Appender::write(LogMessage& message) +void Appender::write(LogMessage* message) { - if (!level || level > message.level) + if (!level || level > message->level) return; - message.prefix.clear(); + std::ostringstream ss; + if (flags & APPENDER_FLAGS_PREFIX_TIMESTAMP) - message.prefix.append(message.getTimeStr()); + ss << message->getTimeStr() << ' '; if (flags & APPENDER_FLAGS_PREFIX_LOGLEVEL) - { - if (!message.prefix.empty()) - message.prefix.push_back(' '); - - char text[MAX_QUERY_LEN]; - snprintf(text, MAX_QUERY_LEN, "%-5s", Appender::getLogLevelString(message.level)); - message.prefix.append(text); - } + ss << Trinity::StringFormat("%-5s ", Appender::getLogLevelString(message->level)); if (flags & APPENDER_FLAGS_PREFIX_LOGFILTERTYPE) - { - if (!message.prefix.empty()) - message.prefix.push_back(' '); - - message.prefix.push_back('['); - message.prefix.append(message.type); - message.prefix.push_back(']'); - } - - if (!message.prefix.empty()) - message.prefix.push_back(' '); + ss << '[' << message->type << "] "; + message->prefix = ss.str(); _write(message); } diff --git a/src/server/shared/Logging/Appender.h b/src/server/shared/Logging/Appender.h index 6f38eb6aaf7..73af351e41d 100644 --- a/src/server/shared/Logging/Appender.h +++ b/src/server/shared/Logging/Appender.h @@ -21,6 +21,7 @@ #include <unordered_map> #include <string> #include <time.h> +#include <type_traits> #include "Define.h" // Values assigned have their equivalent in enum ACE_Log_Priority @@ -57,16 +58,19 @@ enum AppenderFlags struct LogMessage { - LogMessage(LogLevel _level, std::string const& _type, std::string const& _text) - : level(_level), type(_type), text(_text), mtime(time(NULL)) + LogMessage(LogLevel _level, std::string const& _type, std::string&& _text) + : level(_level), type(_type), text(std::forward<std::string>(_text)), mtime(time(NULL)) { } + LogMessage(LogMessage const& /*other*/) = delete; + LogMessage& operator=(LogMessage const& /*other*/) = delete; + static std::string getTimeStr(time_t time); std::string getTimeStr(); - LogLevel level; - std::string type; - std::string text; + LogLevel const level; + std::string const type; + std::string const text; std::string prefix; std::string param1; time_t mtime; @@ -91,11 +95,11 @@ class Appender AppenderFlags getFlags() const; void setLogLevel(LogLevel); - void write(LogMessage& message); + void write(LogMessage* message); static const char* getLogLevelString(LogLevel level); private: - virtual void _write(LogMessage const& /*message*/) = 0; + virtual void _write(LogMessage const* /*message*/) = 0; uint8 id; std::string name; diff --git a/src/server/shared/Logging/AppenderConsole.cpp b/src/server/shared/Logging/AppenderConsole.cpp index ae27337fb9a..2efa4db4d2e 100644 --- a/src/server/shared/Logging/AppenderConsole.cpp +++ b/src/server/shared/Logging/AppenderConsole.cpp @@ -158,14 +158,14 @@ void AppenderConsole::ResetColor(bool stdout_stream) #endif } -void AppenderConsole::_write(LogMessage const& message) +void AppenderConsole::_write(LogMessage const* message) { - bool stdout_stream = !(message.level == LOG_LEVEL_ERROR || message.level == LOG_LEVEL_FATAL); + bool stdout_stream = !(message->level == LOG_LEVEL_ERROR || message->level == LOG_LEVEL_FATAL); if (_colored) { uint8 index; - switch (message.level) + switch (message->level) { case LOG_LEVEL_TRACE: index = 5; @@ -189,9 +189,9 @@ void AppenderConsole::_write(LogMessage const& message) } SetColor(stdout_stream, _colors[index]); - utf8printf(stdout_stream ? stdout : stderr, "%s%s", message.prefix.c_str(), message.text.c_str()); + utf8printf(stdout_stream ? stdout : stderr, "%s%s\n", message->prefix.c_str(), message->text.c_str()); ResetColor(stdout_stream); } else - utf8printf(stdout_stream ? stdout : stderr, "%s%s", message.prefix.c_str(), message.text.c_str()); + utf8printf(stdout_stream ? stdout : stderr, "%s%s\n", message->prefix.c_str(), message->text.c_str()); } diff --git a/src/server/shared/Logging/AppenderConsole.h b/src/server/shared/Logging/AppenderConsole.h index 0f9536b3111..0acf7636e35 100644 --- a/src/server/shared/Logging/AppenderConsole.h +++ b/src/server/shared/Logging/AppenderConsole.h @@ -51,7 +51,7 @@ class AppenderConsole: public Appender private: void SetColor(bool stdout_stream, ColorTypes color); void ResetColor(bool stdout_stream); - void _write(LogMessage const& message) override; + void _write(LogMessage const* message) override; bool _colored; ColorTypes _colors[MaxLogLevels]; }; diff --git a/src/server/shared/Logging/AppenderDB.cpp b/src/server/shared/Logging/AppenderDB.cpp index d297d6d08d3..8a329ea3a0f 100644 --- a/src/server/shared/Logging/AppenderDB.cpp +++ b/src/server/shared/Logging/AppenderDB.cpp @@ -23,18 +23,18 @@ AppenderDB::AppenderDB(uint8 id, std::string const& name, LogLevel level) AppenderDB::~AppenderDB() { } -void AppenderDB::_write(LogMessage const& message) +void AppenderDB::_write(LogMessage const* message) { // Avoid infinite loop, PExecute triggers Logging with "sql.sql" type - if (!enabled || !message.type.find("sql")) + if (!enabled || (message->type.find("sql") != std::string::npos)) return; PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_LOG); - stmt->setUInt64(0, message.mtime); + stmt->setUInt64(0, message->mtime); stmt->setUInt32(1, realmId); - stmt->setString(2, message.type); - stmt->setUInt8(3, uint8(message.level)); - stmt->setString(4, message.text); + stmt->setString(2, message->type); + stmt->setUInt8(3, uint8(message->level)); + stmt->setString(4, message->text); LoginDatabase.Execute(stmt); } diff --git a/src/server/shared/Logging/AppenderDB.h b/src/server/shared/Logging/AppenderDB.h index e20ceaf77b4..09affdb46f1 100644 --- a/src/server/shared/Logging/AppenderDB.h +++ b/src/server/shared/Logging/AppenderDB.h @@ -31,7 +31,7 @@ class AppenderDB: public Appender private: uint32 realmId; bool enabled; - void _write(LogMessage const& message) override; + void _write(LogMessage const* message) override; }; #endif diff --git a/src/server/shared/Logging/AppenderFile.cpp b/src/server/shared/Logging/AppenderFile.cpp index 07a88a367ae..5a8d610a36b 100644 --- a/src/server/shared/Logging/AppenderFile.cpp +++ b/src/server/shared/Logging/AppenderFile.cpp @@ -43,21 +43,21 @@ AppenderFile::~AppenderFile() CloseFile(); } -void AppenderFile::_write(LogMessage const& message) +void AppenderFile::_write(LogMessage const* message) { - bool exceedMaxSize = maxFileSize > 0 && (fileSize.load() + message.Size()) > maxFileSize; + bool exceedMaxSize = maxFileSize > 0 && (fileSize.load() + message->Size()) > maxFileSize; if (dynamicName) { char namebuf[TRINITY_PATH_MAX]; - snprintf(namebuf, TRINITY_PATH_MAX, filename.c_str(), message.param1.c_str()); + snprintf(namebuf, TRINITY_PATH_MAX, filename.c_str(), message->param1.c_str()); // always use "a" with dynamic name otherwise it could delete the log we wrote in last _write() call FILE* file = OpenFile(namebuf, "a", backup || exceedMaxSize); if (!file) return; - fprintf(file, "%s%s", message.prefix.c_str(), message.text.c_str()); + fprintf(file, "%s%s\n", message->prefix.c_str(), message->text.c_str()); fflush(file); - fileSize += uint64(message.Size()); + fileSize += uint64(message->Size()); fclose(file); return; } @@ -67,9 +67,9 @@ void AppenderFile::_write(LogMessage const& message) if (!logfile) return; - fprintf(logfile, "%s%s", message.prefix.c_str(), message.text.c_str()); + fprintf(logfile, "%s%s\n", message->prefix.c_str(), message->text.c_str()); fflush(logfile); - fileSize += uint64(message.Size()); + fileSize += uint64(message->Size()); } FILE* AppenderFile::OpenFile(std::string const &filename, std::string const &mode, bool backup) diff --git a/src/server/shared/Logging/AppenderFile.h b/src/server/shared/Logging/AppenderFile.h index 23651fc1129..36afdd23ad1 100644 --- a/src/server/shared/Logging/AppenderFile.h +++ b/src/server/shared/Logging/AppenderFile.h @@ -30,7 +30,7 @@ class AppenderFile: public Appender private: void CloseFile(); - void _write(LogMessage const& message) override; + void _write(LogMessage const* message) override; FILE* logfile; std::string filename; std::string logDir; diff --git a/src/server/shared/Logging/Log.cpp b/src/server/shared/Logging/Log.cpp index 4bf4dacb302..a2150733c6b 100644 --- a/src/server/shared/Logging/Log.cpp +++ b/src/server/shared/Logging/Log.cpp @@ -25,7 +25,6 @@ #include "AppenderDB.h" #include "LogOperation.h" -#include <cstdarg> #include <cstdio> #include <sstream> @@ -199,6 +198,9 @@ void Log::CreateLoggerFromConfig(std::string const& appenderName) return; } + if (level < lowestLogLevel) + lowestLogLevel = level; + logger.Create(name, level); //fprintf(stdout, "Log::CreateLoggerFromConfig: Created Logger %s, Level %u\n", name.c_str(), level); @@ -261,30 +263,18 @@ void Log::ReadLoggersFromConfig() } } -void Log::vlog(std::string const& filter, LogLevel level, char const* str, va_list argptr) -{ - char text[MAX_QUERY_LEN]; - vsnprintf(text, MAX_QUERY_LEN, str, argptr); - write(new LogMessage(level, filter, text)); -} - -void Log::write(LogMessage* msg) const +void Log::write(std::unique_ptr<LogMessage>&& msg) const { Logger const* logger = GetLoggerByType(msg->type); - msg->text.append("\n"); if (_ioService) { - auto logOperation = std::shared_ptr<LogOperation>(new LogOperation(logger, msg)); + auto logOperation = std::shared_ptr<LogOperation>(new LogOperation(logger, std::forward<std::unique_ptr<LogMessage>>(msg))); _ioService->post(_strand->wrap([logOperation](){ logOperation->call(); })); - } else - { - logger->write(*msg); - delete msg; - } + logger->write(msg.get()); } std::string Log::GetTimestampStr() @@ -321,6 +311,9 @@ bool Log::SetLogLevel(std::string const& name, const char* newLevelc, bool isLog return false; it->second.setLogLevel(newLevel); + + if (newLevel != LOG_LEVEL_DISABLED && newLevel < lowestLogLevel) + lowestLogLevel = newLevel; } else { @@ -343,40 +336,20 @@ void Log::outCharDump(char const* str, uint32 accountId, uint64 guid, char const ss << "== START DUMP == (account: " << accountId << " guid: " << guid << " name: " << name << ")\n" << str << "\n== END DUMP ==\n"; - LogMessage* msg = new LogMessage(LOG_LEVEL_INFO, "entities.player.dump", ss.str()); + std::unique_ptr<LogMessage> msg(new LogMessage(LOG_LEVEL_INFO, "entities.player.dump", ss.str())); std::ostringstream param; param << guid << '_' << name; msg->param1 = param.str(); - write(msg); -} - -void Log::outCommand(uint32 account, const char * str, ...) -{ - if (!str || !ShouldLog("commands.gm", LOG_LEVEL_INFO)) - return; - - va_list ap; - va_start(ap, str); - char text[MAX_QUERY_LEN]; - vsnprintf(text, MAX_QUERY_LEN, str, ap); - va_end(ap); - - LogMessage* msg = new LogMessage(LOG_LEVEL_INFO, "commands.gm", text); - - std::ostringstream ss; - ss << account; - msg->param1 = ss.str(); - - write(msg); + write(std::move(msg)); } void Log::SetRealmId(uint32 id) { for (AppenderMap::iterator it = appenders.begin(); it != appenders.end(); ++it) if (it->second && it->second->getType() == APPENDER_DB) - ((AppenderDB *)it->second)->setRealmId(id); + static_cast<AppenderDB*>(it->second)->setRealmId(id); } void Log::Close() @@ -394,6 +367,7 @@ void Log::LoadFromConfig() { Close(); + lowestLogLevel = LOG_LEVEL_FATAL; AppenderId = 0; m_logsDir = sConfigMgr->GetStringDefault("LogsDir", ""); if (!m_logsDir.empty()) diff --git a/src/server/shared/Logging/Log.h b/src/server/shared/Logging/Log.h index 1d67ff87f76..e22a06e635e 100644 --- a/src/server/shared/Logging/Log.h +++ b/src/server/shared/Logging/Log.h @@ -22,12 +22,14 @@ #include "Define.h" #include "Appender.h" #include "Logger.h" -#include <stdarg.h> +#include "StringFormat.h" #include <boost/asio/io_service.hpp> #include <boost/asio/strand.hpp> +#include <stdarg.h> #include <unordered_map> #include <string> +#include <memory> #define LOGGER_ROOT "root" @@ -59,17 +61,32 @@ class Log bool ShouldLog(std::string const& type, LogLevel level) const; bool SetLogLevel(std::string const& name, char const* level, bool isLogger = true); - void outMessage(std::string const& f, LogLevel level, char const* str, ...) ATTR_PRINTF(4, 5); + template<typename... Args> + inline void outMessage(std::string const& filter, LogLevel const level, const char* fmt, Args const&... args) + { + write(std::unique_ptr<LogMessage>(new LogMessage(level, filter, Trinity::StringFormat(fmt, args...)))); + } + + template<typename... Args> + void outCommand(uint32 account, const char* fmt, Args const&... args) + { + if (!ShouldLog("commands.gm", LOG_LEVEL_INFO)) + return; + + std::unique_ptr<LogMessage> msg(new LogMessage(LOG_LEVEL_INFO, "commands.gm", std::move(Trinity::StringFormat(fmt, args...)))); + + msg->param1 = std::to_string(account); + + write(std::move(msg)); + } - void outCommand(uint32 account, const char * str, ...) ATTR_PRINTF(3, 4); void outCharDump(char const* str, uint32 account_id, uint64 guid, char const* name); void SetRealmId(uint32 id); private: static std::string GetTimestampStr(); - void vlog(std::string const& f, LogLevel level, char const* str, va_list argptr); - void write(LogMessage* msg) const; + void write(std::unique_ptr<LogMessage>&& msg) const; Logger const* GetLoggerByType(std::string const& type) const; Appender* GetAppenderByName(std::string const& name); @@ -82,6 +99,7 @@ class Log AppenderMap appenders; LoggerMap loggers; uint8 AppenderId; + LogLevel lowestLogLevel; std::string m_logsDir; std::string m_logsTimestamp; @@ -113,6 +131,10 @@ inline bool Log::ShouldLog(std::string const& type, LogLevel level) const // Speed up in cases where requesting "Type.sub1.sub2" but only configured // Logger "Type" + // Don't even look for a logger if the LogLevel is lower than lowest log levels across all loggers + if (level < lowestLogLevel) + return false; + Logger const* logger = GetLoggerByType(type); if (!logger) return false; @@ -121,23 +143,34 @@ inline bool Log::ShouldLog(std::string const& type, LogLevel level) const return logLevel != LOG_LEVEL_DISABLED && logLevel <= level; } -inline void Log::outMessage(std::string const& filter, LogLevel level, const char * str, ...) -{ - va_list ap; - va_start(ap, str); - - vlog(filter, level, str, ap); - - va_end(ap); -} - #define sLog Log::instance() +#define LOG_EXCEPTION_FREE(filterType__, level__, ...) \ + { \ + try \ + { \ + sLog->outMessage(filterType__, level__, __VA_ARGS__); \ + } \ + catch (std::exception& e) \ + { \ + sLog->outMessage("server", LOG_LEVEL_ERROR, "Wrong format occurred (%s) at %s:%u.", \ + e.what(), __FILE__, __LINE__); \ + } \ + } + #if PLATFORM != PLATFORM_WINDOWS +void check_args(const char* format, ...) ATTR_PRINTF(1, 2); + +// This will catch format errors on build time #define TC_LOG_MESSAGE_BODY(filterType__, level__, ...) \ do { \ if (sLog->ShouldLog(filterType__, level__)) \ - sLog->outMessage(filterType__, level__, __VA_ARGS__); \ + { \ + if (false) \ + check_args(__VA_ARGS__); \ + \ + LOG_EXCEPTION_FREE(filterType__, level__, __VA_ARGS__); \ + } \ } while (0) #else #define TC_LOG_MESSAGE_BODY(filterType__, level__, ...) \ @@ -145,7 +178,7 @@ inline void Log::outMessage(std::string const& filter, LogLevel level, const cha __pragma(warning(disable:4127)) \ do { \ if (sLog->ShouldLog(filterType__, level__)) \ - sLog->outMessage(filterType__, level__, __VA_ARGS__); \ + LOG_EXCEPTION_FREE(filterType__, level__, __VA_ARGS__); \ } while (0) \ __pragma(warning(pop)) #endif diff --git a/src/server/shared/Logging/LogOperation.cpp b/src/server/shared/Logging/LogOperation.cpp index 9afb28a49c2..bcd923c705e 100644 --- a/src/server/shared/Logging/LogOperation.cpp +++ b/src/server/shared/Logging/LogOperation.cpp @@ -18,14 +18,8 @@ #include "LogOperation.h" #include "Logger.h" -LogOperation::~LogOperation() -{ - delete msg; -} - int LogOperation::call() { - if (logger && msg) - logger->write(*msg); + logger->write(msg.get()); return 0; } diff --git a/src/server/shared/Logging/LogOperation.h b/src/server/shared/Logging/LogOperation.h index b8655413273..ffdd35c3c09 100644 --- a/src/server/shared/Logging/LogOperation.h +++ b/src/server/shared/Logging/LogOperation.h @@ -18,23 +18,25 @@ #ifndef LOGOPERATION_H #define LOGOPERATION_H +#include <memory> + class Logger; struct LogMessage; class LogOperation { public: - LogOperation(Logger const* _logger, LogMessage* _msg) - : logger(_logger), msg(_msg) + LogOperation(Logger const* _logger, std::unique_ptr<LogMessage>&& _msg) + : logger(_logger), msg(std::forward<std::unique_ptr<LogMessage>>(_msg)) { } - ~LogOperation(); + ~LogOperation() { } int call(); protected: Logger const* logger; - LogMessage* msg; + std::unique_ptr<LogMessage> msg; }; #endif diff --git a/src/server/shared/Logging/Logger.cpp b/src/server/shared/Logging/Logger.cpp index 615732deb30..3b02eb47575 100644 --- a/src/server/shared/Logging/Logger.cpp +++ b/src/server/shared/Logging/Logger.cpp @@ -50,9 +50,9 @@ void Logger::setLogLevel(LogLevel _level) level = _level; } -void Logger::write(LogMessage& message) const +void Logger::write(LogMessage* message) const { - if (!level || level > message.level || message.text.empty()) + if (!level || level > message->level || message->text.empty()) { //fprintf(stderr, "Logger::write: Logger %s, Level %u. Msg %s Level %u WRONG LEVEL MASK OR EMPTY MSG\n", getName().c_str(), getLogLevel(), message.text.c_str(), message.level); return; diff --git a/src/server/shared/Logging/Logger.h b/src/server/shared/Logging/Logger.h index a81ee8d7bd2..1aee75c5d72 100644 --- a/src/server/shared/Logging/Logger.h +++ b/src/server/shared/Logging/Logger.h @@ -32,7 +32,7 @@ class Logger std::string const& getName() const; LogLevel getLogLevel() const; void setLogLevel(LogLevel level); - void write(LogMessage& message) const; + void write(LogMessage* message) const; private: std::string name; diff --git a/src/server/shared/Networking/MessageBuffer.h b/src/server/shared/Networking/MessageBuffer.h index 90afaf35796..95e26974626 100644 --- a/src/server/shared/Networking/MessageBuffer.h +++ b/src/server/shared/Networking/MessageBuffer.h @@ -55,9 +55,9 @@ public: uint8* GetBasePointer() { return _storage.data(); } - uint8* GetReadPointer() { return &_storage[_rpos]; } + uint8* GetReadPointer() { return GetBasePointer() + _rpos; } - uint8* GetWritePointer() { return &_storage[_wpos]; } + uint8* GetWritePointer() { return GetBasePointer() + _wpos; } void ReadCompleted(size_type bytes) { _rpos += bytes; } diff --git a/src/server/shared/Networking/Socket.h b/src/server/shared/Networking/Socket.h index f6bf3976b85..1989411bccb 100644 --- a/src/server/shared/Networking/Socket.h +++ b/src/server/shared/Networking/Socket.h @@ -34,7 +34,9 @@ using boost::asio::ip::tcp; #define READ_BLOCK_SIZE 4096 -#define TC_SOCKET_USE_IOCP BOOST_ASIO_HAS_IOCP +#ifdef BOOST_ASIO_HAS_IOCP +#define TC_SOCKET_USE_IOCP +#endif template<class T> class Socket : public std::enable_shared_from_this<T> @@ -48,6 +50,7 @@ public: virtual ~Socket() { + _closed = true; boost::system::error_code error; _socket.close(error); } @@ -60,7 +63,7 @@ public: return false; #ifndef TC_SOCKET_USE_IOCP - std::unique_lock<std::mutex> guard(_writeLock, std::try_to_lock); + std::unique_lock<std::mutex> guard(_writeLock); if (!guard) return true; @@ -95,26 +98,6 @@ public: std::bind(&Socket<T>::ReadHandlerInternal, this->shared_from_this(), std::placeholders::_1, std::placeholders::_2)); } - void ReadData(std::size_t size) - { - if (!IsOpen()) - return; - - boost::system::error_code error; - - std::size_t bytesRead = boost::asio::read(_socket, boost::asio::buffer(_readBuffer.GetWritePointer(), size), error); - - _readBuffer.WriteCompleted(bytesRead); - - if (error || bytesRead != size) - { - TC_LOG_DEBUG("network", "Socket::ReadData: %s errored with: %i (%s)", GetRemoteIpAddress().to_string().c_str(), error.value(), - error.message().c_str()); - - CloseSocket(); - } - } - void QueuePacket(MessageBuffer&& buffer, std::unique_lock<std::mutex>& guard) { _writeQueue.push(std::move(buffer)); @@ -138,6 +121,8 @@ public: if (shutdownError) TC_LOG_DEBUG("network", "Socket::CloseSocket: %s errored when shutting down socket: %i (%s)", GetRemoteIpAddress().to_string().c_str(), shutdownError.value(), shutdownError.message().c_str()); + + OnClose(); } /// Marks the socket for closing after write buffer becomes empty @@ -146,6 +131,8 @@ public: MessageBuffer& GetReadBuffer() { return _readBuffer; } protected: + virtual void OnClose() { } + virtual void ReadHandler() = 0; bool AsyncProcessQueue(std::unique_lock<std::mutex>&) diff --git a/src/server/shared/Networking/SocketMgr.h b/src/server/shared/Networking/SocketMgr.h index df57baf257e..2078ae90c62 100644 --- a/src/server/shared/Networking/SocketMgr.h +++ b/src/server/shared/Networking/SocketMgr.h @@ -99,7 +99,7 @@ public: } catch (boost::system::system_error const& err) { - TC_LOG_INFO("network", "Failed to retrieve client's remote address %s", err.what()); + TC_LOG_WARN("network", "Failed to retrieve client's remote address %s", err.what()); } } diff --git a/src/server/shared/PrecompiledHeaders/sharedPCH.h b/src/server/shared/PrecompiledHeaders/sharedPCH.h index d0c15b17f0c..87af9f44eb7 100644 --- a/src/server/shared/PrecompiledHeaders/sharedPCH.h +++ b/src/server/shared/PrecompiledHeaders/sharedPCH.h @@ -6,3 +6,4 @@ #include "SQLOperation.h" #include "Errors.h" #include "TypeList.h" +#include "TaskScheduler.h" diff --git a/src/server/shared/Threading/ProducerConsumerQueue.h b/src/server/shared/Threading/ProducerConsumerQueue.h index ab01568309b..e2f13e5c339 100644 --- a/src/server/shared/Threading/ProducerConsumerQueue.h +++ b/src/server/shared/Threading/ProducerConsumerQueue.h @@ -70,7 +70,9 @@ public: { std::unique_lock<std::mutex> lock(_queueLock); - _condition.wait(lock, [this]() { return !_queue.empty() || _shutdown; }); + // we could be using .wait(lock, predicate) overload here but some threading error analysis tools produce false positives + while (_queue.empty() && !_shutdown) + _condition.wait(lock); if (_queue.empty() || _shutdown) return; diff --git a/src/server/shared/Updater/DBUpdater.cpp b/src/server/shared/Updater/DBUpdater.cpp new file mode 100644 index 00000000000..20ded669cec --- /dev/null +++ b/src/server/shared/Updater/DBUpdater.cpp @@ -0,0 +1,414 @@ +/* + * Copyright (C) 2008-2015 TrinityCore <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 (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, see <http://www.gnu.org/licenses/>. + */ + +#include "DBUpdater.h" +#include "Log.h" +#include "revision.h" +#include "UpdateFetcher.h" +#include "DatabaseLoader.h" +#include "Config.h" + +#include <fstream> +#include <iostream> +#include <unordered_map> +#include <boost/process.hpp> +#include <boost/iostreams/device/file_descriptor.hpp> +#include <boost/system/system_error.hpp> + +using namespace boost::process; +using namespace boost::process::initializers; +using namespace boost::iostreams; + +template<class T> +std::string DBUpdater<T>::GetSourceDirectory() +{ + std::string const entry = sConfigMgr->GetStringDefault("Updates.SourcePath", ""); + if (!entry.empty()) + return entry; + else + return _SOURCE_DIRECTORY; +} + +template<class T> +std::string DBUpdater<T>::GetMySqlCli() +{ + std::string const entry = sConfigMgr->GetStringDefault("Updates.MySqlCLIPath", ""); + if (!entry.empty()) + return entry; + else + return _MYSQL_EXECUTABLE; +} + +// Auth Database +template<> +std::string DBUpdater<LoginDatabaseConnection>::GetConfigEntry() +{ + return "Updates.Auth"; +} + +template<> +std::string DBUpdater<LoginDatabaseConnection>::GetTableName() +{ + return "Auth"; +} + +template<> +std::string DBUpdater<LoginDatabaseConnection>::GetBaseFile() +{ + return DBUpdater<LoginDatabaseConnection>::GetSourceDirectory() + "/sql/base/auth_database.sql"; +} + +template<> +bool DBUpdater<LoginDatabaseConnection>::IsEnabled(uint32 const updateMask) +{ + // This way silences warnings under msvc + return (updateMask & DatabaseLoader::DATABASE_LOGIN) ? true : false; +} + +// World Database +template<> +std::string DBUpdater<WorldDatabaseConnection>::GetConfigEntry() +{ + return "Updates.World"; +} + +template<> +std::string DBUpdater<WorldDatabaseConnection>::GetTableName() +{ + return "World"; +} + +template<> +std::string DBUpdater<WorldDatabaseConnection>::GetBaseFile() +{ + return _FULL_DATABASE; +} + +template<> +bool DBUpdater<WorldDatabaseConnection>::IsEnabled(uint32 const updateMask) +{ + // This way silences warnings under msvc + return (updateMask & DatabaseLoader::DATABASE_WORLD) ? true : false; +} + +template<> +BaseLocation DBUpdater<WorldDatabaseConnection>::GetBaseLocationType() +{ + return LOCATION_DOWNLOAD; +} + +// Character Database +template<> +std::string DBUpdater<CharacterDatabaseConnection>::GetConfigEntry() +{ + return "Updates.Character"; +} + +template<> +std::string DBUpdater<CharacterDatabaseConnection>::GetTableName() +{ + return "Character"; +} + +template<> +std::string DBUpdater<CharacterDatabaseConnection>::GetBaseFile() +{ + return DBUpdater<CharacterDatabaseConnection>::GetSourceDirectory() + "/sql/base/characters_database.sql"; +} + +template<> +bool DBUpdater<CharacterDatabaseConnection>::IsEnabled(uint32 const updateMask) +{ + // This way silences warnings under msvc + return (updateMask & DatabaseLoader::DATABASE_CHARACTER) ? true : false; +} + +// All +template<class T> +BaseLocation DBUpdater<T>::GetBaseLocationType() +{ + return LOCATION_REPOSITORY; +} + +template<class T> +bool DBUpdater<T>::CheckExecutable() +{ + DBUpdater<T>::Path const exe(DBUpdater<T>::GetMySqlCli()); + if (!exists(exe)) + { + // Check for mysql in path + std::vector<std::string> args = {"--version"}; + uint32 ret; + try + { + child c = execute(run_exe("mysql"), set_args(args), throw_on_error(), close_stdout()); + ret = wait_for_exit(c); + } + catch (boost::system::system_error&) + { + ret = EXIT_FAILURE; + } + + if (ret == EXIT_FAILURE) + { + TC_LOG_FATAL("sql.updates", "Didn't find executeable mysql binary at \'%s\', correct the path in the *.conf (\"Updates.MySqlCLIPath\").", + absolute(exe).generic_string().c_str()); + + return false; + } + } + return true; +} + +template<class T> +bool DBUpdater<T>::Create(DatabaseWorkerPool<T>& pool) +{ + TC_LOG_INFO("sql.updates", "Database \"%s\" does not exist, do you want to create it? [yes (default) / no]: ", + pool.GetConnectionInfo()->database.c_str()); + + std::string answer; + std::getline(std::cin, answer); + if (!answer.empty() && !(answer.substr(0, 1) == "y")) + return false; + + TC_LOG_INFO("sql.updates", "Creating database \"%s\"...", pool.GetConnectionInfo()->database.c_str()); + + // Path of temp file + static Path const temp("create_table.sql"); + + // Create temporary query to use external mysql cli + std::ofstream file(temp.generic_string()); + if (!file.is_open()) + { + TC_LOG_FATAL("sql.updates", "Failed to create temporary query file \"%s\"!", temp.generic_string().c_str()); + return false; + } + + file << "CREATE DATABASE `" << pool.GetConnectionInfo()->database << "` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci\n\n"; + + file.close(); + + try + { + DBUpdater<T>::ApplyFile(pool, pool.GetConnectionInfo()->host, pool.GetConnectionInfo()->user, pool.GetConnectionInfo()->password, + pool.GetConnectionInfo()->port_or_socket, "", temp); + } + catch (UpdateException&) + { + TC_LOG_FATAL("sql.updates", "Failed to create database %s! Has the user `CREATE` priviliges?", pool.GetConnectionInfo()->database.c_str()); + boost::filesystem::remove(temp); + return false; + } + + TC_LOG_INFO("sql.updates", "Done."); + boost::filesystem::remove(temp); + return true; +} + +template<class T> +bool DBUpdater<T>::Update(DatabaseWorkerPool<T>& pool) +{ + if (!DBUpdater<T>::CheckExecutable()) + return false; + + TC_LOG_INFO("sql.updates", "Updating %s database...", DBUpdater<T>::GetTableName().c_str()); + + Path const sourceDirectory(GetSourceDirectory()); + + if (!is_directory(sourceDirectory)) + { + TC_LOG_ERROR("sql.updates", "DBUpdater: Given source directory %s does not exist, skipped!", sourceDirectory.generic_string().c_str()); + return false; + } + + UpdateFetcher updateFetcher(sourceDirectory, [&](std::string const& query) { DBUpdater<T>::Apply(pool, query); }, + [&](Path const& file) { DBUpdater<T>::ApplyFile(pool, file); }, + [&](std::string const& query) -> QueryResult { return DBUpdater<T>::Retrieve(pool, query); }); + + uint32 count; + try + { + count = updateFetcher.Update( + sConfigMgr->GetBoolDefault("Updates.Redundancy", true), + sConfigMgr->GetBoolDefault("Updates.AllowRehash", true), + sConfigMgr->GetBoolDefault("Updates.ArchivedRedundancy", false), + sConfigMgr->GetIntDefault("Updates.CleanDeadRefMaxCount", 3)); + } + catch (UpdateException&) + { + return false; + } + + if (!count) + TC_LOG_INFO("sql.updates", ">> %s database is up-to-date!", DBUpdater<T>::GetTableName().c_str()); + else + TC_LOG_INFO("sql.updates", ">> Applied %d %s.", count, count == 1 ? "query" : "queries"); + + return true; +} + +template<class T> +bool DBUpdater<T>::Populate(DatabaseWorkerPool<T>& pool) +{ + { + QueryResult const result = Retrieve(pool, "SHOW TABLES"); + if (result && (result->GetRowCount() > 0)) + return true; + } + + if (!DBUpdater<T>::CheckExecutable()) + return false; + + TC_LOG_INFO("sql.updates", "Database %s is empty, auto populating it...", DBUpdater<T>::GetTableName().c_str()); + + std::string const p = DBUpdater<T>::GetBaseFile(); + if (p.empty()) + { + TC_LOG_INFO("sql.updates", ">> No base file provided, skipped!"); + return true; + } + + Path const base(p); + if (!exists(base)) + { + switch (DBUpdater<T>::GetBaseLocationType()) + { + case LOCATION_REPOSITORY: + { + TC_LOG_ERROR("sql.updates", ">> Base file \"%s\" is missing, try to clone the source again.", + base.generic_string().c_str()); + + break; + } + case LOCATION_DOWNLOAD: + { + TC_LOG_ERROR("sql.updates", ">> File \"%s\" is missing, download it from \"http://www.trinitycore.org/f/files/category/1-database/\"" \ + " and place it in your server directory.", base.filename().generic_string().c_str()); + break; + } + } + return false; + } + + // Update database + TC_LOG_INFO("sql.updates", ">> Applying \'%s\'...", base.generic_string().c_str()); + try + { + ApplyFile(pool, base); + } + catch (UpdateException&) + { + return false; + } + + TC_LOG_INFO("sql.updates", ">> Done!"); + return true; +} + +template<class T> +QueryResult DBUpdater<T>::Retrieve(DatabaseWorkerPool<T>& pool, std::string const& query) +{ + return pool.PQuery(query.c_str()); +} + +template<class T> +void DBUpdater<T>::Apply(DatabaseWorkerPool<T>& pool, std::string const& query) +{ + pool.DirectExecute(query.c_str()); +} + +template<class T> +void DBUpdater<T>::ApplyFile(DatabaseWorkerPool<T>& pool, Path const& path) +{ + DBUpdater<T>::ApplyFile(pool, pool.GetConnectionInfo()->host, pool.GetConnectionInfo()->user, pool.GetConnectionInfo()->password, + pool.GetConnectionInfo()->port_or_socket, pool.GetConnectionInfo()->database, path); +} + +template<class T> +void DBUpdater<T>::ApplyFile(DatabaseWorkerPool<T>& pool, std::string const& host, std::string const& user, + std::string const& password, std::string const& port_or_socket, std::string const& database, Path const& path) +{ + std::vector<std::string> args; + args.reserve(7); + + // CLI Client connection info + args.push_back("-h" + host); + args.push_back("-u" + user); + args.push_back("-p" + password); + + // Check if we want to connect through ip or socket (Unix only) +#ifdef _WIN32 + + args.push_back("-P" + port_or_socket); + +#else + + if (!std::isdigit(port_or_socket[0])) + { + // We can't check here if host == "." because is named localhost if socket option is enabled + args.push_back("-P0"); + args.push_back("--protocol=SOCKET"); + args.push_back("-S" + port_or_socket); + } + else + // generic case + args.push_back("-P" + port_or_socket); + +#endif + + // Set the default charset to utf8 + args.push_back("--default-character-set=utf8"); + + // Set max allowed packet to 1 GB + args.push_back("--max-allowed-packet=1GB"); + + // Database + if (!database.empty()) + args.push_back(database); + + // ToDo: use the existing query in memory as virtual file if possible + file_descriptor_source source(path); + + uint32 ret; + try + { + child c = execute(run_exe(DBUpdater<T>::GetMySqlCli().empty() ? "mysql" : + boost::filesystem::absolute(DBUpdater<T>::GetMySqlCli()).generic_string()), + set_args(args), bind_stdin(source), throw_on_error()); + + ret = wait_for_exit(c); + } + catch (boost::system::system_error&) + { + ret = EXIT_FAILURE; + } + + source.close(); + + if (ret != EXIT_SUCCESS) + { + TC_LOG_FATAL("sql.updates", "Applying of file \'%s\' to database \'%s\' failed!" \ + " If you are an user pull the latest revision from the repository. If you are a developer fix your sql query.", + path.generic_string().c_str(), pool.GetConnectionInfo()->database.c_str()); + + throw UpdateException("update failed"); + } +} + +template class DBUpdater<LoginDatabaseConnection>; +template class DBUpdater<WorldDatabaseConnection>; +template class DBUpdater<CharacterDatabaseConnection>; diff --git a/src/server/shared/Updater/DBUpdater.h b/src/server/shared/Updater/DBUpdater.h new file mode 100644 index 00000000000..0caf8a438fb --- /dev/null +++ b/src/server/shared/Updater/DBUpdater.h @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2008-2015 TrinityCore <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 (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, see <http://www.gnu.org/licenses/>. + */ + +#ifndef DBUpdater_h__ +#define DBUpdater_h__ + +#include "DatabaseEnv.h" + +#include <string> +#include <boost/filesystem.hpp> + +class UpdateException : public std::exception +{ +public: + UpdateException(std::string const& msg) : _msg(msg) { } + ~UpdateException() throw() { } + + char const* what() const throw() override { return _msg.c_str(); } + +private: + std::string const _msg; +}; + +enum BaseLocation +{ + LOCATION_REPOSITORY, + LOCATION_DOWNLOAD +}; + +template <class T> +class DBUpdater +{ +public: + using Path = boost::filesystem::path; + + static std::string GetSourceDirectory(); + + static inline std::string GetConfigEntry(); + + static inline std::string GetTableName(); + + static std::string GetBaseFile(); + + static bool IsEnabled(uint32 const updateMask); + + static BaseLocation GetBaseLocationType(); + + static bool Create(DatabaseWorkerPool<T>& pool); + + static bool Update(DatabaseWorkerPool<T>& pool); + + static bool Populate(DatabaseWorkerPool<T>& pool); + +private: + static std::string GetMySqlCli(); + static bool CheckExecutable(); + + static QueryResult Retrieve(DatabaseWorkerPool<T>& pool, std::string const& query); + static void Apply(DatabaseWorkerPool<T>& pool, std::string const& query); + static void ApplyFile(DatabaseWorkerPool<T>& pool, Path const& path); + static void ApplyFile(DatabaseWorkerPool<T>& pool, std::string const& host, std::string const& user, + std::string const& password, std::string const& port_or_socket, std::string const& database, Path const& path); +}; + +#endif // DBUpdater_h__ diff --git a/src/server/shared/Updater/UpdateFetcher.cpp b/src/server/shared/Updater/UpdateFetcher.cpp new file mode 100644 index 00000000000..a4bdd193743 --- /dev/null +++ b/src/server/shared/Updater/UpdateFetcher.cpp @@ -0,0 +1,401 @@ +/* + * Copyright (C) 2008-2015 TrinityCore <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 (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, see <http://www.gnu.org/licenses/>. + */ + +#include "UpdateFetcher.h" +#include "Log.h" +#include "Util.h" + +#include <fstream> +#include <chrono> +#include <vector> +#include <sstream> +#include <exception> +#include <unordered_map> +#include <openssl/sha.h> + +using namespace boost::filesystem; + +UpdateFetcher::UpdateFetcher(Path const& sourceDirectory, + std::function<void(std::string const&)> const& apply, + std::function<void(Path const& path)> const& applyFile, + std::function<QueryResult(std::string const&)> const& retrieve) : + _sourceDirectory(sourceDirectory), _apply(apply), _applyFile(applyFile), + _retrieve(retrieve) +{ +} + +UpdateFetcher::LocaleFileStorage UpdateFetcher::GetFileList() const +{ + LocaleFileStorage files; + DirectoryStorage directories = ReceiveIncludedDirectories(); + for (auto const& entry : directories) + FillFileListRecursively(entry.path, files, entry.state, 1); + + return files; +} + +void UpdateFetcher::FillFileListRecursively(Path const& path, LocaleFileStorage& storage, State const state, uint32 const depth) const +{ + static uint32 const MAX_DEPTH = 10; + static directory_iterator const end; + + for (directory_iterator itr(path); itr != end; ++itr) + { + if (is_directory(itr->path())) + { + if (depth < MAX_DEPTH) + FillFileListRecursively(itr->path(), storage, state, depth + 1); + } + else if (itr->path().extension() == ".sql") + { + TC_LOG_TRACE("sql.updates", "Added locale file \"%s\".", itr->path().filename().generic_string().c_str()); + + LocaleFileEntry const entry = { itr->path(), state }; + + // Check for doubled filenames + // Since elements are only compared through their filenames this is ok + if (storage.find(entry) != storage.end()) + { + TC_LOG_FATAL("sql.updates", "Duplicated filename occurred \"%s\", since updates are ordered " \ + "through its filename every name needs to be unique!", itr->path().generic_string().c_str()); + + throw UpdateException("Updating failed, see the log for details."); + } + + storage.insert(entry); + } + } +} + +UpdateFetcher::DirectoryStorage UpdateFetcher::ReceiveIncludedDirectories() const +{ + DirectoryStorage directories; + + QueryResult const result = _retrieve("SELECT `path`, `state` FROM `updates_include`"); + if (!result) + return directories; + + do + { + Field* fields = result->Fetch(); + + std::string path = fields[0].GetString(); + if (path.substr(0, 1) == "$") + path = _sourceDirectory.generic_string() + path.substr(1); + + Path const p(path); + + if (!is_directory(p)) + { + TC_LOG_WARN("sql.updates", "DBUpdater: Given update include directory \"%s\" isn't existing, skipped!", p.generic_string().c_str()); + continue; + } + + DirectoryEntry const entry = { p, AppliedFileEntry::StateConvert(fields[1].GetString()) }; + directories.push_back(entry); + + TC_LOG_TRACE("sql.updates", "Added applied file \"%s\" from remote.", p.filename().generic_string().c_str()); + + } while (result->NextRow()); + + return directories; +} + +UpdateFetcher::AppliedFileStorage UpdateFetcher::ReceiveAppliedFiles() const +{ + AppliedFileStorage map; + + QueryResult result = _retrieve("SELECT `name`, `hash`, `state`, UNIX_TIMESTAMP(`timestamp`) FROM `updates` ORDER BY `name` ASC"); + if (!result) + return map; + + do + { + Field* fields = result->Fetch(); + + AppliedFileEntry const entry = { fields[0].GetString(), fields[1].GetString(), + AppliedFileEntry::StateConvert(fields[2].GetString()), fields[3].GetUInt64() }; + + map.insert(std::make_pair(entry.name, entry)); + } + while (result->NextRow()); + + return map; +} + +UpdateFetcher::SQLUpdate UpdateFetcher::ReadSQLUpdate(boost::filesystem::path const& file) const +{ + std::ifstream in(file.c_str()); + WPFatal(in.is_open(), "Could not read an update file."); + + auto const start_pos = in.tellg(); + in.ignore(std::numeric_limits<std::streamsize>::max()); + auto const char_count = in.gcount(); + in.seekg(start_pos); + + SQLUpdate const update(new std::string(char_count, char{})); + + in.read(&(*update)[0], update->size()); + in.close(); + return update; +} + +uint32 UpdateFetcher::Update(bool const redundancyChecks, bool const allowRehash, bool const archivedRedundancy, int32 const cleanDeadReferencesMaxCount) const +{ + LocaleFileStorage const available = GetFileList(); + AppliedFileStorage applied = ReceiveAppliedFiles(); + + // Fill hash to name cache + HashToFileNameStorage hashToName; + for (auto entry : applied) + hashToName.insert(std::make_pair(entry.second.hash, entry.first)); + + uint32 importedUpdates = 0; + + for (auto const& availableQuery : available) + { + TC_LOG_DEBUG("sql.updates", "Checking update \"%s\"...", availableQuery.first.filename().generic_string().c_str()); + + AppliedFileStorage::const_iterator iter = applied.find(availableQuery.first.filename().string()); + if (iter != applied.end()) + { + // If redundancy is disabled skip it since the update is already applied. + if (!redundancyChecks) + { + TC_LOG_DEBUG("sql.updates", ">> Update is already applied, skipping redundancy checks."); + applied.erase(iter); + continue; + } + + // If the update is in an archived directory and is marked as archived in our database skip redundancy checks (archived updates never change). + if (!archivedRedundancy && (iter->second.state == ARCHIVED) && (availableQuery.second == ARCHIVED)) + { + TC_LOG_DEBUG("sql.updates", ">> Update is archived and marked as archived in database, skipping redundancy checks."); + applied.erase(iter); + continue; + } + } + + // Read update from file + SQLUpdate const update = ReadSQLUpdate(availableQuery.first); + + // Calculate hash + std::string const hash = CalculateHash(update); + + UpdateMode mode = MODE_APPLY; + + // Update is not in our applied list + if (iter == applied.end()) + { + // Catch renames (different filename but same hash) + HashToFileNameStorage::const_iterator const hashIter = hashToName.find(hash); + if (hashIter != hashToName.end()) + { + // Check if the original file was removed if not we've got a problem. + LocaleFileStorage::const_iterator localeIter; + // Push localeIter forward + for (localeIter = available.begin(); (localeIter != available.end()) && + (localeIter->first.filename().string() != hashIter->second); ++localeIter); + + // Conflict! + if (localeIter != available.end()) + { + TC_LOG_WARN("sql.updates", ">> Seems like update \"%s\" \'%s\' was renamed, but the old file is still there! " \ + "Trade it as a new file! (Probably its an unmodified copy of file \"%s\")", + availableQuery.first.filename().string().c_str(), hash.substr(0, 7).c_str(), + localeIter->first.filename().string().c_str()); + } + // Its save to trade the file as renamed here + else + { + TC_LOG_INFO("sql.updates", ">> Renaming update \"%s\" to \"%s\" \'%s\'.", + hashIter->second.c_str(), availableQuery.first.filename().string().c_str(), hash.substr(0, 7).c_str()); + + RenameEntry(hashIter->second, availableQuery.first.filename().string()); + applied.erase(hashIter->second); + continue; + } + } + // Apply the update if it was never seen before. + else + { + TC_LOG_INFO("sql.updates", ">> Applying update \"%s\" \'%s\'...", + availableQuery.first.filename().string().c_str(), hash.substr(0, 7).c_str()); + } + } + // Rehash the update entry if it is contained in our database but with an empty hash. + else if (allowRehash && iter->second.hash.empty()) + { + mode = MODE_REHASH; + + TC_LOG_INFO("sql.updates", ">> Re-hashing update \"%s\" \'%s\'...", availableQuery.first.filename().string().c_str(), + hash.substr(0, 7).c_str()); + } + else + { + // If the hash of the files differs from the one stored in our database reapply the update (because it was changed). + if (iter->second.hash != hash) + { + TC_LOG_INFO("sql.updates", ">> Reapplying update \"%s\" \'%s\' -> \'%s\' (it changed)...", availableQuery.first.filename().string().c_str(), + iter->second.hash.substr(0, 7).c_str(), hash.substr(0, 7).c_str()); + } + else + { + // If the file wasn't changed and just moved update its state if necessary. + if (iter->second.state != availableQuery.second) + { + TC_LOG_DEBUG("sql.updates", ">> Updating state of \"%s\" to \'%s\'...", + availableQuery.first.filename().string().c_str(), AppliedFileEntry::StateConvert(availableQuery.second).c_str()); + + UpdateState(availableQuery.first.filename().string(), availableQuery.second); + } + + TC_LOG_DEBUG("sql.updates", ">> Update is already applied and is matching hash \'%s\'.", hash.substr(0, 7).c_str()); + + applied.erase(iter); + continue; + } + } + + uint32 speed = 0; + AppliedFileEntry const file = { availableQuery.first.filename().string(), hash, availableQuery.second, 0 }; + + switch (mode) + { + case MODE_APPLY: + speed = Apply(availableQuery.first); + /*no break*/ + case MODE_REHASH: + UpdateEntry(file, speed); + break; + } + + if (iter != applied.end()) + applied.erase(iter); + + if (mode == MODE_APPLY) + ++importedUpdates; + } + + // Cleanup up orphaned entries if enabled + if (!applied.empty()) + { + bool const doCleanup = (cleanDeadReferencesMaxCount < 0) || (applied.size() <= static_cast<size_t>(cleanDeadReferencesMaxCount)); + + for (auto const& entry : applied) + { + TC_LOG_WARN("sql.updates", ">> File \'%s\' was applied to the database but is missing in" \ + " your update directory now!", entry.first.c_str()); + + if (doCleanup) + TC_LOG_INFO("sql.updates", "Deleting orphaned entry \'%s\'...", entry.first.c_str()); + } + + if (doCleanup) + CleanUp(applied); + else + { + TC_LOG_ERROR("sql.updates", "Cleanup is disabled! There are " SZFMTD " dirty files that were applied to your database " \ + "but are now missing in your source directory!", applied.size()); + } + } + + return importedUpdates; +} + +std::string UpdateFetcher::CalculateHash(SQLUpdate const& query) const +{ + // Calculate a Sha1 hash based on query content. + unsigned char digest[SHA_DIGEST_LENGTH]; + SHA1((unsigned char*)query->c_str(), query->length(), (unsigned char*)&digest); + + return ByteArrayToHexStr(digest, SHA_DIGEST_LENGTH); +} + +uint32 UpdateFetcher::Apply(Path const& path) const +{ + using Time = std::chrono::high_resolution_clock; + using ms = std::chrono::milliseconds; + + // Benchmark query speed + auto const begin = Time::now(); + + // Update database + _applyFile(path); + + // Return time the query took to apply + return std::chrono::duration_cast<ms>(Time::now() - begin).count(); +} + +void UpdateFetcher::UpdateEntry(AppliedFileEntry const& entry, uint32 const speed) const +{ + std::string const update = "REPLACE INTO `updates` (`name`, `hash`, `state`, `speed`) VALUES (\"" + + entry.name + "\", \"" + entry.hash + "\", \'" + entry.GetStateAsString() + "\', " + std::to_string(speed) + ")"; + + // Update database + _apply(update); +} + +void UpdateFetcher::RenameEntry(std::string const& from, std::string const& to) const +{ + // Delete target if it exists + { + std::string const update = "DELETE FROM `updates` WHERE `name`=\"" + to + "\""; + + // Update database + _apply(update); + } + + // Rename + { + std::string const update = "UPDATE `updates` SET `name`=\"" + to + "\" WHERE `name`=\"" + from + "\""; + + // Update database + _apply(update); + } +} + +void UpdateFetcher::CleanUp(AppliedFileStorage const& storage) const +{ + if (storage.empty()) + return; + + std::stringstream update; + size_t remaining = storage.size(); + + update << "DELETE FROM `updates` WHERE `name` IN("; + + for (auto const& entry : storage) + { + update << "\"" << entry.first << "\""; + if ((--remaining) > 0) + update << ", "; + } + + update << ")"; + + // Update database + _apply(update.str()); +} + +void UpdateFetcher::UpdateState(std::string const& name, State const state) const +{ + std::string const update = "UPDATE `updates` SET `state`=\'" + AppliedFileEntry::StateConvert(state) + "\' WHERE `name`=\"" + name + "\""; + + // Update database + _apply(update); +} diff --git a/src/server/shared/Updater/UpdateFetcher.h b/src/server/shared/Updater/UpdateFetcher.h new file mode 100644 index 00000000000..fa142547873 --- /dev/null +++ b/src/server/shared/Updater/UpdateFetcher.h @@ -0,0 +1,132 @@ +/* + * Copyright (C) 2008-2015 TrinityCore <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 (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, see <http://www.gnu.org/licenses/>. + */ + +#ifndef UpdateFetcher_h__ +#define UpdateFetcher_h__ + +#include <DBUpdater.h> + +#include <functional> +#include <string> +#include <memory> +#include <vector> + +class UpdateFetcher +{ + typedef boost::filesystem::path Path; + +public: + UpdateFetcher(Path const& updateDirectory, + std::function<void(std::string const&)> const& apply, + std::function<void(Path const& path)> const& applyFile, + std::function<QueryResult(std::string const&)> const& retrieve); + + uint32 Update(bool const redundancyChecks, bool const allowRehash, + bool const archivedRedundancy, int32 const cleanDeadReferencesMaxCount) const; + +private: + enum UpdateMode + { + MODE_APPLY, + MODE_REHASH + }; + + enum State + { + RELEASED, + ARCHIVED + }; + + struct AppliedFileEntry + { + AppliedFileEntry(std::string const& name_, std::string const& hash_, State state_, uint64 timestamp_) + : name(name_), hash(hash_), state(state_), timestamp(timestamp_) { } + + std::string const name; + + std::string const hash; + + State const state; + + uint64 const timestamp; + + static inline State StateConvert(std::string const& state) + { + return (state == "RELEASED") ? RELEASED : ARCHIVED; + } + + static inline std::string StateConvert(State const state) + { + return (state == RELEASED) ? "RELEASED" : "ARCHIVED"; + } + + std::string GetStateAsString() const + { + return StateConvert(state); + } + }; + + struct DirectoryEntry + { + DirectoryEntry(Path const& path_, State state_) : path(path_), state(state_) { } + + Path const path; + + State const state; + }; + + typedef std::pair<Path, State> LocaleFileEntry; + + struct PathCompare + { + inline bool operator() (LocaleFileEntry const& left, LocaleFileEntry const& right) const + { + return left.first.filename().string() < right.first.filename().string(); + } + }; + + typedef std::set<LocaleFileEntry, PathCompare> LocaleFileStorage; + typedef std::unordered_map<std::string, std::string> HashToFileNameStorage; + typedef std::unordered_map<std::string, AppliedFileEntry> AppliedFileStorage; + typedef std::vector<UpdateFetcher::DirectoryEntry> DirectoryStorage; + typedef std::shared_ptr<std::string> SQLUpdate; + + LocaleFileStorage GetFileList() const; + void FillFileListRecursively(Path const& path, LocaleFileStorage& storage, State const state, uint32 const depth) const; + + DirectoryStorage ReceiveIncludedDirectories() const; + AppliedFileStorage ReceiveAppliedFiles() const; + + SQLUpdate ReadSQLUpdate(Path const& file) const; + std::string CalculateHash(SQLUpdate const& query) const; + + uint32 Apply(Path const& path) const; + + void UpdateEntry(AppliedFileEntry const& entry, uint32 const speed = 0) const; + void RenameEntry(std::string const& from, std::string const& to) const; + void CleanUp(AppliedFileStorage const& storage) const; + + void UpdateState(std::string const& name, State const state) const; + + Path const _sourceDirectory; + + std::function<void(std::string const&)> const _apply; + std::function<void(Path const& path)> const _applyFile; + std::function<QueryResult(std::string const&)> const _retrieve; +}; + +#endif // UpdateFetcher_h__ diff --git a/src/server/shared/Utilities/ServiceWin32.cpp b/src/server/shared/Utilities/ServiceWin32.cpp index c73949fc6a3..3e5e416b1a3 100644 --- a/src/server/shared/Utilities/ServiceWin32.cpp +++ b/src/server/shared/Utilities/ServiceWin32.cpp @@ -255,7 +255,7 @@ bool WinServiceRun() if (!StartServiceCtrlDispatcher(serviceTable)) { - TC_LOG_ERROR("server.worldserver", "StartService Failed. Error [%u]", ::GetLastError()); + TC_LOG_ERROR("server.worldserver", "StartService Failed. Error [%u]", uint32(::GetLastError())); return false; } return true; diff --git a/src/server/shared/Utilities/StringFormat.h b/src/server/shared/Utilities/StringFormat.h new file mode 100644 index 00000000000..70d9aefb14d --- /dev/null +++ b/src/server/shared/Utilities/StringFormat.h @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/> + * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/> + * + * 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, see <http://www.gnu.org/licenses/>. + */ + +#ifndef TRINITYCORE_STRING_FORMAT_H +#define TRINITYCORE_STRING_FORMAT_H + +#include <format.h> + +namespace Trinity +{ + //! Default TC string format function + template<typename... Args> + inline std::string StringFormat(const char* fmt, Args const&... args) + { + return fmt::sprintf(fmt, args...); + } +} + +#endif diff --git a/src/server/shared/Utilities/TaskScheduler.cpp b/src/server/shared/Utilities/TaskScheduler.cpp new file mode 100644 index 00000000000..4b261413fd9 --- /dev/null +++ b/src/server/shared/Utilities/TaskScheduler.cpp @@ -0,0 +1,208 @@ +/* + * Copyright (C) 2008-2015 TrinityCore <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 (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, see <http://www.gnu.org/licenses/>. + */ + +#include "TaskScheduler.h" + +TaskScheduler& TaskScheduler::Update() +{ + _now = clock_t::now(); + Dispatch(); + return *this; +} + +TaskScheduler& TaskScheduler::Update(size_t const milliseconds) +{ + return Update(std::chrono::milliseconds(milliseconds)); +} + +TaskScheduler& TaskScheduler::Async(std::function<void()> const& callable) +{ + _asyncHolder.push(callable); + return *this; +} + +TaskScheduler& TaskScheduler::CancelAll() +{ + /// Clear the task holder + _task_holder.Clear(); + _asyncHolder = AsyncHolder(); + return *this; +} + +TaskScheduler& TaskScheduler::CancelGroup(group_t const group) +{ + _task_holder.RemoveIf([group](TaskContainer const& task) -> bool + { + return task->IsInGroup(group); + }); + return *this; +} + +TaskScheduler& TaskScheduler::CancelGroupsOf(std::vector<group_t> const& groups) +{ + std::for_each(groups.begin(), groups.end(), + std::bind(&TaskScheduler::CancelGroup, this, std::placeholders::_1)); + + return *this; +} + +TaskScheduler& TaskScheduler::InsertTask(TaskContainer task) +{ + _task_holder.Push(std::move(task)); + return *this; +} + +void TaskScheduler::Dispatch() +{ + // Process all asyncs + while (!_asyncHolder.empty()) + { + _asyncHolder.front()(); + _asyncHolder.pop(); + } + + while (!_task_holder.IsEmpty()) + { + if (_task_holder.First()->_end > _now) + break; + + // Perfect forward the context to the handler + // Use weak references to catch destruction before callbacks. + TaskContext context(_task_holder.Pop(), std::weak_ptr<TaskScheduler>(self_reference)); + + // Invoke the context + context.Invoke(); + } +} + +void TaskScheduler::TaskQueue::Push(TaskContainer&& task) +{ + container.insert(task); +} + +auto TaskScheduler::TaskQueue::Pop() -> TaskContainer +{ + TaskContainer result = *container.begin(); + container.erase(container.begin()); + return result; +} + +auto TaskScheduler::TaskQueue::First() const -> TaskContainer const& +{ + return *container.begin(); +} + +void TaskScheduler::TaskQueue::Clear() +{ + container.clear(); +} + +void TaskScheduler::TaskQueue::RemoveIf(std::function<bool(TaskContainer const&)> const& filter) +{ + for (auto itr = container.begin(); itr != container.end();) + if (filter(*itr)) + itr = container.erase(itr); + else + ++itr; +} + +void TaskScheduler::TaskQueue::ModifyIf(std::function<bool(TaskContainer const&)> const& filter) +{ + std::vector<TaskContainer> cache; + for (auto itr = container.begin(); itr != container.end();) + if (filter(*itr)) + { + cache.push_back(*itr); + itr = container.erase(itr); + } + else + ++itr; + + container.insert(cache.begin(), cache.end()); +} + +bool TaskScheduler::TaskQueue::IsEmpty() const +{ + return container.empty(); +} + +TaskContext& TaskContext::Dispatch(std::function<TaskScheduler&(TaskScheduler&)> const& apply) +{ + if (auto const owner = _owner.lock()) + apply(*owner); + + return *this; +} + +bool TaskContext::IsExpired() const +{ + return _owner.expired(); +} + +bool TaskContext::IsInGroup(TaskScheduler::group_t const group) const +{ + return _task->IsInGroup(group); +} + +TaskContext& TaskContext::SetGroup(TaskScheduler::group_t const group) +{ + _task->_group = group; + return *this; +} + +TaskContext& TaskContext::ClearGroup() +{ + _task->_group = boost::none; + return *this; +} + +TaskScheduler::repeated_t TaskContext::GetRepeatCounter() const +{ + return _task->_repeated; +} + +TaskContext& TaskContext::Async(std::function<void()> const& callable) +{ + return Dispatch(std::bind(&TaskScheduler::Async, std::placeholders::_1, callable)); +} + +TaskContext& TaskContext::CancelAll() +{ + return Dispatch(std::mem_fn(&TaskScheduler::CancelAll)); +} + +TaskContext& TaskContext::CancelGroup(TaskScheduler::group_t const group) +{ + return Dispatch(std::bind(&TaskScheduler::CancelGroup, std::placeholders::_1, group)); +} + +TaskContext& TaskContext::CancelGroupsOf(std::vector<TaskScheduler::group_t> const& groups) +{ + return Dispatch(std::bind(&TaskScheduler::CancelGroupsOf, std::placeholders::_1, std::cref(groups))); +} + +void TaskContext::AssertOnConsumed() const +{ + // This was adapted to TC to prevent static analysis tools from complaining. + // If you encounter this assertion check if you repeat a TaskContext more then 1 time! + ASSERT(!(*_consumed) && "Bad task logic, task context was consumed already!"); +} + +void TaskContext::Invoke() +{ + _task->_task(*this); +} diff --git a/src/server/shared/Utilities/TaskScheduler.h b/src/server/shared/Utilities/TaskScheduler.h new file mode 100644 index 00000000000..98e210e55b1 --- /dev/null +++ b/src/server/shared/Utilities/TaskScheduler.h @@ -0,0 +1,627 @@ +/* + * Copyright (C) 2008-2015 TrinityCore <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 (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, see <http://www.gnu.org/licenses/>. + */ + +#ifndef _TASK_SCHEDULER_H_ +#define _TASK_SCHEDULER_H_ + +#include <algorithm> +#include <chrono> +#include <vector> +#include <queue> +#include <memory> +#include <utility> +#include <set> + +#include <boost/optional.hpp> + +#include "Util.h" + +class TaskContext; + +/// The TaskScheduler class provides the ability to schedule std::function's in the near future. +/// Use TaskScheduler::Update to update the scheduler. +/// Popular methods are: +/// * Schedule (Schedules a std::function which will be executed in the near future). +/// * Schedules an asynchronous function which will be executed at the next update tick. +/// * Cancel, Delay & Reschedule (Methods to manipulate already scheduled tasks). +/// Tasks are organized in groups (uint), multiple tasks can have the same group id, +/// you can provide a group or not, but keep in mind that you can only manipulate specific tasks through its group id! +/// Tasks callbacks use the function signature void(TaskContext) where TaskContext provides +/// access to the function schedule plan which makes it possible to repeat the task +/// with the same duration or a new one. +/// It also provides access to the repeat counter which is useful for task that repeat itself often +/// but behave different every time (spoken event dialogs for example). +class TaskScheduler +{ + friend class TaskContext; + + // Time definitions (use steady clock) + typedef std::chrono::steady_clock clock_t; + typedef clock_t::time_point timepoint_t; + typedef clock_t::duration duration_t; + + // Task group type + typedef uint32 group_t; + // Task repeated type + typedef uint32 repeated_t; + // Task handle type + typedef std::function<void(TaskContext)> task_handler_t; + + class Task + { + friend class TaskContext; + friend class TaskScheduler; + + timepoint_t _end; + duration_t _duration; + boost::optional<group_t> _group; + repeated_t _repeated; + task_handler_t _task; + + public: + // All Argument construct + Task(timepoint_t const& end, duration_t const& duration, boost::optional<group_t> const& group, + repeated_t const repeated, task_handler_t const& task) + : _end(end), _duration(duration), _group(group), _repeated(repeated), _task(task) { } + + // Minimal Argument construct + Task(timepoint_t const& end, duration_t const& duration, task_handler_t const& task) + : _end(end), _duration(duration), _group(boost::none), _repeated(0), _task(task) { } + + // Copy construct + Task(Task const&) = delete; + // Move construct + Task(Task&&) = delete; + // Copy Assign + Task& operator= (Task const&) = default; + // Move Assign + Task& operator= (Task&& right) = delete; + + // Order tasks by its end + inline bool operator< (Task const& other) const + { + return _end < other._end; + } + + inline bool operator> (Task const& other) const + { + return _end > other._end; + } + + // Compare tasks with its end + inline bool operator== (Task const& other) + { + return _end == other._end; + } + + // Returns true if the task is in the given group + inline bool IsInGroup(group_t const group) const + { + return _group == group; + } + }; + + typedef std::shared_ptr<Task> TaskContainer; + + /// Container which provides Task order, insert and reschedule operations. + struct Compare + { + bool operator() (TaskContainer const& left, TaskContainer const& right) + { + return (*left.get()) < (*right.get()); + }; + }; + + class TaskQueue + { + std::multiset<TaskContainer, Compare> container; + + public: + // Pushes the task in the container + void Push(TaskContainer&& task); + + /// Pops the task out of the container + TaskContainer Pop(); + + TaskContainer const& First() const; + + void Clear(); + + void RemoveIf(std::function<bool(TaskContainer const&)> const& filter); + + void ModifyIf(std::function<bool(TaskContainer const&)> const& filter); + + bool IsEmpty() const; + }; + + /// Contains a self reference to track if this object was deleted or not. + std::shared_ptr<TaskScheduler> self_reference; + + /// The current time point (now) + timepoint_t _now; + + /// The Task Queue which contains all task objects. + TaskQueue _task_holder; + + typedef std::queue<std::function<void()>> AsyncHolder; + + /// Contains all asynchronous tasks which will be invoked at + /// the next update tick. + AsyncHolder _asyncHolder; + +public: + TaskScheduler() : self_reference(this, [](TaskScheduler const*) { }), + _now(clock_t::now()) { } + + TaskScheduler(TaskScheduler const&) = delete; + TaskScheduler(TaskScheduler&&) = delete; + TaskScheduler& operator= (TaskScheduler const&) = delete; + TaskScheduler& operator= (TaskScheduler&&) = delete; + + /// Update the scheduler to the current time. + TaskScheduler& Update(); + + /// Update the scheduler with a difftime in ms. + TaskScheduler& Update(size_t const milliseconds); + + /// Update the scheduler with a difftime. + template<class _Rep, class _Period> + TaskScheduler& Update(std::chrono::duration<_Rep, _Period> const& difftime) + { + _now += difftime; + Dispatch(); + return *this; + } + + /// Schedule an callable function that is executed at the next update tick. + /// Its safe to modify the TaskScheduler from within the callable. + TaskScheduler& Async(std::function<void()> const& callable); + + /// Schedule an event with a fixed rate. + /// Never call this from within a task context! Use TaskContext::Schedule instead! + template<class _Rep, class _Period> + TaskScheduler& Schedule(std::chrono::duration<_Rep, _Period> const& time, + task_handler_t const& task) + { + return ScheduleAt(_now, time, task); + } + + /// Schedule an event with a fixed rate. + /// Never call this from within a task context! Use TaskContext::Schedule instead! + template<class _Rep, class _Period> + TaskScheduler& Schedule(std::chrono::duration<_Rep, _Period> const& time, + group_t const group, task_handler_t const& task) + { + return ScheduleAt(_now, time, group, task); + } + + /// Schedule an event with a randomized rate between min and max rate. + /// Never call this from within a task context! Use TaskContext::Schedule instead! + template<class _RepLeft, class _PeriodLeft, class _RepRight, class _PeriodRight> + TaskScheduler& Schedule(std::chrono::duration<_RepLeft, _PeriodLeft> const& min, + std::chrono::duration<_RepRight, _PeriodRight> const& max, task_handler_t const& task) + { + return Schedule(RandomDurationBetween(min, max), task); + } + + /// Schedule an event with a fixed rate. + /// Never call this from within a task context! Use TaskContext::Schedule instead! + template<class _RepLeft, class _PeriodLeft, class _RepRight, class _PeriodRight> + TaskScheduler& Schedule(std::chrono::duration<_RepLeft, _PeriodLeft> const& min, + std::chrono::duration<_RepRight, _PeriodRight> const& max, group_t const group, + task_handler_t const& task) + { + return Schedule(RandomDurationBetween(min, max), group, task); + } + + /// Cancels all tasks. + /// Never call this from within a task context! Use TaskContext::CancelAll instead! + TaskScheduler& CancelAll(); + + /// Cancel all tasks of a single group. + /// Never call this from within a task context! Use TaskContext::CancelGroup instead! + TaskScheduler& CancelGroup(group_t const group); + + /// Cancels all groups in the given std::vector. + /// Hint: Use std::initializer_list for this: "{1, 2, 3, 4}" + TaskScheduler& CancelGroupsOf(std::vector<group_t> const& groups); + + /// Delays all tasks with the given duration. + template<class _Rep, class _Period> + TaskScheduler& DelayAll(std::chrono::duration<_Rep, _Period> const& duration) + { + _task_holder.ModifyIf([&duration](TaskContainer const& task) -> bool + { + task->_end += duration; + return true; + }); + return *this; + } + + /// Delays all tasks with a random duration between min and max. + template<class _RepLeft, class _PeriodLeft, class _RepRight, class _PeriodRight> + TaskScheduler& DelayAll(std::chrono::duration<_RepLeft, _PeriodLeft> const& min, + std::chrono::duration<_RepRight, _PeriodRight> const& max) + { + return DelayAll(RandomDurationBetween(min, max)); + } + + /// Delays all tasks of a group with the given duration. + template<class _Rep, class _Period> + TaskScheduler& DelayGroup(group_t const group, std::chrono::duration<_Rep, _Period> const& duration) + { + _task_holder.ModifyIf([&duration, group](TaskContainer const& task) -> bool + { + if (task->IsInGroup(group)) + { + task->_end += duration; + return true; + } + else + return false; + }); + return *this; + } + + /// Delays all tasks of a group with a random duration between min and max. + template<class _RepLeft, class _PeriodLeft, class _RepRight, class _PeriodRight> + TaskScheduler& DelayGroup(group_t const group, + std::chrono::duration<_RepLeft, _PeriodLeft> const& min, + std::chrono::duration<_RepRight, _PeriodRight> const& max) + { + return DelayGroup(group, RandomDurationBetween(min, max)); + } + + /// Reschedule all tasks with a given duration. + template<class _Rep, class _Period> + TaskScheduler& RescheduleAll(std::chrono::duration<_Rep, _Period> const& duration) + { + auto const end = _now + duration; + _task_holder.ModifyIf([end](TaskContainer const& task) -> bool + { + task->_end = end; + return true; + }); + return *this; + } + + /// Reschedule all tasks with a random duration between min and max. + template<class _RepLeft, class _PeriodLeft, class _RepRight, class _PeriodRight> + TaskScheduler& RescheduleAll(std::chrono::duration<_RepLeft, _PeriodLeft> const& min, + std::chrono::duration<_RepRight, _PeriodRight> const& max) + { + return RescheduleAll(RandomDurationBetween(min, max)); + } + + /// Reschedule all tasks of a group with the given duration. + template<class _Rep, class _Period> + TaskScheduler& RescheduleGroup(group_t const group, std::chrono::duration<_Rep, _Period> const& duration) + { + auto const end = _now + duration; + _task_holder.ModifyIf([end, group](TaskContainer const& task) -> bool + { + if (task->IsInGroup(group)) + { + task->_end = end; + return true; + } + else + return false; + }); + return *this; + } + + /// Reschedule all tasks of a group with a random duration between min and max. + template<class _RepLeft, class _PeriodLeft, class _RepRight, class _PeriodRight> + TaskScheduler& RescheduleGroup(group_t const group, + std::chrono::duration<_RepLeft, _PeriodLeft> const& min, + std::chrono::duration<_RepRight, _PeriodRight> const& max) + { + return RescheduleGroup(group, RandomDurationBetween(min, max)); + } + +private: + /// Insert a new task to the enqueued tasks. + TaskScheduler& InsertTask(TaskContainer task); + + template<class _Rep, class _Period> + TaskScheduler& ScheduleAt(timepoint_t const& end, + std::chrono::duration<_Rep, _Period> const& time, task_handler_t const& task) + { + return InsertTask(TaskContainer(new Task(end + time, time, task))); + } + + /// Schedule an event with a fixed rate. + /// Never call this from within a task context! Use TaskContext::schedule instead! + template<class _Rep, class _Period> + TaskScheduler& ScheduleAt(timepoint_t const& end, + std::chrono::duration<_Rep, _Period> const& time, + group_t const group, task_handler_t const& task) + { + static repeated_t const DEFAULT_REPEATED = 0; + return InsertTask(TaskContainer(new Task(end + time, time, group, DEFAULT_REPEATED, task))); + } + + // Returns a random duration between min and max + template<class _RepLeft, class _PeriodLeft, class _RepRight, class _PeriodRight> + static std::chrono::milliseconds + RandomDurationBetween(std::chrono::duration<_RepLeft, _PeriodLeft> const& min, + std::chrono::duration<_RepRight, _PeriodRight> const& max) + { + auto const milli_min = std::chrono::duration_cast<std::chrono::milliseconds>(min); + auto const milli_max = std::chrono::duration_cast<std::chrono::milliseconds>(max); + + // TC specific: use SFMT URandom + return std::chrono::milliseconds(urand(milli_min.count(), milli_max.count())); + } + + /// Dispatch remaining tasks + void Dispatch(); +}; + +class TaskContext +{ + friend class TaskScheduler; + + /// Associated task + TaskScheduler::TaskContainer _task; + + /// Owner + std::weak_ptr<TaskScheduler> _owner; + + /// Marks the task as consumed + std::shared_ptr<bool> _consumed; + + /// Dispatches an action safe on the TaskScheduler + TaskContext& Dispatch(std::function<TaskScheduler&(TaskScheduler&)> const& apply); + +public: + // Empty constructor + TaskContext() + : _task(), _owner(), _consumed(std::make_shared<bool>(true)) { } + + // Construct from task and owner + explicit TaskContext(TaskScheduler::TaskContainer&& task, std::weak_ptr<TaskScheduler>&& owner) + : _task(task), _owner(owner), _consumed(std::make_shared<bool>(false)) { } + + // Copy construct + TaskContext(TaskContext const& right) + : _task(right._task), _owner(right._owner), _consumed(right._consumed) { } + + // Move construct + TaskContext(TaskContext&& right) + : _task(std::move(right._task)), _owner(std::move(right._owner)), _consumed(std::move(right._consumed)) { } + + // Copy assign + TaskContext& operator= (TaskContext const& right) + { + _task = right._task; + _owner = right._owner; + _consumed = right._consumed; + return *this; + } + + // Move assign + TaskContext& operator= (TaskContext&& right) + { + _task = std::move(right._task); + _owner = std::move(right._owner); + _consumed = std::move(right._consumed); + return *this; + } + + /// Returns true if the owner was deallocated and this context has expired. + bool IsExpired() const; + + /// Returns true if the event is in the given group + bool IsInGroup(TaskScheduler::group_t const group) const; + + /// Sets the event in the given group + TaskContext& SetGroup(TaskScheduler::group_t const group); + + /// Removes the group from the event + TaskContext& ClearGroup(); + + /// Returns the repeat counter which increases every time the task is repeated. + TaskScheduler::repeated_t GetRepeatCounter() const; + + /// Repeats the event and sets a new duration. + /// std::chrono::seconds(5) for example. + /// This will consume the task context, its not possible to repeat the task again + /// from the same task context! + template<class _Rep, class _Period> + TaskContext& Repeat(std::chrono::duration<_Rep, _Period> const& duration) + { + AssertOnConsumed(); + + // Set new duration, in-context timing and increment repeat counter + _task->_duration = duration; + _task->_end += duration; + _task->_repeated += 1; + (*_consumed) = true; + return Dispatch(std::bind(&TaskScheduler::InsertTask, std::placeholders::_1, _task)); + } + + /// Repeats the event with the same duration. + /// This will consume the task context, its not possible to repeat the task again + /// from the same task context! + TaskContext& Repeat() + { + return Repeat(_task->_duration); + } + + /// Repeats the event and set a new duration that is randomized between min and max. + /// std::chrono::seconds(5) for example. + /// This will consume the task context, its not possible to repeat the task again + /// from the same task context! + template<class _RepLeft, class _PeriodLeft, class _RepRight, class _PeriodRight> + TaskContext& Repeat(std::chrono::duration<_RepLeft, _PeriodLeft> const& min, + std::chrono::duration<_RepRight, _PeriodRight> const& max) + { + return Repeat(TaskScheduler::RandomDurationBetween(min, max)); + } + + /// Schedule a callable function that is executed at the next update tick from within the context. + /// Its safe to modify the TaskScheduler from within the callable. + TaskContext& Async(std::function<void()> const& callable); + + /// Schedule an event with a fixed rate from within the context. + /// Its possible that the new event is executed immediately! + /// Use TaskScheduler::Async to create a task + /// which will be called at the next update tick. + template<class _Rep, class _Period> + TaskContext& Schedule(std::chrono::duration<_Rep, _Period> const& time, + TaskScheduler::task_handler_t const& task) + { + auto const end = _task->_end; + return Dispatch([end, time, task](TaskScheduler& scheduler) -> TaskScheduler& + { + return scheduler.ScheduleAt<_Rep, _Period>(end, time, task); + }); + } + + /// Schedule an event with a fixed rate from within the context. + /// Its possible that the new event is executed immediately! + /// Use TaskScheduler::Async to create a task + /// which will be called at the next update tick. + template<class _Rep, class _Period> + TaskContext& Schedule(std::chrono::duration<_Rep, _Period> const& time, + TaskScheduler::group_t const group, TaskScheduler::task_handler_t const& task) + { + auto const end = _task->_end; + return Dispatch([end, time, group, task](TaskScheduler& scheduler) -> TaskScheduler& + { + return scheduler.ScheduleAt<_Rep, _Period>(end, time, group, task); + }); + } + + /// Schedule an event with a randomized rate between min and max rate from within the context. + /// Its possible that the new event is executed immediately! + /// Use TaskScheduler::Async to create a task + /// which will be called at the next update tick. + template<class _RepLeft, class _PeriodLeft, class _RepRight, class _PeriodRight> + TaskContext& Schedule(std::chrono::duration<_RepLeft, _PeriodLeft> const& min, + std::chrono::duration<_RepRight, _PeriodRight> const& max, TaskScheduler::task_handler_t const& task) + { + return Schedule(TaskScheduler::RandomDurationBetween(min, max), task); + } + + /// Schedule an event with a randomized rate between min and max rate from within the context. + /// Its possible that the new event is executed immediately! + /// Use TaskScheduler::Async to create a task + /// which will be called at the next update tick. + template<class _RepLeft, class _PeriodLeft, class _RepRight, class _PeriodRight> + TaskContext& Schedule(std::chrono::duration<_RepLeft, _PeriodLeft> const& min, + std::chrono::duration<_RepRight, _PeriodRight> const& max, TaskScheduler::group_t const group, + TaskScheduler::task_handler_t const& task) + { + return Schedule(TaskScheduler::RandomDurationBetween(min, max), group, task); + } + + /// Cancels all tasks from within the context. + TaskContext& CancelAll(); + + /// Cancel all tasks of a single group from within the context. + TaskContext& CancelGroup(TaskScheduler::group_t const group); + + /// Cancels all groups in the given std::vector from within the context. + /// Hint: Use std::initializer_list for this: "{1, 2, 3, 4}" + TaskContext& CancelGroupsOf(std::vector<TaskScheduler::group_t> const& groups); + + /// Delays all tasks with the given duration from within the context. + template<class _Rep, class _Period> + TaskContext& DelayAll(std::chrono::duration<_Rep, _Period> const& duration) + { + return Dispatch(std::bind(&TaskScheduler::DelayAll<_Rep, _Period>, std::placeholders::_1, duration)); + } + + /// Delays all tasks with a random duration between min and max from within the context. + template<class _RepLeft, class _PeriodLeft, class _RepRight, class _PeriodRight> + TaskContext& DelayAll(std::chrono::duration<_RepLeft, _PeriodLeft> const& min, + std::chrono::duration<_RepRight, _PeriodRight> const& max) + { + return DelayAll(TaskScheduler::RandomDurationBetween(min, max)); + } + + /// Delays all tasks of a group with the given duration from within the context. + template<class _Rep, class _Period> + TaskContext& DelayGroup(TaskScheduler::group_t const group, std::chrono::duration<_Rep, _Period> const& duration) + { + return Dispatch(std::bind(&TaskScheduler::DelayGroup<_Rep, _Period>, std::placeholders::_1, group, duration)); + } + + /// Delays all tasks of a group with a random duration between min and max from within the context. + template<class _RepLeft, class _PeriodLeft, class _RepRight, class _PeriodRight> + TaskContext& DelayGroup(TaskScheduler::group_t const group, + std::chrono::duration<_RepLeft, _PeriodLeft> const& min, + std::chrono::duration<_RepRight, _PeriodRight> const& max) + { + return DelayGroup(group, TaskScheduler::RandomDurationBetween(min, max)); + } + + /// Reschedule all tasks with the given duration. + template<class _Rep, class _Period> + TaskContext& RescheduleAll(std::chrono::duration<_Rep, _Period> const& duration) + { + return Dispatch(std::bind(&TaskScheduler::RescheduleAll, std::placeholders::_1, duration)); + } + + /// Reschedule all tasks with a random duration between min and max. + template<class _RepLeft, class _PeriodLeft, class _RepRight, class _PeriodRight> + TaskContext& RescheduleAll(std::chrono::duration<_RepLeft, _PeriodLeft> const& min, + std::chrono::duration<_RepRight, _PeriodRight> const& max) + { + return RescheduleAll(TaskScheduler::RandomDurationBetween(min, max)); + } + + /// Reschedule all tasks of a group with the given duration. + template<class _Rep, class _Period> + TaskContext& RescheduleGroup(TaskScheduler::group_t const group, std::chrono::duration<_Rep, _Period> const& duration) + { + return Dispatch(std::bind(&TaskScheduler::RescheduleGroup<_Rep, _Period>, std::placeholders::_1, group, duration)); + } + + /// Reschedule all tasks of a group with a random duration between min and max. + template<class _RepLeft, class _PeriodLeft, class _RepRight, class _PeriodRight> + TaskContext& RescheduleGroup(TaskScheduler::group_t const group, + std::chrono::duration<_RepLeft, _PeriodLeft> const& min, + std::chrono::duration<_RepRight, _PeriodRight> const& max) + { + return RescheduleGroup(group, TaskScheduler::RandomDurationBetween(min, max)); + } + +private: + /// Asserts if the task was consumed already. + void AssertOnConsumed() const; + + /// Invokes the associated hook of the task. + void Invoke(); +}; + +/// Milliseconds shorthand typedef. +typedef std::chrono::milliseconds Milliseconds; + +/// Seconds shorthand typedef. +typedef std::chrono::seconds Seconds; + +/// Minutes shorthand typedef. +typedef std::chrono::minutes Minutes; + +/// Hours shorthand typedef. +typedef std::chrono::hours Hours; + +#endif /// _TASK_SCHEDULER_H_ diff --git a/src/server/shared/Utilities/Util.h b/src/server/shared/Utilities/Util.h index 0a4e5e4a4a0..cd523511c1d 100644 --- a/src/server/shared/Utilities/Util.h +++ b/src/server/shared/Utilities/Util.h @@ -688,8 +688,9 @@ class EventMap /** * @name RepeatEvent - * @brief Repeats the mostly recently executed event. - * @param time Time until the event occurs. Equivalent to Repeat(urand(minTime, maxTime). + * @brief Repeats the mostly recently executed event, Equivalent to Repeat(urand(minTime, maxTime). + * @param minTime Minimum time until the event occurs. + * @param maxTime Maximum time until the event occurs. */ void Repeat(uint32 minTime, uint32 maxTime) { @@ -839,7 +840,7 @@ class EventMap /** * @name GetTimeUntilEvent * @brief Returns time in milliseconds until next event. - * @param Id of the event. + * @param eventId of the event. * @return Time of next event. */ uint32 GetTimeUntilEvent(uint32 eventId) const; diff --git a/src/server/worldserver/CMakeLists.txt b/src/server/worldserver/CMakeLists.txt index 97180fb36a0..d3b2eba9698 100644 --- a/src/server/worldserver/CMakeLists.txt +++ b/src/server/worldserver/CMakeLists.txt @@ -47,6 +47,8 @@ include_directories( ${CMAKE_SOURCE_DIR}/dep/gsoap ${CMAKE_SOURCE_DIR}/dep/sockets/include ${CMAKE_SOURCE_DIR}/dep/SFMT + ${CMAKE_SOURCE_DIR}/dep/cppformat + ${CMAKE_SOURCE_DIR}/dep/process ${CMAKE_SOURCE_DIR}/src/server/collision ${CMAKE_SOURCE_DIR}/src/server/collision/Management ${CMAKE_SOURCE_DIR}/src/server/collision/Models @@ -63,6 +65,7 @@ include_directories( ${CMAKE_SOURCE_DIR}/src/server/shared/Networking ${CMAKE_SOURCE_DIR}/src/server/shared/Packets ${CMAKE_SOURCE_DIR}/src/server/shared/Threading + ${CMAKE_SOURCE_DIR}/src/server/shared/Updater ${CMAKE_SOURCE_DIR}/src/server/shared/Utilities ${CMAKE_SOURCE_DIR}/src/server/game ${CMAKE_SOURCE_DIR}/src/server/game/Accounts @@ -141,6 +144,8 @@ include_directories( ${VALGRIND_INCLUDE_DIR} ) +GroupSources(${CMAKE_CURRENT_SOURCE_DIR}) + add_executable(worldserver ${worldserver_SRCS} ${worldserver_PCH_SRC} @@ -168,6 +173,7 @@ target_link_libraries(worldserver g3dlib gsoap Detour + format ${JEMALLOC_LIBRARY} ${READLINE_LIBRARY} ${TERMCAP_LIBRARY} diff --git a/src/server/worldserver/CommandLine/CliRunnable.cpp b/src/server/worldserver/CommandLine/CliRunnable.cpp index 6e961922b0e..ad9ae28f712 100644 --- a/src/server/worldserver/CommandLine/CliRunnable.cpp +++ b/src/server/worldserver/CommandLine/CliRunnable.cpp @@ -23,21 +23,16 @@ #include "Common.h" #include "ObjectMgr.h" #include "World.h" -#include "WorldSession.h" #include "Configuration/Config.h" -#include "AccountMgr.h" -#include "Chat.h" #include "CliRunnable.h" -#include "Language.h" #include "Log.h" -#include "MapManager.h" -#include "Player.h" #include "Util.h" #if PLATFORM != PLATFORM_WINDOWS #include <readline/readline.h> #include <readline/history.h> +#include "Chat.h" char* command_finder(const char* text, int state) { diff --git a/src/server/worldserver/Main.cpp b/src/server/worldserver/Main.cpp index 06d8775440a..430c3ce4d73 100644 --- a/src/server/worldserver/Main.cpp +++ b/src/server/worldserver/Main.cpp @@ -47,6 +47,7 @@ #include "SystemConfig.h" #include "WorldSocket.h" #include "WorldSocketMgr.h" +#include "DatabaseLoader.h" using namespace boost::program_options; @@ -92,7 +93,8 @@ void ShutdownCLIThread(std::thread* cliThread); void ShutdownThreadPool(std::vector<std::thread>& threadPool); variables_map GetConsoleArguments(int argc, char** argv, std::string& cfg_file, std::string& cfg_service); -int mainImpl(int argc, char** argv) +/// Launch the Trinity server +extern int main(int argc, char** argv) { std::string configFile = _TRINITY_CORE_CONFIG; std::string configService; @@ -288,25 +290,6 @@ int mainImpl(int argc, char** argv) return World::GetExitCode(); } -/// Launch the Trinity server -extern int main(int argc, char** argv) -{ - try - { - return mainImpl(argc, argv); - } - catch (std::exception& ex) - { - std::cerr << "Top-level exception caught:" << ex.what() << "\n"; - -#ifndef NDEBUG // rethrow exception for the debugger - throw; -#else - return 1; -#endif - } -} - void ShutdownCLIThread(std::thread* cliThread) { if (cliThread != nullptr) @@ -325,7 +308,7 @@ void ShutdownCLIThread(std::thread* cliThread) errorBuffer = "Unknown error"; TC_LOG_DEBUG("server.worldserver", "Error cancelling I/O of CliThread, error code %u, detail: %s", - errorCode, errorBuffer); + uint32(errorCode), errorBuffer); LocalFree(errorBuffer); // send keyboard input to safely unblock the CLI thread @@ -465,80 +448,15 @@ bool StartDB() { MySQL::Library_Init(); - std::string dbString; - uint8 asyncThreads, synchThreads; + // Load databases + DatabaseLoader loader("server.worldserver", DatabaseLoader::DATABASE_NONE); + loader + .AddDatabase(WorldDatabase, "World") + .AddDatabase(CharacterDatabase, "Character") + .AddDatabase(LoginDatabase, "Login"); - dbString = sConfigMgr->GetStringDefault("WorldDatabaseInfo", ""); - if (dbString.empty()) - { - TC_LOG_ERROR("server.worldserver", "World database not specified in configuration file"); + if (!loader.Load()) return false; - } - - asyncThreads = uint8(sConfigMgr->GetIntDefault("WorldDatabase.WorkerThreads", 1)); - if (asyncThreads < 1 || asyncThreads > 32) - { - TC_LOG_ERROR("server.worldserver", "World database: invalid number of worker threads specified. " - "Please pick a value between 1 and 32."); - return false; - } - - synchThreads = uint8(sConfigMgr->GetIntDefault("WorldDatabase.SynchThreads", 1)); - ///- Initialize the world database - if (!WorldDatabase.Open(dbString, asyncThreads, synchThreads)) - { - TC_LOG_ERROR("server.worldserver", "Cannot connect to world database %s", dbString.c_str()); - return false; - } - - ///- Get character database info from configuration file - dbString = sConfigMgr->GetStringDefault("CharacterDatabaseInfo", ""); - if (dbString.empty()) - { - TC_LOG_ERROR("server.worldserver", "Character database not specified in configuration file"); - return false; - } - - asyncThreads = uint8(sConfigMgr->GetIntDefault("CharacterDatabase.WorkerThreads", 1)); - if (asyncThreads < 1 || asyncThreads > 32) - { - TC_LOG_ERROR("server.worldserver", "Character database: invalid number of worker threads specified. " - "Please pick a value between 1 and 32."); - return false; - } - - synchThreads = uint8(sConfigMgr->GetIntDefault("CharacterDatabase.SynchThreads", 2)); - - ///- Initialize the Character database - if (!CharacterDatabase.Open(dbString, asyncThreads, synchThreads)) - { - TC_LOG_ERROR("server.worldserver", "Cannot connect to Character database %s", dbString.c_str()); - return false; - } - - ///- Get login database info from configuration file - dbString = sConfigMgr->GetStringDefault("LoginDatabaseInfo", ""); - if (dbString.empty()) - { - TC_LOG_ERROR("server.worldserver", "Login database not specified in configuration file"); - return false; - } - - asyncThreads = uint8(sConfigMgr->GetIntDefault("LoginDatabase.WorkerThreads", 1)); - if (asyncThreads < 1 || asyncThreads > 32) - { - TC_LOG_ERROR("server.worldserver", "Login database: invalid number of worker threads specified. " - "Please pick a value between 1 and 32."); - return false; - } - - synchThreads = uint8(sConfigMgr->GetIntDefault("LoginDatabase.SynchThreads", 1)); - ///- Initialise the login database - if (!LoginDatabase.Open(dbString, asyncThreads, synchThreads)) - { - TC_LOG_ERROR("server.worldserver", "Cannot connect to login database %s", dbString.c_str()); - return false; - } ///- Get the realm Id from the configuration file realmID = sConfigMgr->GetIntDefault("RealmID", 0); diff --git a/src/server/worldserver/RemoteAccess/RASession.h b/src/server/worldserver/RemoteAccess/RASession.h index d272f323c6a..efd2106fdd1 100644 --- a/src/server/worldserver/RemoteAccess/RASession.h +++ b/src/server/worldserver/RemoteAccess/RASession.h @@ -30,8 +30,6 @@ using boost::asio::ip::tcp; const size_t bufferSize = 4096; -#define BUFFER_SIZE 4096 - class RASession : public std::enable_shared_from_this <RASession> { public: diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index ecb5824b1c5..447ef9a45a8 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -11,6 +11,7 @@ # PERFORMANCE SETTINGS # SERVER LOGGING # SERVER SETTINGS +# UPDATE SETTINGS # WARDEN SETTINGS # PLAYER INTERACTION # CREATURE SETTINGS @@ -1020,7 +1021,7 @@ OffhandCheckAtSpellUnlearn = 1 # ClientCacheVersion # Description: Client cache version for client cache data reset. Use any value different # from DB and not recently been used to trigger client side cache reset. -# Default: 0 - (Use DB value from world DB db_version.cache_id field) +# Default: 0 - (Use DB value from world DB version.cache_id field) ClientCacheVersion = 0 @@ -1121,6 +1122,92 @@ BirthdayTime = 1222964635 ################################################################################################### ################################################################################################### +# UPDATE SETTINGS +# +# Updates.EnableDatabases +# Description: A mask that describes which databases shall be updated. +# +# Following flags are available +# DATABASE_LOGIN = 1, // Auth database +# DATABASE_CHARACTER = 2, // Character database +# DATABASE_WORLD = 4, // World database +# +# Default: 0 - (All Disabled) +# 4 - (Enable world only) +# 7 - (All enabled) + +Updates.EnableDatabases = 0 + +# +# Updates.SourcePath +# Description: The path to your TrinityCore source directory. +# If the path is left empty, built-in CMAKE_SOURCE_DIR is used. +# Example: "../TrinityCore" +# Default: "" + +Updates.SourcePath = "" + +# +# Updates.SourcePath +# Description: The path to your mysql cli binary. +# If the path is left empty, built-in path from cmake is used. +# Example: "C:/Program Files/MySQL/MySQL Server 5.6/bin/mysql.exe" +# "mysql.exe" +# "/usr/bin/mysql" +# Default: "" + +Updates.MySqlCLIPath = "" + +# +# Updates.AutoSetup +# Description: Auto populate empty databases. +# Default: 1 - (Enabled) +# 0 - (Disabled) + +Updates.AutoSetup = 1 + +# +# Updates.Redundancy +# Description: Perform data redundancy checks through hashing +# to detect changes on sql updates and reapply it. +# Default: 1 - (Enabled) +# 0 - (Disabled) + +Updates.Redundancy = 1 + +# +# Updates.ArchivedRedundancy +# Description: Check hashes of archived updates (slows down startup). +# Default: 0 - (Disabled) +# 1 - (Enabled) + +Updates.ArchivedRedundancy = 0 + +# +# Updates.AllowRehash +# Description: Inserts the current file hash in the database if it is left empty. +# Useful if you want to mark a file as applied but you don't know its hash. +# Default: 1 - (Enabled) +# 0 - (Disabled) + +Updates.AllowRehash = 1 + +# +# Updates.CleanDeadRefMaxCount +# Description: Cleans dead/ orphaned references that occur if an update was removed or renamed and edited in one step. +# It only starts the clean up if the count of the missing updates is below or equal the Updates.CleanDeadRefMaxCount value. +# This way prevents erasing of the update history due to wrong source directory state (maybe wrong branch or bad revision). +# Disable this if you want to know if the database is in a possible "dirty state". +# Default: 3 - (Enabled) +# 0 - (Disabled) +# -1 - (Enabled - unlimited) + +Updates.CleanDeadRefMaxCount = 3 + +# +################################################################################################### + +################################################################################################### # WARDEN SETTINGS # # Warden.Enabled @@ -3173,8 +3260,10 @@ Logger.root=5,Console Server Logger.server=3,Console Server Logger.commands.gm=3,Console GM Logger.sql.sql=5,Console DBErrors +Logger.sql.updates=3,Console Server #Logger.achievement=3,Console Server +#Logger.addon=3,Console Server #Logger.ahbot=3,Console Server #Logger.auctionHouse=3,Console Server #Logger.bg.arena=3,Console Server diff --git a/src/tools/map_extractor/System.cpp b/src/tools/map_extractor/System.cpp index a573f9fecc8..dcaa3ba0a76 100644 --- a/src/tools/map_extractor/System.cpp +++ b/src/tools/map_extractor/System.cpp @@ -63,8 +63,9 @@ typedef struct map_id *map_ids; uint16 *areas; uint16 *LiqType; -char output_path[128] = "."; -char input_path[128] = "."; +#define MAX_PATH_LENGTH 128 +char output_path[MAX_PATH_LENGTH] = "."; +char input_path[MAX_PATH_LENGTH] = "."; uint32 maxAreaId = 0; // ************************************************** @@ -143,11 +144,11 @@ void Usage(char* prg) printf( "Usage:\n"\ "%s -[var] [value]\n"\ - "-i set input path\n"\ - "-o set output path\n"\ + "-i set input path (max %d characters)\n"\ + "-o set output path (max %d characters)\n"\ "-e extract only MAP(1)/DBC(2) - standard: both(3)\n"\ "-f height stored as int (less map size but lost some accuracy) 1 by default\n"\ - "Example: %s -f 0 -i \"c:\\games\\game\"", prg, prg); + "Example: %s -f 0 -i \"c:\\games\\game\"", prg, MAX_PATH_LENGTH - 1, MAX_PATH_LENGTH - 1, prg); exit(1); } @@ -166,14 +167,20 @@ void HandleArgs(int argc, char * arg[]) switch(arg[c][1]) { case 'i': - if(c + 1 < argc) // all ok - strcpy(input_path, arg[(c++) + 1]); + if (c + 1 < argc && strlen(arg[c + 1]) < MAX_PATH_LENGTH) // all ok + { + strncpy(input_path, arg[c++ + 1], MAX_PATH_LENGTH); + input_path[MAX_PATH_LENGTH - 1] = '\0'; + } else Usage(arg[0]); break; case 'o': - if(c + 1 < argc) // all ok - strcpy(output_path, arg[(c++) + 1]); + if (c + 1 < argc && strlen(arg[c + 1]) < MAX_PATH_LENGTH) // all ok + { + strncpy(output_path, arg[c++ + 1], MAX_PATH_LENGTH); + output_path[MAX_PATH_LENGTH - 1] = '\0'; + } else Usage(arg[0]); break; @@ -250,7 +257,17 @@ uint32 ReadMapDBC() for(uint32 x = 0; x < map_count; ++x) { map_ids[x].id = dbc.getRecord(x).getUInt(0); - strcpy(map_ids[x].name, dbc.getRecord(x).getString(1)); + + const char* map_name = dbc.getRecord(x).getString(1); + size_t max_map_name_length = sizeof(map_ids[x].name); + if (strlen(map_name) >= max_map_name_length) + { + printf("Fatal error: Map name too long!\n"); + exit(1); + } + + strncpy(map_ids[x].name, map_name, max_map_name_length); + map_ids[x].name[max_map_name_length - 1] = '\0'; } printf("Done! (%u maps loaded)\n", (uint32)map_count); return map_count; diff --git a/src/tools/map_extractor/mpq_libmpq.cpp b/src/tools/map_extractor/mpq_libmpq.cpp index 3e12747e9c5..482e3a3abbd 100644 --- a/src/tools/map_extractor/mpq_libmpq.cpp +++ b/src/tools/map_extractor/mpq_libmpq.cpp @@ -71,7 +71,7 @@ MPQFile::MPQFile(const char* filename): uint32_t filenum; if(libmpq__file_number(mpq_a, filename, &filenum)) continue; libmpq__off_t transferred; - libmpq__file_unpacked_size(mpq_a, filenum, &size); + libmpq__file_size_unpacked(mpq_a, filenum, &size); // HACK: in patch.mpq some files don't want to open and give 1 for filesize if (size<=1) { diff --git a/src/tools/map_extractor/mpq_libmpq04.h b/src/tools/map_extractor/mpq_libmpq04.h index 470e7bd0c50..c6fe36a8221 100644 --- a/src/tools/map_extractor/mpq_libmpq04.h +++ b/src/tools/map_extractor/mpq_libmpq04.h @@ -43,7 +43,7 @@ public: uint32_t filenum; if(libmpq__file_number(mpq_a, "(listfile)", &filenum)) return; libmpq__off_t size, transferred; - libmpq__file_unpacked_size(mpq_a, filenum, &size); + libmpq__file_size_unpacked(mpq_a, filenum, &size); char *buffer = new char[size+1]; buffer[size] = '\0'; diff --git a/src/tools/vmap4_assembler/CMakeLists.txt b/src/tools/vmap4_assembler/CMakeLists.txt index c0ff9e9a153..dfd6c7d4dd4 100644 --- a/src/tools/vmap4_assembler/CMakeLists.txt +++ b/src/tools/vmap4_assembler/CMakeLists.txt @@ -16,7 +16,6 @@ include_directories( ${CMAKE_SOURCE_DIR}/src/server/collision ${CMAKE_SOURCE_DIR}/src/server/collision/Maps ${CMAKE_SOURCE_DIR}/src/server/collision/Models - ${ACE_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR} ) diff --git a/src/tools/vmap4_extractor/adtfile.cpp b/src/tools/vmap4_extractor/adtfile.cpp index a4caf06a7c2..557511f6d1e 100644 --- a/src/tools/vmap4_extractor/adtfile.cpp +++ b/src/tools/vmap4_extractor/adtfile.cpp @@ -184,6 +184,7 @@ bool ADTFile::init(uint32 map_num, uint32 tileX, uint32 tileY) ModelInstance inst(ADT,ModelInstansName[id].c_str(), map_num, tileX, tileY, dirfile); } delete[] ModelInstansName; + ModelInstansName = NULL; } } else if (!strcmp(fourcc,"MODF")) @@ -198,6 +199,7 @@ bool ADTFile::init(uint32 map_num, uint32 tileX, uint32 tileY) WMOInstance inst(ADT,WmoInstansName[id].c_str(), map_num, tileX, tileY, dirfile); } delete[] WmoInstansName; + WmoInstansName = NULL; } } //====================== diff --git a/src/tools/vmap4_extractor/mpq_libmpq.cpp b/src/tools/vmap4_extractor/mpq_libmpq.cpp index 5e0effc1a77..f3eb3da96b6 100644 --- a/src/tools/vmap4_extractor/mpq_libmpq.cpp +++ b/src/tools/vmap4_extractor/mpq_libmpq.cpp @@ -71,7 +71,7 @@ MPQFile::MPQFile(const char* filename): uint32 filenum; if(libmpq__file_number(mpq_a, filename, &filenum)) continue; libmpq__off_t transferred; - libmpq__file_unpacked_size(mpq_a, filenum, &size); + libmpq__file_size_unpacked(mpq_a, filenum, &size); // HACK: in patch.mpq some files don't want to open and give 1 for filesize if (size<=1) { diff --git a/src/tools/vmap4_extractor/mpq_libmpq04.h b/src/tools/vmap4_extractor/mpq_libmpq04.h index bb842daf258..6196285627d 100644 --- a/src/tools/vmap4_extractor/mpq_libmpq04.h +++ b/src/tools/vmap4_extractor/mpq_libmpq04.h @@ -42,7 +42,7 @@ public: uint32_t filenum; if(libmpq__file_number(mpq_a, "(listfile)", &filenum)) return; libmpq__off_t size, transferred; - libmpq__file_unpacked_size(mpq_a, filenum, &size); + libmpq__file_size_unpacked(mpq_a, filenum, &size); char *buffer = new char[size + 1]; buffer[size] = '\0'; diff --git a/src/tools/vmap4_extractor/vec3d.h b/src/tools/vmap4_extractor/vec3d.h index a0c22729052..211f5f26c72 100644 --- a/src/tools/vmap4_extractor/vec3d.h +++ b/src/tools/vmap4_extractor/vec3d.h @@ -103,7 +103,7 @@ public: float length() const { - return sqrt(x*x+y*y+z*z); + return std::sqrt(x*x+y*y+z*z); } Vec3D& normalize() @@ -209,7 +209,7 @@ public: float length() const { - return sqrt(x*x+y*y); + return std::sqrt(x*x+y*y); } Vec2D& normalize() diff --git a/src/tools/vmap4_extractor/vmapexport.cpp b/src/tools/vmap4_extractor/vmapexport.cpp index 4cec49ef333..7a12897563e 100644 --- a/src/tools/vmap4_extractor/vmapexport.cpp +++ b/src/tools/vmap4_extractor/vmapexport.cpp @@ -197,7 +197,7 @@ bool ExtractSingleWmo(std::string& fname) for (uint32 i = 0; i < froot.nGroups; ++i) { char temp[1024]; - strcpy(temp, fname.c_str()); + strncpy(temp, fname.c_str(), 1024); temp[fname.length()-4] = 0; char groupFileName[1024]; sprintf(groupFileName, "%s_%03u.wmo", temp, i); @@ -395,7 +395,9 @@ bool processArgv(int argc, char ** argv, const char *versionString) if((i+1)<argc) { hasInputPathParam = true; - strcpy(input_path, argv[i+1]); + strncpy(input_path, argv[i + 1], sizeof(input_path)); + input_path[sizeof(input_path) - 1] = '\0'; + if (input_path[strlen(input_path) - 1] != '\\' && input_path[strlen(input_path) - 1] != '/') strcat(input_path, "/"); ++i; @@ -511,11 +513,22 @@ int main(int argc, char ** argv) map_ids=new map_id[map_count]; for (unsigned int x=0;x<map_count;++x) { - map_ids[x].id=dbc->getRecord (x).getUInt(0); - strcpy(map_ids[x].name,dbc->getRecord(x).getString(1)); - printf("Map - %s\n",map_ids[x].name); - } + map_ids[x].id = dbc->getRecord(x).getUInt(0); + + const char* map_name = dbc->getRecord(x).getString(1); + size_t max_map_name_length = sizeof(map_ids[x].name); + if (strlen(map_name) >= max_map_name_length) + { + delete dbc; + delete[] map_ids; + printf("FATAL ERROR: Map name too long.\n"); + return 1; + } + strncpy(map_ids[x].name, map_name, max_map_name_length); + map_ids[x].name[max_map_name_length - 1] = '\0'; + printf("Map - %s\n", map_ids[x].name); + } delete dbc; ParsMapFiles(); diff --git a/src/tools/vmap4_extractor/wdtfile.cpp b/src/tools/vmap4_extractor/wdtfile.cpp index 6ba91c6e12c..877f49ce371 100644 --- a/src/tools/vmap4_extractor/wdtfile.cpp +++ b/src/tools/vmap4_extractor/wdtfile.cpp @@ -103,6 +103,7 @@ bool WDTFile::init(char* /*map_id*/, unsigned int mapID) } delete[] gWmoInstansName; + gWmoInstansName = NULL; } } WDT.seek((int)nextpos); |
