From a4d245ecbe1c0800bc3f3f222c5d079bb00acfcd Mon Sep 17 00:00:00 2001 From: BlaMacfly Date: Mon, 31 Aug 2026 22:21:11 +0200 Subject: [PATCH 01/50] Commandes : .npc add perdait la phase du maitre de jeu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Les PNJ crees en jeu n'etaient visibles qu'en mode MJ. InheritPhaseShift donnait bien la phase du joueur a la creature, mais SaveToDB n'ecrit que GetDBPhase() -- la phase DECLAREE EN BASE, nulle pour une creature creee a la volee. La commande detruit ensuite l'objet et le recree depuis la ligne enregistree, donc sans phase. Dans une aire phasee, PhaseShift:: CanSee exigeant une intersection, la creature etait invisible a tout joueur normal ; le mode MJ masquait le defaut, SetAlwaysVisible court-circuitant le test de phase. TrinityCore 3.3.5 transmettait la phase explicitement a Create et a SaveToDB, via un GetPhaseMaskForSpawn qui ignorait volontairement l'etat « MJ voit tout ». La reecriture du systeme de phases a perdu ce principe : master a le meme defaut. On le restaure, en annoncant la phase retenue puisqu'un joueur moderne peut en porter plusieurs alors qu'une ligne de la table creature n'a qu'un champ. SQL joint : phase 6666 posee sur l'aubergiste deja pose au port de Hurlevent, et suppression de 18 options de dialogue de type 1 qui doublonnaient une option fonctionnelle et se placaient au-dessus d'elle. Les options porteuses de conditions sont preservees -- une premiere version avait supprime a tort les options d'Halloween. Co-Authored-By: Claude Opus 5 --- .../gossip_menu_option_retour_20260831.sql | 7767 +++++++++++++++++ sql/sylvania/aubergiste_port_phase.sql | 26 + sql/sylvania/gossip_options_mortes.sql | 42 + src/server/scripts/Commands/cs_npc.cpp | 58 + 4 files changed, 7893 insertions(+) create mode 100644 chantiers/gossip_menu_option_retour_20260831.sql create mode 100644 sql/sylvania/aubergiste_port_phase.sql create mode 100644 sql/sylvania/gossip_options_mortes.sql diff --git a/chantiers/gossip_menu_option_retour_20260831.sql b/chantiers/gossip_menu_option_retour_20260831.sql new file mode 100644 index 0000000..39d8cf6 --- /dev/null +++ b/chantiers/gossip_menu_option_retour_20260831.sql @@ -0,0 +1,7767 @@ +/*M!999999\- enable the sandbox mode */ +-- MariaDB dump 10.19-11.4.7-MariaDB, for debian-linux-gnu (x86_64) +-- +-- Host: localhost Database: dc_world +-- ------------------------------------------------------ +-- Server version 11.4.7-MariaDB-0ubuntu0.25.04.1 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*M!100616 SET @OLD_NOTE_VERBOSITY=@@NOTE_VERBOSITY, NOTE_VERBOSITY=0 */; + +-- +-- Table structure for table `gossip_menu_option` +-- + +DROP TABLE IF EXISTS `gossip_menu_option`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `gossip_menu_option` ( + `MenuId` int(10) unsigned NOT NULL DEFAULT 0, + `OptionIndex` int(10) unsigned NOT NULL DEFAULT 0, + `OptionIcon` tinyint(3) unsigned NOT NULL DEFAULT 0, + `OptionText` text DEFAULT NULL, + `OptionBroadcastTextId` int(11) unsigned NOT NULL DEFAULT 0, + `OptionType` int(11) unsigned NOT NULL DEFAULT 0, + `OptionNpcFlag` bigint(20) unsigned NOT NULL DEFAULT 0, + `VerifiedBuild` smallint(5) NOT NULL DEFAULT 0, + PRIMARY KEY (`MenuId`,`OptionIndex`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `gossip_menu_option` +-- + +LOCK TABLES `gossip_menu_option` WRITE; +/*!40000 ALTER TABLE `gossip_menu_option` DISABLE KEYS */; +INSERT INTO `gossip_menu_option` VALUES +(0,0,0,'GOSSIP_OPTION_QUESTGIVER',0,2,2,0), +(0,1,1,'I want to browse your goods',3370,3,128,0), +(0,2,2,'I want to travel fast',0,4,8192,0), +(0,3,3,'Train me!',3266,5,16,0), +(0,4,4,'Bring me back to life',0,6,16384,0), +(0,5,4,'Bring me back to life',0,7,32768,0), +(0,6,5,'Make this inn my home',2822,8,65536,0), +(0,7,6,'Show me my bank',0,9,131072,0), +(0,8,7,'How do I form a guild?',3413,10,262144,0), +(0,9,8,'I want to create a guild crest',3415,11,524288,0), +(0,10,9,'I want to join the Battle Ground',0,12,1048576,0), +(0,11,6,'Auction!',0,13,2097152,0), +(0,12,0,'I\'d like to stable my pet here',8912,14,4194304,0), +(0,13,1,'I want to browse your goods',3370,15,4096,0), +(0,14,2,'I wish to unlearn my talents',8271,16,16,0), +(0,15,2,'I wish to unlearn my pet\'s skills',0,17,16,0), +(0,16,2,'Purchase a Dual Talent Specialization',33765,18,16,0), +(0,17,0,'GOSSIP_OPTION_OUTDOORPVP',0,19,536870912,0), +(21167,1,0,'How do the Argent Crusade riders fight?',34377,1,1,0), +(9935,1,0,'Where is Elder Pamuya?',31255,1,1,0), +(9935,2,0,'Where is Elder Sardis?',31270,1,1,0), +(401,7,0,'Warlock',45407,1,1,27843), +(9964,1,0,'Where is Elder Lunaro?',31290,1,1,0), +(9964,2,0,'Where is Elder Whurain?',31286,1,1,0), +(9964,3,0,'Where is Elder Killas?',31296,1,1,0), +(9964,4,0,'Where is Elder Tauros?',31298,1,1,0), +(21002,1,0,'Where is Elder Starsong?',11537,1,1,0), +(401,8,0,'Warrior',45408,1,1,27843), +(21003,1,0,'Where is Elder Bladeswift?',11554,1,1,0), +(21003,2,0,'Where is Elder Skygleam?',11556,1,1,0), +(401,9,0,'Monk',61849,1,1,27843), +(21005,1,0,'Where is Elder Bladeleaf?',11558,1,1,0), +(21005,2,0,'Where is Elder Bronzebeard?',11512,1,1,0), +(21005,3,0,'Where is Elder Hammershout?',11550,1,1,0), +(21005,4,0,'Where is Elder Skygleam?',11556,1,1,0), +(21005,5,0,'Where is Elder Starweave?',11561,1,1,0), +(11843,0,0,'Trade District Inn',0,0,0,27843), +(21006,1,0,'Where is Elder High Mountain?',11578,1,1,0), +(21006,2,0,'Where is Elder Moonwarden?',11580,1,1,0), +(21006,3,0,'Where is Elder Wheathoof?',11582,1,1,0), +(21006,4,0,'Where is Elder Windtotem?',11576,1,1,0), +(11839,0,0,'Trade District Auction House',0,1,1,27843), +(9941,1,0,'Where is Elder Pamuya?',31255,1,1,0), +(9941,2,0,'Where is Elder Wanikaya?',31274,1,1,0), +(9941,3,0,'Where is Elder Sandrene?',31276,1,1,0), +(9941,4,0,'Where is Elder Morthie?',31278,1,1,0), +(21008,1,0,'Where is Elder Nightwind?',11565,1,1,0), +(21008,2,0,'Where is Elder Stonespire?',11570,1,1,0), +(21009,1,0,'Where is Elder Bladeswift?',11554,1,1,0), +(21009,2,0,'Where is Elder Hammershout?',11550,1,1,0), +(21009,3,0,'Where is Elder Goldwell?',11509,1,1,0), +(21009,4,0,'Where is Elder Ironband?',11507,1,1,0), +(18491,1,0,'Take me to the Tanaan Jungle.',96072,0,0,27602), +(9959,1,0,'Where is Elder Jarten?',31294,1,1,0), +(9959,2,0,'Where is Elder Lunaro?',31290,1,1,0), +(9959,3,0,'Where is Elder Whurain?',31286,1,1,0), +(12243,1,0,'Teldrassil or the Exodar in Kalimdor',0,1,1,27843), +(21011,1,0,'Where is Elder Darkhorn?',11584,1,1,0), +(21011,2,0,'Where is Elder Graveborn?',11488,1,1,0), +(21011,3,0,'Where is Elder Ironband?',11507,1,1,0), +(21011,4,0,'Where is Elder Moonstrike?',11491,1,1,0), +(21011,5,0,'Where is Elder Wheathoof?',11582,1,1,0), +(21012,1,0,'Where is Elder Darkcore?',11493,1,1,0), +(21012,2,0,'Where is Elder Ironband?',11507,1,1,0), +(21012,3,0,'Where is Elder Wheathoof?',11582,1,1,0), +(21012,4,0,'Where is Elder Runetotem?',11588,1,1,0), +(21012,5,0,'Where is Elder Windtotem?',11576,1,1,0), +(12243,0,0,'Ironforge',129104,1,1,27843), +(11845,5,0,'Stormwind Keep',0,1,1,27843), +(21014,1,0,'Where is Elder Ragetotem?',11600,1,1,0), +(21014,2,0,'Where is Elder Skyseer?',11594,1,1,0), +(21014,3,0,'Where is Elder Thunderhorn?',11604,1,1,0), +(21014,4,0,'Where is Elder Wildmane?',11602,1,1,0), +(11845,4,0,'Stormwind Harbor',0,1,1,27843), +(9975,1,0,'Where is Elder Yurauk?',31310,1,1,0), +(9975,2,0,'Where is Elder Stonebeard?',31308,1,1,0), +(9975,3,0,'Where is Elder Muraco?',31304,1,1,0), +(9975,4,0,'Where is Elder Graymane?',31302,1,1,0), +(21016,1,0,'Where is Elder Snowcrown?',11499,1,1,0), +(21016,2,0,'Where is Elder Windrun?',11503,1,1,0), +(21017,1,0,'Where is Elder Bronzebeard?',11512,1,1,0), +(21017,2,0,'Where is Elder Ironband?',11507,1,1,0), +(21017,3,0,'Where is Elder Silvervein?',11516,1,1,0), +(11846,0,0,'Old Town Stable Master',0,1,1,27481), +(21018,1,0,'Where is Elder Darkcore?',11493,1,1,0), +(21018,2,0,'Where is Elder Meadowrun?',11653,1,1,0), +(21018,3,0,'Where is Elder Moonstrike?',11491,1,1,0), +(21018,4,0,'Where is Elder Obsidian?',11497,1,1,0), +(21018,5,0,'Where is Elder Snowcrown?',11499,1,1,0), +(9980,1,0,'Where is Elder Ohanzee?',31300,1,1,0), +(9980,2,0,'Where is Elder Stonebeard?',31308,1,1,0), +(9980,3,0,'Where is Elder Fargal?',31306,1,1,0), +(9980,4,0,'Where is Elder Killas?',31296,1,1,0), +(9980,5,0,'Where is Elder Tauros?',31298,1,1,0), +(9980,6,0,'Where is Elder Yurauk?',31310,1,1,0), +(9980,7,0,'Where is Elder Thoim?',31280,1,1,0), +(21020,1,0,'Where is Elder Mistwalker?',11592,1,1,0), +(21020,2,0,'Where is Elder Morningdew?',11586,1,1,0), +(21020,3,0,'Where is Elder Splitrock?',11596,1,1,0), +(21021,1,0,'Where is Elder Bladeswift?',11554,1,1,0), +(21021,2,0,'Where is Elder Bronzebeard?',11512,1,1,0), +(21021,3,0,'Where is Elder Rumblerock?',11534,1,1,0), +(21021,4,0,'Where is Elder Stormbrow?',11542,1,1,0), +(11846,1,0,'Dwarven District Stable Master',0,1,1,27481), +(21022,1,0,'Where is Elder Bloodhoof?',11574,1,1,0), +(21022,2,0,'Where is Elder Moonwarden?',11580,1,1,0), +(21022,3,0,'Where is Elder Morningdew?',11586,1,1,0), +(21022,4,0,'Where is Elder Runetotem?',11588,1,1,0), +(21022,5,0,'Where is Elder Windtotem?',11576,1,1,0), +(21023,1,0,'Where is Elder Moonstrike?',11491,1,1,0), +(421,0,0,'Alchemy',52058,1,1,27843), +(9937,1,0,'Where is Elder Arp?',31252,1,1,0), +(9937,2,0,'Where is Elder Pamuya?',31255,1,1,0), +(9937,3,0,'Where is Elder Sardis?',31270,1,1,0), +(421,1,0,'Archaeology',0,1,1,27843), +(21025,1,0,'Where is Elder Bronzebeard?',11512,1,1,0), +(21025,2,0,'Where is Elder Goldwell?',11509,1,1,0), +(21025,3,0,'Where is Elder Morndeep?',11530,1,1,0), +(21025,4,0,'Where is Elder Silvervein?',11516,1,1,0), +(21025,5,0,'Where is Elder Stonefort?',11532,1,1,0), +(421,2,0,'Blacksmithing',51346,1,1,27843), +(21026,1,0,'Where is Elder Chogan\'gada?',31288,1,1,0), +(21026,2,0,'Where is Elder Lunaro?',31290,1,1,0), +(21026,3,0,'Where is Elder Whurain?',31286,1,1,0), +(421,3,0,'Cooking',45763,1,1,27843), +(9966,1,0,'Where is Elder Ohanzee?',31300,1,1,0), +(9966,2,0,'Where is Elder Tauros?',31298,1,1,0), +(9966,3,0,'Where is Elder Nurgen?',31284,1,1,0), +(9966,4,0,'Where is Elder Graymane?',31302,1,1,0), +(421,4,0,'Enchanting',52063,1,1,27843), +(9963,1,0,'Where is Elder Jarten?',31294,1,1,0), +(9963,2,0,'Where is Elder Chogan\'gada?',31288,1,1,0), +(9963,3,0,'Where is Elder Skywarden?',31282,1,1,0), +(9963,4,0,'Where is Elder Beldak?',31292,1,1,0), +(9963,5,0,'Where is Elder Killas?',31296,1,1,0), +(21029,1,0,'Where is Elder Graveborn?',11488,1,1,0), +(21029,2,0,'Where is Elder Moonstrike?',11491,1,1,0), +(21029,3,0,'Where is Elder Snowcrown?',11499,1,1,0), +(21029,4,0,'Where is Elder Windrun?',11503,1,1,0), +(421,5,0,'Engineering',51347,1,1,27843), +(21030,1,0,'Where is Elder Grimtotem?',11590,1,1,0), +(21030,2,0,'Where is Elder Morningdew?',11586,1,1,0), +(21030,3,0,'Where is Elder Splitrock?',11596,1,1,0), +(21031,1,0,'Where is Elder Darkcore?',11493,1,1,0), +(21031,2,0,'Where is Elder Graveborn?',11488,1,1,0), +(21031,3,0,'Where is Elder Highpeak?',11501,1,1,0), +(21031,4,0,'Where is Elder Meadowrun?',11653,1,1,0), +(21031,5,0,'Where is Elder Obsidian?',11497,1,1,0), +(21031,6,0,'Where is Elder Snowcrown?',11499,1,1,0), +(21031,7,0,'Where is Elder Windrun?',11503,1,1,0), +(421,6,0,'First Aid',52066,1,1,27843), +(21032,1,0,'Where is Elder Bloodhoof?',11574,1,1,0), +(21032,2,0,'Where is Elder High Mountain?',11578,1,1,0), +(21032,3,0,'Where is Elder Morningdew?',11586,1,1,0), +(21032,4,0,'Where is Elder Runetotem?',11588,1,1,0), +(21032,5,0,'Where is Elder Windtotem?',11576,1,1,0), +(421,7,0,'Fishing',99684,1,1,27843), +(21033,1,0,'Where is Elder Ironband?',11507,1,1,0), +(21034,1,0,'Where is Elder Grimtotem?',11590,1,1,0), +(21034,2,0,'Where is Elder High Mountain?',11578,1,1,0), +(21034,3,0,'Where is Elder Mistwalker?',11592,1,1,0), +(21034,4,0,'Where is Elder Moonwarden?',11580,1,1,0), +(21034,5,0,'Where is Elder Skyseer?',11594,1,1,0), +(21034,6,0,'Where is Elder Windtotem?',11576,1,1,0), +(9954,1,0,'Where is Elder Nurgen?',31284,1,1,0), +(9954,2,0,'Where is Elder Thoim?',31280,1,1,0), +(9954,3,0,'Where is Elder Skywarden?',31282,1,1,0), +(9954,4,0,'Where is Elder Pamuya?',31255,1,1,0), +(9954,5,0,'Where is Elder Whurain?',31286,1,1,0), +(9776,0,0,'I\'d like to take a flight around Stormwind Harbor.',29489,1,1,0), +(21036,1,0,'Where is Elder Ohanzee?',31300,1,1,0), +(21036,2,0,'Where is Elder Stonebeard?',31308,1,1,0), +(21036,3,0,'Where is Elder Fargal?',31306,1,1,0), +(21036,4,0,'Where is Elder Killas?',31296,1,1,0), +(21036,5,0,'Where is Elder Graymane?',31302,1,1,0), +(21036,6,0,'Where is Elder Yurauk?',31310,1,1,0), +(21037,1,0,'Where is Elder Brightspear?',11572,1,1,0), +(21037,2,0,'Where is Elder Riversong?',11567,1,1,0), +(21037,3,0,'Where is Elder Skygleam?',11556,1,1,0), +(21037,4,0,'Where is Elder Starweave?',11561,1,1,0), +(21037,5,0,'Where is Elder Stonespire?',11570,1,1,0), +(9626,0,0,'Teleport me to Amber Ledge, please.',27346,1,1,26365), +(9938,1,0,'Where is Elder Igasho?',31266,1,1,0), +(9938,2,0,'Where is Elder Arp?',31252,1,1,0), +(9938,3,0,'Where is Elder Sardis?',31270,1,1,0), +(9948,1,0,'Where is Elder Fargal?',31306,1,1,0), +(9948,2,0,'Where is Elder Stonebeard?',31308,1,1,0), +(9948,3,0,'Where is Elder Graymane?',31302,1,1,0), +(9948,4,0,'Where is Elder Yurauk?',31310,1,1,0), +(9472,1,2,'May I use a drake to fly elsewhere?',27349,4,8192,26365), +(21040,1,0,'Where is Elder Graveborn?',11488,1,1,0), +(21040,2,0,'Where is Elder Highpeak?',11501,1,1,0), +(21040,3,0,'Where is Elder Moonstrike?',11491,1,1,0), +(9971,1,0,'Where is Elder Stonebeard?',31308,1,1,0), +(9971,2,0,'Where is Elder Muraco?',31304,1,1,0), +(9971,3,0,'Where is Elder Kilias?',31310,1,1,0), +(9472,0,0,'I\'d like passage to the Transitus Shield.',26156,1,1,26365), +(21042,1,0,'Where is Elder Arp?',31252,1,1,0), +(21042,2,0,'Where is Elder Sardis?',31270,1,1,0), +(21042,3,0,'Where is Elder Bluewolf?',31272,1,1,0), +(21043,1,1,'I would like to buy from you.',14967,3,128,27602), +(21043,0,0,'I want to transmogrify my gear.',130510,20,268435456,27602), +(10616,0,0,'Mount the Hippogryph and prepare for battle!',35345,1,1,0), +(21044,1,0,'Where is Elder Dreamseer?',11598,1,1,0), +(21044,2,0,'Where is Elder Skyseer?',11594,1,1,0), +(21044,3,0,'Where is Elder Thunderhorn?',11604,1,1,0), +(21044,4,0,'Where is Elder Wildmane?',11602,1,1,0), +(21045,1,0,'Where is Elder Nightwind?',11565,1,1,0), +(21045,2,0,'Where is Elder Skygleam?',11556,1,1,0), +(21045,3,0,'Where is Elder Starweave?',11561,1,1,0), +(21045,4,0,'Where is Elder Stonespire?',11570,1,1,0), +(21046,1,0,'Where is Elder Dawnstrider?',11548,1,1,0), +(21046,2,0,'Where is Elder Hammershout?',11550,1,1,0), +(21046,3,0,'Where is Elder Stormbrow?',11542,1,1,0), +(21046,4,0,'Where is Elder Winterhoof?',11544,1,1,0), +(9182,1,0,'Wait, back up. What was that last thing you said?',24901,1,1,0), +(21047,1,0,'Where is Elder Darkhorn?',11584,1,1,0), +(21047,2,0,'Where is Elder High Mountain?',11578,1,1,0), +(21047,3,0,'Where is Elder Moonwarden?',11580,1,1,0), +(21047,4,0,'Where is Elder Windtotem?',11576,1,1,0), +(9946,1,0,'Where is Elder Wanikaya?',31274,1,1,0), +(9946,2,0,'Where is Elder Bluewolf?',31272,1,1,0), +(9946,3,0,'Where is Elder Arp?',31252,1,1,0), +(9182,0,0,'Thank you for telling me your story.',24901,1,1,26365), +(9931,1,0,'Where is Elder Arp?',31252,1,1,0), +(9931,2,0,'Where is Elder Pamuya?',31255,1,1,0), +(9931,3,0,'Where is Elder Igasho?',31266,1,1,0), +(9931,4,0,'Where is Elder Northal?',31268,1,1,0), +(21050,1,0,'Where is Elder Goldwell?',11509,1,1,0), +(21050,2,0,'Where is Elder Ironband?',11507,1,1,0), +(21051,1,0,'Where is Elder Starsong?',11537,1,1,0), +(21051,2,0,'Where is Elder Stormbrow?',11542,1,1,0), +(21051,3,0,'Where is Elder Winterhoof?',11544,1,1,0), +(9181,1,0,'Wait, back up. What was that last thing you said?',24901,1,1,26365), +(21052,1,0,'Where is Elder Bladeleaf?',11558,1,1,0), +(21052,2,0,'Where is Elder Bladeswift?',11554,1,1,0), +(21052,3,0,'Where is Elder Nightwind?',11565,1,1,0), +(21052,4,0,'Where is Elder Riversong?',11567,1,1,0), +(9181,0,0,'Go on.',24899,1,1,26365), +(21053,1,0,'Where is Elder Dreamseer?',11598,1,1,0), +(21053,2,0,'Where is Elder Morningdew?',11586,1,1,0), +(21053,3,0,'Where is Elder Ragetotem?',11600,1,1,0), +(21053,4,0,'Where is Elder Wildmane?',11602,1,1,0), +(21054,1,0,'Where is Elder Morthie?',31278,1,1,0), +(21054,2,0,'Where is Elder Thoim?',31280,1,1,0), +(21054,3,0,'Where is Elder Nurgen?',31284,1,1,0), +(21054,4,0,'Where is Elder Whurain?',31286,1,1,0), +(21055,1,0,'Where is Elder Graveborn?',11488,1,1,0), +(21055,2,0,'Where is Elder Farwhisper?',11505,1,1,0), +(21055,3,0,'Where is Elder Meadowrun?',11653,1,1,0), +(21055,4,0,'Where is Elder Moonstrike?',11491,1,1,0), +(21055,5,0,'Where is Elder Windrun?',11503,1,1,0), +(9180,1,0,'Wait, back up. What was that last thing you said?',24901,1,1,26365), +(21056,1,0,'Where is Elder Grimtotem?',11590,1,1,0), +(21056,2,0,'Where is Elder Mistwalker?',11592,1,1,0), +(9180,0,0,'Go on.',24899,1,1,26365), +(21057,1,0,'Where is Elder Starsong?',11537,1,1,0), +(21057,2,0,'Where is Elder Winterhoof?',11544,1,1,0), +(9179,1,0,'Wait, back up. What was that last thing you said?',24901,1,1,26365), +(21060,1,0,'Where is Elder Fargal?',31306,1,1,0), +(21060,2,0,'Where is Elder Yurauk?',31310,1,1,0), +(21060,3,0,'Where is Elder Muraco?',31304,1,1,0), +(21060,4,0,'Where is Elder Graymane?',31302,1,1,0), +(21060,5,0,'Where is Elder Tauros?',31298,1,1,0), +(21060,6,0,'Where is Elder Ohanzee?',31300,1,1,0), +(9179,0,0,'Go on.',24899,1,1,26365), +(21061,1,0,'Where is Elder Ironband?',11507,1,1,0), +(21062,1,0,'Where is Elder Brightspear?',11572,1,1,0), +(21062,2,0,'Where is Elder Nightwind?',11565,1,1,0), +(21062,3,0,'Where is Elder Riversong?',11567,1,1,0), +(21063,1,0,'Where is Elder Hammershout?',11550,1,1,0), +(21063,2,0,'Where is Elder Rumblerock?',11534,1,1,0), +(21063,3,0,'Where is Elder Skychaser?',11546,1,1,0), +(21063,4,0,'Where is Elder Starsong?',11537,1,1,0), +(9178,1,0,'Wait, back up. What was that last thing you said?',24901,1,1,26365), +(9968,1,0,'Where is Elder Lunaro?',31290,1,1,0), +(9968,2,0,'Where is Elder Ohanzee?',31300,1,1,0), +(9968,3,0,'Where is Elder Skywarden?',31282,1,1,0), +(9968,4,0,'Where is Elder Beldak?',31292,1,1,0), +(9968,5,0,'Where is Elder Killas?',31296,1,1,0), +(9968,6,0,'Where is Elder Graymane?',31302,1,1,0), +(9968,7,0,'Where is Elder Muraco?',31304,1,1,0), +(9178,0,0,'Go on.',24899,1,1,26365), +(9953,1,0,'Where is Elder Nurgen?',31284,1,1,0), +(9953,2,0,'Where is Elder Morthie?',31278,1,1,0), +(9953,3,0,'Where is Elder Skywarden?',31282,1,1,0), +(9953,4,0,'Where is Elder Whurain?',31286,1,1,0), +(21066,1,0,'Where is Elder Bladesing?',11606,1,1,0), +(21066,2,0,'Where is Elder Dreamseer?',11598,1,1,0), +(21066,3,0,'Where is Elder Primestone?',11608,1,1,0), +(21066,4,0,'Where is Elder Ragetotem?',11600,1,1,0), +(21066,5,0,'Where is Elder Wildmane?',11602,1,1,0), +(9945,1,0,'Where is Elder Sandrene?',31276,1,1,0), +(9945,2,0,'Where is Elder Bluewolf?',31272,1,1,0), +(9945,3,0,'Where is Elder Arp?',31252,1,1,0), +(9945,4,0,'Where is Elder Pamuya?',31255,1,1,0), +(9177,1,0,'Wait, back up. What was that last thing you said?',24901,1,1,26365), +(21068,1,0,'Where is Elder Bloodhoof?',11574,1,1,0), +(21068,2,0,'Where is Elder Darkcore?',11493,1,1,0), +(21068,3,0,'Where is Elder Darkhorn?',11584,1,1,0), +(21068,4,0,'Where is Elder Ironband?',11507,1,1,0), +(21068,5,0,'Where is Elder Windtotem?',11576,1,1,0), +(9177,0,0,'Go on.',24899,1,1,26365), +(9961,1,0,'Where is Elder Jarten?',31294,1,1,0), +(9961,2,0,'Where is Elder Chogan\'gada?',31288,1,1,0), +(9961,3,0,'Where is Elder Lunaro?',31290,1,1,0), +(9961,4,0,'Where is Elder Beldak?',31292,1,1,0), +(9961,5,0,'Where is Elder Killas?',31296,1,1,0), +(21070,1,0,'Where is Elder Dreamseer?',11598,1,1,0), +(21070,2,0,'Where is Elder Ragetotem?',11600,1,1,0), +(21070,3,0,'Where is Elder Skyseer?',11594,1,1,0), +(21070,4,0,'Where is Elder Thunderhorn?',11604,1,1,0), +(21071,1,0,'Where is Elder Farwhisper?',11505,1,1,0), +(21071,2,0,'Where is Elder Meadowrun?',11653,1,1,0), +(21071,3,0,'Where is Elder Moonstrike?',11491,1,1,0), +(21071,4,0,'Where is Elder Snowcrown?',11499,1,1,0), +(9176,1,0,'Wait, back up. What was that last thing you said?',24901,1,1,26365), +(9176,0,0,'Go on.',24899,1,1,26365), +(21073,1,0,'Where is Elder Rumblerock?',11534,1,1,0), +(21073,2,0,'Where is Elder Skychaser?',11546,1,1,0), +(21073,3,0,'Where is Elder Starglade?',11656,1,1,0), +(21073,4,0,'Where is Elder Starsong?',11537,1,1,0), +(9972,1,0,'Where is Elder Fargal?',31306,1,1,0), +(9972,2,0,'Where is Elder Stonebeard?',31308,1,1,0), +(9972,3,0,'Where is Elder Nurgen?',31284,1,1,0), +(9972,4,0,'Where is Elder Muraco?',31304,1,1,0), +(9772,0,3,'I\'m here for cooking training.',29483,5,16,26822), +(21188,1,0,'How do the Argent Crusade riders fight?',34377,1,1,0), +(9175,1,0,'Wait, back up. What was that last thing you said?',24901,1,1,26365), +(9175,0,0,'Go on.',24899,1,1,26365), +(9174,0,0,'Go on.',24899,1,1,26365), +(21194,0,0,'I\'d like to stable my pet here',30181,14,4194304,0), +(21195,0,5,'Make this inn my home',2822,8,65536,0), +(21195,1,1,'I want to browse your goods',3370,3,128,0), +(9171,1,0,'Tell me your story again, Fizzcrank.',24897,1,1,26365), +(9171,0,0,'Tell me what\'s going on out here, Fizzcrank.',24896,1,1,26365), +(655,0,3,'I require warrior training.',3147,5,16,0), +(4645,0,3,'I require warrior training.',3147,5,16,0), +(2121,1,0,'Bank of Ironforge',5078,1,1,25961), +(5266,0,3,'I\'d like some weapon training',8811,5,16,0), +(5266,1,0,'What can other weapon masters teach?',8812,1,1,0), +(5265,0,0,'Axe',20580,1,1,0), +(5265,1,0,'Bow',20581,1,1,0), +(5265,2,0,'Crossbow',20582,1,1,0), +(5265,3,0,'Dagger',20583,1,1,0), +(5265,4,0,'Fist Weapon',20584,1,1,0), +(5265,5,0,'Polearm',20587,1,1,0), +(5265,6,0,'Sword',20589,1,1,0), +(5265,7,0,'Thrown',20590,1,1,0), +(4326,0,2,'I need a ride.',3409,4,8192,0), +(441,2,5,'Make this inn your home.',2822,8,65536,0), +(9750,0,3,'Train me.',3266,5,16,26822), +(344,0,5,'Make this inn your home.',2822,8,65536,0), +(11885,0,2,'Show me where I can fly.',12271,4,8192,25996), +(9478,2,5,'Make this inn your home.',2822,8,65536,0), +(9478,3,1,'Let me browse your goods.',2823,3,128,0), +(9299,3,1,'I wish to buy from you.',25568,3,128,0), +(9784,0,2,'Show me where I can fly.',12271,4,8192,0), +(9498,2,1,'I would like to browse your goods, Illusia.',26387,3,128,0), +(10128,1,0,'Guide me to the Sunken Ring Graveyard.',32431,1,1,0), +(10128,0,0,'Guide me to the Fortress Graveyard.',32430,1,1,0), +(9923,2,0,'I\'d like to build a siege engine.',31061,1,1,0), +(9923,1,0,'I\'d like to build a demolisher.',31055,1,1,0), +(9923,0,0,'I\'d like to build a catapult.',31058,1,1,0), +(9833,1,1,'I want to browse your goods.',3370,3,128,26822), +(9831,0,3,'I\'m here for cooking training.',29483,5,16,0), +(10605,0,9,'I would like to go to the battleground.',10355,12,1048576,0), +(8452,0,9,'I would like to go to the battleground.',10355,12,1048576,0), +(10118,0,3,'Train me.',3266,5,16,26822), +(10131,0,0,'Take me to the Caverns of Time.',25111,1,1,26822), +(8731,0,3,'I would like to train.',8221,5,16,0), +(7816,0,3,'I would like to train.',8221,5,16,26124), +(8104,0,9,'I would like to go to the battleground.',10355,12,1048576,0), +(7243,0,1,'Let me browse your goods.',2823,3,128,0), +(8458,0,9,'I wish to join the battle!',10553,12,1048576,0), +(7440,0,7,'How do I form a guild?',3413,10,262144,0), +(7440,1,8,'I want to create a guild crest.',3415,11,524288,0), +(6478,0,9,'I wish to join the battle!',10553,12,1048576,0), +(7494,0,3,'I seek training as a Blacksmith.',14436,5,16,0), +(8494,1,7,'How do I form an arena team?',19852,10,262144,0), +(4132,0,3,'Train me.',3266,5,16,0), +(6597,0,1,'Redeem Battleground Marks for Honor.',40508,3,128,0), +(4282,0,2,'I need a ride.',3409,4,8192,0), +(4609,0,3,'I submit myself for further training, my master.',8298,5,16,0), +(5269,0,3,'I\'d like some weapon training',8811,5,16,0), +(5108,0,7,'How do I form a guild?',3413,10,262144,0), +(1120,0,1,'I would like to buy from you.',14967,3,128,0), +(9768,0,0,'I would like to whisper my secret code to you to receive Tyrael\'s Hilt.',29420,1,1,25881), +(2383,0,3,'I am interested in warlock training.',2544,5,16,0), +(5108,1,8,'I want to create a guild crest.',3415,11,524288,0), +(5269,1,0,'What can other weapon masters teach?',8812,1,1,0), +(9614,1,1,'Let me browse your goods.',2823,3,128,0), +(10598,0,1,'I want to browse your goods.',3370,3,128,0), +(401,6,0,'Shaman',45410,1,1,27843), +(8833,1,1,'What do you have to eat, Celeste?',22465,8,65536,26755), +(8833,2,1,'What do you have to eat, Celeste?',22465,3,128,0), +(9546,1,0,'Greer, I need a gryphon to ride and some bombs to drop on New Agamand!',23112,1,1,26822), +(9894,0,3,'Train me.',3266,5,16,26365), +(8991,1,0,'Official Explorers\' League business, McGoyver. Take me to the Explorers\' League Outpost!',23686,1,1,26755), +(7818,0,3,'I would like to train.',8221,5,16,26365), +(10350,0,3,'Train me.',0,0,0,0), +(7952,1,1,'Let me browse your goods.',2823,3,128,26124), +(9798,0,1,'I would like to buy from you.',14967,3,128,0), +(4304,0,1,'I want to browse your goods.',3370,3,128,0), +(9307,0,0,'I have something else to ask you about.',24226,1,1,26365), +(9073,1,0,'Goods & Gear',23963,1,1,0), +(9075,0,0,'The Maiden\'s Fancy',24126,1,1,0), +(9073,0,0,'Food & Drink',66664,1,1,0), +(9074,2,0,'Goods & Gear',23963,1,1,0), +(9074,0,0,'The Maiden\'s Fancy',24126,1,1,0), +(7937,0,1,'I would like to buy from you.',14967,3,128,26365), +(8784,0,1,'I\'d like a drink.',22179,3,128,26124), +(8227,0,1,'Alright, muffin man, show me your muffins!',18613,3,128,26124), +(8785,0,3,'I\'d love to learn more.',22182,5,16,26124), +(8774,0,1,'Wait! I want some coffee!',22150,3,128,26124), +(8531,0,1,'Show me what you have for sale.',29959,3,128,0), +(7947,0,1,'I\'ll... take a look.',16317,3,128,26124), +(8591,0,3,'I\'d like some weapon training',8811,5,16,0), +(2121,0,0,'Auction House',44627,1,1,25961), +(7808,0,6,'I would like to check my deposit box.',3398,9,131072,0), +(8590,0,0,'Axe',20580,1,1,0), +(7389,0,3,'I want to become a blacksmith.',13645,5,16,26124), +(7384,0,3,'I wish to train as an alchemist, Daedal.',13593,5,16,26124), +(7388,0,3,'Teach me how to cook, Cookie.',13642,5,16,26124), +(7361,0,3,'Please teach me how to fish, Diktynna.',13473,5,16,26124), +(7383,0,3,'I wish to learn about engineering, Daelo.',13578,5,16,26124), +(7380,0,3,'I wish to learn all that you have to teach me about first aid, Fateema.',13566,5,16,26124), +(10350,1,1,'Let me browse your goods.',0,0,0,0), +(7361,1,1,'I wish to browse your wares, Diktynna.',13474,3,128,26124), +(8784,1,3,'I hear you\'re quite the cook.',22180,1,1,26124), +(8591,1,0,'What can other weapon masters teach?',8812,1,1,0), +(7388,1,1,'Let me browse your wares, Cookie.',13643,3,128,26124), +(8590,1,0,'Bow',20581,1,1,0), +(7383,1,1,'I wish to browse your wares, Daelo.',13579,3,128,26124), +(7389,1,1,'Let me browse your wares, Calypso.',13646,3,128,26124), +(8034,0,1,'Let\'s see what you have.',11820,0,0,26124), +(7468,2,1,'Let me browse your goods.',2823,3,128,26124), +(9733,2,1,'Let me browse your goods.',8097,3,128,26365), +(8590,2,0,'Fist Weapon',20584,1,1,0), +(8590,3,0,'Gun',20585,1,1,0), +(8590,4,0,'Polearm',20587,1,1,0), +(8590,5,0,'Staff',20588,1,1,0), +(8590,6,0,'Thrown',20590,1,1,0), +(9046,7,0,'What do you know about the magical gates at the Sunwell Plateau being brought down?',24231,1,1,26365), +(7882,0,1,'I want to browse your goods.',3370,3,128,0), +(7615,0,1,'I wish to buy from you.',25568,3,128,0), +(7855,0,5,'Make this inn your home.',2822,8,65536,26124), +(8510,0,0,'Yes Scryer, You may possess me',20008,1,1,0), +(8162,0,0,'Walk free, elder. Bring the spirits back to your tribe.',18353,1,1,26124), +(7855,1,1,'Let me browse your goods.',2823,3,128,26124), +(7633,2,0,'Dragonhawk Master',15220,1,1,0), +(7633,1,0,'Bank',7066,1,1,0), +(6214,0,0,'When the Darkmoon Faire arrives, where will it be located?',10109,1,1,0), +(1623,0,6,'I would like to check my deposit box.',3398,9,131072,0), +(8072,0,0,'Please take me to the master\'s lair.',17742,1,1,26124), +(10614,1,0,'I am ready for the next challenge.',35538,1,1,0), +(10128,2,0,'Guide me to the Broken Temple Graveyard.',32432,1,1,0), +(9584,0,2,'Show me where I can fly.',12271,4,8192,0), +(8884,2,5,'Make this inn your home.',2822,8,65536,0), +(8884,3,1,'Let me browse your goods.',2823,3,128,0), +(10139,1,1,'Let me browse your goods.',2823,8,128,0), +(10139,2,1,'Let me browse your goods.',2823,3,128,0), +(6475,0,9,'I would like to go to the battleground.',10355,12,1048576,0), +(3921,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(24,0,0,'Tell me a story, Skorn.',2469,1,1,0), +(12191,14,0,'Tell me about gathering professions.',47106,1,1,27547), +(342,2,5,'Make this inn your home.',2822,8,65536,0), +(342,3,1,'Let me browse your goods.',2823,3,128,0), +(347,2,5,'Make this inn your home.',2822,8,65536,0), +(441,4,1,'Let me browse your goods.',2823,3,128,0), +(681,0,1,'I want to browse your goods.',3370,3,128,26124), +(685,0,1,'I want to browse your goods.',3370,3,128,25961), +(1290,2,1,'I want to browse your goods.',3370,8,65536,0), +(1290,3,0,'What can I do at an inn?',4308,1,1,0), +(1290,4,1,'I want to browse your goods.',3370,3,128,0), +(1291,1,5,'Make this inn your home.',2822,8,65536,25881), +(1291,2,1,'I want to browse your goods.',3370,1,1,25881), +(1291,3,1,'I want to browse your goods.',3370,3,128,0), +(1296,1,5,'Make this inn your home.',2822,8,65536,0), +(1296,2,1,'Let me browse your goods.',2823,3,128,0), +(1296,3,0,'What can I do at an inn?',4308,1,1,0), +(3564,5,0,'Warrior',0,1,1,0), +(2562,2,1,'Gubber, I don\'t have a fishing pole.',5530,3,128,0), +(2744,0,3,'Train me.',3266,5,16,25881), +(4012,0,3,'I am a hunter and wish to train.',7523,5,16,0), +(3533,3,0,'The Inn',7075,1,1,25961), +(12180,6,3,'Train me in Jewelcrafting.',0,3,16,26365), +(3331,0,0,'The bank',7066,1,1,0), +(4267,0,3,'Train me.',3266,5,16,0), +(4301,0,2,'I need a ride.',3409,4,8192,25996), +(4303,0,1,'I want to browse your goods.',3370,3,128,0), +(12180,4,3,'Train me in Herbalism.',47112,3,16,27547), +(4185,0,3,'Train me.',3266,5,16,0), +(4655,0,3,'I submit myself for further training my master.',8298,5,16,0), +(4684,0,3,'I require warrior training.',3147,5,16,0), +(4783,0,0,'How do I train my pet?',29625,1,1,0), +(4783,1,0,'I wish to untrain my pet.',10621,1,1,0), +(5272,0,0,'Axe',20580,1,1,0), +(5272,1,0,'Crossbow',20582,1,1,0), +(5272,2,0,'Gun',20585,1,1,0), +(5272,3,0,'Mace',20586,1,1,0), +(5272,4,0,'Polearm',20587,1,1,0), +(5272,5,0,'Sword',20589,1,1,0), +(5273,0,3,'I\'d like some weapon training',8811,5,16,0), +(5273,1,0,'What can other weapon masters teach?',8812,1,1,0), +(12701,0,0,'Umm... Pebblebitty... the gate is open.',0,1,1,0), +(22125,1,1,'Let me browse your goods.',0,3,209,27404), +(12180,11,0,'Tell me about gathering professions.',47106,1,1,27547), +(6023,0,2,'I need a ride.',3409,4,8192,0), +(7467,0,3,'Teach me the ways of the spirits.',7658,5,16,0), +(7468,1,5,'Make this inn your home.',2822,8,65536,26124), +(7468,4,1,'Let me browse your goods.',2823,3,128,0), +(10526,0,1,'Let me browse your goods.',2823,3,128,0), +(7713,0,1,'Let me browse your goods.',2823,3,128,26124), +(7842,0,3,'Train me.',3266,5,16,26124), +(7896,2,5,'Make this inn your home.',2822,8,65536,0), +(7900,0,1,'Let me browse your goods.',2823,3,128,26124), +(7938,0,2,'Show me where I can fly.',12271,4,8192,0), +(7949,3,1,'Let me browse your goods.',2823,3,128,0), +(9074,1,0,'Food & Drink',66664,1,1,0), +(8105,0,9,'I would like to go to the battleground.',10355,12,1048576,0), +(8382,0,3,'Train me.',3266,5,16,0), +(8519,0,3,'Train me.',3266,5,16,26124), +(8530,0,1,'Show me what you have for sale.',29959,3,128,0), +(8532,0,1,'Show me what you have for sale.',29959,3,128,0), +(8646,0,3,'Train me.',3266,5,16,26365), +(8646,2,1,'Let me browse your goods.',2823,3,128,26365), +(8664,0,1,'Show me what you have for sale.',29959,3,128,26365), +(8866,0,3,'Train me.',3266,5,16,0), +(8867,0,3,'Train me.',3266,5,16,0), +(8868,0,3,'Train me.',3266,5,16,0), +(9061,0,1,'I want to browse your goods.',3370,3,128,26365), +(9199,0,0,'Who are you?',65124,1,1,0), +(9199,1,0,'What brings you to the Sunwell?',25560,1,1,0), +(9218,1,1,'Let me browse your goods.',2823,3,128,26365), +(9245,1,1,'Let me browse your goods.',2822,8,65536,26365), +(9245,2,1,'Let me browse your goods.',2823,3,128,0), +(9299,1,1,'I wish to buy from you.',2822,8,65536,26822), +(9415,0,0,'Clear me for the teleporter, I\'m ready to go!',25814,1,1,26365), +(9427,2,5,'Make this inn your home.',2822,8,65536,0), +(9427,3,1,'Let me browse your goods.',2823,3,128,0), +(9498,1,1,'I would like to browse your goods, Illusia.',26387,8,65536,26365), +(9628,1,1,'Let me browse your goods.',2822,8,65536,26365), +(9628,2,1,'Let me browse your goods.',2823,3,128,0), +(9783,0,2,'Show me where I can fly.',12271,4,8192,0), +(9495,0,1,'Let me browse your goods.',2823,3,128,26365), +(9130,0,1,'I want to browse your goods.',3370,3,128,26365), +(9986,0,3,'Train me.',3266,5,16,26365), +(9892,0,3,'Train me.',3266,5,16,26365), +(10114,0,3,'Train me.',3266,5,16,26365), +(10280,0,2,'Show me where I can fly.',12271,4,8192,26365), +(10351,0,3,'Train me.',3266,5,16,26124), +(10351,1,1,'Let me browse your goods.',2823,3,128,26124), +(10359,0,3,'Train me.',3266,5,16,26124), +(10359,1,1,'Let me browse your goods.',2823,3,128,26124), +(10360,0,3,'Train me.',3266,5,16,0), +(10360,1,1,'Let me browse your goods.',2823,3,128,0), +(10361,0,3,'Train me.',3266,5,16,26124), +(10361,1,1,'Let me browse your goods.',2823,3,128,26124), +(10362,0,3,'Train me.',3266,5,16,27377), +(10362,1,1,'Let me browse your goods.',8097,3,128,27377), +(10364,0,3,'Train me.',3266,5,16,26124), +(10364,1,1,'Let me browse your goods.',2823,3,128,26124), +(10365,0,3,'Train me.',3266,5,16,26124), +(10365,1,1,'Let me browse your goods.',2823,3,128,26124), +(10417,0,1,'I want to browse your goods.',3370,3,128,0), +(10422,0,1,'I want to browse your goods.',3370,3,128,0), +(10423,0,1,'I want to browse your goods.',3370,3,128,0), +(10424,0,1,'I want to browse your goods.',3370,3,128,0), +(10615,0,3,'Train me.',3266,5,16,0), +(3921,0,3,'I seek training as a druid.',7452,5,16,0), +(4281,0,2,'I need a ride.',3409,4,8192,0), +(349,1,1,'I want to browse your goods.',3370,1,1,26822), +(5124,4,0,'How many more supplies are needed for the next upgrade?',9151,1,1,0), +(6162,0,2,'I need a ride.',3409,4,8192,0), +(7139,0,0,'What is this place?',18411,1,1,0), +(7139,1,0,'Where is Medivh?',18412,1,1,0), +(7139,2,0,'How do you navigate the tower?',18413,1,1,0), +(7142,0,0,'Who is Midnight?',18417,1,1,0), +(8249,0,1,'I want to browse your goods.',3370,3,128,26124), +(7499,1,0,'We are ready to get you out of here, Thrall. Let\'s go!',14468,1,1,0), +(7499,0,0,'We are ready to get you out of here, Thrall. Let\'s go!',14468,1,1,0), +(7769,0,0,'I need a pack of incendiary bombs.',15784,1,1,0), +(7866,0,0,'Who is Talon King Ikiss?',16067,1,1,0), +(7866,1,0,'Who are the Sethekk?',16068,1,1,0), +(7866,2,0,'Where can I find the relics of Terokk?',16069,1,1,0), +(7866,3,0,'Who is this Terokk you keep mentioning?',16070,1,1,0), +(7868,0,0,'I\'ll have you out of there in just a moment.',16054,1,1,0), +(7885,0,1,'I wish to browse your wares.',38807,3,128,0), +(7959,0,0,'I\'m ready to go to Durnholde Keep.',16461,1,1,0), +(7984,0,0,'',16928,1,1,26365), +(7985,0,0,'',53903,1,1,26365), +(7986,0,0,'',53903,1,1,26365), +(7987,0,0,'',53903,1,1,26365), +(7988,0,0,'',53903,1,1,26365), +(7989,0,0,'',53903,1,1,26365), +(8079,0,9,'I would like to go to the battleground.',10355,12,1048576,0), +(8088,0,0,'Sa\'at, I have lost the chrono-beacon and require another!',17879,1,1,0), +(8179,0,1,'What could you be selling?',18431,3,128,0), +(8355,0,0,'Control Summoned Daemon',19323,1,1,0), +(8349,0,0,'Control King Llane',19297,1,1,0), +(8545,0,1,'I won\'t challenge you, but I\'d like to see your wares.',20345,3,128,26365), +(8870,0,0,'High Executor Anselm wants a report on the situation.',22594,1,1,0), +(8879,0,0,'High Executor Anselm requests your report.',22617,1,1,0), +(8894,1,0,'I need a riding bat to intercept the Alliance reinforcements.',22832,1,1,0), +(9691,0,3,'I seek training, Lady Alistra.',28020,5,16,0), +(10214,0,1,'How may I help you?',62303,3,128,0), +(700,0,1,'I want to browse your goods.',3370,3,128,25881), +(4664,0,3,'I would like to train further in the ways of the Light.',5299,5,16,0), +(4172,0,3,'Train me.',3266,5,16,25881), +(10210,0,3,'How do you fly in this cold climate?',33009,5,16,26822), +(8982,0,0,'Um... what was that?',23568,1,1,26822), +(8802,0,3,'I would like to train.',8221,5,16,26365), +(4557,1,0,'I wish to unlearn my talents.',62295,1,1,0), +(4358,0,2,'I need a ride.',3409,4,8192,25961), +(10191,0,1,'I want to browse your goods.',3370,3,128,26822), +(4650,0,3,'I require warrior training.',3147,5,16,0), +(10723,0,3,'I seek training to ride a steed.',7548,5,16,26822), +(9777,0,3,'Please teach me.',8442,5,16,26822), +(9990,0,3,'I am interested in mage training.',2522,5,16,0), +(7260,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(6628,0,3,'I am interested in warlock training.',2544,5,16,0), +(44427,0,0,'Lets Go!',0,1,1,29416), +(4647,0,3,'I seek training in the ways of the Hunter.',7643,5,16,0), +(3644,0,3,'I seek more training in the priestly ways.',7169,5,16,0), +(590,0,0,'Can you give me directions?',3269,1,1,0), +(592,0,0,'Can you give me directions?',3269,1,1,0), +(593,0,3,'Train me.',3266,5,16,0), +(597,0,3,'Train me.',3266,5,16,0), +(1288,0,0,'How could the altar and the statues be related?',4417,1,1,0), +(7450,0,1,'Show me what I\'ve earned the right to purchase.',14258,3,128,0), +(21,0,0,'How can I help?',62066,1,1,0), +(349,0,5,'Make this inn your home.',2822,1,1,26822), +(2783,0,3,'Train me.',3266,5,16,0), +(4270,0,3,'Train me.',3266,5,16,0), +(5962,0,1,'I wish to browse your wares.',38807,3,128,25950), +(5967,0,2,'I need a ride.',3409,4,8192,25950), +(4781,0,1,'Show me what I have access to, Lokhtos.',8401,3,128,0), +(6498,0,9,'I wish to join the battle!',10553,12,1048576,0), +(2121,9,0,'Barber',19209,1,1,25961), +(3201,0,3,'I require training.',6503,5,16,0), +(2144,8,0,'Shaman',0,1,1,25961), +(2168,0,0,'Alchemy',52058,1,1,25961), +(2168,1,0,'Archaeology',44649,1,1,25961), +(2121,10,0,'Class Trainer',45376,1,1,25961), +(2121,11,0,'Profession Trainer',45378,1,1,25961), +(6465,0,9,'I would like to go to the battleground.',10355,12,1048576,0), +(9075,1,0,'Goods & Gear',23963,1,1,0), +(9537,0,0,'One of the cultists seems to have stumbled onto my blade and died... can I have a new disguise? I promise that I will be more careful this time.',27571,1,1,26365), +(10418,0,1,'I want to browse your goods.',3370,3,128,0), +(10627,0,3,'I would like to train.',8221,5,16,26822), +(10628,0,0,'OK...',35403,1,1,26822), +(9076,0,0,'The Maiden\'s Fancy',24126,1,1,0), +(9076,1,0,'Food & Drink',66664,1,1,0), +(7394,0,0,'What promotions do you have?',13655,1,1,25928), +(9197,0,0,'Heroes of Azeroth',25078,1,1,25928), +(9197,1,0,'Through the Dark Portal',25080,1,1,25928), +(9197,2,0,'Fires of Outland',25081,1,1,25928), +(9197,3,0,'March of the Legion',25082,1,1,25928), +(9197,4,0,'Servants of the Betrayer',25083,1,1,25928), +(9197,5,0,'Hunt for Illidan',27367,1,1,25928), +(9197,6,0,'Drums of War',27782,1,1,25928), +(9197,7,0,'Blood of Gladiators',33469,1,1,25928), +(9197,8,0,'Fields of Honor',34847,1,1,25928), +(9197,9,0,'Scourgewar',36467,1,1,25928), +(9197,10,0,'Wrathgate',40172,1,1,25928), +(9197,11,0,'Icecrown',40173,1,1,25928), +(9197,12,0,'Worldbreaker',50664,1,1,25928), +(9192,0,0,'Red Tabard',13657,1,1,25928), +(9192,1,0,'Hippogryph Hatchling',13672,1,1,25928), +(9192,2,0,'Riding Turtle',13675,1,1,25928), +(9192,3,0,'What other promotions do you have?',25084,1,1,25928), +(9194,0,0,'Picnic Basket',21266,1,1,25928), +(9194,1,0,'Baby Gorilla Pet',21263,1,1,25928), +(9194,2,0,'Imp in a Ball',21265,1,1,25928), +(9194,3,0,'What other promotions do you have?',25084,1,1,25928), +(9195,0,0,'Goblin Gumbo Kettle',22598,1,1,25928), +(9195,1,0,'Fishing Chair',22599,1,1,25928), +(9195,2,0,'Spectral Tiger Mount',22600,1,1,25928), +(9195,3,0,'What other promotions do you have?',25084,1,1,25928), +(9196,0,0,'Paper Airplane',24147,1,1,25928), +(9196,1,0,'Rocket Chicken',24146,1,1,25928), +(9196,2,0,'Kite',24145,1,1,25928), +(9196,3,0,'What other promotions do you have?',25084,1,1,25928), +(9191,0,0,'X-51 Nether-Rocket Mount',25047,1,1,25928), +(9191,1,0,'Pet Biscuit',25048,1,1,25928), +(9191,2,0,'Goblin Weather Machine - Prototype 01-B',25049,1,1,25928), +(9191,3,0,'What other promotions do you have?',25084,1,1,25928), +(9629,0,0,'Path of Illidan',27364,1,1,25928), +(9629,1,0,'Disco Ball',27365,1,1,25928), +(9629,2,0,'Ethereal Summoner',27366,1,1,25928), +(9629,3,0,'What other promotions do you have?',25084,1,1,25928), +(9682,0,0,'Party G.R.E.N.A.D.E.',27832,1,1,25928), +(9682,1,0,'Taunt Flag',27821,1,1,25928), +(9682,2,0,'Bear Mount',27822,1,1,25928), +(9682,3,0,'What other promotions do you have?',25084,1,1,25928), +(10330,0,0,'Sandbox Tiger',33467,1,1,25928), +(10330,1,0,'Epic Purple Shirt',33466,1,1,25928), +(10330,2,0,'Foam Sword Rack',33468,1,1,25928), +(10330,3,0,'What other promotions do you have?',25084,1,1,25928), +(10533,0,0,'Path of Cenarius',34848,1,1,25928), +(10533,1,0,'Ogre Pinata',34849,1,1,25928), +(10533,2,0,'Magic Rooster Mount',34850,1,1,25928), +(10533,3,0,'What other promotions do you have?',25084,1,1,25928), +(10810,1,0,'Mini-Mount',36465,1,1,0), +(10810,2,0,'Tuskarr Kite',36463,1,1,25928), +(10810,3,0,'Spectral Tiger Cub',36466,1,1,25928), +(10810,4,0,'What other promotions do you have?',25084,1,1,25928), +(11342,0,0,'Landro\'s Gift Box',40166,1,1,25928), +(11342,1,0,'Instant Statue',40167,1,1,25928), +(11342,2,0,'Blazing Hippogryph',40168,1,1,25928), +(11342,3,0,'What other promotions do you have?',25084,1,1,25928), +(11343,0,0,'Paint Bomb',40169,1,1,25928), +(11343,1,0,'Portal Stone',40170,1,1,25928), +(11343,2,0,'Rhino Mount',40171,1,1,25928), +(11343,3,0,'What other promotions do you have?',25084,1,1,25928), +(9193,0,0,'Blue Tabard',13669,1,1,25928), +(9193,1,0,'Perpetual Purple Firework',13673,1,1,25928), +(9193,2,0,'Ogre Costume',13674,1,1,25928), +(9193,3,0,'Tabard of the Arcane',27576,1,1,25928), +(9193,4,0,'Tabard of Brilliance',27578,1,1,25928), +(9193,5,0,'Tabard of the Defender',27579,1,1,25928), +(9193,6,0,'Tabard of Fury',27580,1,1,25928), +(9193,7,0,'Tabard of Nature',27581,1,1,25928), +(9193,8,0,'Tabard of the Void',27582,1,1,25928), +(9193,9,0,'Landro\'s Pet Box',38654,1,1,25928), +(9193,10,0,'What other promotions do you have?',25084,1,1,25928), +(4081,0,0,'Continue reading...',7615,1,1,0), +(4082,0,0,'Continue reading...',7615,1,1,0), +(5271,0,3,'I\'d like some weapon training',8811,5,16,0), +(5271,1,0,'What can other weapon masters teach?',8812,1,1,0), +(5270,0,0,'Axe',20580,1,1,0), +(5270,1,0,'Bow',20581,1,1,0), +(5270,2,0,'Fist Weapon',20584,1,1,0), +(5270,3,0,'Gun',20585,1,1,0), +(5270,4,0,'Mace',20586,1,1,0), +(5270,5,0,'Thrown',20590,1,1,0), +(5275,1,0,'What can other weapon masters teach?',8812,1,1,0), +(5274,0,0,'Bow',20581,1,1,0), +(5274,1,0,'Crossbow',20582,1,1,0), +(5274,2,0,'Dagger',20583,1,1,0), +(5274,3,0,'Polearm',20587,1,1,0), +(5274,4,0,'Staff',20588,1,1,0), +(5274,5,0,'Sword',20589,1,1,0), +(5274,6,0,'Thrown',20590,1,1,0), +(5277,0,3,'I\'d like some weapon training',8811,5,16,0), +(5277,1,0,'What can other weapon masters teach?',8812,1,1,0), +(5276,0,0,'Axe',20580,1,1,0), +(5276,1,0,'Bow',20581,1,1,0), +(5276,2,0,'Fist Weapon',20584,1,1,0), +(5276,3,0,'Gun',20585,1,1,0), +(5276,4,0,'Mace',20586,1,1,0), +(5276,5,0,'Polearm',20587,1,1,0), +(5276,6,0,'Staff',20588,1,1,0), +(5276,7,0,'Sword',20589,1,1,0), +(9668,0,0,'I\'m ready to begin. What is the first ingredient you require?',27609,1,1,0), +(9650,0,0,'Get out there and make those Scourge wish they were never reborn!',27486,1,1,0), +(10281,0,1,'I would like to buy from you.',14967,3,128,26822), +(2121,7,0,'Stable Master',45383,1,1,25961), +(2121,8,0,'Battlemaster',7247,1,1,25961), +(2121,5,0,'The Inn',7075,1,1,25961), +(2121,6,0,'Mailbox',45381,1,1,25961), +(2121,3,0,'Gryphon Master',6990,1,1,25961), +(2121,4,0,'Guild Master & Vendor',2870,1,1,25961), +(9283,0,0,'Who is Malygos?',25459,1,1,26365), +(9488,0,1,'Do you have any items I can test?',26318,3,128,0), +(401,5,0,'Rogue',45406,1,1,27843), +(421,11,0,'Jewelcrafting',45758,1,1,27843), +(421,10,0,'Inscription',48811,1,1,27843), +(3506,0,0,'Bank',44628,1,1,25881), +(3506,1,0,'Gryphon Master',6990,1,1,25881), +(3506,2,0,'Guild Master & Vendor',2870,1,1,25881), +(3506,3,0,'Inn',44629,1,1,25881), +(3506,4,0,'Stable Master',45383,1,1,25881), +(3506,5,0,'Class Trainer',45378,1,1,25881), +(3506,6,0,'Profession Trainer',45382,1,1,25881), +(3519,0,0,'Druid',45409,1,1,25881), +(3519,1,0,'Hunter',50546,1,1,25881), +(3519,2,0,'Mage',45404,1,1,25881), +(3519,3,0,'Paladin',48028,1,1,25881), +(3519,4,0,'Priest',45405,1,1,25881), +(3519,5,0,'Rogue',45406,1,1,25881), +(3519,6,0,'Shaman',45410,1,1,25881), +(3519,7,0,'Warlock',45407,1,1,25881), +(3519,8,0,'Warrior',45408,1,1,25881), +(3532,0,0,'Alchemy',52058,1,1,0), +(3532,1,0,'Blacksmithing',51346,1,1,0), +(3532,2,0,'Cooking',45763,1,1,0), +(3532,3,0,'Enchanting',52063,1,1,0), +(3532,4,0,'Engineering',51347,1,1,0), +(3532,5,0,'First Aid',52066,1,1,0), +(3532,6,0,'Fishing',45767,1,1,0), +(3532,7,0,'Herbalism',45768,1,1,0), +(3532,8,0,'Inscription',48811,1,1,0), +(3532,9,0,'Leatherworking',52071,1,1,0), +(3532,10,0,'Mining',51348,1,1,0), +(3532,11,0,'Skinning',52076,1,1,0), +(3532,12,0,'Tailoring',52077,1,1,0), +(4557,0,3,'I would like to train further in the ways of the Light.',5299,5,16,0), +(4556,1,0,'I wish to unlearn my talents.',62295,1,1,0), +(4556,0,3,'I would like to train further in the ways of the Light.',5299,5,16,0), +(4461,0,11,'Yes. I do.',60961,1,1,0), +(2304,1,0,'I wish to unlearn my talents.',62295,1,1,0), +(2304,0,3,'I would like to train further in the ways of the Light.',5299,5,16,0), +(6087,1,3,'What can you teach me?',9980,1,1,0), +(6059,0,5,'Make this inn your home.',2822,1,1,0), +(12992,5,0,'Take me to the faire staging area.',52971,1,1,26365), +(2168,14,0,'Tailoring',0,1,1,25961), +(2168,13,0,'Skinning',0,1,1,25961), +(2168,12,0,'Mining',52077,1,1,25961), +(2168,11,0,'Leatherworking',52076,1,1,25961), +(2168,10,0,'Jewelcrafting',51348,1,1,25961), +(2168,9,0,'Inscription',52071,1,1,25961), +(2168,8,0,'Herbalism',48811,1,1,25961), +(2168,7,0,'Fishing',45768,1,1,25961), +(2168,6,0,'First Aid',45767,1,1,25961), +(2168,5,0,'Engineering',52066,1,1,25961), +(3558,2,0,'Cooking',45763,1,1,0), +(3558,1,0,'Blacksmithing',51346,1,1,0), +(3558,0,0,'Alchemy',52058,1,1,0), +(3545,7,0,'Warrior',0,1,1,25961), +(3545,6,0,'Warlock',45408,1,1,25961), +(3545,5,0,'Shaman',45407,1,1,25961), +(3545,4,0,'Rogue',45406,1,1,25961), +(3545,3,0,'Priest',45405,1,1,25961), +(3545,2,0,'Paladin',48028,1,1,25961), +(3545,1,0,'Mage',45404,1,1,25961), +(3545,0,0,'Hunter',50546,1,1,25961), +(1297,2,1,'Let me browse your goods.',2823,3,128,25961), +(1297,1,5,'Make this inn your home.',2822,1,1,25961), +(1297,0,0,'What can I do at an inn?',4308,1,1,25961), +(4677,0,3,'I would like to train further in the ways of the Light.',5299,5,16,0), +(4135,0,3,'Train me.',3266,5,16,25961), +(3186,0,1,'I would like to buy from you.',14967,3,128,0), +(4005,0,1,'I would like to buy from you.',14967,3,128,0), +(3533,6,0,'Profession Trainer',45382,1,1,25961), +(3533,5,0,'Class Trainer',45378,1,1,25961), +(3533,4,0,'Stable Master',45383,1,1,25961), +(10265,0,0,'Auction House',44627,1,1,0), +(10265,1,0,'The Bank',7066,1,1,0), +(10265,2,0,'Hippogryph Master',18292,1,1,0), +(10265,3,0,'Guild Master & Vendor',2870,1,1,0), +(10265,4,0,'The Inn',7075,1,1,0), +(10265,5,0,'Mailbox',45381,1,1,0), +(10265,6,0,'Stable Master',45383,1,1,0), +(10265,7,0,'Weapons Trainer',7247,1,1,0), +(10265,8,0,'Battlemaster',19209,1,1,0), +(10265,9,0,'Class Trainer',45378,1,1,0), +(10265,10,0,'Profession Trainer',45382,1,1,0), +(10265,11,0,'Lexicon of Power',32998,1,1,0), +(2343,0,0,'Druid',45409,1,1,0), +(2343,1,0,'Hunter',50546,1,1,0), +(2343,2,0,'Mage',45404,1,1,0), +(2343,3,0,'Paladin',48028,1,1,0), +(2343,4,0,'Priest',45405,1,1,0), +(2343,5,0,'Rogue',45406,1,1,0), +(2343,6,0,'Warrior',45408,1,1,0), +(2351,0,0,'Alchemy',52058,1,1,0), +(2351,1,0,'Archaeology',45763,1,1,0), +(2351,2,0,'Blacksmithing',52063,1,1,0), +(2351,3,0,'Cooking',52066,1,1,0), +(2351,4,0,'Enchanting',45767,1,1,0), +(2351,5,0,'Engineering',45768,1,1,0), +(2351,6,0,'First Aid',48811,1,1,0), +(2351,7,0,'Fishing',52071,1,1,0), +(2351,8,0,'Herbalism',52076,1,1,0), +(2351,9,0,'Inscription',52077,1,1,0), +(1951,15,0,'Stable Master',0,1,1,27404), +(3580,1,0,'Rut\'theran Ferry',7069,1,1,0), +(3923,0,3,'I seek training as a druid.',7452,5,16,0), +(2021,0,3,'I\'d like to train in cooking.',4988,1,1,0), +(11778,0,1,'Show me what you have for sale.',0,1,1,0), +(12180,1,3,'Train me in Blacksmithing.',0,3,1,26365), +(3564,3,0,'Priest',45406,1,1,0), +(3564,2,0,'Mage',45405,1,1,0), +(3564,1,0,'Hunter',50546,1,1,0), +(3564,0,0,'Druid',45409,1,1,0), +(3580,7,0,'Hippogryph Master',0,1,1,0), +(3580,6,0,'Profession Trainer',45382,1,1,0), +(3580,5,0,'Class Trainer',45378,1,1,0), +(3580,4,0,'Stable Master',45383,1,1,0), +(3580,3,0,'The Inn',7075,1,1,0), +(3580,2,0,'The Guild Master & Vendor.',2870,1,1,0), +(3580,0,0,'The Bank',7066,1,1,0), +(7777,0,0,'Auction House',44627,1,1,0), +(7777,1,0,'Bank',7066,1,1,0), +(7777,2,0,'Hippogryph Master',18292,1,1,0), +(7777,3,0,'Guild Master & Vendor',2870,1,1,0), +(7777,4,0,'Inn',7075,1,1,0), +(7777,5,0,'Mailbox',45381,1,1,0), +(7777,6,0,'Stable Master',45383,1,1,0), +(7777,7,0,'Battlemasters',15230,1,1,0), +(7777,8,0,'Class Trainer',45377,1,1,0), +(7777,9,0,'Profession Trainer',45378,1,1,0), +(7777,10,0,'Reforging',45382,1,1,0), +(7786,0,0,'Arena Battlemaster',18610,1,1,0), +(7787,0,0,'Druid',45409,1,1,0), +(7787,1,0,'Hunter',50546,1,1,0), +(7787,2,0,'Mage',45404,1,1,0), +(7787,3,0,'Paladin',48028,1,1,0), +(7787,4,0,'Priest',45405,1,1,0), +(7787,5,0,'Shaman',45410,1,1,0), +(7787,6,0,'Warrior',45408,1,1,0), +(7788,0,0,'Alchemy',52058,1,1,0), +(7788,1,0,'Archaeology',51346,1,1,0), +(7788,2,0,'Blacksmithing',52063,1,1,0), +(7788,3,0,'Enchanting',51347,1,1,0), +(7788,4,0,'Engineering',52066,1,1,0), +(7788,5,0,'First Aid',45767,1,1,0), +(7788,6,0,'Fishing',45768,1,1,0), +(7788,7,0,'Herbalism',48811,1,1,0), +(7788,8,0,'Inscription',45758,1,1,0), +(7788,9,0,'Jewelcrafting',52071,1,1,0), +(7788,10,0,'Leatherworking',51348,1,1,0), +(7788,11,0,'Mining',52076,1,1,0), +(7788,12,0,'Skinning',52077,1,1,0), +(7788,13,0,'Tailoring',45763,1,1,0), +(8129,0,0,'Bank',44628,1,1,0), +(8129,1,0,'Hippogryph Master',18292,1,1,0), +(8129,2,0,'Guild Master & Vendor',2870,1,1,0), +(8129,3,0,'Inn',44629,1,1,0), +(8129,4,0,'Stable Master',45383,1,1,0), +(8129,5,0,'Class Trainer',45378,1,1,0), +(8129,6,0,'Profession Trainer',45382,1,1,0), +(8137,0,0,'Druid',45409,1,1,0), +(8137,1,0,'Hunter',50546,1,1,0), +(8137,2,0,'Mage',45404,1,1,0), +(8137,3,0,'Paladin',48028,1,1,0), +(8137,4,0,'Priest',45405,1,1,0), +(8137,5,0,'Shaman',45410,1,1,0), +(8137,6,0,'Warrior',45408,1,1,0), +(8138,0,0,'Alchemy',52058,1,1,0), +(8138,1,0,'Blacksmithing',51346,1,1,0), +(8138,2,0,'Cooking',45763,1,1,0), +(8138,3,0,'Enchanting',52063,1,1,0), +(8138,4,0,'Engineering',51347,1,1,0), +(8138,5,0,'First Aid',52066,1,1,0), +(8138,6,0,'Fishing',45767,1,1,0), +(8138,7,0,'Herbalism',45768,1,1,0), +(8138,8,0,'Inscription',48811,1,1,0), +(8138,9,0,'Jewelcrafting',45758,1,1,0), +(8138,10,0,'Leatherworking',52071,1,1,0), +(8138,11,0,'Mining',51348,1,1,0), +(8138,12,0,'Skinning',52076,1,1,0), +(8138,13,0,'Tailoring',52077,1,1,0), +(1951,9,0,'Flight Master',0,1,1,27404), +(1951,13,0,'Other Continents',0,1,1,27404), +(1951,12,0,'Officer\'s Lounge',0,1,1,27404), +(1951,11,0,'Inn',0,1,1,27404), +(1951,10,0,'Guild Master & Vendor',0,1,1,27404), +(1942,10,0,'Inscription',0,1,1,27404), +(1942,11,0,'Jewelcrafting',0,1,1,27404), +(1942,12,0,'Leatherworking',0,1,1,27404), +(1942,13,0,'Mining',0,1,1,27404), +(22124,1,1,'Let me browse your goods.',0,3,209,27404), +(22124,0,3,'I\'m here for cooking training.',0,5,209,27404), +(1942,16,0,'Tailoring',0,1,1,27404), +(1942,15,0,'Skinning',0,1,1,27404), +(1951,8,0,'Class Trainer',0,1,1,27404), +(1951,7,0,'Battlemasters',0,1,1,27404), +(1951,6,0,'Barber',0,1,1,27404), +(1951,5,0,'Bank',0,1,1,27404), +(1951,4,0,'Auction House',0,1,1,27404), +(1951,3,0,'Void Storage',0,1,1,27404), +(1951,2,0,'Transmogrification',0,1,1,27404), +(1951,0,0,'Battle Pet Trainer',0,1,1,27404), +(21937,0,0,'What do we know about the Highmountain tauren?',0,1,1,27404), +(22193,0,0,'What do we know about the Mag\'har orcs?',0,1,1,27404), +(3285,1,0,'The wind rider master',6720,1,1,0), +(3285,0,0,'The bank',7066,1,1,0), +(5856,0,3,'Train me.',3266,5,16,0), +(10181,0,1,'I want to browse your goods.',3370,3,128,27377), +(3283,0,0,'Druid',50546,1,1,0), +(3283,1,0,'Hunter',45404,1,1,0), +(3283,2,0,'Mage',45405,1,1,0), +(3283,3,0,'Priest',45406,1,1,0), +(3283,4,0,'Rogue',45410,1,1,0), +(3283,5,0,'Shaman',45407,1,1,0), +(3283,6,0,'Warlock',45408,1,1,0), +(3284,0,0,'Alchemy',52058,1,1,0), +(3284,1,0,'Blacksmithing',51346,1,1,0), +(3284,2,0,'Cooking',45763,1,1,0), +(3284,3,0,'Enchanting',52063,1,1,0), +(3284,4,0,'Engineering',51347,1,1,0), +(3284,5,0,'First Aid',52066,1,1,0), +(3284,6,0,'Fishing',45767,1,1,0), +(3284,7,0,'Herbalism',45768,1,1,0), +(3284,8,0,'Inscription',48811,1,1,0), +(3284,9,0,'Leatherworking',52071,1,1,0), +(3284,10,0,'Mining',51348,1,1,0), +(3284,11,0,'Skinning',52076,1,1,0), +(3284,12,0,'Tailoring',52077,1,1,0), +(12191,13,0,'Tell me about Inscription.',47149,1,1,27547), +(12191,12,0,'Tell me about Herbalism.',47142,1,1,27547), +(12191,11,3,'Train me in Alchemy.',47109,5,1,27547), +(20678,0,0,'You are free to go!',0,1,1,29416), +(5853,0,3,'Train me.',3266,5,16,27547), +(5855,0,3,'Train me.',3266,5,16,27547), +(10841,0,1,'Let me browse your goods.',2823,3,128,27547), +(721,10,0,'A profession trainer',6793,1,1,0), +(721,12,0,'The zeppelin master',5518,1,1,0), +(740,0,0,'Druid',45409,1,1,0), +(740,1,0,'Hunter',50546,1,1,0), +(740,2,0,'Mage',45404,1,1,0), +(740,3,0,'Paladin',45405,1,1,0), +(740,4,0,'Shaman',45410,1,1,0), +(740,5,0,'Priest',45408,1,1,0), +(751,0,0,'Alchemy',52058,1,1,0), +(751,1,0,'Archaeology',51346,1,1,0), +(751,2,0,'Blacksmithing',45763,1,1,0), +(751,3,0,'Cooking',52063,1,1,0), +(751,4,0,'Enchanting',52066,1,1,0), +(751,5,0,'Engineering',45767,1,1,0), +(751,6,0,'First Aid',45768,1,1,0), +(751,7,0,'Fishing',48811,1,1,0), +(751,8,0,'Herbalism',52071,1,1,0), +(751,9,0,'Inscription',51348,1,1,0), +(751,10,0,'Jewelcrafting',52076,1,1,0), +(751,11,0,'Leatherworking',52077,1,1,0), +(12180,3,3,'Train me in Engineering.',0,3,16,26365), +(3331,5,0,'A profession trainer',6793,1,1,0), +(3331,4,0,'A class trainer',6792,1,1,0), +(3331,3,0,'The stable master',8521,1,1,0), +(3331,2,0,'The inn',7075,1,1,0), +(3331,1,0,'The wind rider master',6720,1,1,0), +(3329,0,0,'Druid',45409,1,1,0), +(3329,1,0,'Hunter',50546,1,1,0), +(3329,2,0,'Paladin',45410,1,1,0), +(3329,3,0,'Priest',45408,1,1,0), +(3330,0,0,'Alchemy',52058,1,1,0), +(3330,1,0,'Blacksmithing',51346,1,1,0), +(3330,2,0,'Cooking',45763,1,1,0), +(3330,3,0,'Enchanting',52063,1,1,0), +(3330,4,0,'First Aid',52066,1,1,0), +(3330,5,0,'Fishing',45767,1,1,0), +(3330,6,0,'Herbalism',45768,1,1,0), +(3330,7,0,'Inscription',48811,1,1,0), +(3330,8,0,'Leatherworking',52071,1,1,0), +(3330,9,0,'Mining',51348,1,1,0), +(3330,10,0,'Skinning',52076,1,1,0), +(3330,11,0,'Tailoring',52077,1,1,0), +(10769,0,0,'Auction House',5515,1,1,0), +(10769,1,0,'Bank',7066,1,1,0), +(10769,2,0,'Barber',45376,1,1,0), +(10769,3,0,'Bat Handler',6790,1,1,0), +(10769,4,0,'Guild Master & Vendor',10359,1,1,0), +(10769,5,0,'Class Trainer',2870,1,1,0), +(10769,6,0,'Inn',7075,1,1,0), +(10769,7,0,'Mailbox',33141,1,1,0), +(10769,8,0,'Profession Trainer',4895,1,1,0), +(10769,9,0,'Stable Master',8521,1,1,0), +(10769,10,0,'Zeppelin Master',7253,1,1,0), +(10769,11,0,'The zeppelin master',5518,1,1,0), +(10769,12,0,'A class trainer',6792,1,1,0), +(10769,13,0,'A profession trainer',6793,1,1,0), +(10768,0,0,'Druid',45404,1,1,0), +(10768,1,0,'Hunter',48028,1,1,0), +(10768,2,0,'Mage',45405,1,1,0), +(10768,3,0,'Paladin',45406,1,1,0), +(10768,4,0,'Priest',45407,1,1,0), +(10768,5,0,'Rogue',45408,1,1,0), +(10767,0,0,'Alchemy',52058,1,1,0), +(10767,1,0,'Archaeology',51346,1,1,0), +(10767,2,0,'Blacksmithing',45763,1,1,0), +(10767,3,0,'Cooking',52063,1,1,0), +(10767,4,0,'Enchanting',51347,1,1,0), +(10767,5,0,'Engineering',52066,1,1,0), +(10767,6,0,'First Aid',45767,1,1,0), +(10767,7,0,'Fishing',45768,1,1,0), +(10767,8,0,'Herbalism',48811,1,1,0), +(10767,9,0,'Inscription',52071,1,1,0), +(10767,10,0,'Jewelcrafting',51348,1,1,0), +(10767,11,0,'Leatherworking',52076,1,1,0), +(10767,12,0,'Mining',52077,1,1,0), +(3356,0,0,'The bank',7066,1,1,0), +(3356,1,0,'The bat handler',6790,1,1,0), +(3356,2,0,'The inn',7075,1,1,0), +(3356,3,0,'The stable master',8521,1,1,0), +(3356,4,0,'A class trainer',6792,1,1,0), +(3356,5,0,'A profession trainer',6793,1,1,0), +(3354,0,0,'Hunter',45404,1,1,0), +(3354,1,0,'Mage',48028,1,1,0), +(3354,2,0,'Paladin',45405,1,1,0), +(3354,3,0,'Priest',45406,1,1,0), +(3354,4,0,'Rogue',45407,1,1,0), +(3354,5,0,'Warlock',45408,1,1,0), +(3355,0,0,'Alchemy',52058,1,1,0), +(3355,1,0,'Blacksmithing',51346,1,1,0), +(3355,2,0,'Cooking',45763,1,1,0), +(3355,3,0,'Enchanting',52063,1,1,0), +(3355,4,0,'Engineering',51347,1,1,0), +(3355,5,0,'First Aid',52066,1,1,0), +(3355,6,0,'Fishing',45767,1,1,0), +(3355,7,0,'Herbalism',45768,1,1,0), +(3355,8,0,'Inscription',48811,1,1,0), +(3355,9,0,'Leatherworking',52071,1,1,0), +(3355,10,0,'Mining',51348,1,1,0), +(3355,11,0,'Skinning',52076,1,1,0), +(3355,12,0,'Tailoring',52077,1,1,0), +(7633,0,0,'Auction House',44627,1,1,0), +(6620,1,1,'I want to browse your goods.',3370,3,128,0), +(6620,0,5,'Make this inn your home.',2822,8,65536,0), +(6225,2,0,'Let\'s shoot! |cFF0008E8(Darkmoon Game Token)|r',53042,1,1,0), +(6225,0,0,'How does the Shooting Gallery work?',53329,1,1,0), +(6202,1,0,'Tell me more about these Darkmoon Cards.',10064,1,1,0), +(7668,0,0,'To the west.',15210,1,1,0), +(7668,1,0,'To the east.',15212,1,1,0), +(7639,0,0,'The west.',15216,1,1,0), +(7639,1,0,'The east.',15218,1,1,0), +(7845,0,0,'The Silvermoon City Inn.',15966,1,1,0), +(7845,1,0,'The Wayfarer\'s Rest tavern.',15965,1,1,0), +(7649,0,0,'Druid',45409,1,1,0), +(7649,1,0,'Hunter',50546,1,1,0), +(7649,2,0,'Mage',45404,1,1,0), +(7649,3,0,'Paladin',48028,1,1,0), +(7649,4,0,'Priest',45405,1,1,0), +(7649,5,0,'Rogue',45406,1,1,0), +(7649,6,0,'Shaman',3450,1,1,0), +(7667,0,0,'Alchemy',52058,1,1,0), +(7667,1,0,'Archaeology',44649,1,1,0), +(7667,2,0,'Blacksmithing',45763,1,1,0), +(7667,3,0,'Cooking',52063,1,1,0), +(7667,4,0,'Enchanting',51347,1,1,0), +(7667,5,0,'Engineering',52066,1,1,0), +(7667,6,0,'First Aid',45767,1,1,0), +(7667,7,0,'Fishing',45768,1,1,0), +(7667,8,0,'Herbalism',48811,1,1,0), +(7667,9,0,'Inscription',45758,1,1,0), +(7667,10,0,'Jewelcrafting',52071,1,1,0), +(7667,11,0,'Leatherworking',51348,1,1,0), +(7667,12,0,'Mining',52076,1,1,0), +(7667,13,0,'Skinning',52077,1,1,0), +(8185,0,0,'Dragonhawk Master',15220,1,1,0), +(8185,1,0,'Guild Master & Vendor',2870,1,1,0), +(8185,2,0,'Inn',5513,1,1,0), +(8185,3,0,'Stable Master',45383,1,1,0), +(8185,4,0,'Class Trainer',45378,1,1,0), +(8185,5,0,'Profession Trainer',45382,1,1,0), +(8196,0,0,'Druid',45409,1,1,0), +(8196,1,0,'Hunter',50546,1,1,0), +(8196,2,0,'Mage',45404,1,1,0), +(8196,3,0,'Paladin',48028,1,1,0), +(8196,4,0,'Priest',45405,1,1,0), +(8196,5,0,'Rogue',45406,1,1,0), +(8196,6,0,'Warlock',45407,1,1,0), +(8205,0,0,'Alchemy',52058,1,1,0), +(8205,1,0,'Blacksmithing',51346,1,1,0), +(8205,2,0,'Cooking',45763,1,1,0), +(8205,3,0,'Enchanting',52063,1,1,0), +(8205,4,0,'Engineering',51347,1,1,0), +(8205,5,0,'First Aid',52066,1,1,0), +(8205,6,0,'Fishing',45767,1,1,0), +(8205,7,0,'Herbalism',45768,1,1,0), +(8205,8,0,'Inscription',48811,1,1,0), +(8205,9,0,'Jewelcrafting',45758,1,1,0), +(8205,10,0,'Leatherworking',52071,1,1,0), +(8205,11,0,'Mining',51348,1,1,0), +(8205,12,0,'Skinning',52076,1,1,0), +(8205,13,0,'Tailoring',52077,1,1,0), +(8282,0,0,'World\'s End Tavern',19241,1,1,26124), +(8282,1,0,'Bank',44628,1,1,26124), +(8282,2,0,'Inn',44629,1,1,26124), +(8282,3,0,'Flight Master',45379,1,1,26124), +(8282,4,0,'Mailbox',45381,1,1,26124), +(8282,5,0,'Stable Master',45383,1,1,26124), +(8282,6,0,'Guild Services',50956,1,1,26124), +(8282,7,0,'Class Trainer',45382,1,1,26124), +(8282,8,0,'Profession Trainer',19589,1,1,26124), +(8282,9,0,'Battlemaster',20383,1,1,26124), +(8282,10,0,'Alchemy Lab',20383,1,1,26124), +(8315,0,0,'Aldor Bank',19212,1,1,26124), +(8315,1,0,'Scryers Bank',19213,1,1,26124), +(8317,0,0,'Aldor Inn',19217,1,1,26124), +(8317,1,0,'Scryers Inn',19218,1,1,26124), +(8320,0,0,'Aldor Bank',19212,1,1,26124), +(8320,1,0,'Aldor Inn',19217,1,1,26124), +(8320,2,0,'Scryers Bank',19213,1,1,26124), +(8320,3,0,'Scryers Inn',19218,1,1,26124), +(8321,0,0,'Aldor Stable',19224,1,1,26124), +(8321,1,0,'Scryers Stable',19225,1,1,26124), +(8419,2,0,'Inn',44629,1,1,0), +(8419,1,0,'Bank',44628,1,1,0), +(8419,0,0,'World\'s End Tavern',19241,1,1,0), +(8326,0,0,'Alchemy',52058,1,1,26124), +(8326,1,0,'Archaeology',44649,1,1,26124), +(8326,2,0,'Blacksmithing',45763,1,1,26124), +(8326,3,0,'Cooking',52063,1,1,26124), +(8326,4,0,'First Aid',52066,1,1,0), +(8326,5,0,'Enchanting',45758,1,1,26124), +(8326,6,0,'Leatherworking',52071,1,1,0), +(8326,7,0,'Engineering',52076,1,1,26124), +(8548,0,0,'Aldor Gem Merchant',20388,1,1,26124), +(8548,1,0,'Scryer Gem Merchant',20390,1,1,26124), +(8357,0,0,'World\'s End Tavern',19241,1,1,26124), +(8357,1,0,'Bank',44628,1,1,26124), +(8357,2,0,'Inn',44629,1,1,26124), +(8357,3,0,'Flight Master',45379,1,1,26124), +(8357,4,0,'Mailbox',45381,1,1,26124), +(8357,5,0,'Stable Master',45383,1,1,26124), +(8357,6,0,'Battlemaster',19209,1,1,26124), +(8357,7,0,'Class Trainer',45382,1,1,26124), +(8357,8,0,'Profession Trainer',19589,1,1,26124), +(8357,9,0,'Alchemy Lab',20383,1,1,26124), +(8357,10,0,'Gem Merchant',20385,1,1,26124), +(8365,0,0,'Alliance Battlemasters',19227,1,1,0), +(8365,1,0,'Horde Battlemasters',19228,1,1,0), +(8403,0,0,'Alchemy',52058,1,1,0), +(8403,1,0,'Blacksmithing',51346,1,1,0), +(8403,2,0,'Cooking',45763,1,1,0), +(8403,3,0,'Enchanting',52063,1,1,0), +(8403,4,0,'First Aid',52066,1,1,0), +(8403,5,0,'Jewelcrafting',45758,1,1,0), +(8403,6,0,'Leatherworking',52071,1,1,0), +(8403,7,0,'Skinning',52076,1,1,0), +(8419,3,0,'Flight Master',45379,1,1,0), +(8419,4,0,'Mailbox',45381,1,1,0), +(8419,5,0,'Stable Master',45383,1,1,0), +(8419,6,0,'Battlemaster',19209,1,1,0), +(8419,7,0,'Profession Trainer',45382,1,1,0), +(8419,8,0,'Mana Loom',19589,1,1,0), +(8419,9,0,'Alchemy Lab',20383,1,1,0), +(8419,10,0,'Gem Merchant',20385,1,1,0), +(8323,0,0,'Alliance Battlemasters',19227,1,1,0), +(8323,1,0,'Horde Battlemasters',19228,1,1,0), +(8323,2,0,'Arena Battlemasters',25121,1,1,0), +(8424,0,0,'Alchemy',52058,1,1,0), +(8424,1,0,'Blacksmithing',51346,1,1,0), +(8424,2,0,'Cooking',45763,1,1,0), +(8424,3,0,'Enchanting',52063,1,1,0), +(8424,4,0,'First Aid',52066,1,1,0), +(8424,5,0,'Jewelcrafting',45758,1,1,0), +(8424,6,0,'Leatherworking',52071,1,1,0), +(8424,7,0,'Skinning',52076,1,1,0), +(10082,4,0,'Portal Trainer',32153,1,1,26822), +(10082,3,0,'Cold Weather Flying Trainer',32154,1,1,26822), +(10056,11,0,'Lexicon of Power',32998,1,1,0), +(10056,10,0,'Cemetery',32111,1,1,26822), +(10056,9,0,'The Eventide',32110,1,1,26822), +(10056,8,0,'Runeweaver Square',32109,1,1,26822), +(10056,7,0,'Antonidas Memorial',32108,1,1,26822), +(10056,6,0,'Krasus\' Landing',32168,1,1,26822), +(10056,5,0,'Trade District',32121,1,1,26822), +(10056,4,0,'Sewers',32107,1,1,26822), +(10056,0,0,'The Alliance Quarter',32103,1,1,26822), +(10056,1,0,'The Horde Quarter',32104,1,1,26822), +(10106,0,0,'Arena',32179,1,1,26822), +(10056,2,0,'The Violet Citadel',32105,1,1,26822), +(10055,0,0,'Eastern Sewer Entrance',32099,1,1,26822), +(10055,1,0,'Western Sewer Entrance',32100,1,1,26822), +(10055,2,0,'Well Entrance',32101,1,1,26822), +(10090,1,0,'Bank',44628,1,1,26822), +(10090,0,0,'Inn',44629,1,1,26822), +(10084,2,0,'Sewers',32107,1,1,26822), +(10084,1,0,'Horde Inn',32134,1,1,26822), +(10084,0,0,'Alliance Inn',32133,1,1,26822), +(10058,1,0,'The Horde Quarter',32104,1,1,26822), +(10058,0,0,'The Alliance Quarter',32103,1,1,26822), +(10089,2,0,'Sewers',32107,1,1,26822), +(10089,1,0,'Southern Bank',32164,1,1,26822), +(10089,0,0,'Northern Bank',32163,1,1,26822), +(10057,2,0,'Well Entrance',32101,1,1,26822), +(10057,1,0,'Western Sewer Entrance',32100,1,1,26822), +(10057,0,0,'Eastern Sewer Entrance',32099,1,1,26822), +(10043,13,0,'Vendors',32176,1,1,26822), +(10043,12,0,'Trainers',32176,1,1,26822), +(10078,0,0,'Alchemy',52058,1,1,26822), +(10078,1,0,'Archaeology',44649,1,1,26822), +(10078,2,0,'Blacksmithing',45763,1,1,26822), +(10078,3,0,'Cooking',52063,1,1,26822), +(10078,4,0,'Enchanting',51347,1,1,26822), +(10078,5,0,'Engineering',52066,1,1,26822), +(10078,6,0,'First Aid',45767,1,1,26822), +(10078,7,0,'Fishing',45768,1,1,26822), +(10078,8,0,'Herbalism',48811,1,1,26822), +(10078,9,0,'Inscription',45758,1,1,26822), +(10078,10,0,'Jewelcrafting',52071,1,1,26822), +(10078,11,0,'Leatherworking',51348,1,1,26822), +(10078,12,0,'Mining',52076,1,1,26822), +(10078,13,0,'Skinning',52077,1,1,26822), +(10043,11,0,'Stable Master',32180,1,1,26822), +(10043,10,0,'Points of Interest',32180,1,1,26822), +(10043,9,0,'Mailbox',33141,1,1,26822), +(10043,8,0,'Locksmith',33141,1,1,26822), +(10043,7,0,'Inn',2870,1,1,26822), +(10043,5,0,'Flight Master',32177,1,1,26822), +(10043,4,0,'Battlemasters',45377,1,1,26822), +(10043,3,0,'Barber',45376,1,1,26822), +(10043,2,0,'Bank',44628,1,1,26822), +(10043,1,0,'Auction House',44627,1,1,26822), +(10043,0,0,'Arena',32179,1,1,26822), +(10097,0,0,'The Alliance Quarter',32103,1,1,0), +(10097,1,0,'The Horde Quarter',32104,1,1,0), +(10097,2,0,'The Horde Quarter',32104,1,1,0), +(10168,0,0,'Melee Weapons',32682,1,1,26822), +(10168,1,0,'Ranged & Thrown Weapons',32683,1,1,26822), +(10168,2,0,'Staves & Wands',32684,1,1,26822), +(10170,0,0,'Cloth Armor',32686,1,1,26822), +(10170,1,0,'Leather Armor',32688,1,1,26822), +(10170,2,0,'Mail Armor',32689,1,1,26822), +(10170,3,0,'Plate Armor',32690,1,1,26822), +(10170,4,0,'Shields',32692,1,1,26822), +(47930,0,0,'The king wishes to be informed about recent Neferset activity.',0,1,1,0), +(10153,0,0,'Profession Trainer',0,1,1,26822), +(10160,1,0,'The Horde Quarter',32104,1,1,26365), +(10160,0,0,'The Alliance Quarter',32103,1,1,26365), +(10073,1,0,'Horde Inn',32134,1,1,26822), +(10073,0,0,'Alliance Inn',32133,1,1,26822), +(10078,14,0,'Tailoring',0,1,1,26822), +(10082,5,0,'Profession Trainer',0,1,1,26822), +(10082,0,0,'Class Trainer',0,1,1,26822), +(10105,0,0,'Eastern Sewer Entrance',32099,1,1,26822), +(10105,1,0,'Western Sewer Entrance',32100,1,1,26822), +(10106,1,0,'Bank',44628,1,1,26822), +(10090,2,0,'Krasus\' Landing',32168,1,1,26822), +(10105,2,0,'Sewer Tunnel',32211,1,1,26822), +(10106,2,0,'Inn',44629,1,1,26822), +(10043,6,0,'Guild Master & Vendor',45379,1,1,26822), +(10106,3,0,'Sewer Exits',32215,1,1,26822), +(10106,4,0,'Vendors',32724,1,1,26822), +(10056,3,0,'The Violet Hold',32106,1,1,26822), +(9480,0,1,'I would like to buy from you.',14967,3,128,26365), +(699,0,6,'I would like to check my deposit box.',3398,9,131072,27326), +(686,0,1,'I want to browse your goods.',3370,3,128,25881), +(6500,0,9,'I wish to join the battle!',10553,12,1048576,0), +(4107,0,1,'I would like to buy from you.',14967,3,128,25996), +(4307,0,2,'I need a ride.',3409,4,8192,0), +(4348,0,3,'Train me.',3266,5,16,25928), +(4127,0,3,'Train me.',3266,5,16,25928), +(4206,0,3,'Train me.',3266,5,16,0), +(10896,0,0,'You and your men stayed behind to fight.',0,1,1,0), +(2781,0,3,'Train me.',3266,5,16,25901), +(4145,0,3,'Train me.',3266,5,16,25901), +(9453,0,1,'Let me browse your goods.',2823,3,128,26365), +(8754,0,1,'I\'m interested in purchasing a new drake.',21952,3,128,0), +(8649,0,1,'What do you have for sale, Rumpus?',20997,3,128,26365), +(8648,0,1,'What do you have for sale?',66614,3,128,26365), +(8647,0,1,'Me want Gug fix armor. Maybe me buy someting.',20995,3,128,26365), +(8558,0,2,'Show me where I can fly.',12271,4,8192,0), +(8387,0,1,'I wish to browse your wares.',38807,3,128,26365), +(8623,0,1,'Show me your gryphons, Brunn.',20699,3,128,26365), +(8622,0,3,'I seek training to ride a steed.',7548,5,16,26365), +(11203,0,0,'With all due respect, your Highness, we can do this alone.',39401,1,1,0), +(11204,0,0,'We do wish for you to stand down, your Highness.',39405,1,1,0), +(11101,0,1,'I wish to browse your wares.',38807,3,128,0), +(10996,0,0,'Ormus, what happened to your eyes?',38226,1,1,0), +(10910,0,0,'What is the Ashen Verdict?',37180,1,1,0), +(10912,0,0,'How can I learn to work Primordial Saronite?',37182,1,1,0), +(10943,0,0,'What would you have of me, my lady?',37551,1,1,0), +(11031,0,0,'Can you remove the sword?',37566,1,1,0), +(3564,4,0,'Rogue',45408,1,1,0), +(1630,0,0,'I\'m not a journeyman herbalist -- am I able to still assist you in your work?',4848,1,1,0), +(1482,0,0,'Tell me more about these hippogryphs.',4573,1,1,0), +(4302,0,2,'I need a ride.',3409,4,8192,27547), +(1341,0,0,'What\'s an elf like you doing inside a cave like this?',4471,1,1,0), +(1366,0,0,'What happened to him in the first place? When I... encountered him, he was rather malicious.',4476,1,1,0), +(1365,0,0,'I possess part of Eranikus\' essence. What do you want with it... or with me?',4478,1,1,0), +(1364,0,0,'I will consider what you have told me.',4480,1,1,0), +(7596,0,0,'I\'ve heard your name spoken only in whispers, mage. Who are you?',17154,1,1,26365), +(8009,0,0,'Go on, please.',19574,1,1,26124), +(8010,0,0,'I see.',60156,1,1,26124), +(8011,0,0,'What did you do then?',18742,1,1,26124), +(8012,0,0,'What happened next?',18743,1,1,26124), +(8014,0,0,'There was something else I wanted to ask you.',18745,1,1,26124), +(9485,0,0,'What can you tell me about Loken and the iron dwarves?',26264,1,1,26822), +(9564,0,0,'You mean the iceberg?',26869,1,1,26822), +(9565,0,0,'All this equipment just to examine ice?',26872,1,1,26822), +(9566,0,0,'It\'s just ice. Why all the fuss?',26877,1,1,26822), +(9567,0,0,'Rocket propelled warheads? Isn\'t that a bit aggressive?',27036,1,1,26822), +(9010,1,1,'Do you sell any of this stuff?',25731,3,128,26822), +(10627,1,0,'Do you actually sell anything?',35402,1,1,26822), +(10628,1,3,'Fine, then how about some training?',35407,5,16,26822), +(9763,1,1,'Let me browse your goods.',2822,8,65536,26822), +(6202,0,1,'Would you be interesting in some card trading?',8097,3,128,0), +(9492,1,0,'Use the outhouse.',26332,1,1,0), +(2685,1,1,'I want to browse your goods.',3370,3,128,25928), +(597,1,0,'I wish to unlearn Armorsmithing!',19010,1,1,0), +(593,1,0,'Tell me more about Forging Armor.',3267,1,1,0), +(9113,1,1,'Let me browse your goods.',2822,3,128,26365), +(11031,1,0,'My lady, I think I hear Arthas coming. Whatever you\'re going to do, do it quickly.',38383,1,1,0), +(4006,0,1,'I would like to buy from you.',14967,3,128,0), +(4019,0,3,'I seek training to ride a steed.',7548,5,16,0), +(3572,0,0,'Alchemy',52058,1,1,0), +(10025,0,0,'Take me to the ship.',31625,1,1,26822), +(1341,1,0,'Do you know someone... or something, rather, by the name of Eranikus?',4474,1,1,0), +(9484,1,1,'Show me what you have for sale, trapper.',27099,3,128,26822), +(9763,2,1,'Let me browse your goods.',2823,3,128,0), +(10201,2,1,'Let me browse your goods.',8097,3,128,26365), +(9866,2,5,'Make this inn your home.',2822,8,65536,0), +(9868,2,1,'Let me browse your goods.',2823,3,128,0), +(9513,0,0,'I am ready to be teleported to Dalaran.',29494,1,1,0), +(349,2,5,'Make this inn your home.',2822,8,65536,0), +(840,2,0,'Hero, I have urgent business with Corporal Splithoof.',3763,1,3,0), +(593,2,0,'Tell me more about Forging Weapons.',3271,1,1,0), +(345,2,5,'Make this inn your home.',2822,8,65536,0), +(7949,2,5,'Make this inn your home.',2822,8,65536,0), +(9113,2,1,'Let me browse your goods.',2823,3,128,0), +(1581,2,5,'Make this inn your home.',2822,8,65536,0), +(9866,3,1,'Let me browse your goods.',2823,3,128,0), +(349,3,1,'I want to browse your goods.',3370,3,128,0), +(345,3,1,'Let me browse your goods.',2823,3,128,0), +(691,0,1,'I want to browse your goods.',3370,3,128,25881), +(9870,0,0,'I\'ve heard that vrykul women cannot fight at all. If you wish to prove me wrong, you can try.',30753,1,1,26822), +(9878,0,0,'I have bad news for you Onu\'zun: I\'m gonna have to cut short your dreams!',30858,1,1,26822), +(9869,0,0,'I challenge you to a duel, Scarlet scum!',30742,1,1,26822), +(9875,0,0,'Sorry, Tinky, but I can\'t afford you as a distraction while I\'m doing what needs to be done here.',30825,1,1,26822), +(10005,0,0,'Grasp the Eye of the Lich King and focus your will upon it to scry for important information.',31492,1,1,26822), +(10008,0,0,'Waken the slumbering mjordin to see if it is really the ancient hero, Iskalder.',31505,1,1,26822), +(10188,0,1,'I want to browse your goods.',3370,3,128,27602), +(10129,0,0,'Guide me to the Fortress Graveyard.',32430,1,1,0), +(10129,1,0,'Guide me to the Sunken Ring Graveyard.',32431,1,1,0), +(10129,3,0,'Guide me to the Westspark Graveyard.',32434,1,1,0), +(10129,5,0,'Guide me back to the Horde landing camp. ',32436,1,1,0), +(8060,0,0,'YES!',17582,1,1,0), +(8060,1,0,'NO!',68393,1,1,0), +(21248,0,0,'Search the body for the pilot\'s emergency toolkit.',25112,1,1,0), +(5275,0,3,'I\'d like some weapon training',8811,5,16,0), +(21249,0,0,'Shake Hands',0,1,1,0), +(10354,0,0,'Tell me about demolishers.',33649,1,1,0), +(10354,1,1,'I want to browse your goods.',3370,3,128,0), +(10349,0,0,'What can these siege engines do?',33634,1,1,0), +(7469,0,2,'I desire to travel by hippogryph.',14358,4,8192,26124), +(7557,0,0,'Tell me about the Defenders.',14723,1,1,26124), +(9614,0,5,'Make this inn your home.',2822,8,65536,0), +(643,0,3,'Train me.',3266,5,16,25881), +(704,0,2,'I need a ride.',3409,4,8192,25996), +(4106,0,2,'I need a ride.',3409,4,8192,25881), +(9804,0,1,'Show me what you have for sale.',29959,3,128,26822), +(9742,5,0,'I need to find Moodle, do you have his stress ball?',28963,1,1,26822), +(1581,3,1,'I want to browse your goods.',3370,3,128,0), +(7132,0,0,'Please continue.',12031,1,1,0), +(3461,0,0,'I need another Argent Dawn Commission.',6878,1,1,0), +(8560,0,2,'Show me where I can fly.',12271,4,8192,26365), +(4133,0,3,'Train me.',3266,5,16,25996), +(6087,0,1,'I would like to buy from you.',14967,1,1,0), +(8059,0,1,'I need to repair.',17580,3,128,26124), +(8058,0,1,'I need some reagents and poisons, lady.',17574,3,128,26124), +(6528,0,1,'Let me browse your goods.',2823,3,128,26124), +(6563,0,2,'I need a ride.',3409,4,8192,0), +(7219,0,1,'Show me your wares, Wilhelm.',12274,3,128,0), +(7096,0,0,'What is Atiesh?',12021,1,1,0), +(7130,0,0,'What?',72224,1,1,0), +(7131,0,0,'Please continue.',12031,1,1,0), +(7129,0,0,'This is disturbing. Please continue.',12035,1,1,0), +(7712,0,1,'I want to browse your goods.',3370,3,128,26124), +(7127,0,0,'Is there anything else?',12039,1,1,0), +(7128,0,0,'Please, tell me more.',12037,1,1,0), +(7135,0,0,'What Guardian? I don\'t understand any of this.',12023,1,1,0), +(8057,0,1,'Cheese, eh? Is it perhaps... aged cheese?',17566,3,128,26124), +(7879,0,3,'I would like to train.',8221,5,16,26124), +(7134,0,0,'Please continue.',12031,1,1,0), +(7133,0,0,'What corruption?',12027,1,1,0), +(7096,1,0,'Where can I find core of elements?',12086,1,1,0), +(7099,1,0,'Korfax, where can I find Dark Iron scraps?',12088,1,1,0), +(7101,1,0,'Where can I find bone fragments?',12077,1,1,0), +(7879,1,1,'Let me browse your goods.',2823,3,128,26124), +(7102,1,0,'Where can I find crypt fiend parts, Leopold?',12075,1,1,0), +(7104,1,0,'Rayne, where should I look for savage fronds?',12090,1,1,0), +(7481,1,1,'I want to browse your goods.',3370,8,65536,27602), +(3461,1,1,'I would like to buy from you.',14967,3,128,0), +(8375,1,1,'I want to browse your goods.',3370,8,65536,26124), +(9476,1,1,'I want to browse your goods.',3370,8,65536,26365), +(8806,1,1,'I wish to browse your wares, Hazel.',22305,8,65536,26365), +(7173,2,5,'Make this inn your home.',2822,8,65536,0), +(6525,2,1,'I wish to browse your wares, Calandrath.',10647,3,128,0), +(7481,2,1,'I want to browse your goods.',3370,3,128,0), +(8375,2,1,'I want to browse your goods.',3370,3,128,0), +(3461,2,0,'Miranda, could you please tell me the insignia cost of items that you are offering for adventurers with other reputations?',12226,1,1,0), +(8806,2,1,'I wish to browse your wares, Hazel.',22305,3,128,0), +(9476,2,1,'I want to browse your goods.',3370,3,128,0), +(7173,3,1,'Let me browse your goods.',2823,3,128,0), +(6525,3,5,'Make this inn your home.',2822,8,65536,0), +(4675,0,3,'I seek training in the ways of the Hunter.',7643,5,16,0), +(3558,6,0,'Fishing',45767,1,1,0), +(22125,0,3,'Train me in Tailoring.',0,5,209,27404), +(6510,0,9,'I wish to join the battle!',10553,12,1048576,0), +(6343,0,1,'Let me browse your selection of fireworks.',10429,3,128,0), +(8994,0,0,'The Tapping of the Keg',23877,1,1,0), +(8994,1,0,'Food & Drink',66664,1,1,0), +(8994,2,0,'Tokens & Souvenirs',23756,1,1,0), +(8994,3,0,'Ram Racing',23757,1,1,0), +(8994,4,0,'Brew of the Month Club',26734,1,1,0), +(8994,5,0,'Dark Iron Dwarf Attacks',23837,1,1,0), +(9016,0,0,'Here\'s a gold, buy yourself something nice.',23829,1,1,0), +(9015,0,0,'I\'d like to buy Jack a drink. Perhaps something... extra strong.',23827,1,1,26822), +(8995,0,0,'The Tapping of the Keg',23877,1,1,0), +(8995,1,0,'Tokens & Souvenirs',23756,1,1,0), +(8995,2,0,'Ram Racing',23757,1,1,0), +(8995,3,0,'Brew of the Month Club',26734,1,1,0), +(8995,4,0,'Dark Iron Dwarf Attacks',23837,1,1,0), +(8996,0,0,'The Tapping of the Keg',23877,1,1,0), +(8996,1,0,'Food & Drink',66664,1,1,0), +(8996,2,0,'Ram Racing',23757,1,1,0), +(8996,3,0,'Brew of the Month Club',26734,1,1,0), +(8996,4,0,'Dark Iron Dwarf Attacks',23837,1,1,0), +(8997,0,0,'The Tapping of the Keg',23877,1,1,0), +(8997,1,0,'Food & Drink',66664,1,1,0), +(8997,2,0,'Tokens & Souvenirs',23756,1,1,0), +(8997,3,0,'Brew of the Month Club',26734,1,1,0), +(8997,4,0,'Dark Iron Dwarf Attacks',23837,1,1,0), +(9558,0,0,'The Tapping of the Keg',23877,1,1,0), +(9558,1,0,'Food & Drink',66664,1,1,0), +(9558,2,0,'Tokens & Souvenirs',23756,1,1,0), +(9558,3,0,'Ram Racing',23757,1,1,0), +(9558,4,0,'Dark Iron Dwarf Attacks',23837,1,1,0), +(9018,0,0,'The Tapping of the Keg',23877,1,1,0), +(9018,1,0,'Food & Drink',66664,1,1,0), +(9018,2,0,'Tokens & Souvenirs',23756,1,1,0), +(9018,3,0,'Ram Racing',23757,1,1,0), +(9018,4,0,'Brew of the Month Club',26734,1,1,0), +(9006,0,0,'What if I don\'t like drinking... Is there another way I can help out?',0,1,1,0), +(10604,0,0,'I\'d like a pair of Synthebrew Goggles.',35220,1,1,0), +(10604,1,0,'What did you say earlier?',35223,1,1,0), +(8770,0,1,'I want to browse your goods.',3370,3,128,0), +(8771,0,1,'I want to browse your goods.',3370,3,128,0), +(8772,0,1,'I want to browse your goods.',3370,3,128,0), +(8934,1,0,'May I have another racing ram?',74294,1,1,0), +(8953,0,0,'I\'m ready to work for you today! Give me the good stuff!',23378,1,1,0), +(8958,1,0,'Do I get a free mount?',23444,1,1,0), +(8958,2,0,'How do I make my ram go faster?',23445,1,1,0), +(8958,3,0,'What\'s with the different speeds?',23446,1,1,0), +(8958,4,0,'Can I tire my ram out?',23447,1,1,0), +(8958,5,0,'That all sounds very complicated...',23448,1,1,0), +(8958,6,0,'Say, you wouldn\'t happen to have an extra set of reins...',23654,1,1,0), +(8959,2,0,'I have another question.',62310,1,1,0), +(8960,0,0,'Say, you wouldn\'t happen to have an extra set of reins...',23654,1,1,0), +(8960,1,0,'I have another question.',62310,1,1,0), +(8961,0,0,'I have another question.',62310,1,1,0), +(8962,0,0,'I have another question.',62310,1,1,0), +(8963,0,0,'I have another question.',62310,1,1,0), +(8783,0,0,'What\'s with your crazy goggles?',23496,1,1,0), +(8783,1,0,'What\'s the \"Brew of the Month\" club?',26770,1,1,0), +(8783,2,0,'Ticket Exchange',27121,1,1,0), +(8783,3,1,'Let me browse your goods.',2823,3,128,0), +(8955,0,0,'I have another question.',62310,1,1,0), +(9561,0,0,'I have another question.',62310,1,1,0), +(8999,0,0,'The Tapping of the Keg',23877,1,1,0), +(8999,1,0,'Food & Drink',66664,1,1,0), +(8999,2,0,'Tokens & Souvenirs',23756,1,1,0), +(8999,3,0,'Ram Racing',23757,1,1,0), +(8999,4,0,'Brew of the Month Club',26734,1,1,0), +(8999,5,0,'Dark Iron Dwarf Attacks',23837,1,1,0), +(9026,0,0,'Food & Drink',66664,1,1,0), +(9026,1,0,'Tokens & Souvenirs',23756,1,1,0), +(9026,2,0,'Ram Racing',23757,1,1,0), +(9026,3,0,'Brew of the Month Club',26734,1,1,0), +(9026,4,0,'Dark Iron Dwarf Attacks',23837,1,1,0), +(9000,0,0,'The Tapping of the Keg',23877,1,1,0), +(9000,1,0,'Tokens & Souvenirs',23756,1,1,0), +(9000,2,0,'Ram Racing',23757,1,1,0), +(9000,3,0,'Brew of the Month Club',26734,1,1,0), +(9000,4,0,'Dark Iron Dwarf Attacks',23837,1,1,0), +(9001,0,0,'The Tapping of the Keg',23877,1,1,0), +(9001,1,0,'Food & Drink',66664,1,1,0), +(9001,2,0,'Ram Racing',23757,1,1,0), +(9001,3,0,'Brew of the Month Club',26734,1,1,0), +(9001,4,0,'Dark Iron Dwarf Attacks',23837,1,1,0), +(9002,0,0,'The Tapping of the Keg',23877,1,1,0), +(9002,1,0,'Food & Drink',66664,1,1,0), +(9002,2,0,'Tokens & Souvenirs',23756,1,1,0), +(9002,3,0,'Brew of the Month Club',26734,1,1,0), +(9002,4,0,'Dark Iron Dwarf Attacks',23837,1,1,0), +(9559,0,0,'The Tapping of the Keg',23877,1,1,0), +(9559,1,0,'Food & Drink',66664,1,1,0), +(9559,2,0,'Tokens & Souvenirs',23756,1,1,0), +(9559,3,0,'Ram Racing',23757,1,1,0), +(9559,4,0,'Dark Iron Dwarf Attacks',23837,1,1,0), +(9017,0,0,'The Tapping of the Keg',23877,1,1,0), +(9017,1,0,'Food & Drink',66664,1,1,0), +(9017,2,0,'Tokens & Souvenirs',23756,1,1,0), +(9017,3,0,'Ram Racing',23757,1,1,0), +(9017,4,0,'Brew of the Month Club',26734,1,1,0), +(9025,0,0,'Food & Drink',23824,1,1,0), +(12797,0,0,'We\'re ready to open the gates.',0,1,1,0), +(10603,0,0,'I\'d like a pair of Synthebrew Goggles.',35220,1,1,0), +(10603,1,0,'What did you say earlier?',35223,1,1,0), +(6342,0,1,'Let me browse your selection of fireworks.',10429,3,128,0), +(8972,0,1,'I want to browse your goods.',3370,3,128,0), +(8968,0,0,'What\'s with your crazy goggles?',23496,1,1,0), +(8968,1,0,'Brew of the Month Club?',26761,1,1,0), +(8968,2,0,'Ticket Exchange',27121,1,1,0), +(8968,3,1,'Let me browse your goods.',2823,3,128,0), +(8967,0,0,'I have another question.',62310,1,1,0), +(9560,0,0,'I have another question.',62310,1,1,0), +(8971,0,1,'I want to browse your goods.',3370,3,128,0), +(9554,0,0,'What do you have for me?',26695,3,128,0), +(9553,0,1,'I\'d like to buy this month\'s brew.',26693,3,128,0), +(4761,0,3,'I require training, Arnok.',8365,5,16,0), +(63,0,3,'I am interested in mage training.',2522,5,16,0), +(2144,6,0,'Warlock',45408,1,1,25961), +(8767,1,0,'Where is the zeppelin to Grom\'gol right now?',22199,1,1,0), +(4015,0,3,'I seek training to ride a steed.',7548,5,16,0), +(4202,0,3,'Train me.',3266,5,16,0), +(6461,0,9,'I would like to go to the battleground.',10355,12,1048576,0), +(6492,0,9,'I wish to join the battle!',10553,12,1048576,0), +(9765,0,0,'I challenge you, death knight!',29255,1,1,0), +(9739,0,0,'Salanar, I must return to the Realm of Shadows.',28863,1,1,0), +(9754,0,0,'Noth, where is Heigan?',29063,1,1,0), +(4525,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4525,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4525,0,3,'I require warrior training.',3147,5,16,0), +(4526,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4526,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4526,0,3,'I require warrior training.',3147,5,16,0), +(4527,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4527,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4527,0,3,'I require warrior training.',3147,5,16,0), +(10408,0,1,'I want to browse your goods.',3370,3,128,0), +(10408,1,3,'Train me.',3266,5,16,0), +(7263,0,3,'I require warrior training.',3147,5,16,0), +(8612,0,3,'I\'d like some weapon training',8811,5,16,0), +(8612,1,0,'What can other weapon masters teach?',8812,1,1,0), +(8611,0,0,'Axe',20580,1,1,0), +(8611,1,0,'Crossbow',20582,1,1,0), +(8611,2,0,'Fist Weapon',20584,1,1,0), +(8611,3,0,'Gun',20585,1,1,0), +(8611,4,0,'Mace',20586,1,1,0), +(8611,5,0,'Staff',20588,1,1,0), +(1294,1,5,'Make this inn your home.',2822,8,65536,0), +(1294,2,1,'I want to browse your goods.',3370,1,1,0), +(1294,3,1,'I want to browse your goods.',3370,3,128,0), +(9691,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(9691,1,0,'I wish to unlearn my talents.',62295,1,1,0), +(10110,0,0,'I am prepared to join the assault, Keritose. Do you have a skeletal gryphon ready for me?',32269,1,1,26899), +(10111,0,0,'',32270,1,1,26899), +(9528,0,0,'Yes, I am ready to travel to Venture Bay!',26605,1,1,0), +(21251,0,0,'Sprinkle some of the reindeer dust onto Metzen.',0,1,1,0), +(9991,0,0,'It\'s a pleasure to meet you as well, Archdruid. I am on a task from Tirion and time is short. Might I trouble you for a portal to Moonglade?',31372,1,1,26899), +(10215,0,0,'Please send me into the Emerald Dream to recover the acorns. I know of the danger and I do not fear it.',33045,1,1,26899), +(10215,1,0,'I wish to return to Archdruid Lilliandra. Can you send me back to her?',33139,1,1,26899), +(9647,0,0,'Here\'s to you. Dread Captain! Make me a pirate for the day.',27463,1,1,0), +(1662,0,0,'What are you doing out here?',27428,1,1,0), +(6182,0,0,'Silas, why is most everything at the fair free? How do you make a profit?',10035,1,1,0), +(7633,7,0,'Profession Trainer',45382,1,1,0), +(7633,6,0,'Mailbox',4895,1,1,0), +(6207,0,0,'Tell me about the Beasts Deck.',10067,1,1,0), +(6207,1,0,'Tell me about the Portals Deck.',10069,1,1,0), +(6207,2,0,'Tell me about the Elementals Deck.',10071,1,1,0), +(6207,3,0,'Tell me about the Warlords Deck.',10073,1,1,0), +(6207,4,0,'Tell me about the Furies Deck.',20889,1,1,0), +(6207,5,0,'Tell me about the Lunacy Deck.',20890,1,1,0), +(6207,6,0,'Tell me about the Blessings Deck.',20891,1,1,0), +(6207,7,0,'Tell me about the Storms Deck.',20892,1,1,0), +(6207,8,0,'Do other decks exist?',38603,1,1,0), +(6575,0,0,'How do I use the cannon?',0,1,1,0), +(6582,0,0,'What can I purchase?',10773,1,1,0), +(6582,1,0,'What are Darkmoon Faire Prize Tickets and how do I get them?',10775,1,1,0), +(6582,2,0,'What are Darkmoon Cards?',10777,1,1,0), +(6582,3,0,'What other things can I do at the faire?',0,1,1,0), +(6579,0,0,'',17471,1,1,0), +(6581,0,0,'What are these Tonk Control Consoles?',0,1,1,0), +(6581,1,0,'Tell me about the cannon.',0,1,1,0), +(6230,0,1,'Show me the drinks!',10179,3,128,0), +(6234,0,1,'Mmm... food.',10185,3,128,0), +(6231,0,1,'You mean to tell me you sell frogs?',10186,3,128,0), +(10478,0,0,'I\'ll take the flight.',34427,1,1,26822), +(6233,0,1,'What do you have for sale?',66614,3,128,0), +(10211,0,0,'',33013,1,1,26822), +(9648,0,0,'May I help you taste?',27464,1,1,0), +(9652,0,0,'Cheers!',27516,1,1,0), +(9648,1,0,'Let\'s taste more!',27493,1,1,0), +(9648,2,0,'Another drink!',27494,1,1,0), +(2076,0,0,'Why don\'t you and Rocknot go find somewhere private...',5040,1,1,0), +(1947,0,0,'Your bondage is at an end, Doom\'rel. I challenge you!',4892,1,1,0), +(2144,7,0,'Warrior',45410,1,1,25961), +(8255,0,9,'I would like to go to the battleground.',10355,12,1048576,0), +(8218,0,9,'I would like to fight in an arena.',18598,12,1048576,0), +(6598,0,1,'Redeem Battleground Marks for Honor.',40508,3,128,0), +(7288,2,5,'Make this inn your home.',2822,8,65536,0), +(7288,3,1,'Let me browse your goods.',2823,3,128,0), +(9833,0,3,'Train me.',3266,5,16,26822), +(11211,0,0,'Board the Flying Machine.',39462,1,1,0), +(3558,4,0,'Engineering',51347,1,1,0), +(3558,3,0,'Enchanting',52063,1,1,0), +(1297,3,0,'What can I do at an inn?',4308,1,1,0), +(4683,0,3,'I require warrior training.',3147,5,16,0), +(10128,3,0,'Guide me to the Westspark Graveyard.',32434,1,1,0), +(10128,4,0,'Guide me to the Eastspark Graveyard.',32433,1,1,0), +(10128,5,0,'Guide me back to the Alliance landing camp. ',32435,1,1,0), +(30154,0,0,'Skip the warmup, sister... or are you too scared to face someone your own size?',0,1,1,29416), +(9907,0,0,'Tell me about this proposal.',31164,1,1,26822), +(9908,0,0,'What happened then?',31166,1,1,26822), +(9909,0,0,'You want me to take part in the Hyldsmeet to end the war?',31168,1,1,26822), +(9910,0,0,'Very well. I\'ll take part in this competition.',31170,1,1,26822), +(9865,0,0,'Let\'s do this, sister.',30665,1,1,26822), +(9924,0,0,'Can you tell me what became of Sif?',31219,1,1,26822), +(9927,0,0,'He did more than that, Thorim. He controls Ulduar now.',31221,1,1,26822), +(9926,0,0,'It needn\'t end this way.',31223,1,1,26822), +(10954,0,0,'My companions are all accounted for, Saurfang. Let\'s go!',37637,1,1,0), +(11016,6,0,'Teleport to Sindragosa\'s Lair.',37728,1,1,0), +(11016,5,0,'Teleport to the Upper Spire.',37725,1,1,0), +(11016,3,0,'Teleport to the Rampart of Skulls.',37723,1,1,0), +(11014,4,0,'Teleport to the Deathbringer\'s Rise.',37724,1,1,0), +(11014,3,0,'Teleport to the Rampart of Skulls.',37723,1,1,0), +(11014,0,0,'Teleport to Light\'s Hammer.',37671,1,1,0), +(11013,6,0,'Teleport to Sindragosa\'s Lair.',37728,1,1,0), +(10455,0,0,'I am ready to fight!',33430,1,1,0), +(10666,0,19,'Queue for Wintergrasp.',35935,12,1048576,0), +(10460,0,0,'I am ready to fight!',33430,1,1,0), +(10459,0,0,'I am ready to fight!',33430,1,1,0), +(10456,0,0,'I am ready to fight!',33430,1,1,0), +(10471,0,0,'I am ready to fight!',33430,1,1,0), +(10464,0,0,'I am ready to fight!',33430,1,1,0), +(10470,0,0,'I am ready to fight!',33430,1,1,0), +(10202,2,1,'Let me browse your goods.',8097,3,128,26365), +(10040,0,0,'Stay with me, friend. I must know what happened here.',32012,1,1,26899), +(10040,1,0,'Travel well, hero of the Alliance!',32262,1,1,26899), +(10040,3,0,'How can I help you, brother?',33074,1,1,0), +(10122,0,1,'Let me browse your goods.',2823,3,128,26899), +(10226,0,0,'I need you to show me again, Matthias.',33090,1,1,26899), +(10028,0,0,'',31719,1,1,26899), +(10029,2,1,'Let me browse your goods.',2823,3,128,0), +(11431,0,0,'See the fall of the Lich King.',40658,1,1,26822), +(8658,0,3,'I would like to train.',8221,5,16,0), +(7148,0,1,'Let me browse your goods.',2823,3,128,0), +(8656,0,3,'I would like to train.',8221,5,16,0), +(9455,0,0,'Steward, please allow me to ride one of the drakes to the queen\'s chamber at the top of the temple.',26795,1,1,26365), +(9455,1,0,'Can you spare a drake to take me to Lord Afrasastrasz in the middle of the temple?',27048,1,1,26365), +(9457,0,0,'Yes, please, I would like to return to the ground level of the temple.',26100,1,1,26365), +(9457,1,0,'I would like to go to Lord Afrasastrasz in the middle of the temple.',27042,1,1,26365), +(9563,1,0,'Can I get a ride back to ground level, Lord Afrasastrasz?',27046,1,1,26365), +(9563,0,0,'My lord, I need to get to the top of the temple.',27043,1,1,26365), +(6526,0,1,'Let me browse your goods.',2823,3,128,26124), +(10599,0,0,'Yes. We are prepared for the challenges ahead of us.',35172,1,1,0), +(10600,0,0,'Bring forth the first challenge!',35174,1,1,0), +(10609,0,0,'What new challenge awaits us?',35251,1,1,0), +(10678,0,0,'Of course!',35987,1,1,0), +(10687,0,0,'Give the signal! We\'re ready to go!',35989,1,1,0), +(10679,0,0,'That tough, huh?',36024,1,1,0), +(10688,0,0,'Val\'kyr? We\'re ready for them.',36027,1,1,0), +(7352,1,0,'Tell me of the Hellfire orcs.',17489,1,1,26124), +(7301,0,1,'I would like to take a look at your wares, Sid.',12750,3,128,26124), +(7301,1,5,'I wish to make Honor Hold my home, Sid.',12751,8,65536,26124), +(7826,0,3,'I would like to train.',8221,5,16,26124), +(7826,1,1,'Let me browse your goods.',2823,3,128,26124), +(8161,0,0,'Walk free, elder. Bring the spirits back to your tribe.',18353,1,1,26124), +(8163,0,0,'Walk free, elder. Bring the spirits back to your tribe.',18353,1,1,26124), +(6562,0,2,'I need a ride.',3409,4,8192,0), +(9997,0,0,'Activate the crystals when we get in trouble, right.',31401,1,1,0), +(9998,0,0,'Get your people to safety, we\'ll keep the Blue Dragonflight\'s forces at bay.',31426,1,1,0), +(10275,0,0,'I\'m not fighting, so send me in now!',33204,1,1,0), +(7841,0,1,'I wish to browse your wares.',38807,3,128,26124), +(7886,0,1,'I wish to browse your wares.',38807,3,128,26124), +(7887,0,1,'I wish to browse your wares.',38807,3,128,26124), +(7888,0,1,'What do you have for sale?',66614,3,128,26124), +(7890,0,1,'What do you have for sale?',66614,3,128,26124), +(10179,0,0,'Alexstrasza, can you show me what happened here?',32766,1,1,26365), +(9586,1,0,'Yes, please!',32024,1,1,0), +(9680,0,0,'We\'re only doing what is best for Lordaeron, your Highness.',27744,1,1,0), +(9681,0,0,'Lead the way, Prince Arthas.',27745,1,1,0), +(9695,0,0,'I\'m ready.',28039,1,1,0), +(9574,1,0,'I want to fly on the wings of the bronze flight.',26953,1,1,0), +(9574,0,0,'What should we do next?',29539,1,1,0), +(6520,0,13,'Yes, please do.',10627,1,1,0), +(9007,0,0,'',23789,1,1,26755), +(10199,0,0,'What do you know of ancient swords?',36637,1,1,0), +(10199,1,0,'What do you know of ancient swords?',36637,1,1,0), +(9546,0,2,'Where would you like to fly to?',10753,4,8192,26822), +(10667,0,6,'I would like to check my deposit box.',3398,9,131072,0), +(10667,1,1,'Let me browse your goods.',8097,3,128,27377), +(8013,0,0,'I see.',60156,1,1,26124), +(8397,0,0,'I am listening, dragon.',19863,1,1,26365), +(7680,0,0,'I have heard of your kind, but I never thought to see the day when I would meet a half-breed.',15321,1,1,26124), +(7772,0,0,'Scout Neftis, I need another disguise.',15792,1,1,0), +(7182,0,0,'',12159,1,1,0), +(7179,0,0,'A bit ungrateful, aren\'t we? The way out is clear, flee quickly!',12165,1,1,0), +(7177,0,0,'',12159,1,1,0), +(7176,0,0,'You\'re free to go now. The way out is safe.',12162,1,1,0), +(7185,0,0,'',12159,1,1,0), +(7186,0,0,'You\'re free to go now. The way out is safe.',12162,1,1,0), +(7187,0,0,'I seek a sample of your restorative draught, apothecary.',12170,1,1,0), +(3481,0,0,'The land of Azshara.',7591,1,1,0), +(3481,1,0,'The Ruins of Eldarath.',7593,1,1,0), +(3481,2,0,'The mage tower to the north.',7594,1,1,0), +(3481,3,0,'The Timbermaw furbolgs.',7600,1,1,0), +(3481,4,0,'The presence of blue dragons.',7601,1,1,0), +(7757,0,0,'Why are you fixing all of this up?',15757,1,1,26124), +(7759,0,0,'What are you doing there?',15763,1,1,26124), +(7760,0,0,'Advisor, what\'s the latest news?',15767,1,1,26124), +(21255,0,0,'I have a book that might interest you. Would you like to take a look?',33039,1,1,0), +(21256,0,0,'Thank you! I\'ll be sure to notify you if I find anything else.',33043,1,1,0), +(11345,0,0,'Vanira told me to speak to you about borrowing a bat.',40221,1,1,0), +(11345,1,0,'I need to get to Razor Hill to reqruit on behalf of Vol\'jin. May i borrow a bat?',40435,1,1,0), +(11345,2,0,'I am ready to take back the Echo Isles. Take me to the staging area!',40436,1,1,0), +(21257,0,0,'Let us consult the omens.',40385,1,1,0), +(10656,0,6,'What\'s on the auction house today?',35877,13,2097152,0), +(6652,0,3,'I seek training in the ways of the Hunter.',7643,5,16,0), +(7287,0,1,'Show me what I have access to, Vredigar.',12527,3,128,0), +(7146,0,1,'Let me browse your goods.',2823,3,128,0), +(7171,0,3,'Master chef, can you train me in the culinary arts?',14250,5,16,0), +(7171,1,1,'Have you any cooking supplies?',14252,3,128,0), +(7451,0,12,'I wish to make use of the stables.',14267,14,4194304,0), +(7446,0,1,'I want to browse your goods.',3370,3,128,0), +(7153,0,0,'Arcanist Vandril, what are the Forsaken doing here?',12230,1,1,0), +(7447,0,1,'Let me browse your goods.',2823,3,128,0), +(8789,0,0,'Who is this Budd fellow?',22225,1,1,0), +(8789,1,0,'Interesting crew you\'ve got here....',22230,1,1,0), +(8789,2,0,'Whew! What\'s that smell?',22234,1,1,0), +(8775,0,0,'You gave the crew disguises?',22383,1,1,0), +(7162,0,0,'I want to browse your goods.',3370,3,128,0), +(7957,0,1,'What do you have for sale?',66614,3,128,26124), +(7938,1,2,'Send me to Thrallmar!',17807,4,8192,0), +(1012,0,3,'Train me.',3266,5,16,0), +(6899,0,0,'Where is Elder Darkcore?',11493,1,1,0), +(16899,0,0,'We are ready, Gharg!',86507,1,1,27481), +(2746,0,3,'Train me.',3266,5,16,0), +(12188,14,0,'Tell me about gathering professions.',47106,1,1,27547), +(4142,0,3,'Train me.',3266,5,16,0), +(22114,0,3,'Train me in the ways of herbalism.',0,5,17,27404), +(10638,0,16,'I no longer wish to gain experience.',35531,1,1,25961), +(22121,0,1,'I would like to buy from you.',0,3,4225,27404), +(6918,0,0,'I\'d like a new invitation to the Lunar Festival.',11617,1,1,0), +(1969,0,0,'Where is the zeppelin now?',22086,1,1,0), +(1942,14,0,'Riding',0,1,1,27404), +(6899,1,0,'Where is Elder Ironband?',11507,1,1,0), +(6815,1,0,'Where is Elder High Mountain?',11578,1,1,0), +(6815,2,0,'Where is Elder Moonwarden?',11580,1,1,0), +(1582,2,5,'Make this inn your home.',2822,8,65536,0), +(11919,2,5,'Make this inn your home.',2822,8,65536,0), +(1582,3,1,'I want to browse your goods.',3370,3,128,0), +(11919,3,1,'Let me browse your goods.',2823,3,128,0), +(6815,3,0,'Where is Elder Windtotem?',11576,1,1,0), +(6899,3,0,'Where is Elder Runetotem?',11588,1,1,0), +(6899,4,0,'Where is Elder Windtotem?',11576,1,1,0), +(7244,0,1,'Let me browse your goods.',2823,3,128,0), +(7245,0,1,'Let me browse your goods.',2823,3,128,0), +(7256,0,3,'I wish to learn more about blacksmithing.',14017,5,16,0), +(7256,1,1,'May I see your wares?',12790,3,128,0), +(7311,0,1,'May I see your wares?',12790,3,128,0), +(7313,0,1,'Let me see what hatchlings you have for sale.',18726,3,128,0), +(7324,2,1,'Let me browse your goods.',2823,3,128,0), +(7324,1,5,'Make this inn your home.',2822,8,65536,0), +(7524,0,1,'I want to browse your goods.',3370,3,128,26124), +(7524,1,3,'Train me.',3266,5,16,0), +(7864,0,1,'I would like to buy from you.',14967,3,128,0), +(8376,0,3,'Train me.',3266,5,16,0), +(8380,0,3,'Train me.',3266,5,16,0), +(8732,0,3,'I would like to train.',8221,5,16,0), +(8733,0,3,'I would like to train.',8221,5,16,0), +(7436,0,1,'May I see your wares?',12790,3,128,0), +(9985,0,3,'Train me.',0,5,16,26365), +(7368,1,0,'Acteon, where is the best area to hunt for moongraze stags?',14058,16,16,26124), +(7368,0,3,'I am a hunter in need of training, Acteon.',13494,5,16,0), +(7370,0,0,'Where can I find more infected nightstalker runts, Exarch?',14062,1,1,0), +(5729,0,0,'What happened here, spirit?',9380,1,1,0), +(5728,0,0,'I know very little of the Highborne and nothing of the Shen\'dralar.',9382,1,1,0), +(5727,0,0,'Continue, please.',18943,1,1,0), +(5726,0,0,'Fascinating. Continue, please.',9386,1,1,0), +(5725,0,0,'I\'m going to have to kill something, aren\'t I?',9388,1,1,0), +(5724,0,0,'We live in a world of endless tragedy.',9390,1,1,0), +(5723,0,0,'A very sad tale. Thank you, spirit.',9392,1,1,0), +(7522,0,3,'Teach me the ways of the spirits.',7658,5,16,0), +(9162,0,0,'Send me to Garrosh\'s Landing, Yanni.',24685,1,1,0), +(10976,0,0,'I need another disguise.',38026,1,1,25961), +(10929,0,0,'I have a rocket here with your mark on it, Snivel.',37367,1,1,25961), +(10945,0,0,'There\'s a chemical inside the rocket. What is it?',37555,1,1,25961), +(10946,0,0,'Where were they delivered?',37557,1,1,25961), +(9550,0,0,'Why would I want to ride a shredder?',27068,1,1,26822), +(9555,0,0,'Where can I get a Refurbished Shredder Key?',27071,1,1,26822), +(7260,0,3,'I would like to train further in the ways of the Light.',5299,5,16,0), +(7260,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(6647,2,0,'I wish to know about Dual Talent Specialization.',33765,18,16,0), +(9544,0,0,'I must be going now, soldier. Stay vigilant!',26677,1,1,26365), +(9543,0,0,'I\'m sure Arthas will be back any day now, soldier. Keep your chin up!',26673,1,1,26365), +(9541,0,0,'Sorry to have bothered you, friend. Carry on!',26664,1,1,26365), +(9545,0,0,'I\'m sure everything will work out, footman.',26681,1,1,26365), +(9542,0,0,'Orik, I need another murkweed elixir.',26663,1,1,26365), +(7982,0,5,'Make this inn your home.',2822,8,65536,26365), +(7982,1,1,'I want to browse your goods.',3370,3,128,26365), +(7818,1,1,'Let me browse your goods.',2823,3,128,26365), +(9460,2,5,'Make this inn your home.',2822,8,65536,0), +(348,0,5,'Make this inn your home.',2822,8,65536,0), +(348,1,1,'Let me browse your goods.',2823,3,128,0), +(9632,0,1,'Let me browse your goods.',2823,3,128,0), +(9477,2,5,'Make this inn your home.',2822,8,65536,0), +(9477,4,1,'Let me browse your goods.',2823,3,128,0), +(12056,0,1,'I wish to browse your wares.',0,1,1,0), +(3841,0,0,'Where is the zeppelin now?',0,1,1,0), +(9785,0,2,'Show me where I can fly.',12271,4,8192,0), +(10178,0,0,'Tell me of yourself, Xarantaur. Why are you called the Witness?',32741,1,1,0), +(10177,0,0,'Please, go on.',32743,1,1,0), +(10176,0,0,'They?',32745,1,1,0), +(8903,0,5,'Make this inn your home.',2822,8,65536,27377), +(7856,1,5,'Make this inn your home.',2822,8,65536,0), +(7856,2,1,'Let me browse your goods.',2823,3,128,0), +(7857,1,5,'Make this inn your home.',2822,8,65536,0), +(7857,6,1,'What do you have for sale?',66614,3,128,0), +(9114,0,5,'Make this inn your home.',2822,8,65536,0), +(12848,0,3,'Train me.',3266,5,16,25996), +(344,2,0,'Trick or Treat!',10693,1,1,0), +(980,0,1,'Hello Sovik, I wish to browse your goods.',0,1,1,0), +(1290,0,0,'What can I do at an inn?',10693,1,1,0), +(348,2,0,'Trick or Treat!',10693,1,1,0), +(1291,0,0,'What can I do at an inn?',4308,1,1,25881), +(3572,3,0,'First Aid',52066,1,1,0), +(1294,0,0,'What can I do at an inn?',10693,1,1,0), +(1296,0,0,'What can I do at an inn?',10693,1,1,0), +(3558,5,0,'First Aid',52066,1,1,0), +(1581,0,1,'I want to browse your goods.',3370,1,1,26124), +(9821,2,0,'I\'d like to heal and revive my battle pets.',64115,1,1,27547), +(6525,0,1,'I wish to browse your wares, Calandrath.',10647,1,1,26124), +(7633,3,0,'Class Trainer',45378,1,1,0), +(7173,0,5,'Make this inn your home.',2822,1,1,25937), +(7288,0,5,'Make this inn your home.',0,0,0,0), +(7301,2,0,'Trick or Treat!',10693,1,1,0), +(7324,0,0,'Trick or Treat!',10693,1,1,0), +(7468,0,0,'What can I do at an inn?',4308,1,1,26124), +(7481,0,5,'Make this inn your home.',2822,1,1,27602), +(7855,2,0,'Trick or Treat!',10693,1,1,0), +(7967,4,0,'Lend me a Windrider. I\'m going to Spinebreaker Post!',17418,1,1,0), +(7967,5,0,'I\'m on a bombing mission for Forward Commander To\'arch. I need a wyvern destroyer!',16431,1,1,0), +(7967,0,0,'Send me to the Abyssal Shelf!',18200,1,1,0), +(7967,1,0,'Send me to the Abyssal Shelf!',18200,1,1,0), +(7893,0,1,'I have marks to redeem!',16146,3,128,0), +(8085,0,0,'Tell me more of our mission here, Nazgrel.',17895,1,1,0), +(8090,0,0,'',17897,1,1,0), +(7810,0,3,'I would like to train.',8221,5,16,26124), +(7810,1,1,'Let me browse your goods.',2823,3,128,26124), +(2121,2,0,'Other Continents',6351,1,1,25961), +(12040,1,1,'Let me browse your goods.',0,1,1,27404), +(6647,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(7881,0,1,'I want to browse your goods.',3370,3,128,0), +(7880,0,1,'I want to browse your goods.',3370,3,128,0), +(7964,0,0,'Why don\'t you escape?',16485,1,1,26124), +(8081,0,0,'Magistrix Carinda has sent me to ask you about Arelion\'s secret. Who was he seeing?',17757,1,1,0), +(10993,0,0,'We are prepared, Highlord. Let us battle for the fate of Azeroth! For the light of dawn!',38131,1,1,0), +(2187,0,0,'Transcribe the tablet.',5177,1,1,0), +(4558,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4558,0,3,'I seek more training in the priestly ways.',7169,5,16,0), +(7939,1,0,'Send me to Honor Hold!',17478,4,8192,26124), +(7939,0,2,'Show me where I can fly.',12271,4,8192,26124), +(5021,3,0,'How many more supplies are needed for the next upgrade?',9151,1,1,0), +(5241,0,0,'How many more supplies are needed to send ground assaults?',9128,1,1,0), +(5241,2,1,'I want to browse your goods.',3370,1,1,0), +(3062,0,0,'Low spirits',6269,1,1,0), +(3062,1,0,'Bad hang nail',6283,1,1,0), +(3062,2,0,'Feeling underpowered',6284,1,1,0), +(3062,3,0,'Jungle Fever',6285,1,1,0), +(3062,4,0,'Uni-brow',6286,1,1,0), +(3062,5,0,'Whiplash',6287,1,1,0), +(3062,6,0,'I don\'t want to go back to work',6288,1,1,0), +(21258,0,0,'I think I have heard of this magic.',10465,1,3,0), +(21259,0,0,'Arcanum? That sounds very familiar.',10467,1,3,0), +(21260,0,0,'What are the components?',10469,1,3,0), +(6321,0,0,'Jin\'rokh, I need assistance in recovering a piece of my Freethinker\'s outfit.',12647,1,3,0), +(6321,1,0,'Jin\'rokh, I need assistance in recovering a piece of my Vindicator\'s outfit.',12641,1,3,0), +(21263,0,0,'I seem to have misplaced my Zandalar Freethinker\'s Armguards. Can you help?',12646,1,3,0), +(21263,1,0,'I seem to have misplaced my Zandalar Freethinker\'s Belt. Can you help?',12645,1,3,0), +(21263,2,0,'I seem to have misplaced my Zandalar Freethinker\'s Breastplate. Can you help?',12644,1,3,0), +(21263,3,0,'I seem to have misplaced my Hero\'s Brand. Can you help?',0,1,3,0), +(21263,4,0,'I seem to have misplaced my Heathen\'s Brand. Can you help?',0,1,3,0), +(21263,5,0,'I seem to have misplaced my Heathen\'s Brand. Can you help?',0,1,3,0), +(21263,6,0,'I seem to have misplaced my Heathen\'s Brand. Can you help?',0,1,3,0), +(21264,0,0,'I seem to have misplaced my Zandalar Vindicator\'s Armguards. Can you help?',12643,1,3,0), +(21264,1,0,'I seem to have misplaced my Zandalar Vindicator\'s Belt. Can you help?',12642,1,3,0), +(21264,2,0,'I seem to have misplaced my Zandalar Vindicator\'s Breastplate. Can you help?',12640,1,3,0), +(21264,3,0,'I seem to have misplaced my Rage of Mugamba. Can you help?',0,1,3,0), +(21264,4,0,'I seem to have misplaced my Strength of Mugamba. Can you help?',0,1,3,0), +(21264,5,0,'I seem to have misplaced my Strength of Mugamba. Can you help?',0,1,3,0), +(21264,6,0,'I seem to have misplaced my Strength of Mugamba. Can you help?',0,1,3,0), +(6322,0,0,'Al\'tabim, I need assistance in recovering a piece of my Confessor\'s outfit.',12670,1,3,0), +(6322,1,0,'Al\'tabim, I need assistance in recovering a piece of my Demoniac\'s outfit.',12673,1,3,0), +(6322,2,0,'Al\'tabim, I need assistance in recovering a piece of my Illusionist\'s outfit.',12672,1,3,0), +(21265,0,0,'I seem to have misplaced my Zandalar Confessor\'s Bindings. Can you help?',12675,1,3,0), +(21265,1,0,'I seem to have misplaced my Zandalar Confessor\'s Mantle. Can you help?',12674,1,3,0), +(21265,2,0,'I seem to have misplaced my Zandalar Confessor\'s Wraps. Can you help?',12676,1,3,0), +(21265,3,0,'I seem to have misplaced my All-Seeing Eye of Zuldazar. Can you help?',0,1,3,0), +(21265,4,0,'I seem to have misplaced my Eye of Zuldazar. Can you help?',0,1,3,0), +(21265,5,0,'I seem to have misplaced my Eye of Zuldazar. Can you help?',0,1,3,0), +(21265,6,0,'I seem to have misplaced my Eye of Zuldazar. Can you help?',0,1,3,0), +(21266,0,0,'I seem to have misplaced my Zandalar Demoniac\'s Robe. Can you help?',12680,1,3,0), +(21266,1,0,'I seem to have misplaced my Zandalar Demoniac\'s Mantle. Can you help?',12681,1,3,0), +(21266,2,0,'I seem to have misplaced my Zandalar Demoniac\'s Wraps. Can you help?',12682,1,3,0), +(21266,3,0,'I seem to have misplaced my Kezan\'s Unstoppable Taint. Can you help?',0,1,3,0), +(21266,4,0,'I seem to have misplaced my Kezan\'s Taint. Can you help?',0,1,3,0), +(21266,5,0,'I seem to have misplaced my Kezan\'s Taint. Can you help?',0,1,3,0), +(21266,6,0,'I seem to have misplaced my Kezan\'s Taint. Can you help?',0,1,3,0), +(21267,0,0,'I seem to have misplaced my Zandalar Illusionist\'s Robe. Can you help?',12677,1,3,0), +(21267,1,0,'I seem to have misplaced my Zandalar Illusionist\'s Mantle. Can you help?',12678,1,3,0), +(21267,2,0,'I seem to have misplaced my Zandalar Illusionist\'s Wraps. Can you help?',12679,1,3,0), +(21267,3,0,'I seem to have misplaced my Jewel of Kajaro. Can you help?',0,1,3,0), +(21267,4,0,'I seem to have misplaced my Pebble of Kajaro. Can you help?',0,1,3,0), +(21267,5,0,'I seem to have misplaced my Pebble of Kajaro. Can you help?',0,1,3,0), +(21267,6,0,'I seem to have misplaced my Pebble of Kajaro. Can you help?',0,1,3,0), +(6341,0,0,'Maywiki, I need assistance in recovering a piece of my Augur\'s outfit.',12663,1,3,0), +(6341,1,0,'Maywiki, I need assistance in recovering a piece of my Haruspex\'s outfit.',12661,1,3,0), +(21268,0,0,'I seem to have misplaced my Zandalar Augur\'s Belt. Can you help?',12665,1,3,0), +(21268,1,0,'I seem to have misplaced my Zandalar Augur\'s Bracers. Can you help?',12666,1,3,0), +(21268,2,0,'I seem to have misplaced my Zandalar Augur\'s Hauberk. Can you help?',12664,1,3,0), +(21268,3,0,'I seem to have misplaced my Unmarred Vision of Voodress. Can you help?',0,1,3,0), +(21268,4,0,'I seem to have misplaced my Vision of Voodress. Can you help?',0,1,3,0), +(21268,5,0,'I seem to have misplaced my Vision of Voodress. Can you help?',0,1,3,0), +(21268,6,0,'I seem to have misplaced my Vision of Voodress. Can you help?',0,1,3,0), +(21269,0,0,'I seem to have misplaced my Zandalar Haruspex\'s Belt. Can you help?',12668,1,3,0), +(21269,1,0,'I seem to have misplaced my Zandalar Haruspex\'s Bracers. Can you help?',12669,1,3,0), +(21269,2,0,'I seem to have misplaced my Zandalar Haruspex\'s Tunic. Can you help?',12667,1,3,0), +(21269,3,0,'I seem to have misplaced my Pristine Enchanted South Seas Kelp. Can you help?',0,1,3,0), +(21269,4,0,'I seem to have misplaced my Enchanted South Seas Kelp. Can you help?',0,1,3,0), +(21269,5,0,'I seem to have misplaced my Enchanted South Seas Kelp. Can you help?',0,1,3,0), +(21269,6,0,'I seem to have misplaced my Enchanted South Seas Kelp. Can you help?',0,1,3,0), +(21262,0,0,'Falthir, I need assistance in recovering a piece of my Madcap\'s outfit.',12649,1,3,0), +(21262,1,0,'Falthir, I need assistance in recovering a piece of my Predator\'s outfit.',12653,1,3,0), +(21270,0,0,'I seem to have misplaced my Zandalar Madcap\'s Mantle. Can you help?',12656,1,3,0), +(21270,1,0,'I seem to have misplaced my Zandalar Madcap\'s Bracers. Can you help?',12657,1,3,0), +(21270,2,0,'I seem to have misplaced my Zandalar Madcap\'s Tunic. Can you help?',12655,1,3,0), +(21270,3,0,'I seem to have misplaced my Zandalarian Shadow Mastery Talisman. Can you help?',0,1,3,0), +(21270,4,0,'I seem to have misplaced my Zandalarian Shadow Talisman. Can you help?',0,1,3,0), +(21270,5,0,'I seem to have misplaced my Zandalarian Shadow Talisman. Can you help?',0,1,3,0), +(21270,6,0,'I seem to have misplaced my Zandalarian Shadow Talisman. Can you help?',0,1,3,0), +(21271,0,0,'I seem to have misplaced my Zandalar Predator\'s Belt. Can you help?',12659,1,3,0), +(21271,1,0,'I seem to have misplaced my Zandalar Predator\'s Bracers. Can you help?',12660,1,3,0), +(21271,2,0,'I seem to have misplaced my Zandalar Predator\'s Mantle. Can you help?',12658,1,3,0), +(21271,3,0,'I seem to have misplaced my Maelstrom\'s Wrath. Can you help?',0,1,3,0), +(21271,4,0,'I seem to have misplaced my Maelstrom\'s Tendril. Can you help?',0,1,3,0), +(21271,5,0,'I seem to have misplaced my Maelstrom\'s Tendril. Can you help?',0,1,3,0), +(21271,6,0,'I seem to have misplaced my Maelstrom\'s Tendril. Can you help?',0,1,3,0), +(3572,2,0,'Enchanting',52063,1,1,0), +(3572,1,0,'Cooking',45763,1,1,0), +(9692,0,3,'I seek training, Lord Thorval.',28022,5,16,0), +(9692,1,0,'I wish to unlearn my talents.',62295,1,1,0), +(9692,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(9693,0,3,'I seek training, Amal\'thazad.',28024,5,16,0), +(9693,1,0,'I wish to unlearn my talents.',62295,1,1,0), +(9693,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(9791,0,0,'Yes. I do.',60961,16,16,0), +(10371,0,0,'Purchase a Dual Talent Specialization.',33765,18,16,0), +(10027,0,3,'I require training, Highlord.',31639,5,16,0), +(3701,0,0,'You may speak frankly, Neeru...',7266,1,1,0), +(21272,0,0,'It is good to see the Burning Blade is taking over where the Shadow Council once failed.',7267,1,1,0), +(21273,0,0,'So the Searing Blade is expendable?',7268,1,1,0), +(21274,0,0,'If there is anything you would have of me...',7269,1,1,0), +(21276,0,0,'How did you know? I mean, yes... Yes I am looking for that shard. Do you have it?',11034,1,1,0), +(21277,0,0,'Alright. Where?',11036,1,1,0), +(21278,0,0,'By Bronzebeard\'s... um, beard! What are you talking about?',11038,1,1,0), +(21279,0,0,'Fish? You gave a piece of what could be the key to saving all life on Kalimdor to a fish?',11040,1,1,0), +(21280,0,0,'A minnow? The oceans are filled with minnows! There could be a hundred million million minnows out there!',11042,1,1,0), +(21281,0,0,'...',69357,1,1,0), +(21282,0,0,'You put the piece on a minnow and placed the minnow somewhere in the waters of the sea between here and the Eastern Kingdoms? And this minnow has special powers?',11046,1,1,0), +(21283,0,0,'You\'re insane.',11048,1,1,0), +(21284,0,0,'I\'m all ears.',11050,1,1,0), +(21285,0,0,'Come again.',11052,1,1,0), +(21286,0,0,'Ok, let me get this straight. You put the scepter entrusted to your Flight by Anachronos on a minnow of your own making and now you expect me to build an... an arcanite buoy or something... to force your minnow out of hiding? AND potentially incur the wrath of an Elemental Lord? Did I miss anything? Perhaps I am to do this without any clothes on, during a solar eclipse, on a leap year?',11054,1,1,0), +(21287,0,0,'FINE! And how, dare I ask, am I supposed to acquire an arcanite buoy?',11057,1,1,0), +(21288,0,0,'But...',77157,1,1,0), +(21289,0,0,'I believe in you.',36640,1,1,0), +(8336,0,0,'I bring word from Lord Illidan.',19260,1,1,26365), +(8342,0,0,'The cipher fragment is to be moved. Have it delivered to Zuluhed.',19262,1,1,26365), +(8341,0,0,'Perhaps you did not hear me, Ruusk. I am giving you an order from Illidan himself!',19266,1,1,26365), +(8340,0,0,'Very well. I will return to the Black Temple and notify Lord Illidan of your unwillingness to carry out his wishes. I suggest you make arrangements with your subordinates and let them know that you will be leaving this world soon.',19268,1,1,26365), +(8339,0,0,'Do I need to go into all the gory details? I think we are both well aware of what Lord Illidan does with those that would oppose his word. Now, I must be going! Farewell, Ruusk! Forever...',0,1,1,26365), +(8338,0,0,'Ah, good of you to come around, Ruusk. Thank you and farewell.',19272,1,1,26365), +(10137,0,0,'Go on, you\'re free. Get out of here!',32458,1,1,0), +(9484,0,0,'Calm down. I want to you ask you about the iron dwarves and Loken.',26262,1,1,0), +(9880,0,0,'I found this strange armor plate. Can you tell me more about it?',30866,1,1,26822), +(40060,0,0,'I present you with proof...',4754,1,1,0), +(10857,0,0,'I\'m ready to deliver the tome, Magister Hathorel.',36824,1,1,0), +(10857,1,0,'Would you renew my Covenant disguise?',36832,1,1,0), +(10858,0,0,'I\'ll deliver the tome to our contacts in Icecrown, arcanist.',36824,1,1,0), +(10858,1,0,'Would you renew my Sunreaver disguise?',36830,1,1,0), +(54000,0,0,'Lift the frost leopard\'s tail to check if it\'s a male or a female.',33190,1,1,0), +(55000,0,0,'Lift the icepaw bear\'s tail to check if it\'s a male or a female.',33194,1,1,0), +(21290,0,0,'I need answers, ogre!',15283,1,1,0), +(19130,0,0,'Я передумала. Позволь мне выбрать другой артефакт.',122690,1,1,0), +(21292,2,0,'And you think you can just eat anything you want? You\'re obviously trying to eat the Broken of Telaar.',15287,1,1,0), +(21293,3,0,'This means war, Lump! War I say!',15289,1,1,0), +(21295,0,0,'I have killed many of your ogres, Lantresor. I have no fear.',15315,1,1,0), +(7681,0,0,'And the other half?',15319,1,1,26124), +(7682,0,0,'Should I know? You look like an orc to me.',15317,1,1,26124), +(7724,1,1,'I have marks to redeem!',16146,3,128,26124), +(7675,0,0,'I have killed many of your ogres, Lantresor. I have no fear.\n',0,1,1,26124), +(7719,1,0,'Tell me about the demon hunter training grounds at the Ruins of Karabor.',19565,5,16,26365), +(7717,0,0,'And now?',15521,1,1,26124), +(7718,0,0,'Legion?',15519,1,1,26124), +(7719,0,0,'I see twisted steel and smell sundered earth.',15517,1,1,26124), +(7716,0,0,'How do you see them now?',15523,1,1,26124), +(7715,0,0,'Forge camps?',15525,1,1,26124), +(7704,0,0,'Empoor, you\'re going to tell me what I want to know, or else!',15489,1,1,26124), +(7579,0,0,'Hemet Nesingwary, what are you doing here in the Outland?',14850,1,1,26124), +(21310,0,0,'I need a moment of your time, sir.',11731,1,1,0), +(21311,0,0,'Why... yes, of course. I\'ve something to show you right inside this building, Mr. Anvilward.',11733,1,1,0), +(6877,0,0,'Game? Are you crazy?',9352,1,1,0), +(6878,0,0,'Why you little...',9355,1,1,0), +(6879,0,0,'Mark my words, I will catch you, imp. And when I do!',9356,1,1,0), +(6880,0,0,'DIE!',9359,1,1,0), +(6881,0,0,'Prepare to meet your maker.',9362,1,1,0), +(10575,0,0,'How do the Bountiful Tables work?',35108,1,1,0), +(19326,0,0,'Я хочу выбрать артефакт.',0,1,1,0), +(7612,0,1,'I wish to buy from you.',25568,3,128,26124), +(7611,0,1,'I would like to buy from you.',14967,3,128,26124), +(7588,0,1,'Show me your wares, Maktu.',14923,3,128,26124), +(7590,0,1,'Let me browse your reagents and poison supplies.',14930,3,128,26124), +(7590,1,0,'Specialist, eh? Just what kind of specialist are you, anyway?',14932,1,1,26124), +(7589,0,1,'I wish to browse your wares.',38807,3,128,26124), +(7495,0,0,'Watcher Leesa\'oh, why are you out here?',14603,1,1,26124), +(21313,0,0,'There is only one Warchief, Eitrigg!',5992,1,1,0), +(21314,0,0,'What do you mean?',46314,1,1,0), +(20014,0,0,'Я хочу еще раз освежить в памяти, поисками какого оружия мы можем заняться.',0,1,1,0), +(21316,0,0,'I will take you up on that offer, Eitrigg.',5998,1,1,0), +(21317,0,0,'Ah, so that is how they pushed the Dark Iron to the lower parts of the Spire.',6000,1,1,0), +(21318,0,0,'Perhaps there exists a way?',6002,1,1,0), +(21319,0,0,'As you wish, Eitrigg.',6004,1,1,0), +(9155,0,0,'Take their clothing.',24733,1,1,26365), +(9156,0,0,'Take their clothing.',24733,1,1,26365), +(10316,0,0,'Glad to help, my lady. I\'m told you were once the guardian of a fabled sword. Do you know where I might find it?',33363,1,1,0), +(9857,0,0,'I\'m ready - lets get you out of here.',0,1,1,0), +(10026,0,0,'Take me to the ship.',31625,1,1,0), +(10174,0,1,'I want to browse your goods.',3370,3,128,0), +(9806,0,0,'Lord-Commander, I would hear your tale.',30033,1,1,26822), +(9807,0,0,'',30035,1,1,26822), +(9808,0,0,'I thought that they now called themselves the Scarlet Onslaught?',30038,1,1,26822), +(9808,1,0,'Lord-Commander, would you repeat what you said before?',30039,1,1,26822), +(9809,0,0,'Where did the grand admiral go?',30045,1,1,26822), +(9809,1,0,'Lord-Commander, would you repeat what you said before?',30039,1,1,26822), +(9810,0,0,'That\'s fine. When do I start?',30047,1,1,26822), +(9810,1,0,'Lord-Commander, would you repeat what you said before?',30039,1,1,26822), +(9811,0,0,'Let\'s finish this!',30049,1,1,26822), +(9811,1,0,'Lord-Commander, would you repeat what you said before?',30039,1,1,26822), +(9812,0,0,'That\'s quite a tale, lord-commander.',30117,1,1,26822), +(9812,1,0,'Lord-Commander, would you repeat what you said before?',30039,1,1,26822), +(6085,0,1,'I would like to buy from you.',0,1,1,0), +(345,1,1,'Let me browse your goods.',2823,3,128,26822), +(4243,0,3,'Train me.',3266,5,16,25996), +(9917,0,0,'I am ready to head further into Storm Peaks.',32890,1,1,26822), +(4361,0,3,'I would like to train.',8221,5,16,25961), +(4115,0,3,'Train me.',3266,5,16,25961), +(12168,1,0,'What is happening at the Grove of Aessina?',41322,0,0,26972), +(10180,1,1,'I want to browse your goods.',3370,3,128,26822), +(9873,0,3,'Train me.',0,5,16,26822), +(9873,1,1,'May I browse your epic gem recipes?',36327,3,128,0), +(5818,0,1,'Gorzeeki, I wish to make a purchase.',9586,3,128,0), +(8023,0,0,'',17233,1,1,0), +(8021,0,1,'Show me what you have for sale, \"Slim.\"',17222,3,128,0), +(3162,0,1,'I would like to buy from you.',14967,3,128,0), +(4644,0,3,'I seek further druidic training to have a closer understanding of the Earth Mother\'s will.',8295,5,16,0), +(3926,0,3,'I seek training as a druid.',7452,5,16,0), +(4486,0,3,'I am interested in mage training.',2522,5,16,0), +(6768,0,1,'Let me browse your seasonal fare.',8786,3,128,0), +(8703,0,0,'Insert an Apexis Shard, and begin!',21475,1,1,26124), +(8455,1,0,'Send me back to the Singing Ridge.',19730,1,1,26124), +(8455,2,0,'Send me back to Razaan\'s Landing.',19731,1,1,26124), +(8455,3,0,'Take me to Ruuan Weald.',19669,1,1,0), +(8454,0,0,'I have the signed waiver! Fire me into the Singing Ridge!',19728,1,1,26124), +(8704,0,0,'Insert 35 Apexis Shards, and begin!',21478,1,1,26124), +(8303,0,0,'I need another waiver!',19745,1,1,26124), +(3161,0,1,'I would like to buy from you.',14967,3,128,0), +(941,1,0,'That\'s it! I\'m tired of helping you out. It\'s time we settled things on the battlefield!',4165,1,1,25996), +(5710,0,0,'Why you little...',9355,1,1,25996), +(5711,0,0,'Mark my words, I will catch you, imp. And when I do!',9356,1,1,25996), +(5712,0,0,'DIE!',9359,1,1,25996), +(5713,0,0,'Prepare to meet your maker.',9362,1,1,25996), +(8082,0,0,'I\'m as ready as I\'ll ever be.',17761,1,1,26124), +(7830,0,0,'Taretha cannot see you, Thrall.',15911,1,1,0), +(7829,0,0,'The situation is rather complicated, Thrall. It would be best for you to head into the mountains now, before more of Blackmoore\'s men show up. We\'ll make sure Taretha is safe.',15913,1,1,0), +(7831,0,0,'Tarren Mill.',15915,1,1,0), +(7840,0,0,'We\'re ready, Thrall.',15956,1,1,0), +(7852,0,0,'We\'ll get you out, Taretha. Don\'t worry. I doubt the wizard would wander too far away.',15994,1,1,0), +(10026,1,0,'Take me to the ship.',31625,1,1,0), +(581,0,3,'Train me.',3266,5,16,25881), +(645,0,3,'Train me.',3266,5,16,25881), +(648,0,3,'Train me.',3266,5,16,25881), +(657,0,3,'Train me.',3266,5,16,25996), +(660,0,3,'Train me.',3266,5,16,25881), +(682,0,1,'I want to browse your goods.',3370,3,128,25881), +(683,0,1,'I want to browse your goods.',3370,3,128,25881), +(684,0,1,'I want to browse your goods.',3370,3,128,26124), +(687,0,1,'I want to browse your goods.',3370,3,128,25881), +(688,0,1,'I want to browse your goods.',3370,3,128,26124), +(689,0,1,'I want to browse your goods.',3370,3,128,25881), +(690,0,1,'I want to browse your goods.',3370,3,128,25881), +(692,0,1,'I want to browse your goods.',3370,3,128,25996), +(693,0,1,'I want to browse your goods.',3370,3,128,25881), +(3572,4,0,'Fishing',45767,1,1,0), +(701,0,1,'I want to browse your goods.',3370,3,128,25961), +(702,0,1,'I want to browse your goods.',3370,3,128,25881), +(703,0,1,'I want to browse your goods.',3370,3,128,25881), +(705,0,1,'I want to browse your goods.',3370,3,128,25881), +(706,0,1,'I want to browse your goods.',3370,3,128,25881), +(4146,0,3,'Train me.',3266,5,16,25881), +(4161,0,3,'Train me.',3266,5,16,26124), +(4201,0,3,'Train me.',3266,5,16,25881), +(4203,0,3,'Train me.',3266,5,16,25881), +(4353,0,3,'Train me.',3266,5,16,26124), +(9823,0,0,'I\'ve lost my key to Scholomance.',30315,1,1,0), +(9823,4,0,'I\'ve lost my Shadowforge Key.',30319,1,1,0), +(1541,0,0,'I wish to face the Defiler.',4592,1,1,25961), +(9735,0,1,'Yes, Hargus. I wish to purchase supplies.',28762,3,128,0), +(9769,0,0,'I missed the gate to Acherus, Orbaz. Could you please open another?',29445,1,1,0), +(9795,0,0,'I am ready, Highlord. Let the siege of Light\'s Hope begin!',29691,1,1,0), +(10116,0,3,'Train me.',3266,5,16,26365), +(10950,0,0,'Can you remove the sword?',37566,1,1,0), +(10950,1,0,'Dark Lady, I think I hear Arthas coming. Whatever you\'re going to do, do it quickly.',37567,1,1,0), +(10909,0,0,'We\'re ready! Let\'s go!',36885,1,1,0), +(9024,0,0,'',23872,1,1,26755), +(9024,1,0,'',23872,1,1,26755), +(9024,2,0,'',23872,1,1,26755), +(9024,3,0,'',23872,1,1,26755), +(9724,1,0,'Have a spare bunch of bananas?',28595,1,1,26822), +(9713,0,0,'I\'m ready to start the distillation, uh, Tipsy.',28532,1,1,26822), +(9720,0,0,'I want to stop the Scourge as much as you do. How can I help?',28583,1,1,26822), +(9721,0,0,'You can trust me. I am no friend of the Lich King\'s.',28586,1,1,26822), +(9722,0,0,'I will not fail.',28587,1,1,26822), +(9674,0,0,'You look safe enough... let\'s do this.',27724,1,1,26822), +(9677,0,0,'',27732,1,1,26822), +(9684,0,0,'I am ready to travel to your village now.',27823,1,1,26822), +(9678,0,0,'Shaman Vekjik, I have spoken with the big-tongues and they desire peace. I have brought this offering on their behalf.',27834,1,1,26822), +(9686,0,0,'No no... I had no intentions of betraying your people. I was only defending myself. It was all a misunderstanding.',27838,1,1,26822), +(9741,0,0,'I need to find Goregek, do you have his shackles?',28952,1,1,0), +(9728,0,0,'',28633,1,1,26822), +(2384,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(2384,0,3,'I am interested in warlock training.',2544,5,16,0), +(8076,0,9,'I would like to go to the battleground.',0,1,1,0), +(9573,5,0,'What is the ultimate ability of the emerald drake?',28090,1,1,0), +(9573,4,0,'What abilities do emerald drakes have?',28087,1,1,0), +(21248,1,0,'Search the body for the pilot\'s insignia.',25042,1,1,0), +(7486,0,0,'Take Blood Knight Insignia',0,1,1,0), +(9301,0,0,'Come on, Budd. Time to play with the ice trolls!',25656,1,1,26822), +(9512,0,0,'Unchain and control Flamebringer.',26462,1,1,26822), +(9615,0,0,'Shake Drakuru\'s outstretched hand.',27283,1,1,26822), +(126,0,0,'You\'\'re Astor Hadren, right?',2589,1,1,0), +(125,0,0,'You\'\'ve got something I need, Astor. And I\'\'ll be taking it now.',2591,1,1,0), +(8701,0,0,'I am here for you, overseer.',21455,1,1,0), +(8695,0,0,'How dare you question an overseer of the Dragonmaw!',21456,1,1,0), +(8700,0,0,'Who speaks of me? What are you talking about, broken?',21459,1,1,0), +(8699,0,0,'Continue please.',21460,1,1,0), +(8698,0,0,'Who are these bidders?',21462,1,1,0), +(8697,0,0,'Well... yes.',21464,1,1,0), +(9576,0,0,'I\'d like to use the stables.',26946,14,4194304,0), +(9500,0,0,'You\'re free to go Orsonn, but first tell me what\'s wrong with the furbolg.',26408,1,1,26822), +(9502,0,0,'What happened then?',31166,1,1,26822), +(9503,0,0,'Thank you, Son of Ursoc. I\'ll see what can be done.',26413,1,1,26822), +(9504,0,0,'Who was this stranger?',26415,1,1,26822), +(9505,0,0,'Thank you, Kodian. I\'ll do what I can.',26417,1,1,26822), +(5743,0,0,'Mourn the great loss.',9449,1,1,0), +(5743,1,0,'Mourn the great loss.',9449,1,1,0), +(63,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(63,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(64,0,3,'I am interested in mage training.',2522,5,16,0), +(64,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(64,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4484,0,3,'I am interested in mage training.',2522,5,16,0), +(4484,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4484,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4485,0,3,'I am interested in mage training.',2522,5,16,0), +(4485,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4485,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4486,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4486,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4517,0,3,'I am interested in mage training.',2522,5,16,0), +(4517,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4517,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4518,0,3,'I am interested in mage training.',2522,5,16,0), +(4518,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4518,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4519,0,3,'I am interested in mage training.',2522,5,16,0), +(4519,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4519,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4520,0,3,'I am interested in mage training.',2522,5,16,0), +(4520,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4520,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4537,0,3,'I am interested in mage training.',2522,5,16,0), +(4537,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4537,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4538,0,3,'I am interested in mage training.',2522,5,16,0), +(4538,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4538,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4539,0,3,'I am interested in mage training.',2522,5,16,0), +(4539,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4539,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4552,0,3,'I am interested in mage training.',2522,5,16,0), +(4552,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4552,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4651,0,3,'I am interested in mage training.',2522,5,16,0), +(4651,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4651,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4654,0,3,'I am interested in mage training.',2522,5,16,0), +(4654,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4654,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4660,0,3,'I am interested in mage training.',2522,5,16,0), +(4660,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4660,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4661,0,3,'I am interested in mage training.',2522,5,16,0), +(4661,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4661,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4685,0,3,'I am interested in mage training.',2522,5,16,0), +(4685,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4685,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4686,0,3,'I am interested in mage training.',2522,5,16,0), +(4686,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4686,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(6648,0,3,'I am interested in mage training.',2522,5,16,0), +(6648,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(6648,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(7264,0,3,'I am interested in mage training.',2522,5,16,0), +(7264,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(7264,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(9990,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(9990,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4106,1,2,'I need a ride, fast! I have an important message to deliver!',7667,4,8192,25881), +(9580,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(7366,0,3,'I am interested in mage training.',2522,5,16,0), +(7366,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(7366,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4535,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4535,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4535,0,3,'I am interested in mage training.',2522,5,16,0), +(1503,0,3,'I am interested in warlock training.',2544,5,16,0), +(1503,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(1503,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(1522,0,3,'I am interested in warlock training.',2544,5,16,0), +(1522,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(1522,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(2381,0,3,'I am interested in warlock training.',2544,5,16,0), +(2381,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(2381,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(2383,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(2383,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(2384,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4503,0,3,'I am interested in warlock training.',2544,5,16,0), +(4503,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4503,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4504,0,3,'I am interested in warlock training.',2544,5,16,0), +(4504,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4504,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4505,0,3,'I am interested in warlock training.',2544,5,16,0), +(4505,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4505,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4566,0,3,'I am interested in warlock training.',2544,5,16,0), +(4566,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4566,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4567,0,3,'I am interested in warlock training.',2544,5,16,0), +(4567,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4567,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4603,0,3,'I am interested in warlock training.',2544,5,16,0), +(4603,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4603,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4604,0,3,'I am interested in warlock training.',2544,5,16,0), +(4604,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4604,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4609,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4609,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4610,0,3,'I submit myself for further training, my master.',8298,5,16,0), +(4610,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4610,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4641,0,3,'I am interested in warlock training.',2544,5,16,0), +(4641,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4641,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4643,0,3,'I am interested in warlock training.',2544,5,16,0), +(4643,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4643,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4655,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4655,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4656,0,3,'I submit myself for further training my master.',8298,5,16,0), +(4656,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4656,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4667,0,3,'I am interested in warlock training.',2544,5,16,0), +(4667,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4667,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4681,0,3,'I am interested in warlock training.',2544,5,16,0), +(4681,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4681,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(4682,0,3,'I am interested in warlock training.',2544,5,16,0), +(4682,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4682,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(6628,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(6628,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(7437,0,3,'I am interested in warlock training.',2544,5,16,0), +(7437,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(7437,2,0,'Learn about Dual Talent Specialization.',33762,1,1,0), +(7566,0,3,'It is a greater knowledge of the ways of the warlock that I crave.',8292,5,16,0), +(7566,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(7566,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4642,0,3,'It is a greater knowledge of the ways of the warlock that I crave.',8292,5,16,0), +(4642,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4642,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(2168,3,0,'Cooking',52063,1,1,25961), +(2168,4,0,'Enchanting',51347,1,1,25961), +(2168,2,0,'Blacksmithing',45763,1,1,25961), +(2304,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(2144,4,0,'Priest',45406,1,1,25961), +(2144,5,0,'Rogue',45407,1,1,25961), +(2144,3,0,'Paladin',45405,1,1,25961), +(4556,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(2144,1,0,'Hunter',45404,1,1,25961), +(2144,2,0,'Mage',48028,1,1,25961), +(2144,0,0,'Druid',50546,1,1,25961), +(4557,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4469,0,3,'I would like to train further in the ways of the Light.',5299,5,16,0), +(4469,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4469,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4470,0,3,'I would like to train further in the ways of the Light.',5299,5,16,0), +(4470,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4470,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4471,0,3,'I would like to train further in the ways of the Light.',5299,5,16,0), +(4471,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4471,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4662,0,3,'I would like to train further in the ways of the Light.',5299,5,16,0), +(4662,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4662,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(12852,1,1,'Let me browse your goods.',2823,3,128,25996), +(4463,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4463,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4464,0,3,'I would like to train further in the ways of the Light.',5299,5,16,0), +(4464,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4464,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(3643,0,3,'I would like to train.',8221,5,16,0), +(3642,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(3642,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(3642,0,3,'I seek more training in the priestly ways.',7169,5,16,0), +(8111,0,3,'I would like to train further in the ways of the Light.',5299,5,16,0), +(8111,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(8111,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(523,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(523,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(655,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(655,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(656,0,3,'I require warrior training.',3147,5,16,0), +(656,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(656,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4091,0,3,'Yes. I have.',7640,5,16,0), +(4091,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4091,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4475,0,3,'I require warrior training.',3147,5,16,0), +(4475,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4475,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4481,0,3,'I require warrior training.',3147,5,16,0), +(4481,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4481,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4482,0,3,'I require warrior training.',3147,5,16,0), +(4482,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4482,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4509,0,3,'I require warrior training.',3147,5,16,0), +(4509,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4509,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4511,0,3,'I require warrior training.',3147,5,16,0), +(4511,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4511,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4546,0,3,'I require warrior training.',3147,5,16,0), +(4546,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4546,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4547,0,3,'I require warrior training.',3147,5,16,0), +(4547,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4547,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4548,0,3,'I require warrior training.',3147,5,16,0), +(4548,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4548,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4568,0,3,'I require warrior training.',3147,5,16,0), +(4568,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4568,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4569,0,3,'I require warrior training.',3147,5,16,0), +(4569,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4569,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4570,0,3,'I require warrior training.',3147,5,16,0), +(4570,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4570,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4578,0,3,'I require warrior training.',3147,5,16,0), +(4578,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4578,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4579,0,3,'I require warrior training.',3147,5,16,0), +(4579,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4579,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4581,0,3,'I require warrior training.',3147,5,16,0), +(4581,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4581,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4645,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4645,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4649,0,3,'I require warrior training.',3147,5,16,0), +(4649,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4649,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4650,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4650,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4653,0,3,'I require warrior training.',3147,5,16,0), +(4653,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4653,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4683,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4683,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4684,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4684,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4696,0,3,'I require warrior training.',3147,5,16,0), +(4696,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4696,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4697,0,3,'I require warrior training.',3147,5,16,0), +(4697,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4697,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(7263,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(7263,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(1403,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(1403,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(3921,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(12180,0,3,'Train me in Alchemy.',47109,3,16,27547), +(3924,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(3924,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(3925,0,3,'I seek training as a druid.',7452,5,16,0), +(3925,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(3925,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(3926,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(3926,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4507,0,3,'I seek training as a druid.',7452,5,16,0), +(4507,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4507,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4508,0,3,'I seek training as a druid.',7452,5,16,0), +(4508,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4508,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(12180,8,3,'Train me in Mining.',0,3,16,26365), +(4571,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4571,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4605,0,3,'I seek training as a druid.',7452,5,16,0), +(4605,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4605,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4606,0,3,'I seek further druidic training to have a closer understanding of the Earth Mother\'s will.',7452,5,16,0), +(4606,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4606,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4607,0,3,'I seek further druidic training to have a closer understanding of the Earth Mother\'s will.',7452,5,16,0), +(4607,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4607,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4687,0,3,'I seek training as a druid.',7452,5,16,0), +(4687,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4687,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4688,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4688,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(7567,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(7567,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(7567,0,3,'I seek training as a druid.',7452,5,16,0), +(4646,0,3,'I seek training as a druid.',7452,5,16,0), +(4646,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4646,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(10398,0,0,'Show me how to train with a Melee Target.',33964,1,1,0), +(10398,1,0,'Tell me more about Defend and Thrust.',34090,1,1,0), +(10397,0,0,'Show me how to train with a Melee Target.',33964,1,1,0), +(10400,0,0,'Show me how to train with a Charge Target.',33976,1,1,0), +(10400,1,0,'Tell me more about the Charge.',34092,1,1,0), +(10399,0,0,'Show me how to train with a Charge Target.',33976,1,1,0), +(10402,0,0,'Show me how to train with a Ranged Target.',33980,1,1,0), +(10402,1,0,'Tell me more about using the Shield-Breaker.',34091,1,1,0), +(10401,0,0,'Show me how to train with a Ranged Target.',33980,1,1,0), +(3533,2,0,'Guild Master & Vendor',2870,1,1,25961), +(4677,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4677,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(3533,0,0,'Bank',44628,1,1,25961), +(3533,1,0,'Gryphon Master',6990,1,1,25961), +(4678,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4678,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(3643,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(3643,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(3644,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(3644,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(3645,0,3,'I seek more training in the priestly ways.',7169,5,16,0), +(3645,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(3645,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4466,0,3,'I seek more training in the priestly ways.',7169,5,16,0), +(4466,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4466,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4467,0,3,'I seek more training in the priestly ways.',7169,5,16,0), +(4467,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4467,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4468,0,3,'I seek more training in the priestly ways.',7169,5,16,0), +(4468,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4468,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4521,0,3,'I seek more training in the priestly ways.',7169,5,16,0), +(4521,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4521,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4522,0,3,'I seek more training in the priestly ways.',7169,5,16,0), +(4522,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4522,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4523,0,3,'I seek more training in the priestly ways.',7169,5,16,0), +(4523,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4523,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4531,0,3,'I seek more training in the priestly ways.',7169,5,16,0), +(4531,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4531,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4532,0,3,'I seek more training in the priestly ways.',7169,5,16,0), +(4532,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4532,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4533,0,3,'I seek more training in the priestly ways.',7169,5,16,0), +(4533,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4533,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4543,0,3,'I seek more training in the priestly ways.',7169,5,16,0), +(4543,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4543,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4544,0,3,'I seek more training in the priestly ways.',7169,5,16,0), +(4544,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4544,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4545,0,3,'I seek more training in the priestly ways.',7169,5,16,0), +(4545,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4545,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4558,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4559,0,3,'I seek more training in the priestly ways.',7169,5,16,0), +(4559,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4559,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4572,0,3,'I seek more training in the priestly ways.',7169,5,16,0), +(4572,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4572,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4573,0,3,'I seek more training in the priestly ways.',7169,5,16,0), +(4573,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4573,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4574,0,3,'I seek more training in the priestly ways.',7169,5,16,0), +(4574,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4574,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4665,0,3,'I seek more training in the priestly ways.',7169,5,16,0), +(4665,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4665,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4666,0,3,'I seek more training in the priestly ways.',7169,5,16,0), +(4666,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4666,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4679,0,3,'I seek more training in the priestly ways.',7169,5,16,0), +(4679,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4679,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4680,0,3,'I seek more training in the priestly ways.',7169,5,16,0), +(4680,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4680,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4691,0,3,'I seek more training in the priestly ways.',7169,5,16,0), +(4691,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4691,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4692,0,3,'I seek more training in the priestly ways.',7169,5,16,0), +(4692,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4692,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4801,0,3,'I seek more training in the priestly ways.',7169,5,16,0), +(4801,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4801,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(6649,0,3,'I require priest training.',11072,5,16,0), +(6649,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(6649,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(7265,0,3,'I seek more training in the priestly ways.',7169,5,16,0), +(7265,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(7265,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(7349,0,3,'I seek more training in the priestly ways.',7169,5,16,0), +(7349,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(7349,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(7438,0,3,'I require priest training.',7169,5,16,0), +(7438,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(7438,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(10948,0,0,'I\'d like a Lovely Charm Collector\'s Kit.',37561,1,1,25961), +(8894,0,0,'I need to fly to the Windrunner. Official business!',22768,1,1,0), +(8803,0,1,'I need some booze, Coot.',22300,3,128,26365), +(9893,0,3,'Train me.',3266,5,16,0), +(9988,0,3,'Train me.',3266,5,16,0), +(10115,0,3,'Train me.',3266,5,16,0), +(9511,0,0,'I am ready to be teleported to Dalaran.',29494,1,1,26365), +(9590,0,0,'Why would I want to ride a shredder?',27068,1,1,0), +(9592,0,0,'Where can I get a Refurbished Shredder Key?',27071,1,1,0), +(9780,0,0,'I am ready to be teleported to Dalaran.',29494,1,1,26365), +(7603,0,1,'I would like to buy from you.',14967,3,128,0), +(9784,1,0,'I was told you could get me to Light\'s Breach....',29525,1,1,0), +(9785,1,0,'I wish to travel to Light\'s Breach.',29525,1,1,0), +(10220,0,0,'I am ready to return to the realm of the living.',33071,1,1,26822), +(9709,0,0,'I\'ve lost Nass...',28439,1,1,0), +(9709,1,0,'I\'ve lost my ensorcelled choker!',29831,1,1,0), +(9714,0,0,'Stefan told me you would demonstrate the purpose of this item.',28527,1,1,26822), +(9717,0,1,'What are you hiding under that fold of flesh?',28588,3,128,26822), +(9731,0,0,'I am ready to accompany you, Drakuru.',29182,1,1,26822), +(9731,1,0,'Gorebag has shown me the Drakkari Empire. I am eager to help you conquer it!',34002,1,1,26822), +(9731,2,0,'I have whipped the Blight Geists into shape!',34005,1,1,0), +(9731,3,0,'I have defeated Darmuk! How else may I serve you?',34008,1,1,0), +(9731,4,0,'The Drakkari Chieftains have been captured! What more would you have me do?',34011,1,1,26822), +(9731,5,0,'I have witnessed your magnificent operation, Drakuru. When do we put your plan into effect??',34020,1,1,0), +(9732,0,0,'Uhh, can you send me on the tour of Zul\'Drak?',28659,1,1,26822), +(11091,0,0,'I\'m ready.',28039,1,1,26822), +(561,0,0,'What is a \"subterranean being matrix\"?',3189,1,1,0), +(562,0,0,'Who are the Earthen?',3188,1,1,0), +(563,0,0,'What are the anomalies you speak of?',3190,1,1,0), +(564,0,0,'What is a \"resilient foundation of construction\"?',3191,1,1,0), +(565,0,0,'So... the Earthen were made out of stone?',3192,1,1,0), +(566,0,0,'Anything else I should know about the Earthen?',3193,1,1,0), +(567,0,0,'I think I understand the Creators\' design intent for the Earthen now. What are the Earthen\'s anomalies that you spoke of earlier?',3194,1,1,0), +(568,0,0,'What high-stress environments would cause the Earthen to destabilize?',3195,1,1,0), +(569,0,0,'What happens when the Earthen destabilize?',3196,1,1,0), +(570,0,0,'Troggs?! Are the troggs you mention the same as the ones in the world today?',3197,1,1,0), +(571,0,0,'You mentioned two results when the Earthen destabilize. What is the second?',3198,1,1,0), +(572,0,0,'Dwarves!!! Now you\'re telling me that dwarves originally came from the Earthen?!',3199,1,1,0), +(573,0,0,'These dwarves are the same ones today, yes? Do dwarves maintain any other links to the Earthen?',3200,1,1,0), +(574,0,0,'Who are the Creators?',3201,1,1,0), +(575,0,0,'This is a lot to think about.',3202,1,1,0), +(576,0,0,'I will access the discs now.',3221,1,1,0), +(85,0,3,'I would like to train.',8221,5,16,0), +(85,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(85,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(85,4,0,'',0,1,1,0), +(141,0,3,'I would like training.',2603,5,16,0), +(141,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(141,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(141,4,0,'',0,1,1,0), +(381,0,3,'I am in need of training, Keryn.',2862,5,16,0), +(381,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(381,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(381,4,0,'',0,1,1,0), +(410,0,3,'I would like to train.',8221,5,16,0), +(410,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(410,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(410,4,0,'',0,1,1,0), +(411,0,3,'Good day, Hulfdan, I am looking for training.',2931,5,16,0), +(411,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(411,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(411,4,0,'',0,1,1,0), +(436,0,3,'Hello! I am a Rogue in need of training.',2978,5,16,0), +(436,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(436,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(436,4,0,'',0,1,1,0), +(3984,0,3,'Yes, I have. Teach me.',7495,5,16,0), +(3984,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(3984,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(3984,4,0,'',0,1,1,0), +(4502,0,3,'Can you train me how to use rogue skills?',7491,5,16,0), +(4502,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4502,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4502,4,0,'',0,1,1,0), +(4512,0,3,'I would like training.',2603,5,16,0), +(4512,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4512,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4512,4,0,'',0,1,1,0), +(4513,0,3,'I would like training.',2603,5,16,0), +(4513,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4513,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4513,4,0,'',0,1,1,0), +(4540,0,3,'I would like to train.',8221,5,16,0), +(4540,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4540,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4540,4,0,'',0,1,1,0), +(4541,0,3,'I would like to train.',8221,5,16,0), +(4541,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4541,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4541,4,0,'',0,1,1,0), +(4542,0,3,'I would like to train.',8221,5,16,0), +(4542,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4542,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4542,4,0,'',0,1,1,0), +(4561,0,3,'I\'m lookin\' for rogue trainin\'.',7490,5,16,0), +(4561,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4561,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4561,4,0,'',0,1,1,0), +(4562,0,3,'I\'m lookin\' for rogue trainin\'.',7490,5,16,0), +(4562,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4562,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4562,4,0,'',0,1,1,0), +(4575,0,3,'I seek training.',35062,5,16,0), +(4575,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4575,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4575,4,0,'',0,1,1,0), +(4576,0,3,'I seek training.',35062,5,16,0), +(4576,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4576,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4576,4,0,'',0,1,1,0), +(4577,0,3,'I seek training.',35062,5,16,0), +(4577,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4577,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4577,4,0,'',0,1,1,0), +(4658,0,3,'Can you train me how to use rogue skills?',7491,5,16,0), +(4658,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4658,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4658,4,0,'',0,1,1,0), +(4659,0,3,'Can you train me how to use rogue skills?',7491,5,16,0), +(4659,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4659,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4659,4,0,'',0,1,1,0), +(4676,0,3,'Can you train me how to use rogue skills?',7491,5,16,0), +(4676,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4676,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4676,4,0,'',0,1,1,0), +(4690,0,3,'I seek training.',35062,5,16,0), +(4690,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4690,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4690,4,0,'',0,1,1,0), +(5061,0,3,'Can you train me how to use rogue skills?',7491,5,16,0), +(5061,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(5061,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(5061,4,0,'',0,1,1,0), +(6650,0,3,'I require rogue training.',11073,5,16,0), +(6650,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(6650,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(6650,4,0,'',0,1,1,0), +(4008,0,3,'I\'d like to train.',7528,5,16,0), +(4008,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4008,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4009,0,3,'I am in need of training.',7521,5,16,0), +(4009,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4009,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4010,0,3,'I have come for training.',7519,5,16,0), +(4010,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4010,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4011,0,3,'I am in need of training.',7521,5,16,0), +(4011,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4011,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4012,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4012,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4017,0,3,'Please train me.',7565,5,16,0), +(4017,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4017,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4023,0,3,'I wish to train.\n',7556,5,16,0), +(4023,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4023,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4101,0,3,'I seek training in the ways of the Hunter.',7643,5,16,0), +(4101,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4101,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4472,0,3,'I seek training in the ways of the Hunter.',7643,5,16,0), +(4472,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4472,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4473,0,3,'I seek training in the ways of the Hunter.',7643,5,16,0), +(4473,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4473,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4474,0,3,'I seek training in the ways of the Hunter.',7643,5,16,0), +(4474,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4474,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4506,0,3,'I wish to train.',7556,5,16,0), +(4506,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4506,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4524,0,3,'I seek training in the ways of the Hunter.',7643,5,16,0), +(4524,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4524,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4549,0,3,'I seek training in the ways of the Hunter.',7643,5,16,0), +(4549,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4549,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4550,0,3,'I am here for training.',7558,5,16,0), +(4550,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4550,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4551,0,3,'I seek training in the ways of the Hunter.',7643,5,16,0), +(4551,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4551,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4647,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4647,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4648,0,3,'I wish to train.',7556,5,16,0), +(4648,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4648,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4657,0,3,'I seek training in the ways of the Hunter.',7643,5,16,0), +(4657,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4657,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4675,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4675,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4693,0,3,'I\'d like to train.',7528,5,16,0), +(4693,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4693,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4695,0,3,'I\'d like to train.',7528,5,16,0), +(4695,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4695,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(6652,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(6652,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(7262,0,3,'I seek training in the ways of the Hunter.',7643,5,16,0), +(7262,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(7262,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(7368,2,0,'Acteon, where is the best place to hunt moongraze bucks?',14060,1,1,26124), +(7608,0,1,'I wish to purchase tradeskill supplies.',14958,3,128,0), +(7609,0,1,'I wish to purchase fishing supplies.',14960,3,128,0), +(7609,1,3,'Give me some pointers on my fishing technique.',14961,5,16,0), +(7722,1,1,'I have marks to redeem!',16146,3,128,0), +(4688,0,3,'I seek training as a druid.',7452,5,16,0), +(9856,0,1,'Show me what you have for sale.',29959,3,128,0), +(7679,0,0,'My apologies. I did not mean to offend. I am here on behalf of my people.\n',0,1,1,26124), +(7678,0,0,'My people ask that you pull back your Boulderfist ogres and cease all attacks on our territories. In return, we will also pull back our forces.',15325,1,1,26124), +(7677,0,0,'We will fight you until the end, then, Lantresor. We will not stand idly by as you pillage our towns and kill our people.',15327,1,1,26124), +(7676,0,0,'What do I need to do?',15329,1,1,26124), +(8394,0,0,'I\'m listening.',19575,1,1,26365), +(8393,0,0,'Go on, please.',19574,1,1,26365), +(8395,0,0,'Interesting.',23107,1,1,26365), +(8396,0,0,'That\'s quite a story.',19572,1,1,26365), +(8398,0,0,'There was something else I wanted to ask you, Altruis.',19573,1,1,26365), +(8499,0,0,'But you are dragons! How could orcs do this to you?',19865,1,1,26365), +(8498,0,0,'Your mate?',19867,1,1,26365), +(8497,0,0,'I have battled many beasts, dragon. I will help you.',19869,1,1,26365), +(840,0,0,'Please continue, Hero...',3702,1,1,0), +(840,1,0,'Please continue, Hero...',3702,1,1,0), +(880,0,0,'What could be worse than death?',3704,1,1,0), +(881,0,0,'I shall.',3841,1,1,0), +(882,0,0,'You can count on me, Hero.',3710,1,1,0), +(883,0,0,'What are the stones of binding?',3708,1,1,0), +(884,0,0,'Subordinates?',3706,1,1,0), +(5750,0,0,'Transport me to the Molten Core, Lothos.',13491,1,1,25961), +(1285,0,0,'I wish to hear your tale.',4408,1,1,25950), +(1286,0,0,'Let me think about it, Zamael.',4412,1,1,25950), +(1287,0,0,'Please continue, Zamael.',4410,1,1,25950), +(7692,0,0,'Treelos, I know that the truth is somewhere inside you. Tell me what it is.',15553,1,1,0), +(7726,0,0,'Keep it together man! What about Zangarmarsh?',15555,1,1,0), +(7727,0,0,'I don\'t have time for this! Warden, what happened?!',15557,1,1,0), +(9038,0,0,'The Lady Mehley',23961,1,1,0), +(9038,1,0,'Food & Drink',66664,1,1,0), +(9038,2,0,'Goods & Gear',23963,1,1,0), +(9038,3,0,'\"Stash?\"',23964,1,1,0), +(9040,0,0,'Food & Drink',66664,1,1,0), +(9040,1,0,'Goods & Gear',23963,1,1,0), +(9040,2,0,'\"Stash?\"',23964,1,1,0), +(9041,0,0,'The Lady Mehley',23961,1,1,0), +(9041,1,0,'Goods & Gear',23963,1,1,0), +(9041,2,0,'\"Stash?\"',23964,1,1,0), +(9042,0,0,'The Lady Mehley',23961,1,1,0), +(9042,1,0,'Food & Drink',66664,1,1,0), +(9042,2,0,'\"Stash?\"',23964,1,1,0), +(9043,0,0,'The Lady Mehley',23961,1,1,0), +(9043,1,0,'Food & Drink',66664,1,1,0), +(9043,2,0,'Goods & Gear',23963,1,1,0), +(1045,0,0,'Acquire Higher Level Access Card',4001,1,1,0), +(1047,0,0,'Acquire Higher Level Access Card',4001,1,1,0), +(1049,0,0,'Acquire Higher Level Access Card',4001,1,1,0), +(1050,0,0,'Acquire high level data card.',4003,1,1,0), +(1282,0,0,'Touch the Suntara stone and call forth Lathoric the Black and his guardian, Obsidion.',4401,1,1,25950), +(1301,0,1,'I wish to browse your wares.',38807,3,128,26124), +(1321,0,0,'Let me confer with my colleagues.',4434,1,1,0), +(1322,0,0,'Continue please.',21460,1,1,0), +(1323,0,0,'Tell me what drives this vengeance?',4430,1,1,0), +(1323,2,0,'Kalaran, I have misplaced my torch. I require another.',7773,1,1,0), +(1323,3,0,'Kalaran, please enchant the torch.',9023,1,1,0), +(9143,0,0,'',24459,1,1,26365), +(9050,0,1,'Let me browse your goods.',2823,3,128,26365), +(9062,0,0,'Speaking of action, I\'ve been ordered to undertake an air strike.',24059,1,1,26365), +(9062,1,0,'I need to intercept the Dawnblade reinforcements.',24152,1,1,26365), +(9087,0,1,'Let me browse your goods.',2823,3,128,26365), +(9126,0,1,'Let me browse your goods.',2823,3,128,26365), +(9198,0,1,'Let me browse your goods.',2823,3,128,26365), +(9285,0,0,'Give me a situation report, Captain.',25524,1,1,0), +(9286,2,0,'What is the current state of the Sunwell\'s Gates?',25533,1,1,0), +(9287,0,0,'What went wrong?',25526,1,1,0), +(9288,0,0,'Why did they stop?',25528,1,1,0), +(9289,0,0,'Your insight is appreciated.',25530,1,1,0), +(9832,1,0,'I\'ve lost my Blood Knight Tabard.',30356,1,1,0), +(9832,2,0,'I\'ve lost my Tabard of the Hand.',30358,1,1,0), +(9832,3,0,'I\'ve lost my Tabard of the Protector.',30363,1,1,0), +(9832,4,0,'I\'ve lost my Green Trophy Tabard of the Illidari.',30359,1,1,0), +(9832,5,0,'I\'ve lost my Purple Trophy Tabard of the Illidari.',30360,1,1,0), +(9832,6,0,'I\'ve lost my Tabard of Summer Skies.',33438,1,1,0), +(9832,7,0,'I\'ve lost my Tabard of Summer Flames.',33439,1,1,0), +(9832,8,0,'I\'ve lost my Loremaster\'s Colors.',31596,1,1,0), +(9832,9,0,'I\'ve lost my Tabard of the Explorer.',31603,1,1,0), +(9832,10,0,'I\'ve lost my Tabard of the Achiever.',30362,1,1,0), +(8306,1,0,'Why are you so far from Toshley\'s Station?',0,1,1,26124), +(8429,0,0,'Overseer, I am here to negotiate on behalf of the Cenarion Expedition.',19662,1,1,26124), +(8435,0,0,'Oh, it\'s not my fault, I can assure you.',19685,1,1,26124), +(8436,0,0,'I\'m fine, thank you. You asked for me?',19683,1,1,26124), +(8437,0,0,'Um, no... no, I don\'t want that at all.',19687,1,1,26124), +(8438,0,0,'Impressive. When do we attack?',19689,1,1,26124), +(8439,0,0,'Absolutely!',19691,1,1,26124), +(8304,4,0,'I want to fly to an old location!',19735,1,1,0), +(8304,3,0,'Take me to Ruuan.',19669,1,1,26124), +(8304,2,0,'Send me to Razaan\'s Landing!',19668,1,1,26124), +(8304,1,0,'Take me to Singing Ridge.',19671,1,1,26124), +(8304,0,0,'I\'m ready for my test flight!',19667,1,1,26124), +(8490,0,1,'Very well, let me see what you\'ve got.',19804,3,128,0), +(8660,0,0,'',21282,1,1,0), +(8660,1,0,'',21289,1,1,0), +(8660,2,0,'',21288,1,1,0), +(8660,3,0,'',21287,1,1,0), +(8661,0,1,'Show me your assortment of, err... things.',21285,3,128,26124), +(8671,0,0,'Place 35 Apexis Shards into the prism.',21380,1,1,26124), +(8672,0,0,'Purchase 1 Unstable Flask of the Beast for the cost of 10 Apexis Shards',21382,1,1,26124), +(8672,1,0,'Purchase 5 Unstable Flasks of the Beast for the cost of 50 Apexis Shards',21385,1,1,0), +(8673,0,0,'Use the fel crystalforge to make another purchase.',21384,1,1,26124), +(8674,0,0,'Use the fel crystalforge to make another purchase.',21384,1,1,0), +(8675,0,0,'Use the Bash\'ir crystalforge to make another purchase.',21389,1,1,0), +(8676,0,0,'Use the Bash\'ir crystalforge to make another purchase.',21389,1,1,26124), +(8677,0,0,'Purchase 1 Unstable Flask of the Sorcerer for the cost of 10 Apexis Shards',21388,1,1,26124), +(8677,1,0,'Purchase 5 Unstable Flasks of the Sorcerer for the cost of 50 Apexis Shards',21391,1,1,0), +(8679,0,0,'Kronk, tell me about the charged crystal foci.',21973,1,1,26124), +(8683,0,1,'Skwak!',21495,3,128,26124), +(8685,0,0,'Place 35 Apexis Shards near the dragon egg to crack it open.',21415,1,1,0), +(8687,0,0,'',21634,1,1,0), +(8689,0,0,'Place 35 Apexis Shards near the dragon egg to crack it open.',21415,1,1,26124), +(8690,0,0,'Place 35 Apexis Shards near the dragon egg to crack it open.',21415,1,1,0), +(8691,0,0,'Place 35 Apexis Shards near the dragon egg to crack it open.',21415,1,1,0), +(8716,0,1,'Let me browse your goods.',2823,3,128,26124), +(8717,0,1,'Let me browse your goods.',2823,3,128,26124), +(8718,0,0,'Yes, I\'d love a ride to Blackwind Landing.',21550,1,1,0), +(8719,0,0,'Absolutely! Send me to the Skyguard Outpost.',21553,1,1,0), +(8721,0,1,'Let me browse your goods.',2823,3,128,26124), +(8722,0,1,'Let me browse your goods.',2823,3,128,26124), +(8723,0,1,'Let me browse your goods.',2823,3,128,26124), +(8724,0,1,'Let me browse your goods.',2823,3,128,26124), +(8726,0,1,'Jho\'nass, let me see what you have to offer.',21628,3,128,26124), +(8737,0,1,'Let me browse your goods.',2823,3,128,26124), +(7520,0,0,'Alright, Bite, I\'ll let you out.',14574,1,1,0), +(7540,0,0,'Naturalist, please grant me your boon.',14670,1,1,0), +(3130,0,1,'I would like to buy from you.',0,1,1,0), +(2703,0,0,'How do I use the Cache of Mau\'ari?',5662,1,1,0), +(2703,1,0,'What is E\'ko?',5698,1,1,0), +(2703,2,0,'I\'d like you to make me a new Cache of Mau\'ari please',5758,1,1,0), +(3049,0,0,'You will have to excuse me, Lorax, I do not speak \'crazy\'.',6241,1,1,0), +(21322,0,0,'My apologies, I did not realize that you could understand what I was saying. What is it you are doing out here?',6243,1,1,0), +(21324,0,0,'What deal?',6247,1,1,0), +(21325,0,0,'So how did he break the deal?',6249,1,1,0), +(21326,0,0,'Perhaps I can be of some assistance. I will make a deal with you, Satyr. I shall recover this unforged breastplate and slay the beast. In exchange for this task, you will teach me how to create the breastplate',6251,1,1,0), +(10118,2,0,'Tell me about the Wispcloak Recipe.',32447,1,1,0), +(10118,3,0,'I am ready to learn the Wispcloak Recipe.',32455,1,1,0), +(10118,4,0,'Tell me about the Deathchill Cloak Recipe.',32464,1,1,0), +(10118,5,0,'I am ready to learn the Deathchill Cloak Recipe.',32468,1,1,0), +(7368,3,0,'Acteon, where is the best area to hunt for moongraze stags?',14058,1,1,0), +(7368,4,0,'Acteon, where is the best place to hunt moongraze bucks?',14060,1,1,0), +(1403,3,1,'I\'d like to purchase more Tharlendris seeds.',4851,3,128,0), +(1186,1,0,'Paval Reethe.',4261,1,1,0), +(12847,1,1,'Let me browse your goods.',2823,3,128,25996), +(12847,0,3,'Train me.',3266,5,16,25996), +(12852,0,3,'Train me.',3266,5,16,25996), +(8761,0,0,'Can you spread the reflective dust again?',22041,1,1,0), +(8762,0,0,'Your propaganda won\'t work on me. Spout your treasonous filth elsewhere, traitor!',22054,1,1,25996), +(8826,0,3,'Train me.',3266,5,16,25996), +(8826,1,1,'Show me what you have for sale.',29959,3,128,25996), +(10894,0,0,'This was before the Cataclysm?',0,1,1,0), +(10895,0,0,'Kilrok, how did we lose Honor\'s Stand?',0,1,1,0), +(8001,0,1,'Boots, what do you have back there that goes down smooth?',17054,3,128,26124), +(8063,0,1,'Dealer Hazzin, what do you have to offer?',17592,3,128,26365), +(8070,0,1,'What do you have to sell, Tuluman?',17628,3,128,26365), +(8084,0,1,'Dealer Dunar, I wish to browse your wares.',17800,3,128,26365), +(8103,0,5,'Make this inn your home.',2822,8,65536,26365), +(8120,0,0,'What are Ethereum?',18183,1,1,26365), +(8121,0,0,'I think I understand now. Can I help with any of this? The Ethereum and void creatures are a threat to our survival as well.',18189,1,1,26365), +(8122,0,0,'So what is your purpose?',18187,1,1,26365), +(8123,0,0,'I don\'t understand. What do you mean, Ameer?',18185,1,1,26365), +(8126,0,1,'I wish to browse your wares.',38807,3,128,26365), +(8710,0,1,'Let me browse your goods.',2823,3,128,26124), +(7478,0,0,'Why do you suffer?',14370,1,1,26124), +(7477,0,0,'What is Ysera and how were you blessed?',14372,1,1,26124), +(7476,0,0,'Until what?',14374,1,1,26124), +(7475,0,0,'So why are you still here?',14376,1,1,26124), +(9370,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9353,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9355,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9379,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9380,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9381,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9382,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9383,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9356,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9357,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9358,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9359,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9360,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9361,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9362,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9363,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9364,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9365,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9366,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9367,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9368,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9369,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9371,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9372,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9373,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9374,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9375,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9376,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9377,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9378,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(10228,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(10231,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(10232,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(10235,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(10236,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(10239,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(10241,0,0,'Stamp out the Horde bonfire!',24526,1,1,26899), +(10242,0,0,'Stamp out the Horde bonfire!',24526,1,1,0), +(9406,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9352,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9354,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9384,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9385,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9386,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9387,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9388,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9389,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9390,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9391,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9392,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9393,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9394,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9395,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9396,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9397,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9398,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9399,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9400,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9401,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9402,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9403,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9404,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9405,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9407,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9408,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9409,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9410,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9411,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9412,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9413,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(10227,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(10230,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(10233,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(10234,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(10237,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(10238,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(10240,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(10243,0,0,'Stamp out the Alliance bonfire!',24530,1,1,0), +(9262,0,0,'I am prepared to face Saragosa!',25384,1,3,26365), +(9262,1,0,'Keristrasa, I am finished here. Please return me to the Transitus Shield.',25441,1,3,26365), +(7403,0,0,'I have not come to kill you, night elf. And the gods did not do this...',13739,1,1,0), +(7402,0,0,'I fear that my people are somewhat responsible for this destruction. We are refugees, displaced from our homes by the Burning Legion. This tragedy is a result of our latest evacuation. Our vessel crashed - this debris is a part of that vessel.',13741,1,1,0), +(7401,0,0,'We have much in common, night elf. I can\'t help but feel that perhaps it was fate that brought us together. Let me help you, Cowlen. Let my people help. We will right the wrongs. This I vow.',13743,1,1,0), +(4002,0,1,'Let me take a look at what you have to offer.',7487,3,387,0), +(4003,0,1,'I am curious to see what a bucket of bolts has to offer.',7501,3,131,0), +(6586,0,0,'And what do you say?',10795,1,1,26124), +(6587,0,0,'What do they say?',10793,1,1,26124), +(6588,0,0,'How do you know?',10791,1,1,26124), +(10458,0,0,'I am ready to fight!',33430,1,1,0), +(10457,0,0,'I am ready to fight!',33430,1,1,0), +(10454,0,0,'I am ready to fight!',33430,1,1,0), +(10453,0,0,'I am ready to fight!',33430,1,1,0), +(9640,0,0,'Soldier, you have new orders. You\'re to pull back and report to the sergeant!',27434,1,1,26822), +(7816,1,1,'Let me browse your goods.',2823,3,128,26124), +(3572,5,0,'Herbalism',45768,1,1,0), +(3572,6,0,'Inscription',48811,1,1,0), +(3572,7,0,'Leatherworking',52071,1,1,0), +(3572,8,0,'Skinning',52076,1,1,0), +(3572,9,0,'Tailoring',52077,1,1,0), +(1293,0,0,'What can I do at an inn?',10693,1,1,0), +(1293,1,5,'Make this inn your home.',2822,1,1,0), +(1293,2,1,'I want to browse your goods.',3370,1,1,0), +(345,0,5,'Make this inn your home.',2822,1,1,26822), +(10517,2,0,'Where is the Black Feather Quill?',34644,1,1,0), +(10517,0,0,'Where is the Rune of Nesting?',34642,1,1,0), +(2352,0,0,'Auction House',44627,1,1,0), +(2352,1,0,'The Bank',7066,1,1,0), +(2352,2,0,'Hippogryph Master',18292,1,1,0), +(2352,3,0,'Guild Master & Vendor',2870,1,1,0), +(2352,4,0,'The Inn',7075,1,1,0), +(2352,5,0,'Mailbox',45381,1,1,0), +(2352,6,0,'Stable Master',45383,1,1,0), +(2352,7,0,'Battlemaster',7247,1,1,0), +(2352,8,0,'Class Trainer',19209,1,1,0), +(2352,9,0,'Profession Trainer',45378,1,1,0), +(3924,0,3,'I seek training as a druid.',7452,5,16,0), +(4571,0,3,'I seek training as a druid.',7452,5,16,0), +(1403,0,3,'I am here for training.',7452,5,16,0), +(8098,0,1,'I wish to purchase one of these creatures.',17909,3,128,0), +(8517,0,3,'Train me.',0,5,16,0), +(698,0,1,'I want to browse your goods.',3370,1,1,25881), +(12180,12,0,'Tell me about production professions.',47107,1,1,27547), +(4131,0,3,'Train me.',3266,5,16,0), +(4349,0,3,'Train me.',3266,5,16,0), +(4241,0,3,'Train me.',0,5,16,0), +(4163,0,3,'Train me.',3266,5,16,0), +(12539,0,3,'I seek training as a druid.',0,5,16,0), +(12677,1,5,'Make this inn your home.',0,1,1,0), +(12677,2,1,'Let me browse your goods.',2823,3,128,0), +(4305,0,1,'Let me browse your goods.',2823,3,128,0), +(11821,0,3,'Train me.',3266,5,16,27326), +(2404,0,6,'I would like to check my deposit box.',3398,1,1,0), +(12992,0,0,'Take me to the faire staging area.',0,1,1,0), +(4174,0,3,'Train me.',3266,5,16,0), +(3285,2,0,'The inn',7075,1,1,0), +(3285,3,0,'The stable master',8521,1,1,0), +(3285,4,0,'A class trainer',6792,1,1,0), +(3285,5,0,'A profession trainer',6793,1,1,0), +(10987,0,3,'I am interested in mage training.',0,5,16,0), +(4151,0,3,'Train me.',0,5,16,0), +(12040,0,5,'Make this inn your home.',0,1,1,27404), +(12168,3,0,'Is there something I can do at the Sanctuary of Malorne?',41324,0,0,26972), +(11767,0,3,'I would like to train.',8221,5,16,0), +(4168,0,3,'Train me.',3266,5,16,0), +(4742,0,3,'I require training, Grimnur.',8337,5,16,25961), +(1468,0,3,'Access secret gnome engineering schemata!',0,1,1,0), +(4123,0,3,'Train me.',3266,5,16,25961), +(4150,0,3,'Train me.',3266,5,16,25961), +(4150,1,0,'I wish to unlearn my Gnomish Engineering specialization!',0,1,1,0), +(10606,0,9,'I would like to go to the battleground.',10355,1,1,26124), +(9832,12,0,'I\'ve lost my Tabard of Summer Skies.',0,1,1,0), +(9832,13,0,'I\'ve lost my Tabard of Summer Flames.',0,1,1,0), +(14194,9,0,'I want to talk about the Arcane Momentum technique.',125293,0,0,25961), +(1721,0,1,'I want to browse your goods.',3370,1,1,0), +(4762,0,3,'I require training, Nissa.',8369,5,16,25961), +(4360,0,2,'I need a ride.',3409,4,8192,25961), +(4160,0,3,'Train me.',3266,5,16,25961), +(4748,0,3,'I require training, Daryl.',8349,5,16,25961), +(4359,0,1,'I would like to buy from you.',14967,1,1,25961), +(7815,0,3,'Train me.',3266,5,16,25961), +(4345,0,3,'Train me.',3266,5,16,25961), +(4205,0,3,'Train me.',3266,5,16,25961), +(3558,7,0,'Herbalism',45768,1,1,0), +(3558,8,0,'Inscription',48811,1,1,0), +(3558,9,0,'Leatherworking',52071,1,1,0), +(3558,10,0,'Mining',51348,1,1,0), +(3558,11,0,'Skinning',52076,1,1,0), +(3558,12,0,'Tailoring',52077,1,1,0), +(12188,15,0,'Tell me about production professions.',47107,1,1,27547), +(12188,13,0,'Tell me about Inscription.',47149,1,1,27547), +(12186,3,3,'Train me in Engineering.',0,3,16,0), +(12186,8,3,'Train me in Mining.',0,3,16,0), +(12186,11,0,'Tell me about Alchemy.',47145,1,1,27547), +(12186,12,0,'Tell me about Blacksmithing.',47146,1,1,27547), +(12186,13,0,'Tell me about Enchanting.',47147,1,1,27547), +(12186,14,0,'Tell me about Engineering.',47148,1,1,27547), +(12186,15,0,'Tell me about Inscription.',47149,1,1,27547), +(12186,16,0,'Tell me about Jewelcrafting.',47150,1,1,27547), +(12186,17,0,'Tell me about Leatherworking.',47151,1,1,27547), +(12186,18,0,'Tell me about Tailoring.',47152,1,1,27547), +(12186,19,0,'Tell me about gathering professions.',47106,1,1,27547), +(4090,0,1,'I would like to buy from you.',14967,1,1,25961), +(10898,0,1,'Let me browse your goods.',2823,3,128,0), +(4678,0,3,'I would like to train further in the ways of the Light.',5299,5,16,0), +(1262,0,1,'I would like to buy from you.',14967,3,128,0), +(12104,1,0,'Send me to the surface, Torben.',46360,1,1,0), +(11767,1,0,'I wish to unlearn my talents.',62295,1,1,0), +(4341,0,1,'Let me browse your goods.',2823,3,128,0), +(4126,0,3,'Train me.',3266,5,16,0), +(4323,0,2,'I need a ride.',3409,4,8192,0), +(4324,0,1,'Let me browse your goods.',2823,3,128,0), +(5854,0,3,'Train me.',3266,5,16,0), +(12460,0,2,'Show me where I can fly.',12271,4,8192,0), +(4140,0,3,'Train me.',3266,5,16,0), +(10941,1,0,'What happened here?',0,1,1,25996), +(11024,0,0,'How?',0,1,1,25996), +(11025,0,0,'So what did you do?',0,1,1,25996), +(11027,0,0,'What happened?',0,1,1,25996), +(11026,0,0,'How did you escape?',38336,1,1,25996), +(4350,0,3,'Train me.',3266,5,16,0), +(10962,0,0,'What? Who are you? What clan are you from?',0,1,1,0), +(10961,0,0,'You\'re no orc. You\'re a spy! Alliance spy!',0,1,1,0), +(9123,2,5,'Make this inn your home.',2822,8,65536,0), +(9123,0,5,'Make this inn your home.',2822,1,1,25996), +(1186,0,0,'The Burning Inn.',4259,1,1,0), +(8912,0,5,'Make this inn your home.',2822,1,1,0), +(8912,1,1,'I want to browse your goods.',3370,1,1,0), +(12191,15,0,'Tell me about production professions.',47107,1,1,27547), +(12196,11,3,'Train me in Inscription.',47113,5,1,27547), +(12196,12,0,'Tell me about Herbalism.',47142,1,1,27547), +(12196,13,0,'Tell me about gathering professions.',47106,1,1,27547), +(12196,14,0,'Tell me about production professions.',47107,1,1,27547), +(4325,0,1,'Let me browse your goods.',2823,3,128,0), +(1017,0,3,'Train me.',3266,5,16,0), +(13014,0,3,'Train me.',0,5,16,0), +(5461,0,8,'I want to create a guild crest.',3415,11,524288,0), +(5461,1,7,'How do I form a guild?',3413,10,262144,0), +(721,0,0,'Auction House',7066,1,1,0), +(721,1,0,'Bank',6720,1,1,0), +(721,2,0,'Class Trainer',2870,1,1,0), +(721,3,0,'Guild Master & Vendor',7075,1,1,0), +(721,4,0,'Inn',5514,1,1,0), +(721,5,0,'Mailbox',5515,1,1,0), +(721,6,0,'Profession Trainer',7253,1,1,0), +(721,7,0,'Stable Master',8521,1,1,0), +(721,8,0,'Wind Rider Master',10359,1,1,0), +(721,9,0,'Zeppelin Master',6792,1,1,0), +(4242,0,3,'Train me.',0,5,16,0), +(8767,0,0,'Where is the zeppelin to Undercity right now?',22108,1,1,0), +(4165,0,3,'Train me.',0,5,16,0), +(4128,0,3,'Train me.',0,5,16,0), +(8521,0,3,'Train me.',3266,5,16,25996), +(12848,2,1,'Let me browse your goods.',2823,3,128,25996), +(12850,0,3,'Train me.',3266,5,16,25996), +(12850,1,1,'Let me browse your goods.',2823,3,128,25996), +(5382,0,3,'Train me.',3266,5,16,25996), +(1161,0,0,'What have you heard of the Shady Rest Inn?',4227,1,1,25996), +(12835,3,1,'Let me browse your goods.',2823,3,128,0), +(8851,0,0,'You look like an intelligent person. Why don\'t you read one of these leaflets and give it some thought?',22549,1,1,25996), +(12855,0,0,'Hunter',0,1,1,25996), +(12855,1,0,'Mage',0,1,1,25996), +(12855,2,0,'Paladin',0,1,1,25996), +(12855,3,0,'Priest',0,1,1,25996), +(12855,4,0,'Rogue',0,1,1,25996), +(12855,5,0,'Shaman',0,1,1,25996), +(12855,6,0,'Warlock',0,1,1,25996), +(12855,7,0,'Warrior',0,1,1,25996), +(12865,0,0,'Alchemy',0,1,1,25996), +(12865,1,0,'Archaeology',44649,1,1,25996), +(12865,2,0,'Blacksmithing',0,1,1,25996), +(12865,3,0,'Cooking',0,1,1,25996), +(12865,4,0,'Enchanting',0,1,1,25996), +(12865,5,0,'Engineering',0,1,1,25996), +(12865,6,0,'First Aid',0,1,1,25996), +(12865,7,0,'Fishing',0,1,1,25996), +(12865,8,0,'Herbalism',0,1,1,25996), +(12865,9,0,'Inscription',0,1,1,25996), +(12865,10,0,'Jewelcrafting',0,1,1,25996), +(12865,11,0,'Leatherworking',0,1,1,25996), +(12865,12,0,'Mining',0,1,1,25996), +(12865,13,0,'Riding',44663,1,1,25996), +(12865,14,0,'Skinning',0,1,1,25996), +(12865,15,0,'Tailoring',0,1,1,25996), +(4122,0,3,'Train me.',3266,5,16,25996), +(4355,0,3,'Train me.',3266,5,16,25996), +(9581,0,3,'Please teach me.',8442,1,1,25996), +(9580,0,3,'I am interested in mage training.',2522,5,16,0), +(9580,1,0,'I wish to unlearn my talents.',62295,1,1,0), +(1781,0,1,'I\'d like to see what you have to sell.',4713,3,128,25881), +(12843,0,3,'Train me.',3266,5,16,25996), +(12843,1,1,'Let me browse your goods.',2823,3,128,25996), +(12844,0,3,'Train me.',3266,5,16,25996), +(12844,1,1,'Let me browse your goods.',2823,3,128,25996), +(4845,0,1,'I wish to make a purchase, Nipsy.',0,1,1,0), +(5102,0,0,'Have you ever heard of a place called Dire Maul?',0,1,1,0), +(5764,0,0,'Why do you say that this is a coincidence, Rabine?',0,1,1,0), +(5765,0,0,'The Fruit of Fertility?',0,1,1,0), +(5769,0,0,'But something went wrong, didn\'t it?',0,1,1,0), +(5768,0,0,'What would happen if the Fruit of Fertility - or the Felvine - was allowed to be fully corrupted?',0,1,1,0), +(5767,0,0,'What would you have me do, Rabine?',0,1,1,0), +(12019,0,1,'I wish to browse your wares.',0,1,1,0), +(12464,0,0,'Alright! Let\'s head down to the Swamp of Sorrows!',49049,1,1,25961), +(12527,0,3,'I would like to train further in the ways of the Light.',0,5,16,0), +(12527,1,0,'I wish to unlearn my talents.',0,1,1,0), +(5665,0,3,'Train me.',3266,5,16,27547), +(2831,0,5,'Make this inn your home.',2822,8,65536,25961), +(2831,1,1,'Let me browse your goods.',2823,3,128,25961), +(4209,0,3,'Train me.',3266,5,16,0), +(4347,0,3,'Train me.',3266,5,16,0), +(1582,0,5,'Make this inn your home.',0,1,1,0), +(1582,1,1,'I want to browse your goods.',3370,1,1,0), +(7034,0,0,'I would like to enter the secret code to receive my Murloc pet.',11765,1,1,25961), +(4741,0,3,'I require training, Lumak.',8335,5,16,0), +(6565,0,0,'I would like to enter the secret code to receive my Murloc pet.',11765,1,1,25961), +(6565,1,0,'I would like to enter the secret code to receive my Murloc costume.',22291,1,1,25961), +(6565,2,0,'I would like to enter the secret code to receive my Big Blizzard Bear.',32042,1,1,25961), +(22117,0,1,'Let me browse your goods.',0,1,1,27404), +(13390,0,0,'Show me, dragon.',0,1,1,0), +(4342,0,2,'I need a ride.',3409,4,8192,0), +(441,0,5,'Make this inn your home.',10693,1,1,0), +(441,1,1,'Let me browse your goods.',2823,3,128,0), +(7690,0,3,'Train me.',3266,5,16,26124), +(1624,0,1,'I want to browse your goods.',3370,1,1,0), +(9832,0,1,'Let me browse your goods.',2823,3,128,26822), +(1626,0,8,'I want to create a guild crest.',0,11,524288,0), +(1626,1,7,'How do I form a guild?',0,10,262144,0), +(6647,0,3,'I would like to train further in the ways of the Light.',5299,5,16,0), +(12410,0,3,'Train me.',0,5,16,0), +(4351,0,3,'Train me.',0,5,16,0), +(12106,1,1,'I\'m looking for a lost companion.',0,1,1,0), +(21938,0,0,'What do we know about the nightborne?',0,1,1,27404), +(11969,0,0,'Auction House',0,1,1,0), +(11969,1,0,'Bank',0,1,1,0), +(11969,2,0,'Class Trainer',0,1,1,0), +(11969,3,0,'Inn',0,1,1,0), +(11969,4,0,'Mailbox',0,1,1,0), +(11969,5,0,'Profession Trainer',0,1,1,0), +(11969,6,0,'Stable Master',0,1,1,0), +(11969,7,0,'Vendor',0,1,1,0), +(11976,0,0,'Druid',0,1,1,0), +(11976,1,0,'Hunter',0,1,1,0), +(11976,2,0,'Mage & Portal',0,1,1,0), +(11976,3,0,'Priest',0,1,1,0), +(11976,4,0,'Rogue',0,1,1,0), +(11976,5,0,'Shaman',0,1,1,0), +(11976,6,0,'Warlock',0,1,1,0), +(11976,7,0,'Warrior',0,1,1,0), +(11977,0,0,'Cooking',0,1,1,0), +(11977,1,0,'Herbalism',0,1,1,0), +(11977,2,0,'Inscription',0,1,1,0), +(11977,3,0,'Fishing',0,1,1,0), +(11978,0,0,'General Goods',0,1,1,0), +(11978,1,0,'Poisons & Reagents',0,1,1,0), +(11978,2,0,'Pet Snakes',0,1,1,0), +(11978,3,0,'Trade Supplies',0,1,1,0), +(12443,0,3,'Train me.',3266,5,16,0), +(12443,1,1,'Let me browse your goods.',2823,3,128,0), +(7691,0,3,'Train me.',3266,5,16,26124), +(11971,1,1,'I\'m looking for a lost companion.',0,1,1,0), +(11919,0,5,'Make this inn your home.',0,1,1,0), +(11919,1,1,'Let me browse your goods.',2823,3,128,0), +(4747,0,3,'I require training, Zamja.',8347,5,16,0), +(8073,0,9,'I would like to go to the battleground.',10355,1,1,25996), +(11684,0,2,'Show me where I can fly.',12271,4,8192,0), +(8075,0,9,'I would like to go to the battleground.',0,1,1,0), +(3329,4,0,'Shaman',0,1,1,0), +(3329,5,0,'Warrior',0,1,1,0), +(12642,0,1,'I would like to buy from you.',0,1,1,25881), +(6059,1,1,'Let me browse your goods.',2823,3,128,0), +(6083,0,1,'I would like to buy from you.',0,1,1,0), +(6086,0,1,'I would like to buy from you.',14967,1,1,0), +(11646,0,1,'I would like to buy from you.',0,1,1,0), +(11764,0,5,'Make this inn your home.',0,8,65536,0), +(11764,5,1,'Let me browse your goods.',2823,3,128,0), +(12599,0,5,'Make this inn your home.',2822,8,65536,25996), +(12599,1,1,'I want to browse your goods.',3370,3,128,25996), +(7046,0,1,'Hey Vi\'el, show me your wares!',11913,1,1,0), +(11107,0,0,'Ванира, если можешь, отправь меня обратно в крепость Черного Копья.',0,0,0,0), +(11020,0,0,'Я готов, Вол\'джин.',0,0,0,0), +(11127,0,0,'You spoke of communing with Thrall? Did I miss it?',0,1,1,0), +(11933,0,3,'I am interested in mage training.',0,5,16,0), +(8213,0,1,'I wish to purchase one of these creatures.',17909,3,128,0), +(12521,0,3,'I am interested in mage training.',0,5,16,0), +(12521,1,0,'I wish to unlearn my talents.',0,1,1,0), +(4463,0,11,'Yes. I do.',5299,1,1,0), +(342,0,5,'Make this inn your home.',2822,1,1,27326), +(342,1,1,'Let me browse your goods.',8097,3,128,27602), +(10641,0,0,'Tell me about the nearby ruins.',0,1,1,0), +(10642,0,0,'What are you doing here?',0,1,1,0), +(10643,0,0,'No, please go on.',0,1,1,0), +(10644,0,0,'What happened to the mages?',0,1,1,0), +(10645,0,0,'Were they able to hold out?',0,1,1,0), +(10646,0,0,'And we\'re going to dig them up.',0,1,1,0), +(11705,0,0,'Southern Rocketway Terminus, please.',0,1,1,0), +(11705,1,0,'Gallywix Rocketway Exchange, please.',0,1,1,0), +(11705,2,0,'Northern Rocketway Exchange, please.',0,1,1,0), +(11705,3,0,'Northern Rocketway Terminus, please.',0,1,1,0), +(11706,0,0,'Orgrimmar Rocketway Exchange, please.',0,1,1,0), +(11706,1,0,'Gallywix Rocketway Exchange, please.',0,1,1,0), +(11706,2,0,'Northern Rocketway Exchange, please.',0,1,1,0), +(11706,3,0,'Northern Rocketway Terminus, please.',0,1,1,0), +(11708,0,0,'Orgrimmar Rocketway Exchange, please.',0,1,1,0), +(11708,1,0,'Northern Rocketway Exchange, please.',0,1,1,0), +(11708,2,0,'Southern Rocketway Terminus, please.',0,1,1,0), +(11708,3,0,'Northern Rocketway Terminus, please.',0,1,1,0), +(11710,0,0,'Northern Rocketway Exchange, please.',0,1,1,0), +(11710,1,0,'Gallywix Rocketway Exchange, please.',0,1,1,0), +(11710,2,0,'Orgrimmar Rocketway Exchange, please.',0,1,1,0), +(11710,3,0,'Southern Rocketway Terminus, please.',0,1,1,0), +(11709,0,0,'Northern Rocketway Terminus, please.',0,1,1,0), +(11709,1,0,'Gallywix Rocketway Exchange, please.',0,1,1,0), +(11709,2,0,'Orgrimmar Rocketway Exchange, please.',0,1,1,0), +(11709,3,0,'Southern Rocketway Terminus, please.',0,1,1,0), +(8058,1,1,'Let me browse your goods.',2823,3,128,26124), +(11402,0,5,'Make this inn your home.',2822,8,65536,26124), +(11402,1,1,'Let me browse your goods.',2823,3,128,26124), +(7410,0,1,'I wish to browse your wares.',0,3,128,25996), +(4211,0,3,'Train me.',3266,5,16,25996), +(1581,1,5,'Make this inn your home.',2822,1,1,26124), +(8077,0,9,'I would like to go to the battleground.',10355,1,1,25996), +(2242,0,1,'I would like to buy from you.',0,1,1,26124), +(11731,0,1,'Make mine Noggenfogger!',43487,1,1,26124), +(5268,2,0,'Fist Weapon',20584,1,1,0), +(5268,3,0,'Gun',20585,1,1,0), +(8124,0,1,'Let me browse your goods.',2823,3,128,26124), +(2890,0,5,'Make this inn your home.',2822,1,1,26124), +(9904,0,0,'I\'d like to build a catapult.',31058,1,1,0), +(9904,1,0,'I would like to build a demolisher.',31055,1,1,0), +(9904,2,0,'I would like to build a siege engine.',31061,1,1,0), +(10129,2,0,'Guide me to the Broken Temple Graveyard.',32432,1,1,0), +(10129,4,0,'Guide me to the Eastspark Graveyard.',32433,1,1,0), +(12726,0,1,'Let me browse your goods.',2823,3,128,25996), +(11498,0,1,'Let me browse your goods.',2823,3,128,25996), +(12675,0,1,'Let me browse your goods.',2823,3,128,25996), +(12458,0,0,'I\'d like to leave this place.',48895,1,1,25996), +(10429,0,0,'I\'d like to travel to Lor\'danel.',34110,1,1,25996), +(347,0,5,'Make this inn your home.',2822,1,1,27602), +(10428,0,0,'I\'d like to travel to Lor\'danel.',34110,1,1,25996), +(10428,1,0,'I\'d like to travel to Shatterspear Vale.',34108,1,1,25996), +(12725,0,3,'I want to learn about Archaeology.',50849,1,1,25996), +(4138,0,3,'Train me.',3266,5,16,25996), +(12596,0,5,'I\'d like to make this my home.',50234,1,1,25950), +(12034,2,1,'Could you repair my gear, Argus?',47696,1,1,25950), +(12033,1,1,'I want to browse your goods.',3370,1,1,25937), +(12236,0,2,'Show me where I can fly.',12271,4,8192,25996), +(9794,0,3,'I seek training, Lord Thorval.',0,5,16,0), +(9794,1,0,'I wish to unlearn my talents.',0,1,1,0), +(9794,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(9793,0,3,'I seek training, Lady Alistra.',0,5,16,0), +(9793,1,0,'I wish to unlearn my talents.',0,1,1,0), +(9793,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(9792,0,3,'I seek training, Amal\'thazad.',0,5,16,0), +(9792,1,0,'I wish to unlearn my talents.',0,1,1,0), +(9792,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(9706,0,1,'I require repairs and supplies, Corvus.',0,1,1,0), +(12462,0,2,'Show me where I can fly.',12271,4,8192,25928), +(12454,0,2,'Show me where I can fly.',12271,4,8192,25928), +(12100,2,5,'Make this inn your home.',2822,8,65536,25928), +(12100,3,1,'Let me browse your goods.',2823,3,128,25928), +(11934,1,1,'I would like to buy from you.',0,1,1,25928), +(11936,1,1,'I would like to buy from you.',0,1,1,25928), +(12260,0,1,'Ice cream, Brivelthwerp. I need ice cream!',47602,1,1,25996), +(11435,0,1,'What drinks do you have?',40732,3,128,25996), +(11435,1,5,'Make this inn your home.',2822,8,65536,25996), +(11453,0,1,'Show me what you\'ve got, Ryan.',40983,3,128,25996), +(11465,0,1,'I need repairs, Irongoat.',41110,3,128,25996), +(11505,0,1,'Show me your wares, please.',41360,3,128,25996), +(11506,0,1,'Show me your wares, please.',41360,3,128,25996), +(11504,0,5,'Make this inn your home.',2822,8,65536,25996), +(11504,1,1,'Show me your wares, Lyanath.',41358,3,128,25996), +(12032,1,2,'Show me where I can fly.',12271,4,8192,0), +(3651,1,0,'Betina, I\'d like a replacement Seal of the Dawn please!',0,1,1,0), +(3651,2,0,'Betina, I\'d like a replacement Rune of the Dawn please!',0,1,1,0), +(12022,0,1,'Let me see what you have for sale, Fiona.',46605,1,1,25950), +(3625,0,1,'I would like to buy from you.',0,1,1,0), +(11801,0,1,'I would like to buy from you.',0,1,1,25928), +(11743,1,1,'What\'ve you got?',0,1,1,25928), +(9197,13,0,'War of the Elements',51428,1,1,25928), +(9197,14,0,'Twilight of the Dragons',51429,1,1,25928), +(9197,15,0,'Throne of Tides',53007,1,1,25928), +(9197,16,0,'Crown of Heaven',53497,1,1,25928), +(9197,17,0,'Tomb of the Forgotten',53498,1,1,25928), +(9197,18,0,'Timewalkers: War of the Ancients',58024,1,1,25928), +(9197,19,0,'Betrayal of the Guardian',71367,1,1,25928), +(10810,0,0,'Mini-Mount',0,1,1,25928), +(12658,0,0,'Grim Campfire',50661,1,1,25928), +(12658,1,0,'Landro\'s Lil\' XT',50662,1,1,25928), +(12658,2,0,'Mottled Drake',50663,1,1,25928), +(12658,3,0,'What other promotions do you have?',25084,1,1,25928), +(12784,0,0,'Landro\'s Lichling',51420,1,1,25928), +(12784,1,0,'War Party Hitching Post',51425,1,1,25928), +(12784,2,0,'Savage Raptor Mount',51423,1,1,25928), +(12784,3,0,'What other promotions do you have?',25084,1,1,25928), +(12785,0,0,'Nightsaber Cub',51424,1,1,25928), +(12785,1,0,'Fool\'s Gold',51421,1,1,25928), +(12785,2,0,'Amani Dragonhawk',51426,1,1,25928), +(12785,3,0,'What other promotions do you have?',25084,1,1,25928), +(13003,0,0,'Purple Puffer Pet',53004,1,1,25928), +(13003,1,0,'Throwing Starfish',53005,1,1,25928), +(13003,2,0,'Swift Shorestrider',53006,1,1,25928), +(13003,3,0,'What other promotions do you have?',25084,1,1,25928), +(13088,0,0,'Gregarious Grell Pet',53481,1,1,25928), +(13088,1,0,'Ogre Mage Costume',53482,1,1,25928), +(13088,2,0,'Corrupted Hippogryph',53483,1,1,25928), +(13088,3,0,'What other promotions do you have?',25084,1,1,25928), +(13089,0,0,'Sand Scarab Pet',53492,1,1,25928), +(13089,1,0,'Spurious Sarcophagus',53495,1,1,25928), +(13089,2,0,'White Riding Camel',53496,1,1,25928), +(13089,3,0,'What other promotions do you have?',25084,1,1,25928), +(13506,0,0,'Eye of the Legion',58021,1,1,25928), +(13506,1,0,'Demon Hunter\'s Aspect',58022,1,1,25928), +(13506,2,0,'Feldrake Mount',58023,1,1,25928), +(13506,3,0,'What other promotions do you have?',25084,1,1,25928), +(12838,0,3,'Train me.',3266,5,16,25928), +(12838,1,1,'Let me browse your goods.',2823,3,128,25928), +(2784,0,3,'Train me.',3266,5,16,25928), +(6185,0,0,'I slay the man on the spot as my liege would expect me to do, as he is nothing more than a thief and a liar.',10049,1,1,0), +(11791,0,2,'Show me where I can fly.',12271,4,8192,25901), +(11839,1,0,'Dwarven District Auction House',0,1,1,27843), +(421,9,0,'Herbalism',45768,1,1,27843), +(421,8,0,'Flying',0,1,1,27843), +(321,0,0,'Please port me to Darnassus.',2846,1,1,0), +(10537,0,0,'That\'s not important right now. Ota Wen, listen to me. You must rise up against the orcs!',34854,1,1,25996), +(10539,0,0,'Yes, rise up! Tell your fellow furbolg to break out of this cage and to slay the Horde. The power of the rod compels you!',34856,1,1,25996), +(2351,10,0,'Jewelcrafting',0,1,1,0), +(2351,11,0,'Leatherworking',0,1,1,0), +(2351,12,0,'Mining',0,1,1,0), +(2351,13,0,'Skinning',0,1,1,0), +(2351,14,0,'Tailoring',0,1,1,0), +(10494,0,0,'I am ready to be one with the whirling vortex and defeat Lord Magmathar.',34495,1,1,25996), +(2952,0,1,'I would like to buy from you.',2583,3,128,0), +(6952,0,0,'Why... yes, of course. I\'ve something to show you right inside this building, Mr. Anvilward.',0,1,1,0), +(6953,0,0,'I need a moment of your time, sir.',11731,1,1,0), +(12195,8,3,'Train me in Mining.',0,3,16,0), +(12195,11,3,'Train me in Engineering.',47119,5,1,27547), +(12195,12,0,'Tell me about Mining.',47143,1,1,27547), +(12195,13,0,'Tell me about gathering professions.',47106,1,1,27547), +(12195,14,0,'Tell me about production professions.',47107,1,1,27547), +(12189,11,3,'Train me in Mining.',47116,5,1,26124), +(12189,12,0,'Tell me about Blacksmithing.',47146,1,1,26124), +(12189,13,0,'Tell me about Engineering.',47148,1,1,26124), +(12189,14,0,'Tell me about Jewelcrafting.',47150,1,1,26124), +(12189,15,0,'Tell me about gathering professions.',47106,1,1,26124), +(12189,16,0,'Tell me about production professions.',47107,1,1,26124), +(11892,1,0,'Show me where I can fly.',12271,1,1,0), +(11154,0,3,'I seek training in the ways of the Hunter.',0,5,16,0), +(11154,1,0,'I wish to unlearn my talents.',0,1,1,0), +(11152,0,2,'I\'d like to purchase a bat ride.',0,4,8192,0), +(11152,1,0,'I\'ll take that flight to Brill now.',39130,1,8192,0), +(4184,0,3,'Train me.',0,5,16,0), +(11159,0,1,'Gordo, do you think you could repair my gear?',0,1,1,0), +(11143,0,1,'I wish to buy from you.',0,1,1,0), +(12540,0,3,'I seek training in the ways of the Hunter.',0,5,16,0), +(12540,1,0,'I wish to unlearn my talents.',0,1,1,0), +(12025,0,5,'Make this inn your home.',0,1,1,0), +(12025,1,1,'Let me browse your goods.',2823,3,128,0), +(11156,0,0,'I am ready',39152,1,1,0), +(3354,6,0,'Warrior',0,1,1,0), +(11144,0,0,'Who\'s the little guy?',0,1,1,0), +(4283,0,1,'Let me browse your goods.',2823,3,128,0), +(12198,9,3,'Train me in Skinning.',0,3,16,0), +(12198,11,3,'Train me in Leatherworking.',47115,5,1,27547), +(12198,12,0,'Tell me about Skinning.',47144,1,1,27547), +(12198,13,0,'Tell me about gathering professions.',47106,1,1,27547), +(12198,14,0,'Tell me about production professions.',47107,1,1,27547), +(12190,9,3,'Train me in Skinning.',0,3,16,0), +(12190,12,0,'Tell me about Leatherworking.',47151,1,1,27547), +(12190,13,0,'Tell me about gathering professions.',47106,1,1,27547), +(12190,14,0,'Tell me about production professions.',47107,1,1,27547), +(11134,0,0,'I\'m here to rescue you.',38986,1,1,0), +(11109,0,3,'I seek training in the ways of the Hunter.',0,5,16,0), +(11133,0,0,'You\'re not hideous, Lilian... you\'re one of us. Here, look in this mirror, see for yourself.',38981,1,1,0), +(12489,0,0,'You talk to Undertaker Mordo. He\'ll tell you what to do. That\'s all I know.',49354,1,1,0), +(12488,0,0,'Calm down, Valdred. Undertaker Mordo probably sewed some new ones on for you.',49353,1,1,0), +(12487,0,0,'Don\'t you remember? You died.',49352,1,1,0), +(12484,0,0,'Lilian, do you realize that you are undead yourself?',49340,1,1,0), +(12483,0,0,'I\'m not an abomination, I\'m simply undead. I just want to speak with you.',49339,1,1,0), +(12486,0,0,'You are free to do whatever you like.',49347,1,1,0), +(12485,0,0,'I\'m not here to fight you. I\'ve only been asked to speak with you.',49346,1,1,0), +(7535,0,0,'Sironas is an eredar... I mean, yes, obviously.',14632,1,1,26124), +(7534,0,0,'The Vector Coil is massive. I hope we have more than one abomination guarding the numerous weak points.',14634,1,1,26124), +(7536,0,0,'Incredible. How did Sironas accomplish such a thing?',14630,1,1,26124), +(7537,0,0,'Ah yes, Sironas. I had nearly forgotten that Sironas was here. I served under Sironas back on Outland. I hadn\'t heard of this abomination, though; those damnable draenei captured me before I even fully materialized on this world.',14628,1,1,26124), +(7531,0,0,'I\'m a prisoner, what does it look like? The draenei filth captured me as I exited the sun gate. They killed our portal controllers and destroyed the gate. The Sun King will be most displeased with this turn of events.',14626,1,1,26124), +(7459,0,3,'Train me in the ways of herbalism.',15944,5,16,26124), +(7497,0,5,'Make this inn your home.',2822,1,1,26124), +(7497,1,1,'I want to browse your goods.',3370,1,1,26124), +(7471,1,1,'I wish to browse your goods.',0,1,1,26124), +(7455,0,3,'I wish to learn more about first aid.',15945,1,1,26124), +(7833,0,3,'Train me in the trade of mining.',15936,5,16,26124), +(8243,0,1,'I want to browse your goods.',3370,1,1,26124), +(7470,0,2,'I wish to travel by hippogryph.',0,1,1,0), +(7788,14,0,'Cooking',0,1,1,0), +(7491,0,0,'',14429,1,1,26124), +(7492,0,0,'',14429,1,1,26124), +(7493,0,0,'',14429,1,1,26124), +(7367,0,0,'Vindicator, please loan me your elekk to ride to Forest Song.',33595,1,1,25996), +(10506,0,0,'I am ready to invoke the shade of Shadumbra.',34586,1,1,25996), +(10339,0,0,'Sentinel, I would like to ride one of your nightsabers to Astranaar.',33552,1,1,25996), +(2890,1,1,'I want to browse your goods.',3370,8,65536,26124), +(2890,5,1,'I want to browse your goods.',3370,3,128,0), +(3185,0,1,'I would like to buy from you.',14967,3,128,0), +(7426,0,0,'It\'s over, Spark. The admiral knows it was you who betrayed the Alliance. Now you\'re either going to cooperate with me and tell me everything that you know or we\'re going to engage in some fisticuff.',14093,1,1,26124), +(12192,8,3,'Train me in Mining.',0,3,16,0), +(12192,11,3,'Train me in Blacksmithing.',47110,5,1,26124), +(12192,12,0,'Tell me about Mining.',47143,1,1,26124), +(12192,13,0,'Tell me about gathering professions.',47106,1,1,26124), +(12192,14,0,'Tell me about production professions.',47107,1,1,26124), +(11728,0,0,'',43450,1,1,25928), +(11727,0,1,'I hear you\'ve got some drinks I can buy, Slim.',0,1,1,29416), +(12511,0,0,'Yes. Please prepare the portal, Erallier.',49722,1,1,25928), +(7288,1,1,'Let me browse your goods.',2823,3,128,0), +(11635,0,0,'Did you see who killed the Furlbrows?',42370,1,1,25881), +(11635,1,0,'Maybe a couple copper will loosen your tongue. Now tell me, did you see who killed the Furlbrows?',42371,1,1,25881), +(8096,0,0,'Send me to Honor Point!',17936,1,1,26124), +(8094,0,1,'What do you have for sale?',0,1,1,26124), +(8095,0,2,'Show me where I can fly.',12271,1,1,26124), +(7970,0,0,'I\'m on a bombing mission for Forward Commander Kingston. I need a gryphon destroyer!',18198,1,1,0), +(202,0,0,'Let the event begin!',0,1,1,0), +(11861,0,3,'Train me.',3266,5,16,25881), +(12656,0,1,'I want to browse your goods.',3370,1,1,0), +(11132,0,0,'You\'re not hideous, Lilian... you\'re one of us. Here, look in this mirror, see for yourself.',0,0,0,0), +(7396,0,1,'I want to browse your goods.',3370,1,1,26124), +(7948,0,5,'Make this inn your home.',2822,1,1,26124), +(7948,1,1,'I want to browse your goods.',3370,1,1,26124), +(1443,1,0,'You\'re an alchemist? So am I. Perhaps you can teach me what you know...',4537,1,1,0), +(4007,0,3,'I would like training.',2603,5,16,0), +(11456,0,0,'Captain Tharran wants you to deploy your remote observation bots and withdraw to Kharanos.',40986,1,1,25961), +(11457,0,0,'Captain Tharran wants you to deploy your remote observation bots and withdraw to Kharanos.',40986,1,1,25961), +(11455,0,0,'Captain Tharran wants you to deploy your remote observation bots and withdraw to Kharanos.',40986,1,1,25961), +(11777,0,2,'Show me where I can fly.',12271,4,8192,0), +(12951,0,0,'Don\'t forget your totems!',0,1,1,0), +(12950,0,0,'Umm, Aggra... shouldn\'t you be following Thrall?',0,1,1,0), +(12943,0,0,'I am prepared. Let us go to the Firelands and finish this.',52653,1,1,27326), +(12940,0,0,'Aggra, I am ready. Let us go to Thrall.',52583,1,1,27326), +(12930,0,0,'Aggra, I am ready to travel to Deepholm.',52559,1,1,27326), +(12938,0,0,'Aggra, I am ready to travel to the Abyssal Maw.',52535,1,1,27326), +(12883,0,0,'I am ready, elemental. Take me to Thrall.',52127,1,1,26972), +(12985,0,0,'I am ready to travel to Uldum, Aggra.',52955,1,1,26972), +(12991,0,0,'I am ready.',0,1,1,26972), +(12191,4,3,'Train me in Herbalism.',47112,3,16,27547), +(10834,0,3,'I seek further training in the old ways of the druids.',0,5,16,0), +(10696,1,3,'I seek further training in the old ways of the druids.',0,5,16,0), +(12539,1,0,'I wish to unlearn my talents.',0,1,1,0), +(12609,0,0,'I am ready.',0,1,1,27547), +(11061,0,0,'Let us take back our city!',38484,1,1,27547), +(11079,0,0,'I need a horse.',0,1,1,0), +(12799,2,0,'How are we doing in the battle?',0,1,1,0), +(12799,4,0,'What are we building here?',52999,1,1,26972), +(12439,0,1,'I would like to buy from you.',0,1,1,0), +(9549,0,1,'I\'d like to buy this month\'s brew.',26693,3,128,0), +(12836,0,0,'Present the Smoke-Stained Locket.',0,1,1,0), +(11659,0,0,'Nobody shorts Garrosh Hellscream. You finish those ships - and finish them right - or this gets personal.',0,1,1,0), +(11654,0,0,'Yes, a map of the coastal approaches.',0,1,1,0), +(11653,0,0,'The Dragonmaw can be great again. Help our conquest of the Twilight Highlands - can you give me a map?',0,1,1,0), +(11807,0,0,'So it\'s true? Sauranok IS guilty of treason!',0,1,1,0), +(11806,0,0,'I know all about your cult master.',0,1,1,0), +(11805,0,0,'I didn\'t say Twilight\'s Hammer. YOU said Twilight\'s Hammer.',0,1,1,0), +(11804,0,0,'Has a secret cult infiltrated the Orgrimmar skyway?',0,1,1,0), +(11758,0,0,'Fight with me! Take up this blade and be a warrior.',0,1,1,0), +(11758,1,0,'Support and heal me! Take up this warhammer and be a shaman.',0,1,1,0), +(11757,0,0,'Fight with me! Take up this blade and be a warrior.',0,1,1,0), +(11757,1,0,'Support and heal me! Take up this warhammer and be a shaman.',0,1,1,0), +(11707,0,0,'Our warriors are dying. Do you have medical supplies I can take back with me?',0,1,1,0), +(11704,0,0,'Can I get a ride back to the fleet?',0,1,1,0), +(11691,0,0,'Send me ashore, Horzog.',0,1,1,0), +(10219,0,0,'Place Avruu\'s Orb on the altar.',33065,1,1,26124), +(12979,0,0,'Fascinating.',0,1,1,0), +(10192,0,0,'Oh great Queen of the Dragons, I have somehow misplaced my Key to the Focusing Iris. Can you find it for me?',0,1,1,0), +(12914,0,0,'How is Hamuul doing?',52373,1,1,26972), +(10510,0,2,'Show me where I can fly.',12271,4,8192,0), +(10139,0,5,'Make this inn your home.',0,1,1,0), +(12949,1,10,'Let me see the items up for auction.',0,1,1,0), +(18759,1,3,'Train me.',3266,5,16,23420), +(10419,0,1,'I want to browse your goods.',3370,3,128,0), +(12762,0,0,'I am prepared to face Nemesis, Tooga.',0,1,1,0), +(12887,0,3,'Train me.',0,5,16,0), +(10942,0,0,'What would you have of me, Banshee Queen?',0,1,1,0), +(10988,0,3,'I seek training in the ways of the Hunter.',0,5,16,0), +(10974,0,0,'I\'m ready to face my challenge.',0,1,1,0), +(6185,1,0,'I turn over the man to my liege for punishment, as he has broken the law of the land and it is my sworn duty to enforce it.',10050,1,1,0), +(10767,13,0,'Skinning',0,1,1,0), +(10767,14,0,'Tailoring',0,1,1,0), +(13406,0,0,'Teleport to the garden entrance.',0,1,1,0), +(13406,5,0,'Teleport to Azshara\'s Palace.',0,1,1,0), +(13406,7,0,'Teleport to The Well of Eternity.',0,1,1,0), +(13321,0,0,'Entryway of Time',0,1,1,0), +(13321,1,0,'Ruby Dragonshrine',0,1,1,0), +(13321,9,0,'Bronze Dragonshrine',0,1,1,0), +(12015,0,1,'Do you have any supplies?',45532,1,1,27326), +(12015,1,0,'Can you repair equipment?',45533,1,1,27326), +(13405,0,0,'Teleport to the garden entrance.',0,1,1,0), +(13405,5,0,'Teleport to Azshara\'s Palace.',0,1,1,0), +(13183,0,0,'Yes Thrall.',0,1,1,0), +(10502,1,0,'Tell me about the orphans.',34567,1,1,0), +(5849,1,0,'I need a new Human Orphan Whistle.',9672,1,1,0), +(12761,0,1,'Let me see what you have for sale.',0,1,1,0), +(9712,0,0,'I\'m ready to battle the dreadlord, sire.',0,1,1,0), +(9302,0,0,'Worry no more, taunka. The Horde will save and protect you and your people, but first you must swear allegiance to the Warchief by taking the blood oath of the Horde.',25649,1,1,0), +(9303,0,0,'For the Horde!\r\n\r\nArm yourself from the crates that surround us and report to Agmar\'s Hammer, east of here. Your first trial as a member of the Horde is to survive the journey.\r\n\r\nLok\'tar ogar!',25655,1,1,0), +(13164,0,0,'Lead the way.',0,1,1,0), +(10389,5,0,'Teleport to the Antechamber of Ulduar.',33923,1,1,0), +(10389,4,0,'Teleport to the Scrapyard.',33922,1,1,0), +(10389,3,0,'Teleport to the Colossal Forge.',33921,1,1,0), +(10389,1,0,'Teleport to the Formation Grounds.',33920,1,1,0), +(10389,0,0,'Teleport to the Expedition Base Camp.',33919,1,1,0), +(10314,0,0,'We are ready to help!',0,1,1,0), +(13075,3,0,'Darkmoon Cards?',10777,1,1,0), +(7649,9,0,'Monk',61793,1,1,0), +(12795,0,0,'What can you tell me about these spiders?',0,1,1,0), +(13362,0,0,'I am ready to help Thrall, back in my present time.',0,1,1,0), +(11829,0,3,'I seek training as a druid.',0,5,16,0), +(11829,1,0,'I wish to unlearn my talents.',0,1,1,0), +(12760,0,0,'I am ready to meet with Anachronos, Ziradormi. ',0,1,1,0), +(1022,0,3,'Train me.',3266,5,16,0), +(12939,0,0,'Wait no longer, I\'m ready to fight.',0,1,1,0), +(13163,0,0,'Let\'s go!',0,1,1,0), +(13162,0,0,'I am ready to be hidden by your shadowcloak.',0,1,1,0), +(8713,0,0,'I\'m ready, Akama.',21522,1,1,26365), +(12233,0,3,'I am interested in mage training.',0,5,16,0), +(12233,1,0,'I wish to unlearn my talents.',0,1,1,0), +(12235,0,3,'Please teach me.',0,1,1,0), +(8031,0,1,'I would like to buy from you.',0,1,1,26365), +(13018,0,0,'How do I play Whack-a-Gnoll?',0,1,1,0), +(13018,2,0,'Ready to whack! |cFF0008E8(Darkmoon Game Token)|r',0,1,1,0), +(13065,0,0,'I understand.',0,1,1,0), +(6183,0,1,'Let me browse your goods.',2823,3,128,0), +(13012,0,0,'How do I play the Ring Toss?',0,1,1,0), +(13012,2,0,'Ready to play! |cFF0008E8(Darkmoon Game Token)|r',0,1,1,0), +(13013,0,0,'I understand.',0,1,1,0), +(6575,2,0,'Launch me! |cFF0008E8(Darkmoon Game Token)|r',0,1,1,0), +(6574,0,0,'I understand.',0,1,1,0), +(7633,5,0,'Inn',5513,1,1,0), +(7633,4,0,'Guild Master & Vendor',3428,1,1,0), +(13068,0,0,'I understand.',0,1,1,0), +(13019,0,0,'How do I play the Tonk Challenge?',0,1,1,0), +(13019,2,0,'Ready to play! |cFF0008E8(Darkmoon Game Token)|r',0,1,1,0), +(13066,0,0,'I understand.',0,1,1,0), +(9573,0,0,'What should we do next?',29539,1,1,0), +(12974,0,0,'Commander Shadowsong, what are the Marks of the World Tree?',52935,1,1,26972), +(8899,0,0,'Please loan me that spyglass.',0,1,1,0), +(9335,0,0,'Ummm... the frog says you\'re a traitor, \"matey.\"',25738,1,1,26822), +(9013,0,0,'',23824,1,1,26365), +(9014,0,0,'Here\'s a gold, buy yourself something nice.',23829,1,1,26365), +(9010,0,0,'Taruk sent me to collect what you owe.',23809,1,1,26822), +(8808,0,1,'I require some components, Sorely.',22308,3,128,26365), +(6508,0,9,'I wish to join the battle!',0,1,1,0), +(12981,0,0,'I\'m sorry to hear that.',0,1,1,0), +(9304,0,0,'Then repeat after me: \"Lok\'tar ogar! Victory or death - it is these words that bind me to the Horde. For they are the most sacred and fundamental of truths to any warrior of the Horde.\r\n\r\nI give my flesh and blood freely to the Warchief. I am the instrument of my Warchief\'s desire. I am a weapon of my Warchief\'s command.\r\n\r\nFrom this moment until the end of days I live and die - For the Horde!\"',25653,1,1,0), +(9461,0,0,'Greetings High Chief. Would you do me the honor of accepting my invitation to join the Horde as an official member and leader of the Taunka?',26127,1,1,0), +(9474,0,1,'Let me browse your goods.',2823,3,128,0), +(9501,0,0,'Agent Skully, I need you to use the banshee\'s magic mirror on me again!',26625,1,1,0), +(9532,0,0,'Your eminence, may I have a word in private?',26614,1,1,0), +(9536,0,0,'I am ready, your grace. ',26616,1,1,0), +(9462,0,0,'It is you who honor me, High Chief. Please read from this scroll. It is the oath of allegiance.',26129,1,1,0), +(9305,0,0,'Yes, taunka. Retribution is a given right of all members of the Horde.',25651,1,1,0), +(9508,1,0,'Can you tell me where they have Chancellor Amai caged?',26534,1,1,0), +(9508,0,0,'Not today, senior scrivener!',26441,1,1,0), +(9509,3,0,'Any idea where they\'re keeping Deathguard Schneider?',26532,1,1,0), +(9509,2,0,'Where is Senior Scrivener Barriga being held?',26525,1,1,0), +(9509,1,0,'Can you tell me where they have Chancellor Amai caged?',26534,1,1,0), +(9509,0,0,'Affraid not. Your days as a sanitation engineer are coming to an end',26443,1,1,0), +(9510,3,0,'Any idea where they\'re keeping Deathguard Schneider?',26532,1,1,0), +(9510,2,0,'Did you see where they took Sanitation Engineer Burke?',26527,1,1,0), +(9510,1,0,'Where is Senior Scrivener Barriga being held?',26525,1,1,0), +(9510,0,0,'No, chancellor.. I wouldn\'t say that I\'m here to \'rescue\' you, per se.',26448,1,1,0), +(9437,0,0,'I wish to make use of the stables.',14267,14,4194304,0), +(9497,0,0,'Assume your druidic bear form, Tur.',26376,1,1,26822), +(9496,0,0,'We have the purified ashes of Vordrassil\'s sapling. If we can subdue Ursoc, we might be able to heal his soul.',26379,1,1,26822), +(9633,0,1,'Let me browse your goods.',2823,3,128,0), +(10316,3,0,'Glad to help, my lady. I\'m told you were once the guardian of a fabled sword. Do you know where I might find it?',0,1,1,0), +(12101,2,5,'Make this inn your home.',0,1,1,0), +(12101,3,1,'Let me browse your goods.',2823,3,128,0), +(21330,0,0,'I\'ve made no mistakes.',9902,1,1,0), +(9852,0,0,'Gymer, where are Algar, Navarius and Thrym?',30615,1,3,26822), +(9586,2,0,'Chromie, you and I both know what\'s going to happen in this time stream. We\'ve seen this all before. Can you just skip us ahead to all the real action?',39667,1,1,0), +(10274,0,0,'Lift the icepaw bear\'s tail to check if it\'s a male or a female.',33194,1,1,26365), +(10273,0,0,'Lift the frost leopard\'s tail to check if it\'s a male or a female.',33190,1,1,26365), +(7706,0,0,'I would be grateful for any aid you can provide, Priestess.',0,1,1,0), +(7581,2,0,'Until we meet again, Thrall.',0,1,1,0), +(7581,0,0,'We have nothing to fear.',0,1,1,0), +(7581,1,0,'I am with you, Thrall.',0,1,1,0), +(7552,2,0,'Until we meet again, Lady Proudmoore.',0,1,1,0), +(7552,1,0,'We are ready for whatever Archimonde might send our way, Lady Proudmoore.',0,1,1,0), +(7552,0,0,'My companions and I are with you, Lady Proudmoore.',14698,1,1,26365), +(12641,0,3,'Train me.',3266,5,16,26124), +(9871,0,0,'I\'m not a laborer. I\'m here to free you from servitude in the mines.',30760,1,1,26822), +(10124,0,0,'I\'m ready, Brann. Let\'s make the keystone.',32371,1,1,0), +(10383,0,0,'Ask Cavin to summon the Black Knight.',33802,1,1,0), +(9906,0,0,'I am sorry to disturb your rest, chieftain, but your brother\'s spirit may be in danger. Would you tell me what you remember of him?',31150,1,1,0), +(10209,0,1,'Let me browse your goods.',2823,3,128,26822), +(1802,0,0,'Can you tell me how I can get a Videre Elixir?',4721,1,1,0), +(9900,0,0,'If it please you, King Jokkum, may I know what has become of Krolmir?',30982,1,1,0), +(12973,0,0,'What happened during the War of the Ancients?',0,1,1,0), +(12972,0,0,'No, tell me more!',0,1,1,0), +(12975,0,0,'And why is that, exactly?',52936,1,1,26972), +(11384,0,20,'Queue for The Frost Lord Ahune battle.',0,1,1,0), +(12370,1,2,'Show me where I can go.',48170,1,1,27291), +(9670,0,0,'Let\'s move Brann, enough of the history lesson!',0,1,1,0), +(10500,0,2,'Show me where I can fly.',12271,4,8192,0), +(9274,0,0,'Lay your hand on the stone.',0,1,1,0), +(9273,0,0,'Lay your hand on the stone.',0,1,1,0), +(11013,4,0,'Teleport to the Deathbringer\'s Rise.',37724,1,1,0), +(11013,3,0,'Teleport to the Rampart of Skulls.',37723,1,1,0), +(11013,1,0,'Teleport to the Oratory of the Damned.',37722,1,1,0), +(11015,5,0,'Teleport to the Upper Spire.',37725,1,1,0), +(11015,4,0,'Teleport to the Deathbringer\'s Rise.',37724,1,1,0), +(900,0,1,'I would like to buy from you.',2583,3,128,26124), +(646,0,3,'Train me.',3266,5,16,26124), +(344,3,1,'Let me browse your goods.',2823,3,128,0), +(11013,5,0,'Teleport to the Upper Spire.',37725,1,1,0), +(942,0,0,'Please tell me more about the hippogryphs.',3814,1,1,0), +(940,0,0,'Will you blow up that door now?',3805,1,1,0), +(11015,6,0,'Teleport to Sindragosa\'s Lair.',37728,1,1,0), +(10340,0,0,'I am ready to fight!',33430,1,1,0), +(10602,0,9,'I would like to go to the battleground.',0,1,1,0), +(8749,0,0,'I\'m ready. Take me to the Chamber of Command.',21879,1,1,26365), +(8750,0,0,'I\'m ready. Take me to the Chamber of Command.',21879,1,1,26365), +(8750,1,0,'Take me to the other Deathsworn, Olum.',21901,1,1,26365), +(8354,0,0,'Control Orc Grunt',19320,1,1,0), +(7443,0,0,'Oh, grandmother, what phat lewts you have.',0,1,1,0), +(7442,0,0,'Oh, grandmother, what big eyes you have.',0,1,1,0), +(7441,0,0,'Oh, grandmother, what big ears you have.',0,1,1,0), +(7422,0,0,'Ok, I\'ll give it a try, then.',14054,1,1,0), +(7421,0,0,'I\'m not an actor.',14052,1,1,0), +(11877,0,3,'I seek further druidic training to have a closer understanding of the Earth Mother\'s will.',0,5,16,0), +(11877,1,0,'I wish to unlearn my talents.',0,1,1,0), +(3283,7,0,'Warrior',0,1,1,0), +(12046,0,3,'Cooking',0,1,1,27602), +(12046,1,3,'First Aid',0,1,1,27602), +(12046,2,3,'Fishing',0,1,1,27602), +(12002,0,1,'Access profession vending machine',45513,1,1,27602), +(12002,1,0,'I\'d like to purchase primary profession training.',45512,5,16,27602), +(12002,2,0,'I\'d like to purchase secondary profession training.',45761,5,16,27602), +(12045,0,3,'Alchemy',0,1,1,27602), +(12045,1,3,'Blacksmithing',0,1,1,27602), +(12045,2,3,'Enchanting',0,1,1,27602), +(12045,3,3,'Engineering',0,1,1,27602), +(12045,4,3,'Herbalism',0,1,1,27602), +(12045,5,3,'Inscription',0,1,1,27602), +(12045,6,3,'Jewelcrafting',0,1,1,27602), +(12045,7,3,'Leatherworking',0,1,1,27602), +(12045,8,3,'Mining',0,1,1,27602), +(12045,9,3,'Skinning',0,1,1,27602), +(12045,10,3,'Tailoring',0,1,1,27602), +(11146,0,0,'Get me up into the skies, Sassy!',39119,1,1,27602), +(11082,0,0,'Greely, why do the Super Booster Rocket Boots only work on the zombies?',38722,1,1,27602), +(11009,0,1,'I would like to buy from you.',0,1,1,27602), +(11169,0,3,'I am interested in warlock training.',0,5,16,0), +(11169,1,0,'I wish to unlearn my talents.',0,1,1,0), +(10722,0,6,'Gobber, I need to look in my pack.',41362,1,1,27602), +(10358,1,1,'Visit a trader.',0,1,1,0), +(10358,3,0,'Darkspear Champion\'s Pennant',0,1,1,0), +(10358,4,0,'Forsaken Champion\'s Pennant',0,1,1,0), +(10358,5,0,'Orgrimmar Champion\'s Pennant',0,1,1,0), +(10358,6,0,'Silvermoon Champion\'s Pennant',0,1,1,0), +(10358,7,0,'Thunder Bluff Champion\'s Pennant',0,1,1,0), +(11244,0,0,'Sassy, let\'s set sail for Orgrimmar before the island blows for good!',39595,1,1,27602), +(11248,0,6,'Gobber, I need to look in my pack.',0,1,1,0), +(11266,0,3,'I am interested in warlock training.',0,5,16,0), +(11266,1,0,'I wish to unlearn my talents.',0,1,1,0), +(8036,0,0,'',18119,1,1,26124), +(12646,0,0,'Bring elevator to first floor.',0,1,1,0), +(12646,1,0,'Bring elevator to second floor.',0,1,1,0), +(12890,0,0,'What occasion brings you to our home town, drake?',0,1,1,0), +(7949,0,5,'Make this inn your home.',2822,1,1,26365), +(7949,1,1,'Let me browse your goods.',2823,3,128,26365), +(11739,0,0,'I\'m ready when you are, Norsala.',43563,1,1,27326), +(10420,0,1,'I want to browse your goods.',3370,3,128,0), +(7435,0,1,'I\'m in need of your skill as a blacksmith, Koren.',14188,3,128,0), +(12271,0,0,'Come on, let\'s get out of here!',47635,1,1,25950), +(5968,0,2,'I need a ride.',0,4,8192,0), +(5968,1,0,'I\'m ready to take the flight into the Cauldron!',0,1,1,0), +(12265,0,0,'Care to join our dance?',47607,1,1,25950), +(12541,0,0,'Come little guy, let\'s get out of here.',0,1,1,0), +(13015,0,0,'Yes Thrall.',0,1,1,0), +(13356,0,0,'I humbly request that the Dragon Aspects provide no aid to myself and my fellow adventurers. They should worry about their own problems, and we will worry about ours.',0,1,1,0), +(10677,1,0,'Refresh my memory on the whole kaja\'mite thing.',36520,1,1,27481), +(10550,0,3,'I am interested in warlock training.',0,5,16,0), +(10826,0,3,'Train me.',3266,5,16,27602), +(10805,0,5,'Make this inn your home.',2822,1,1,27481), +(10805,1,0,'What can I do at an inn?',4308,1,1,27481), +(12494,0,0,'Okay, Sassy, I\'m ready to go.',37228,1,1,27404), +(10681,0,3,'I am interested in warlock training.',0,5,16,0), +(10903,0,1,'Vinny, I just gotta get me a genuine Cataclysm souvenir!',0,1,1,0), +(10620,0,0,'Set me up with the phattest, shiniest bling you got!',0,1,1,0), +(10624,0,0,'I need some cool shades. What will two stacks of macaroons get me?',0,1,1,0), +(10622,0,0,'Szabo, I need a hip, new outfit for the party I\'m throwing!',0,1,1,0), +(12193,11,3,'Train me in Enchanting.',47111,5,1,25881), +(12193,12,0,'Tell me about Tailoring.',47152,1,1,26124), +(12193,13,0,'Tell me about gathering professions.',47106,1,1,26124), +(12193,14,0,'Tell me about production professions.',47107,1,1,26124), +(12197,11,3,'Train me in Jewelcrafting.',47114,5,1,26124), +(12197,12,0,'Tell me about Mining.',47143,1,1,26124), +(12197,13,0,'Tell me about gathering professions.',47106,1,1,26124), +(12197,14,0,'Tell me about production professions.',47107,1,1,26124), +(12199,11,3,'Train me in Tailoring.',47118,5,1,25881), +(12199,12,0,'Tell me about Enchanting.',47147,1,1,26124), +(12199,13,0,'Tell me about gathering professions.',47106,1,1,26124), +(12199,14,0,'Tell me about production professions.',47107,1,1,26124), +(11794,0,1,'Show me today\'s selection of pies.',44403,1,1,27547), +(11794,1,0,'Why pie over cake?',44404,1,1,27547), +(11795,0,0,'I\'ll keep that in mind.',44406,1,1,27547), +(10842,0,1,'Let me browse your goods.',2823,3,128,27547), +(10173,0,0,'Armor',32702,1,1,26822), +(10173,1,0,'Clothing',32703,1,1,26822), +(10173,2,0,'Flowers',32705,1,1,26822), +(10173,3,0,'Fruit',32706,1,1,26822), +(10173,4,0,'General Goods',32706,1,1,26822), +(10173,5,0,'Jewelry',32713,1,1,26822), +(10173,6,0,'Justice Quartermasters',32704,1,1,26822), +(10173,7,0,'Pet Supplies & Exotic Mounts',32715,1,1,26822), +(10173,8,0,'Pie, Pastry & Cakes',32716,1,1,26822), +(10173,9,0,'Reagents & Magical Goods',32717,1,1,26822), +(10173,10,0,'Toys',32718,1,1,26822), +(10173,11,0,'Trade Supplies',45445,1,1,26822), +(10173,12,0,'Trinkets, Relics & Off-hand Items',32720,1,1,26822), +(10173,13,0,'Weapons',32721,1,1,26822), +(10173,14,0,'Wine & Cheese',32723,1,1,26822), +(10821,0,3,'I require warrior training.',0,5,16,0), +(12516,0,3,'I would like to train further in the ways of the Light.',0,5,16,0), +(12516,1,0,'I wish to unlearn my talents.',0,1,1,0), +(20403,0,28,'I can help you procure some valuable items.',122136,0,0,27980), +(1951,14,0,'Profession Trainer',0,1,1,27404), +(20677,0,0,'You are free to go!',0,1,1,29416), +(11892,0,0,'I need to take a bat to the Dawning Isles.',0,1,1,0), +(10316,2,0,'Glad to help, my lady. I\'m told you were once the guardian of a fabled sword. Do you know where I might find it?',0,1,1,0), +(10340,1,0,'How do the Argent Crusade riders fight?',34377,1,1,26899), +(10358,0,6,'Visit a bank.',0,1,1,0), +(10358,2,18,'Visit a mailbox.',0,1,1,0), +(10421,0,1,'I want to browse your goods.',3370,3,128,0), +(10466,0,0,'I am ready to fight!',33430,1,1,0), +(10473,0,0,'I am ready to fight!',33430,1,1,0), +(10472,0,0,'I am ready to fight!',33430,1,1,0), +(10468,0,0,'I am ready to fight!',33430,1,1,0), +(10469,0,0,'I am ready to fight!',33430,1,1,0), +(10662,0,19,'Queue for Wintergrasp.',35935,12,1,0), +(10836,0,3,'I require warrior training.',0,5,16,0), +(11520,0,5,'May I rest here?',41414,1,1,26365), +(11520,1,1,'Do you have any supplies?',45532,1,1,27144), +(11781,0,9,'I would like to go to the battleground.',0,1,1,0), +(12499,0,1,'I wish to browse your wares, Yasmin.',49462,3,128,27291), +(12499,1,5,'Make this inn your home.',2822,8,65536,27291), +(12790,0,0,'What can you tell me about the Sentinel Tree, general?',52950,1,1,26972), +(12799,3,0,'How are we doing in the battle?',0,1,1,0), +(12823,0,1,'Let me browse your goods.',2823,3,128,0), +(12833,0,0,'How do I get out of here?',0,1,1,0), +(12837,0,0,'Present the Smoke-Stained Locket.',0,1,1,0), +(12897,0,0,'What more can you tell me about these fire hawks?',0,1,1,0), +(12911,0,0,'Tell me about the ancient, Malorne.',0,1,1,0), +(12941,0,10,'I\'d like to browse the items up for auction.',0,13,2097152,26365), +(12992,2,0,'Take me to the faire staging area.',52971,1,1,25961), +(13046,0,2,'I\'d like to travel by air.',53141,4,8192,26365), +(13321,2,0,'Emerald Dragonshrine',0,1,1,0), +(13321,3,0,'Azure Dragonshrine',0,1,1,0), +(13321,4,0,'Obsidian Dragonshrine',0,1,1,0), +(13321,5,0,'Ruby Dragonshrine',0,1,1,0), +(3310,0,0,'The pleasure is mine, madam. Might I ask what it is that you are doing here?',6645,1,1,0), +(4093,0,0,'Tell me more.',0,1,1,0), +(4108,0,0,'You challenged us and we have come. Where is this master you speak of?',0,1,1,0), +(4109,0,0,'What else do you have to say?',0,1,1,0), +(5848,1,0,'I need a new Orc Orphan Whistle.',9672,1,1,0), +(5263,1,0,'What can other weapon masters teach?',8812,1,1,0), +(5268,0,0,'Axe',20580,1,1,0), +(5262,5,0,'Polearm',20587,1,1,0), +(5262,6,0,'Sword',20589,1,1,0), +(5263,0,3,'I\'d like some weapon training',8811,5,16,0), +(5262,1,0,'Dagger',20583,1,1,0), +(5262,2,0,'Fist Weapon',20584,1,1,0), +(5262,3,0,'Gun',20585,1,1,0), +(5262,4,0,'Mace',20586,1,1,0), +(5221,1,0,'What can other weapon masters teach?',8812,1,1,0), +(5262,0,0,'Crossbow',20582,1,1,0), +(5221,0,3,'I\'d like some weapon training',8811,5,16,0), +(6539,16,0,'Yes, Anachronos. I am ready to witness your vision of the future.',0,1,1,0), +(6575,1,0,'Launch me! |cFF0008E8(Darkmoon Game Token)|r',0,1,1,0), +(7559,1,0,'Grant me your mark, wise ancient.',0,1,1,0), +(7560,1,0,'Grant me your mark, mighty ancient.',0,1,1,0), +(7999,0,0,'Grek, will you try out this new weapon oil Rakoria made?',17068,1,1,0), +(8279,0,0,'Yet what? What is it, Oronok?',18941,1,1,26365), +(8280,0,0,'How do you know all of this?',18939,1,1,26365), +(8281,0,0,'How do I find the cipher?',18937,1,1,26365), +(8259,1,0,'I am ready to hear your story, Oronok.',0,1,1,26365), +(8259,0,1,'What do you have for sale, Oronok?',18834,3,128,26365), +(8918,0,0,'I have misplaced my worg disguise.',23068,1,1,0), +(9157,3,20,'Queue for The Frost Lord Ahune battle.',0,1,1,0), +(9573,3,0,'I want to exchange my Ruby Essence for Emerald Essence.',27034,1,1,0), +(6668,0,0,'',11114,1,1,0), +(6669,0,0,'',11114,1,1,0), +(6670,0,0,'',11114,1,1,0), +(6690,0,0,'May I have your report?',11325,1,1,0), +(6691,0,0,'May I have your report?',11325,1,1,0), +(6692,0,0,'May I have your report?',11325,1,1,0), +(8523,0,0,'The Felsworn Gas Mask was destroyed, do you have another one?',20149,1,1,26124), +(4362,0,0,'Put the barrel of termites on this box.',8223,1,1,0), +(4362,1,0,'Put the barrel of termites on this box.',8223,1,1,0), +(4261,0,3,'Train me.',3266,5,16,25881), +(6471,0,9,'I would like to go to the battleground.',10355,12,1048576,0), +(4743,0,0,'Where can I get Enchanted Thorium?',8340,1,1,0), +(4743,1,0,'Where can I find Crystal Restore?',8341,1,1,0), +(5541,0,1,'I want to browse your goods.',3370,1,1,0), +(12549,0,0,'Hit the button labeled \"Just past the Grim Guzzler\".',0,1,1,0), +(12549,1,0,'Hit the button labeled \'Into the Domicile\'.',0,1,1,0), +(12550,0,0,'Hit the button labeled \'Entrance\'.',0,1,1,0), +(12550,1,0,'Hit the button labeled \'Into the Domicile\'.',0,1,1,0), +(12551,0,0,'Hit the button labeled \'Entrance\'.',0,1,1,0), +(12551,1,0,'Hit the button labeled \"Just past the Grim Guzzler\".',0,1,1,0), +(12190,11,3,'Train me in Skinning.',47117,5,1,27547), +(13294,0,0,'We defeated the Destroyer!',0,1,1,0), +(5688,0,0,'Continue, please.',18943,1,1,26124), +(11189,0,0,'Can I catch a ride to Razor Hill?',0,1,1,0), +(11209,0,0,'Can you tell me your fable, Shin?',0,1,1,0), +(11240,0,0,'',0,1,1,0), +(11239,0,0,'',0,1,1,0), +(11239,1,0,'',0,1,1,0), +(13364,0,0,'A mission?',56676,1,1,25881), +(10502,2,0,'I need a new Oracle Orphan Whistle.',35446,1,1,0), +(10502,3,0,'I need a new Wolvar Orphan Whistle.',51468,1,1,0), +(8568,1,0,'I need a new Blood Elf Orphan Whistle.',20452,1,1,0), +(8568,2,0,'I need a new Draenei Orphan Whistle.',20453,1,1,0), +(435,0,0,'Battle Pet Trainer',0,1,1,27843), +(435,2,0,'Transmogrification',0,1,1,27843), +(435,5,0,'Bank',78584,1,1,27843), +(435,6,0,'Barber',45376,1,1,27843), +(435,7,0,'Class Trainer',45378,1,1,27843), +(435,8,0,'Flight Master',45379,1,1,27843), +(435,9,0,'Guild Master & Vendor',45380,1,1,27843), +(435,10,0,'Inn',44629,1,1,27843), +(13389,0,0,'Please show me, Chromie.',56943,1,1,25881), +(9045,0,0,'I don\'t have time for chit-chat, Lou. Take me to Scalawag Point.',23975,1,1,0), +(9621,0,0,'Harry said I could take his bomber to Bael\'gun\'s. I\'m ready to go!',27303,1,1,0), +(9879,0,3,'Train me.',3266,5,16,26365), +(9879,1,1,'Let me browse your goods.',2823,3,128,26365), +(9895,0,3,'Train me.',3266,5,16,0), +(9987,0,3,'Train me.',3266,5,16,0), +(10117,0,3,'Train me',3266,5,16,0), +(10218,0,0,'',33058,1,1,0), +(9426,0,0,'Remove the Eye of the Prophets from the idol\'s face.',25876,1,1,26822), +(9615,1,0,'I need another of your elixirs, Drakuru.',27286,1,1,0), +(55002,1,0,'I want to release the saber to Winna.',5936,1,131,0), +(21215,1,5,'Make this inn your home.',2822,8,65536,0), +(21215,2,1,'I want to browse your goods',3370,3,128,0), +(21215,0,0,'Trick or Treat!',10693,1,1,0), +(6535,0,0,'Smear the ash on my face like war paint!',10660,1,1,0), +(9456,0,0,'I should return to the world of shades, Koltira. Send me back.',26120,1,1,0), +(9459,0,3,'Train me.',3266,5,16,0), +(9487,0,1,'Let me browse your goods.',2823,3,128,0), +(9607,0,0,'All right, I\'ll take this mixture of yours.',27166,1,1,0), +(7371,0,0,'Balandar sent me to get you out of here and pick up his cargo. He is waiting for you in the Brackenwall.',13499,1,1,0), +(4346,0,0,'What can you tell to me about the bear - Ursangous?',8229,1,1,0), +(4346,1,0,'What can you tell to me about the nightsaber cat - Shadumbra?',8230,1,1,0), +(4346,2,0,'What can you tell to me about the hippogryph - Sharptalon?',8231,1,1,0), +(6559,0,0,'',10752,1,1,0), +(6560,0,0,'',10752,1,1,0), +(6561,0,0,'',10752,1,1,26124), +(9687,0,0,'Great and powerful Har\'koa, please call for one of your children that it might stealthily carry me into the Altar of Quetz\'lun.',28651,1,1,26822), +(11281,0,0,'',0,1,1,0), +(11289,1,0,'Um, no. Would you mind hanging out a little longer? I have some stuff I need to take care of first.',0,1,1,0), +(11289,2,0,'So how is your research into the Eye coming along?',0,1,1,0), +(11316,0,0,'Yes, Blackhorn. I\'ve been sent to request your aid, if you are willing.',0,1,1,0), +(11319,0,0,'Who is Tyrus Blackhorn?',0,1,1,0), +(11319,1,0,'Tell me about the spirit of Aessina.',0,1,1,0), +(11322,0,0,'You were a mortal once, Blackhorn. One of us.',0,1,1,0), +(11322,1,0,'You\'ll be destroyed if the Twilight\'s Hammer brings this mountain down!',0,1,1,0), +(11322,2,0,'Matoclaw believes that you may yet be redeemed. This is your chance to atone for siding with demons.',0,1,1,0), +(11324,0,0,'You\'ll be destroyed if the Twilight\'s Hammer brings this mountain down!',40015,1,1,26972), +(11324,1,0,'Where is your master now, Blackhorn? It\'s not too late to turn to the light...',40019,1,1,26972), +(11325,0,0,'Will you help us to defeat them?',0,1,1,0), +(11379,0,0,'Tell me about Tortolla.',0,1,1,0), +(11382,0,0,'Instructor Devoran sends a contender against your raptor.',0,1,1,0), +(11420,0,0,'Boss, one of the boys is causing some trouble outside.',0,1,1,0), +(11434,1,0,'I am ready to begin the battle against Ragnaros.',0,1,1,0), +(11462,0,0,'Who? Who are you giving the eggs to?',0,1,1,0), +(11463,0,0,'Brood of the Earth-Warder... you answer to a black dragon? Give me a name!',0,1,1,0), +(11464,0,0,'',0,1,1,0), +(11464,1,0,'',0,1,1,0), +(11524,0,0,'On your feet, soldier. The ancients are with us, and the mountain is healed!',0,1,1,0), +(11530,0,0,'Tell me about Goldrinn.',0,1,1,0), +(11546,0,0,'Tell me about Aviana.',0,1,1,0), +(11689,0,0,'I am ready to escort a group of elementals across the open.',43650,1,1,27326), +(11872,0,0,'We are joining an assault on Lorthuna\'s Gate. You are needed.',44674,1,1,27326), +(11873,0,0,'We are joining an assault on Lorthuna\'s Gate. You are needed.',44674,1,1,27326), +(11916,0,0,'Peak, I\'m ready to escort the catapult.',43720,1,1,27326), +(12058,0,0,'Take the scout\'s Journal.',45915,1,1,26972), +(12058,1,0,'Take the scout\'s spectacles.',46107,1,1,26972), +(12121,0,0,'I\'m looking for Tahet. Let\'s get you out of these chains.',46515,1,1,26972), +(12129,0,0,'Could you please send me to Moonglade, Emissary?',46530,1,1,26899), +(12210,0,0,'I\'ve encountered some of his underlings out in the field. They\'ve been quite hostile.',47243,1,1,26972), +(12211,0,0,'Quite an operation, indeed. What do you think of our host?',47237,1,1,26972), +(12214,0,0,'What do you know of our generous host, sir?',47258,1,1,26972), +(12215,0,0,'Hmmm, well what is it that brings you to these parts?',47260,1,1,26972), +(12217,0,0,'Indeed! And how do you find the Commander, friend?',47268,1,1,26972), +(12218,0,0,'His troops, these guards... it all seems a little intense.',47271,1,1,26972), +(12220,0,0,'Ahh, yes. How have you been enjoying your time here?',47276,1,1,26972), +(12221,0,0,'Uhhh.. I\'m not sure. Anything else you can tell me about him?',47278,1,1,26972), +(12222,0,0,'What do you think about the troops he\'s arming? Seems a little excessive, no?',47280,1,1,26972), +(12238,0,0,'Enough slacking! You\'re behind schedule...',47450,1,1,27291), +(12284,0,0,'Who could have done such a thing?',47742,1,1,27291), +(12285,0,0,'Will you investigate the murder?',47744,1,1,27291), +(12286,0,0,'Well, you WILL at least write about it, won\'t you?',47746,1,1,27291), +(12288,0,0,'Just calm down. Are you alright?',47749,1,1,27291), +(12289,0,0,'Did you see what happened?',47751,1,1,27291), +(12290,0,0,'Maybe you should go lie down for a little while.',47753,1,1,27291), +(12314,0,0,'Don\'t you want to know what happened to the man?',47983,1,1,27291), +(12315,0,0,'Your only concern here is your stake in this operation?',47985,1,1,27291), +(12317,0,0,'Just take a deep breath. Did you see anything?',47988,1,1,27291), +(12318,0,0,'Just relax... Panicking will only make it worse.',47990,1,1,27291), +(12354,0,0,'Alright, let\'s move.',48155,1,1,27291), +(12356,0,0,'King Phaoris sent me to ask you about Neferset activity.',48144,1,1,26972), +(12358,0,0,'I might be able to help. Were the Neferset behind this?',48147,1,1,26972), +(12361,0,0,'The king wishes to be informed about recent Neferset activity.',48150,1,1,26972), +(12403,0,0,'Uhhh, I suppose I\'m ready...',48397,1,1,27291), +(12408,0,0,'Fine. Let\'s see what you and your lions can do.',48441,1,1,26972), +(12441,0,0,'Ready when you are, Doctor Jones!',48787,1,1,27291), +(12578,0,0,'We need to give this another try.',50035,1,1,26972), +(421,15,0,'Skinning',106243,1,1,27843), +(421,16,0,'Tailoring',52077,1,1,27843), +(12669,0,0,'Can you take me to the Great Hall?',0,1,1,0), +(11469,0,0,'We are ready!',0,1,1,0), +(10318,3,0,'Darnassus Champion\'s Pennant',0,1,1,0), +(10318,4,0,'Exodar Champion\'s Pennant',0,1,1,0), +(10318,5,0,'Gnomeregan Champion\'s Pennant',0,1,1,0), +(10318,6,0,'Ironforge Champion\'s Pennant',0,1,1,0), +(10318,7,0,'Stormwind Champion\'s Pennant',33401,1,1,0), +(10576,0,0,'How do the Bountiful Tables work?',0,1,1,0), +(10569,0,3,'I seek training.',0,1,1,0), +(9025,1,0,'Tokens & Souvenirs',0,1,1,0), +(9025,2,0,'Ram Racing',0,1,1,0), +(9025,3,0,'Brew of the Month Club',0,1,1,0), +(9025,4,0,'Dark Iron Dwarf Attacks',0,1,1,0), +(12807,0,0,'They must\'ve drugged you. It\'s safe now.',0,1,1,0), +(12805,0,0,'We\'ve killed your captors. You\'re free to go.',0,1,1,0), +(12802,0,0,'The coast is clear. You\'re free!',0,1,1,0), +(12800,0,0,'Nalorakk is dead, you\'re free to go.',0,1,1,0), +(10029,0,1,'Let me browse your goods.',2823,3,128,26899), +(13075,0,0,'Darkmoon Adventurer\'s Guide?',53755,1,1,0), +(13075,2,0,'Darkmoon Faire Prize Tickets?',10775,1,1,0), +(13075,1,0,'What can I purchase?',10773,1,1,0), +(13018,1,0,'Ready to whack! |cFF0008E8(Darkmoon Game Token)|r',0,1,1,0), +(13019,1,0,'Ready to play! |cFF0008E8(Darkmoon Game Token)|r',0,1,1,0), +(13012,1,0,'Ready to play! |cFF0008E8(Darkmoon Game Token)|r',0,1,1,0), +(13352,0,0,'Teleport me to the cannon.',0,1,1,0), +(13352,7,0,'I don\'t need a teleport.',0,1,1,0), +(12613,0,0,'I am ready.',0,1,1,26972), +(11493,0,0,'What is happening at the Grove of Aessina?',0,1,1,0), +(11493,1,0,'How can I help the Shrine of Aviana?',0,1,1,0), +(11493,2,0,'Is there something I can do at the Sanctuary of Malorne?',0,1,1,0), +(11494,0,0,'Tell me about the Shrine of Goldrinn.',0,1,1,0), +(11494,1,0,'How can I help the Shrine of Aviana?',0,1,1,0), +(11494,2,0,'Is there something I can do at the Sanctuary of Malorne?',0,1,1,0), +(11495,0,0,'Tell me about the Shrine of Goldrinn.',0,1,1,0), +(11495,1,0,'What is happening at the Grove of Aessina?',0,1,1,0), +(11495,2,0,'Is there something I can do at the Sanctuary of Malorne?',0,1,1,0), +(11496,0,0,'Tell me about the Shrine of Goldrinn.',0,1,1,0), +(11496,1,0,'What is happening at the Grove of Aessina?',0,1,1,0), +(11496,2,0,'How can I help the Shrine of Aviana?',0,1,1,0), +(11542,0,0,'What happened to him?',0,1,1,0), +(12167,1,0,'What is happening at the Grove of Aessina?',0,1,1,0), +(12167,2,0,'How can I help the Shrine of Aviana?',0,1,1,0), +(12167,3,0,'Is there something I can do at the Sanctuary of Malorne?',0,1,1,0), +(11320,0,0,'Blackhorn is a demon?',0,1,1,0), +(11326,0,0,'Assuming there\'s a world left for your legion to conquer. The Twilight\'s Hammer seeks to destroy everything.',0,1,1,0), +(11551,0,0,'Then what happened?',41699,1,1,26972), +(11547,0,0,'You speak in the past tense. What happened to her?',0,1,1,0), +(11548,0,0,'What became of her?',0,1,1,0), +(8654,0,0,'I\'m with you, Akama.',21079,1,1,26365), +(8638,0,0,'We\'re ready to face Illidan.',0,1,1,0), +(8035,0,1,'Let\'s see what you have.',0,1,1,0), +(7857,0,5,'Make this inn your home.',0,1,1,0), +(7857,5,1,'What do you have for sale?',0,1,1,0), +(2422,0,0,'What do you think of Dadanga?',5512,1,1,0), +(2306,0,0,'I need help in defeating the shadowsilk poachers.',5306,1,1,0), +(1971,0,0,'Where is the zeppelin now?',22086,1,1,0), +(10036,0,0,'Hold on friend. Tell me what happened here.',31934,1,1,0), +(11541,0,0,'Tell me about the wolf ancient, Lo\'Gosh.',0,1,1,0), +(11544,0,0,'Yes, tell me more.',0,1,1,0), +(11289,0,0,'Okay, let\'s try this again.',0,1,1,0), +(11461,0,0,'',0,1,1,0), +(11461,1,0,'Why are you stealing eggs?',0,1,1,0), +(12014,0,1,'Can you repair equipment?',0,3,128,0), +(12014,1,0,'Do you have any supplies?',0,3,128,0), +(12003,0,5,'Make this inn your home.',2822,1,1,27326), +(12268,0,1,'Show me your wares, quartermaster.',0,1,1,0), +(9011,0,0,'Pay up, Harry!',23813,1,1,26822), +(9011,1,1,'Do you sell any of this stuff?',25731,3,128,26822), +(11339,0,0,'We\'re ready! Go, Brann!',0,1,1,0), +(10060,0,0,'Let\'s kill this... thing... and get this over with.',32118,1,1,26899), +(10123,0,1,'Let me browse your goods.',2823,3,128,0), +(10338,0,0,'Come now, friend. You chop and I will protect you from the elves, ok?',0,1,1,0), +(11479,0,0,'Murloc, I know that you hold the Amulet of Sevine. I need it.',41200,1,1,25961), +(11664,0,0,'',42790,1,1,25901), +(11665,0,0,'Alright, Tenjiyu. I\'ll go get you some food from the sleeping trolls.',42792,1,1,25901), +(11666,0,0,'',42795,1,1,25901), +(11669,0,0,'',42895,1,1,25901), +(11684,1,0,'Take me to Revantusk Village.',0,1,1,0), +(11711,1,0,'Place the incense at the foot of the statue.',43278,1,1,25928), +(11736,0,0,'So you know why I\'m here then. All right Midriff, pay up.',43530,1,1,25928), +(11741,0,0,'Bossy, I need to ask something great of you. I need to cut off your head to prove my loyalty to the Bloodsail Buccaneers, so they will allow me to infiltrate their ranks and hopefully discover their true intentions.\n\nBooty Bay needs you, Bossy... now more than ever.\n\n',0,1,1,25928), +(11741,1,0,'Moo.',43571,1,1,25928), +(11742,0,0,'',43572,1,1,25928), +(11742,1,0,'',43573,1,1,25928), +(11743,0,0,'I need an extra-large pirate hat. Seahorn\'s orders.',43576,1,1,25928), +(11745,0,0,'You\'re the boss.',0,1,1,25928), +(11791,1,0,'Wulfred says that he paid for my trip to the Explorers\' League Digsite. I\'m ready to depart.',44384,1,1,25901), +(435,3,0,'Void Storage',0,1,1,27843), +(435,4,0,'Auction House',44627,1,1,27843), +(435,11,0,'Mailbox',45381,1,1,27843), +(435,12,0,'Points of Interest',0,1,1,27843), +(435,13,0,'Other Continents',129194,1,1,27843), +(435,14,0,'Profession Trainer',45382,1,1,27843), +(435,15,0,'Stable Master',45383,1,1,27843), +(435,16,0,'Vendor',0,1,1,27843), +(11848,0,0,'Auction House',0,1,1,27481), +(11848,1,0,'Gryphon Handler',0,1,1,27481), +(11848,2,0,'Justice & Valor Quartermasters',0,1,1,27481), +(11848,3,0,'Honor & Conquest Quartermasters',0,1,1,27481), +(11934,0,0,'Have you noticed anything strange lately? Any new customers in the blacksmith shop?',45288,1,1,25928), +(11936,0,0,'Have you noticed anything strange lately? Any new customers, buying anything suspicious?',45291,1,1,25928), +(11938,0,0,'Hello, ma\'am. Heard any interesting rumors lately?',45294,1,1,25928), +(11940,0,0,'I\'m looking for someone who may have stolen some supplies from Hearthglen. Have any leads for me?',45297,1,1,25928), +(11943,0,0,'Lieutenant Myner asked me to challenge you to a duel.',45306,1,1,25928), +(12034,0,0,'Are you interested in joining our caravan? We\'re headed to Light\'s Hope Chapel.',45662,1,1,25928), +(12035,0,0,'Ride Fiona\'s Caravan to its next destination.',45675,1,1,25928), +(12094,0,21,'Reforge an item.',0,1,1,0), +(12094,1,0,'What is reforging?',0,1,1,0), +(12099,0,0,'Load me into that cannon, boy!',46336,1,1,25961), +(12125,0,0,'Could you please send me to Moonglade, Emissary?',0,1,1,0), +(12132,0,0,'Your dad says to fire me across the bay.',46892,1,1,25961), +(12146,0,0,'',46824,1,1,25950), +(12147,0,0,'',46824,1,1,25950), +(12205,0,0,'Hop in, baby.',47188,1,1,25950), +(12237,0,2,'Show me where I can fly.',12271,4,8192,0), +(12292,0,0,'I\'ll get in and fire it! What could go wrong?',47776,1,1,25961), +(12371,0,0,'Investigate the hides.',48214,1,1,25961), +(12371,2,0,'Investigate the hides.',0,1,1,0), +(12372,0,0,'Take one hide.',48202,1,1,25961), +(12372,1,0,'Take two hides.',48203,1,1,25961), +(12372,2,0,'Take three hides.',48204,1,1,25961), +(12372,3,0,'Take four hides.',48205,1,1,25961), +(12373,0,0,'Take one handful of mud.',48206,1,1,25961), +(12373,1,0,'Take two handfuls of mud.',48207,1,1,25961), +(12373,2,0,'Take three handfuls of mud.',48208,1,1,25961), +(12373,3,0,'Take four handfuls of mud.',48209,1,1,25961), +(12374,0,0,'Take one spool of thread.',48210,1,1,25961), +(12374,1,0,'Take two spools of thread.',48211,1,1,25961), +(12374,2,0,'Take three spools of thread.',48212,1,1,25961), +(12374,3,0,'Take four spools of thread.',48213,1,1,25961), +(12376,0,0,'I brought you some hides, mud, and thread.',48243,1,1,25961), +(12376,2,0,'I brought you some hides, mud, and thread.',0,1,1,0), +(12381,0,0,'I\'m here to help you with your combat training, golem.',48291,1,1,25961), +(12382,0,0,'Salvage the Flux Exhaust Sieve.',48297,1,1,25961), +(12382,1,0,'Salvage the Obsidian Piston.',48298,1,1,25961), +(12383,0,0,'Salvage the Flux Exhaust Sieve.',48297,1,1,25961), +(12383,1,0,'Salvage the Thorium Gearshaft.',48299,1,1,25961), +(12384,0,0,'Salvage the Flux Exhaust Sieve.',48297,1,1,25961), +(12384,1,0,'Salvage the Stone Power Core. These are rare!',48300,1,1,25961), +(12385,0,0,'Salvage the Obsidian Piston.',48298,1,1,25961), +(12385,1,0,'Salvage the Thorium Gearshaft.',48299,1,1,25961), +(12397,0,0,'I\'d like to challenge your magma lord to a fight.',48372,1,1,25961), +(12522,0,3,'I am interested in warlock training.',0,1,1,0), +(12522,1,0,'I wish to unlearn my talents.',0,1,1,0), +(12669,1,0,'Can you take me to the Chapel?',0,1,1,0), +(12669,3,0,'Can you take me to the Laboratory?',0,1,1,0), +(12717,0,0,'I\'m ready to fly, let\'s bomb the Undercity!',0,1,1,0), +(12723,0,0,'Whatever, Duncan. Grab a mop and get to work.',50828,1,1,25928), +(12746,0,3,'Train me.',0,1,1,0), +(12746,1,0,'I wish to unlearn my talents.',0,1,1,0), +(12746,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(1541,1,0,'We wish to face the Defiler.',0,1,1,0), +(421,12,0,'Leatherworking',52071,1,1,27843), +(421,13,0,'Mining',78976,1,1,27843), +(421,14,0,'Riding',0,1,1,27843), +(3308,0,0,'What do you mean?',6649,1,1,0), +(3309,0,0,'Until what, Eva? I must know.',6647,1,1,0), +(3310,1,0,'Eva, I have lost the Spectral Essence. I need another.',6799,1,1,0), +(3864,2,0,'Are you interested in joining our caravan? We\'re headed to Light\'s Hope Chapel.',45662,1,1,25928), +(4085,0,1,'Yes, Augustus. I would like to do business.',0,1,1,25950), +(5967,1,0,'I\'m ready to take the flight into the Cauldron!',47631,1,1,25950), +(7147,0,2,'I\'d like to fly back to Silvermoon City.',0,4,8192,0), +(7290,0,5,'A fine offer, Floyd. I wish to make Hellfire Peninsula my home.',0,1,1,0), +(7290,1,1,'I\'m looking for some specialty goods. Let me browse your wares, Floyd.',0,1,1,0), +(7582,0,0,'Greetings, elder. It is time for your people to end their hostility toward the draenei and their allies.',14872,1,1,26124), +(7583,0,0,'I did not mean to deceive you, elder. The draenei of Telredor thought to approach you in a way that would be familiar to you.',14874,1,1,26124), +(7585,0,0,'I will tell them. Farewell, elder.',14879,1,1,26124), +(7812,0,6,'I would like to check my deposit box.',0,1,1,0), +(7849,0,0,'Strange wizard?',15992,1,1,0), +(7896,1,5,'Make this inn your home.',2822,1,1,27547), +(8391,1,0,'Take me back to my time.',19499,1,1,0), +(8460,0,3,'Tell me more about this thing you call \"cooking?\"',19755,1,1,26124), +(8628,0,3,'Train me.',3266,5,16,0), +(8629,0,1,'Let me see the wyverns, Dama.',0,1,1,0), +(8763,0,0,'Who is the Headless Horseman?',0,1,1,0), +(8991,0,0,'Official Explorers\' League business, McGoyver. Take me to the Explorers\' League Outpost!',23686,1,1,0), +(9190,1,0,'Search the body for the pilot\'s emergency toolkit.',0,1,1,0), +(9416,0,0,'I need some more of your fine grog, Mack.',25821,1,1,26822), +(9422,0,0,'I seem to have misplaced your Shredder Control Device... might you have another?',29188,1,1,0), +(9855,0,0,'I have a few more questions, Gymer.',30634,1,1,26365), +(9860,0,0,'I have a few more questions, Gymer.',30634,1,1,26365), +(9853,0,0,'Do you understand me? We should be able to understand each other now.',30621,1,1,0), +(9853,1,0,'What kind of help do you require?',32576,1,1,0), +(10976,1,20,'Queue for The Crown Chemical Co. battle.',0,1,1,0), +(13376,0,0,'You\'re of the bronze flight, you know what happens next! Can you just skip us ahead to all the real action?',0,1,1,0), +(6917,2,1,'I want to browse your goods.',3370,1,1,0), +(6917,3,0,'Farewell.',0,1,1,0), +(11386,0,20,'Queue for The Crown Chemical Co. battle.',40429,1,1,25961), +(6209,0,0,'I would speak against my brother joining the order, rushing a permanent breach in our relationship. He would be a danger to himself and those around him, and that is too great a risk hoping he would improve over time.',0,1,1,0), +(6209,1,0,'I would speak for my brother joining the order, potentially risking the safety of the order. I could help him with the order\'s regimens, and I\'d have faith in his ability to adapt and learn.',0,1,1,0), +(6209,2,0,'I would create some surreptitious means to keep my brother out of the order. I can keep him out without him being any bit wiser, thereby saving our familial bonds.',0,1,1,0), +(3624,0,0,'What about the Winterfall furbolg?',7139,1,1,25996), +(3626,0,3,'I\'d like to train.',7149,5,16,25996), +(751,12,0,'Mining',0,1,1,0), +(751,13,0,'Skinning',0,1,1,0), +(751,14,0,'Tailoring',0,1,1,0), +(7649,7,0,'Warlock',45407,1,1,0), +(7649,8,0,'Warrior',45408,1,1,0), +(10768,6,0,'Shaman',0,1,1,0), +(10768,7,0,'Warlock',0,1,1,0), +(10768,8,0,'Warrior',0,1,1,0), +(12537,0,3,'I would like to train.',0,5,16,0), +(7377,0,3,'Teach me the ways of the spirits.',7658,5,16,0), +(7505,0,0,'What did it say to you?',14513,1,1,0), +(7504,0,0,'Nobundo, please continue.',14511,1,1,0), +(7503,0,0,'Yes, please, if you do not mind.',14509,1,1,0), +(7502,0,0,'Yes, please continue.',14507,1,1,0), +(4103,0,3,'Teach me the ways of the spirits.',7658,5,16,0), +(740,6,0,'Shaman',0,1,1,0), +(740,7,0,'Warrior',0,1,1,0), +(4530,0,3,'Teach me the ways of the spirits.',7658,5,16,0), +(4528,0,3,'Teach me the ways of the spirits.',7658,5,16,0), +(8196,7,0,'Warrior',45408,1,1,0), +(13326,5,0,'Teleport to Azshara\'s Palace.',0,1,1,0), +(13326,7,0,'Teleport to The Well of Eternity.',0,1,1,0), +(13360,0,0,'I\'m ready to travel back in time - to the Well of Eternity.',0,1,1,0), +(6484,0,9,'I wish to join the battle!',0,1,1,0), +(7667,14,0,'Tailoring',52077,1,1,0), +(8659,0,1,'Show me what you have for sale.',0,1,1,0), +(9112,0,5,'Make this inn your home.',0,1,1,0), +(9112,1,1,'Let me browse your goods.',2823,3,128,0), +(7817,0,3,'I would like to train.',0,5,16,26124), +(7817,1,1,'Let me browse your goods.',2823,3,128,26124), +(5124,3,0,'How many more supplies are needed for the next upgrade?',0,1,1,0), +(11372,0,2,'Show me where I can fly.',12271,4,8192,25996), +(11372,1,0,'Dyslix, I need to get to Westreach Summit!',40362,1,1,0), +(11427,0,0,'Get me into my boat, Griznak.',0,1,1,0), +(11460,0,1,'I hear that you sell Ancona chickens?',41055,1,1,25996), +(12297,0,0,'Look! Behind you! A mirror!',47976,1,1,25996), +(12298,0,0,'Commander, behind you! Gnomeregan paratroopers!',47975,1,1,25996), +(12296,0,0,'Deethuk, you\'re a little snot! Wait... what\'s wrong with your code device?',47954,1,1,25996), +(10342,0,0,'I am ready, Gorka. To Kadrak!',0,1,1,0), +(1080,0,0,'I am ready to begin.',4084,1,1,0), +(12052,0,3,'Teach me the ways of the spirits.',0,1,1,0), +(12052,1,0,'I wish to unlearn my talents.',0,1,1,0), +(12052,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(5963,0,0,'Let\'s do this! Let\'s take out Maltorius and Arkkus!',47648,1,1,25950), +(12607,0,1,'Let me browse your goods.',2823,3,128,0), +(4104,0,3,'Teach me the ways of the spirits.',7658,5,16,0), +(11172,0,3,'Teach me the ways of the spirits.',0,1,1,0), +(11172,1,0,'I wish to unlearn my talents.',0,1,1,0), +(11223,0,1,'I would like to buy from you.',0,1,1,0), +(11256,0,3,'Train me.',0,1,1,0), +(11268,0,3,'Teach me the ways of the spirits.',0,1,1,0), +(11268,1,0,'I wish to unlearn my talents.',0,1,1,0), +(8884,0,5,'Make this inn your home.',0,1,1,0), +(8884,1,1,'Let me browse your goods.',2823,3,128,0), +(7357,0,3,'Teach me the ways of the spirits.',7658,5,16,0), +(12880,0,3,'I require training, Krenk.',0,1,1,0), +(7560,3,0,'Grant me your mark, mighty ancient.',14741,1,1,26124), +(7559,3,0,'Grant me your mark, wise ancient.',14739,1,1,26124), +(7729,0,0,'I have been sent by Sal\'salabim to collect a debt that you owe. Pay up or I\'m going to have to hurt you.',15560,1,1,26124), +(7725,0,0,'Altruis sent me. He said that you could help me.',15552,1,1,26124), +(11528,0,0,'I lost my turtle companion. Can I have another?',0,1,1,0), +(1663,0,0,'Amazing! I\'ve never spoken to a ghost. I wish to learn!',4648,1,1,0), +(1667,0,0,'Fascinating. Please, tell me more.',0,1,1,0), +(11434,0,0,'I am ready to begin the battle against Ragnaros.',0,1,1,0), +(4515,0,3,'Teach me the ways of the spirits.',7658,5,16,0), +(1801,0,0,'How can I get Evoroot?',4827,1,1,0), +(7815,1,0,'How do I use Prospecting?',0,1,1,0), +(11206,0,0,'Northrend requires your attention Overlord Hellscream. We will deal with the Lich King and his minions without your aid.',39416,1,1,0), +(11097,0,1,'I wish to browse your wares.',0,1,1,0), +(10875,0,0,'My companions are all accounted for, Muradin. Let\'s go!',36920,1,1,0), +(10953,0,0,'We are ready to go, High Overlord. The Lich King must fall!',37631,1,1,0), +(9157,1,20,'Queue for The Frost Lord Ahune battle.',0,1,1,0), +(11304,0,2,'Show me where I can fly.',12271,4,8192,0), +(10556,0,0,'Move on, lazy ass..!',0,1,1,29416), +(10560,0,0,'',0,1,1,0), +(10567,0,0,'Never, you two-timing dog!',0,1,1,0), +(10567,1,0,'',0,1,1,0), +(10514,0,0,'Yes, I\'m ready. Let\'s do this thing!',0,1,1,0), +(10528,0,0,'Bring it on, Rocco.',0,1,1,0), +(10519,0,0,'',0,1,1,0), +(10521,0,0,'Who sent you!?',0,1,1,0), +(10521,1,0,'',0,1,1,0), +(10521,2,0,'',0,1,1,0), +(10521,3,0,'',0,1,1,0), +(10521,4,0,'',0,1,1,0), +(12691,0,0,'Press the button labeled \'Wood and Lumber.\'',50716,1,1,25996), +(12691,1,0,'Press the button labeled \'Metal and Scraps.\'',50717,1,1,25937), +(6534,0,0,'Hello, Rutgar. The Commander has sent me here to gather some information about his missing wife.',0,1,1,26124), +(6551,0,0,'That sounds dangerous.',0,1,1,26124), +(6550,0,0,'What happened to her after that?',0,1,1,26124), +(6549,0,0,'Natalia?',0,1,1,26124), +(6548,0,0,'What demands?',0,1,1,26124), +(6547,0,0,'Lost it? What do you mean?',0,1,1,26124), +(6546,0,0,'Possessed by what?',0,1,1,26124), +(6545,0,0,'I\'ll be back once I straighten this mess out.',0,1,1,26124), +(6533,0,0,'Hello, Frankal. I\'ve heard that you might have some information as to the whereabouts of Mistress Natalia Mar\'alith.',0,1,1,26124), +(6558,0,0,'That\'s what I like to hear.',0,1,1,26124), +(6557,0,0,'That\'s odd.',0,1,1,26124), +(6556,0,0,'You couldn\'t handle a lone night elf priestess?',0,1,1,26124), +(6555,0,0,'I\'ve been meaning to ask you about that monkey.',0,1,1,26124), +(6554,0,0,'Then what?',0,1,1,26124), +(6553,0,0,'What a story! So she went into Hive\'Regal and that was the last you saw of her?',0,1,1,26124), +(6552,0,0,'Thanks for the information, Frankal.',0,1,1,26124), +(5687,0,0,'A battle?',9330,1,1,26124), +(5689,0,0,'I am listening, Demitrian.',9298,1,1,26124), +(5675,0,0,'What do you know of it?',9296,1,1,26124), +(10960,0,0,'I am ready, Karthog. For the Horde!',0,1,1,0), +(10958,0,0,'No Calder. What do you like?',0,1,1,0), +(11996,0,1,'I wish to browse your wares.',0,1,1,0), +(11832,0,0,'This is terrible, Durak! Hellscream is conviced there\'s a demon behind our work here! What can we do?!',0,1,1,0), +(10882,0,0,'I recovered your armor and weapons. Victory or death!',0,1,1,0), +(11093,0,0,'You sign charter! Is good!',0,1,1,0), +(8033,0,0,'Ezekiel said that you might have a certain book...',17365,1,1,0), +(12301,0,0,'I am ready to fight Torth!',0,1,1,0), +(7178,0,0,'What is it that you have for me, ambassador?',19205,1,1,0), +(10978,0,0,'Alright, I\'m ready.',37975,1,1,26124), +(10989,0,0,'Understandable.',37960,1,1,26124), +(10979,0,0,'I give you my oath.',37962,1,1,26124), +(10980,0,0,'Yes, sir.',0,1,1,26124), +(10980,1,0,'This is ridiculous! I don\'t have to put up with this!',37965,1,1,26124), +(10981,0,0,'Umm... yes, yes she is. Unquestionably.',37969,1,1,26124), +(10982,0,0,'Woo hoo!',0,1,1,26124), +(10994,0,0,'I don\'t see any dragons anywhere.',38340,1,1,26124), +(10994,2,0,'I think I\'ll adventure alone for a while.',38187,1,1,26124), +(2178,0,0,'Examine the pylon.',5152,1,1,26124), +(2179,0,0,'Examine the pylon.',5152,1,1,26124), +(12353,0,0,'I\'m here to put an end to your killing.',48133,1,1,25996), +(12398,0,0,'You\'re accused of being a demon in disguise, Navarax... if that\'s even your real name!',48371,1,1,25996), +(9868,1,1,'Let me browse your goods.',8097,3,128,27377), +(12428,1,0,'I\'ve got a ride to Irontree Clearing waiting for me on behalf of Fez Hobnob.',48673,1,1,0), +(9868,0,5,'Make this inn your home.',2822,1,1,27377), +(13063,0,0,'Yes Thrall, lets do this!',0,1,1,0), +(12799,0,0,'How are we doing in the battle?',52357,1,1,26972), +(11538,0,5,'Make this inn your home.',2822,1,1,27291), +(11538,1,1,'I want to browse your goods.',3370,1,1,27291), +(11481,0,0,'The way to the rendevous point is mostly clear. You should get moving.',41223,1,1,27291), +(11516,0,0,'I am to hunt the Crucible of Nazsharin. Do you have warriors to assist me?',41460,1,1,27291), +(11517,0,0,'I am to hunt the Crucible of Nazsharin. Do you have warriors to assist me?',41460,1,1,27291), +(11515,0,0,'I am to hunt the Crucible of Nazsharin. Do you have warriors to assist me?',41460,1,1,27291), +(11571,0,0,'Lady Sira\'kess has sent for you. You are needed for the ritual.',41788,1,1,27291), +(11572,0,0,'Yes, Fathom-Caller. The Mistress awaits.',41798,1,1,27291), +(11586,0,0,'Let\'s get started!',42002,1,1,27291), +(11593,0,0,'Terrapin Oil Sample',41998,1,1,27291), +(11593,1,0,'Remora Oil Sample',41999,1,1,27291), +(11593,2,0,'Hammerhead Oil Sample',42000,1,1,27291), +(11588,0,0,'Terrapin Oil Sample',41998,1,1,27291), +(11588,1,0,'Remora Oil Sample',41999,1,1,27291), +(11588,2,0,'Hammerhead Oil Sample',42000,1,1,27291), +(11588,3,0,'I want to start over.',42004,1,1,27291), +(11589,0,0,'Terrapin Oil Sample',41998,1,1,27291), +(11589,1,0,'Remora Oil Sample',41999,1,1,27291), +(11589,2,0,'Hammerhead Oil Sample',42000,1,1,27291), +(11589,3,0,'I want to start over.',42004,1,1,27291), +(11590,0,0,'Terrapin Oil Sample',41998,1,1,27291), +(11590,1,0,'Remora Oil Sample',41999,1,1,27291), +(11590,2,0,'Hammerhead Oil Sample',42000,1,1,27291), +(11590,3,0,'I want to start over.',42004,1,1,27291), +(11591,0,0,'Terrapin Oil Sample',41998,1,1,27291), +(11591,1,0,'Remora Oil Sample',41999,1,1,27291), +(11591,2,0,'Hammerhead Oil Sample',42000,1,1,27291), +(11591,3,0,'I want to start over.',42004,1,1,27291), +(11592,1,0,'Mix the samples together!',0,1,1,0), +(11592,2,0,'I want to start over.',42004,1,1,27291), +(11626,0,0,'I am prepared, Erunak. Let\'s go!',0,1,1,0), +(12038,0,0,'Yes. Please take me to Vashj\'ir.',45687,1,1,27291), +(13373,0,0,'We were successful, Kalecgos.',0,1,1,0), +(13295,0,0,'Inconceivable! He couldn\'t possibly be alive!',0,1,1,0), +(13411,0,0,'I humbly request that the Dragon Aspects provide no aid to myself and my fellow adventurers. They should worry about their own problems, and we will worry about ours.',0,1,1,0), +(13357,0,0,'We will become legend.',0,1,1,0), +(13111,0,1,'I would like to buy from you.',0,1,1,27547), +(12439,1,1,'I would like to buy from you.',0,1,1,0), +(11719,0,2,'Show me where I can fly.',12271,1,1,0), +(11719,1,0,'Take me to the battle at the Ruins of Feathermoon.',0,1,1,0), +(6527,0,1,'Let me browse your goods.',2823,3,128,26124), +(7352,0,0,'Tell me of the Sons of Lothar.',17467,1,1,26124), +(10517,1,0,'Where is the Sapphire of Sky?',34643,1,1,0), +(12755,0,3,'I seek training as a druid.',0,1,1,0), +(12755,1,0,'I wish to unlearn my talents.',0,1,1,0), +(12017,0,1,'Can you repair equipment?',45533,1,1,27326), +(12017,1,0,'Do you have any supplies?',45532,1,1,27326), +(4169,0,3,'Train me.',3266,5,16,25881), +(11611,0,0,'I wish to ride the Stormwind charger, sir.',42173,0,0,25881), +(10781,0,0,'Do you know anything about azsharite?',0,1,1,0), +(10782,0,0,'Those piles of blue-ish crystals we find on the ground.',0,1,1,0), +(10783,0,0,'So the giants have been dropping the azsharite? But where does it come from?',0,1,1,0), +(10784,0,0,'It\'s ... your droppings!? And the goblins have been running around scooping it up?',0,1,1,0), +(10785,0,0,'How often do you, uh, \"go?\"',0,1,1,0), +(10786,0,0,'15 to 25 years? Assistant Greely isn\'t going to want to hear that!',0,1,1,0), +(10780,2,0,'Here, eat this! It\'s a special chocolate rock.',0,1,1,0), +(7143,0,0,'Help you with what situation?',18420,1,1,0), +(6629,0,0,'Let\'s find out.',0,1,1,0), +(10797,0,0,'I\'m ready. Shrink me!',0,1,1,0), +(10780,3,0,'SQUEAK!!',0,1,1,0), +(1141,0,0,'Tell me more about muisek.',0,1,1,0), +(6525,1,5,'Make this inn your home.',2822,1,1,26124), +(10437,0,3,'I seek training in Fishing.',34245,1,1,26124), +(10437,1,1,'I would like to buy from you.',0,1,1,26124), +(7869,0,5,'Make this inn your home.',0,1,1,0), +(7869,1,1,'I want to browse your goods.',3370,1,1,0), +(12449,0,1,'I wish to buy from you, Derak.',0,1,1,0), +(4129,0,3,'Train me.',0,1,1,0), +(12273,0,0,'Maybe you should go take a nap or something. I don\'t know if I have any work for you.',0,1,1,0), +(12272,0,0,'Wait a minute. It looks like something just came up. Yes, right here on this sheet of paper. You need to head southeast to the Azurelode Mine and report to Captain Keyton. Southeast is that way *you point southeast*.',0,1,1,0), +(12276,0,0,'Um... Apparently there is some trouble at Southshore. Something about worgen insurgents. Maybe you could help with them?',0,1,1,0), +(12275,0,0,'None.',0,1,1,0), +(12274,0,0,'Right, thanks. Just go ahead and head southeast. More south than east. Probably off the coast.',0,1,1,0), +(12279,0,0,'Well, we are having some problems at the Sludge Fields, located northeast of here. Warden Stillwater could use your help.',0,1,1,0), +(12278,0,0,'That\'s all.',0,1,1,0), +(12277,0,0,'THAT\'S ALL, JOHNNY AWESOME. TAKE IT OR LEAVE IT!',0,1,1,0), +(12453,0,2,'Show me where I can fly.',12271,4,8192,0), +(10082,2,0,'Class Trainer',32154,1,1,0), +(21910,2,0,'What do you know about becoming Lightforged?',0,1,1,0), +(13048,0,2,'I\'d like to travel by air.',53141,4,8192,0), +(12977,0,0,'I think I understand. Thank you.',0,1,1,0), +(12646,2,0,'Bring elevator to third floor.',0,1,1,0), +(4001,0,1,'I would like to buy from you.',14967,3,128,0), +(11932,0,3,'I am interested in warlock training.',0,1,1,0), +(11932,1,0,'I wish to unlearn my talents.',0,1,1,0), +(1290,1,5,'Make this inn your home.',0,1,1,0), +(10854,0,0,'Arcanist Tybalin said you might be able to lend me a certain tabard.',36760,1,1,0), +(10908,0,0,'Examine the remains.',0,1,1,0), +(10963,0,0,'I\'m ready to enter the Sunwell.',0,1,1,0), +(10941,0,0,'I\'m ready, Naralex.',37520,1,1,25996), +(10935,0,0,'I\'m here on behalf of Warlord Bloodhilt, who wants you to know he will be arriving shortly.',0,1,1,0), +(10937,0,0,'I\'ll be sure to tell the Taurajo refugees that. Those that lived.',0,1,1,0), +(10938,0,0,'Tell him yourself. He\'s almost here!',0,1,1,0), +(8954,0,0,'Sir, I need another flying machine...',24951,1,1,26755), +(11135,0,0,'Lilian, you\'re one of the Forsaken, like me. Which brings the question: why did the Scarlet Crusade put you in a cage? They usually kill the undead on sight.',38988,1,1,0), +(1802,1,1,'Buy somethin\', will ya?',4720,3,128,0), +(12927,0,3,'I seek further druidic training to have a closer understanding of the Earth Mother\'s will.',0,1,1,0), +(12927,1,0,'I wish to unlearn my talents.',0,1,1,0), +(13045,0,2,'I\'d like to travel by air.',53141,4,8192,26365), +(12677,0,0,'I don\'t remember much about how I got to Duskhaven. Tell me what you know.',0,1,1,0), +(12714,0,3,'I would like to train.',0,5,16,0), +(12714,1,0,'I wish to unlearn my talents.',0,1,1,0), +(12537,1,0,'I wish to unlearn my talents.',0,1,1,0), +(24,1,1,'Let me browse your goods.',2823,3,128,0), +(721,11,0,'The zeppelin master',0,1,1,0), +(10801,0,0,'',0,1,1,0), +(10861,1,2,'Show me where I can fly.',12271,1,1,0), +(10043,14,0,'Vendors',32724,1,1,0), +(10027,1,0,'I wish to unlearn my talents.',0,1,1,0), +(10027,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(11875,0,3,'I require warrior training.',0,1,1,0), +(11875,1,0,'I wish to unlearn my talents.',0,1,1,0), +(11912,0,3,'I require warrior training.',0,1,1,0), +(11912,1,0,'I wish to unlearn my talents.',0,1,1,0), +(12344,0,3,'I require warrior training.',0,1,1,0), +(12344,1,0,'I wish to unlearn my talents.',0,1,1,0), +(12151,0,3,'I require warrior training.',0,1,1,0), +(12151,1,0,'I wish to unlearn my talents.',0,1,1,0), +(12412,0,0,'Step through the portal and return to Wildheart Point.',48490,1,1,0), +(10684,0,3,'Teach me the ways of the spirits.',0,5,32,0), +(10552,0,3,'Teach me the ways of the spirits.',0,1,1,0), +(10817,0,3,'Teach me the ways of the spirits.',0,1,1,0), +(12579,0,3,'Teach me the ways of the spirits.',0,1,1,0), +(11048,0,5,'Make this inn your home.',2822,1,1,27602), +(11048,1,0,'What can I do at an inn?',4308,1,1,27602), +(12580,0,3,'Teach me the ways of the spirits.',0,1,1,0), +(12580,1,0,'I wish to unlearn my talents.',0,1,1,0), +(11569,0,5,'Make this inn your home.',0,1,1,0), +(11569,1,0,'What can I do at an inn?',0,1,1,0), +(11201,0,6,'Gobber, I need to look in my pack.',0,1,1,0), +(11253,0,1,'I would like to buy from you.',0,1,1,0), +(11257,0,3,'Train me.',0,1,1,0), +(11217,0,3,'Teach me the ways of the spirits.',0,1,1,0), +(11217,1,0,'I wish to unlearn my talents.',0,1,1,0), +(11275,0,1,'I would like to buy from you.',0,1,1,0), +(10392,0,1,'Let me browse your goods.',2823,3,128,25881), +(10392,1,8,'I want to create a guild crest.',0,1,1,25881), +(7560,2,0,'Grant me your mark, mighty ancient.',0,1,1,0), +(7559,2,0,'Grant me your mark, wise ancient.',0,1,1,0), +(10977,0,3,'I require warrior training.',0,1,1,0), +(10972,0,0,'I\'m ready to face my challenge.',0,1,1,0), +(10700,0,3,'I seek further training.',36067,5,16,0), +(10838,0,3,'I seek further training.',0,1,1,0), +(10410,0,0,'Breathe in the smoke to entice visions of the great animal spirits.',34044,1,1,25996), +(10683,0,3,'I am interested in mage training.',0,1,1,0), +(12529,0,3,'Teach me the ways of the spirits.',0,1,1,0), +(4360,1,0,'Mountaineer Barleybrew said you could help me get to Loch Modan.',0,1,1,0), +(10984,0,3,'I seek training as a druid.',0,1,1,0), +(10984,1,0,'Zen\'tabra, are you one of the druids from the rumors? Were there druids on the Echo Isles long ago?',0,1,1,0), +(10277,0,0,'Coax the spirit out of Sentinel Elissa Starbreeze\'s corpse.',33207,1,1,25996), +(10272,0,0,'Coax Thundris Windweaver\'s spirit.',33186,1,1,25996), +(10279,0,0,'Coax the spirit out of Caylais Moonfeather\'s still corpse.',33211,1,1,25996), +(10509,0,0,'Orseus, Kathrena sent me to borrow one of your Hippogryphs.',34585,1,1,25996), +(12048,0,3,'I seek training in the ways of the Hunter.',0,1,1,0), +(12048,1,0,'I wish to unlearn my talents.',0,1,1,0), +(12106,0,12,'I\'d like to stable my pet here.',0,1,1,0), +(11913,0,3,'I seek training in the ways of the Hunter.',0,1,1,0), +(11913,1,0,'I wish to unlearn my talents.',0,1,1,0), +(12012,0,1,'Do you have any supplies?',0,1,1,0), +(12012,1,0,'Can you repair equipment?',0,1,1,0), +(11879,0,3,'I seek training in the ways of the Hunter.',0,1,1,0), +(11879,1,0,'I wish to unlearn my talents.',0,1,1,0), +(9429,0,0,'I\'ll show you! Give me that practice parachute!',25923,1,1,26365), +(12952,0,1,'Show me what\'s on the menu.',52824,1,1,25881), +(10649,0,0,'Yes I do!',35835,1,1,25881), +(12842,0,3,'Train me.',3266,1,1,25996), +(12842,1,1,'Let me browse your goods.',2823,3,128,25996), +(12846,0,3,'Train me.',3266,1,1,25996), +(12846,1,1,'Let me browse your goods.',2823,1,1,25996), +(10638,1,17,'I wish to start gaining experience again.',0,1,1,25996), +(10486,0,0,'Who are the Old Ones?',34514,1,1,25996), +(10278,0,0,'Coax Taldan\'s corpse to give up its spirit.',33209,1,1,25996), +(12035,2,0,'Ride Fiona\'s Caravan to its next destination.',45675,1,1,25937), +(1965,0,1,'I would like to buy from you.',0,1,1,25996), +(11347,0,0,'Take me to Sardor Island.',40212,1,1,25996), +(11349,1,0,'I must return to Feathermoon Stronghold!',43319,1,1,25996), +(11373,0,2,'Show me where I can fly.',12271,1,1,25996), +(11373,1,0,'Seyala, I need to get to New Thalanaar!',0,1,1,0), +(11361,0,1,'Got anything interesting for sale, Zorbin?',9817,1,1,25996), +(8062,0,0,'Attempt to contact Wind Trader Marid.',17638,1,1,26365), +(8725,0,0,'I am an envoy of Balthas. He has sent me to collect a flawless arcane essence.',21627,1,1,0), +(6924,0,1,'I want to browse your goods.',3370,1,1,0), +(6924,1,0,'Farewell.',0,1,1,0), +(10837,0,3,'I seek further training.',0,1,1,0), +(12821,0,3,'I am interested in warlock training.',0,1,1,0), +(12821,1,0,'I wish to unlearn my talents.',0,1,1,0), +(12716,0,3,'I seek further training.',0,1,1,0), +(12716,1,0,'I wish to unlearn my talents.',0,1,1,0), +(4821,0,3,'Please teach me.',8442,5,16,0), +(7669,0,0,'I need answers, ogre!',15283,1,1,26124), +(7673,0,0,'Why are Boulderfist out this far? You know that this is Kurenai territory.',15285,1,1,26124), +(7672,0,0,'And you think you can just eat anything you want? You\'re obviously trying to eat the Broken of Telaar.',15287,1,1,26124), +(7671,0,0,'This means war, Lump! War I say!',15289,1,1,26124), +(12670,0,0,'Abandon Imp',50696,1,1,0), +(12670,1,0,'Abandon Voidwalker',50697,1,1,0), +(12670,2,0,'Abandon Succubus',50698,1,1,0), +(12670,3,0,'Abandon Felhunter',50699,1,1,0), +(4823,0,3,'Please teach me.',8442,5,16,25961), +(5268,5,0,'Staff',20588,1,1,0), +(5268,4,0,'Mace',20586,1,1,0), +(4553,0,3,'I am interested in mage training.',0,1,1,0), +(4553,1,0,'I wish to unlearn my talents.',0,1,1,0), +(4555,0,3,'I am interested in mage training.',0,1,1,0), +(4555,1,0,'I wish to unlearn my talents.',0,1,1,0), +(4134,0,3,'Train me.',0,1,1,0), +(12343,0,0,'I am ready, Uchek!',0,1,1,0), +(12299,0,0,'I\'m ready to press up the canyon. Is the Gob Squad prepped?',0,1,1,0), +(12253,0,0,'Dismissed!',36925,1,1,27326), +(12253,1,0,'',36926,1,1,27326), +(8540,0,3,'I would like to train.',0,5,16,26124), +(5268,6,0,'Thrown',20590,1,1,0), +(12231,0,0,'I\'m ready. Let\'s go!',0,1,1,0), +(7809,1,1,'Let me browse your goods.',8097,3,128,27291), +(11557,0,0,'How did you get down here?',0,1,1,0), +(11558,0,0,'Tell us about your captors, Gurrok.',0,1,1,0), +(11560,0,0,'How were you able to get away?',0,1,1,0), +(11559,0,0,'Did you see Nazgrim and his troops?',0,1,1,0), +(11562,0,0,'What is there to report of these beasts, Gurrok? How do we defeat them?',0,1,1,0), +(12669,2,0,'Can you take me to the Ramparts?',0,1,1,0), +(12826,0,0,'Malfurion, a coward? How can you justify that?',51763,1,1,26972), +(12827,0,0,'Malfurion is not here. Only me.',51765,1,1,26972), +(12828,0,0,'Tauren archdruid? Do you mean Hamuul?',51768,1,1,26972), +(11351,0,0,'You\'re with the Earthen Ring, I just figured you\'d have a water breathing spell like the rest of them.',40243,1,1,27291), +(10808,0,0,'Up, Up & Away!',36458,1,1,27481), +(4105,0,3,'Teach me the ways of the spirits.',0,1,1,0), +(4105,1,0,'I wish to unlearn my talents.',0,1,1,0), +(5123,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(5123,0,3,'',0,5,16,0), +(4529,0,3,'Teach me the ways of the spirits.',7658,5,16,0), +(12266,0,0,'End the orc\'s misery.',47614,1,1,27326), +(12266,1,0,'Help the injured orc up.',47620,1,1,27326), +(12165,0,0,'Let the gryphon smell the piece of charred highland birch.',47016,1,1,27326), +(12247,0,0,'Not backing out, are you?',47556,1,1,27326), +(11766,0,3,'I would like to train.',0,5,16,0), +(11793,0,3,'I require warrior training.',0,1,1,0), +(11793,1,0,'I wish to unlearn my talents.',0,1,1,0), +(11793,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(12606,0,3,'I am interested in mage training.',0,1,1,0), +(12606,1,0,'I wish to unlearn my talents.',0,1,1,0), +(12606,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4164,0,3,'Train me.',3266,1,1,25996), +(5602,0,0,'Thank you, Ironbark. We are ready for you to open the door.',9103,1,1,25996), +(11428,0,0,'Get me into my boat, Mazzer.',40647,1,1,25996), +(8433,0,3,'Please teach me.',8442,5,16,26124), +(8403,8,0,'Inscription',0,1,1,0), +(8403,9,0,'Jewelcrafting',0,1,1,0), +(8403,10,0,'Leatherworking',0,1,1,0), +(8403,11,0,'Mining',0,1,1,0), +(8403,12,0,'Skinning',0,1,1,0), +(8403,13,0,'Tailoring',0,1,1,0), +(12918,0,3,'I am interested in mage training.',0,1,1,0), +(8268,0,3,'Please teach me.',8442,5,16,26365), +(5268,1,0,'Bow',20581,1,1,0), +(6208,0,0,'I confront the ruler on his malicious behavior, upholding my liege\'s honor at the risk of any future diplomacy.',0,1,1,0), +(6208,1,0,'I not-so-quietly ignore the insult, hoping to instill a fear in the ruler that he may have gaffed. I then inform my liege of the insult when I return.',0,1,1,0), +(6208,2,0,'I quietly ignore the insult. I will not tell my liege, as I am to secure peace at all costs. It\'s only an insult - not a declaration of war.',0,1,1,0), +(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,25996), +(5708,1,0,'Henchmen? Tribute?',9440,1,1,25996), +(5708,0,0,'I\'m the new king? What are you talking about?',9365,1,1,25996), +(5739,0,0,'Um, I\'m taking some prisoners we found outside before the king for punishment.',9421,1,1,0), +(5744,0,0,'This sounds like a task worthy of the new king!',0,1,1,0), +(4746,0,1,'I wish to browse your goods, Dirge.',8345,3,128,26124), +(4822,0,3,'Please teach me.',8442,5,16,27377), +(4844,0,3,'Train me.',3266,5,16,0), +(6187,1,0,'I execute him as per my liege\'s instructions, but doing so in as painless of a way as possible. Justice must be served, but I can show some compassion.\n',0,1,1,0), +(6187,2,0,'I risk my own life and free him so that he may prove his innocence. If I can, I\'ll help him in any way.',0,1,1,0), +(2101,0,0,'Where is the zeppelin now?',0,1,1,0), +(12050,0,3,'I require rogue training.',0,1,1,0), +(12341,0,3,'I seek training in the ways of the Hunter.',0,1,1,0), +(10986,0,3,'I require priest training.',0,1,1,0), +(12193,10,3,'Train me in Tailoring.',47118,5,1,26124), +(10659,0,0,'',0,1,1,0), +(10658,0,0,'Yes Archmage. I will hide the stone.',0,1,1,0), +(4354,0,3,'Train me.',3266,5,16,0), +(4554,0,3,'I am interested in mage training.',2522,5,16,0), +(4554,1,0,'I wish to unlearn my talents.',8271,16,16,0), +(4152,0,3,'Train me.',3266,5,16,26124), +(4166,0,3,'Train me.',3266,5,16,0), +(4210,0,3,'Train me.',3266,5,16,0), +(4306,0,2,'Sure! Let\'s go for a ride.',8105,4,8192,25996), +(3626,1,1,'Let me browse your goods.',2823,3,128,25996), +(4149,0,3,'Train me.',3266,5,16,0), +(3781,0,0,'Tell me about Alterac Valley.',0,1,1,0), +(3781,1,0,'Tell me about graveyards.',0,1,1,0), +(3781,2,0,'Tell me about mines.',0,1,1,0), +(3781,3,0,'Tell me about towers.',0,1,1,0), +(5692,0,0,'Tell me of Captain Galvangar.',0,1,1,0), +(5692,1,0,'Tell me of Drek\'Thar.',0,1,1,0), +(5692,2,0,'Tell me of Frostwolf Keep.',0,1,1,0), +(5692,3,0,'Tell me of Captain Balinda Stonehearth.',0,1,1,0), +(5692,4,0,'Tell me of Vanndar Stormpike.',0,1,1,0), +(5692,5,0,'Tell me of Dun Baldar.',0,1,1,0), +(5697,0,0,'Tell me again about Alterac Valley...',0,1,1,0), +(5697,1,0,'Tell me about something else...',0,1,1,0), +(5699,0,0,'Tell me again about Alterac Valley...',0,1,1,0), +(5699,1,0,'Tell me about something else...',0,1,1,0), +(5706,0,0,'Tell me again about Alterac Valley...',0,1,1,0), +(5706,1,0,'Tell me about something else...',0,1,1,0), +(5693,0,0,'Tell me again about Alterac Valley...',0,1,1,0), +(5693,1,0,'Tell me about something else...',0,1,1,0), +(5695,0,0,'Tell me again about Alterac Valley...',0,1,1,0), +(5695,1,0,'Tell me about something else...',0,1,1,0), +(5705,0,0,'Tell me again about Alterac Valley...',0,1,1,0), +(5705,1,0,'Tell me about something else...',0,1,1,0), +(5669,0,0,'Who controls the Stormpike Aid Station?',0,1,1,0), +(5669,1,0,'Who controls the Stormpike Graveyard?',0,1,1,0), +(5669,2,0,'Who controls the Stonehearth Graveyard?',0,1,1,0), +(5669,3,0,'Who controls the Snowfall Graveyard?',0,1,1,0), +(5669,4,0,'Who controls the Iceblood Graveyard?',0,1,1,0), +(5669,5,0,'Who controls the Frostwolf Graveyard?',0,1,1,0), +(5669,6,0,'Who controls the Frostwolf Relief Hut?',0,1,1,0), +(5668,0,0,'Tell me again about graveyards...',0,1,1,0), +(5668,2,0,'Tell me about something else...',0,1,1,0), +(5223,0,0,'Tell me again about graveyards...',0,1,1,0), +(5223,2,0,'Tell me about something else...',0,1,1,0), +(5621,0,0,'Tell me again about graveyards...',0,1,1,0), +(5621,2,0,'Tell me about something else...',0,1,1,0), +(5225,0,0,'Tell me again about graveyards...',0,1,1,0), +(5225,2,0,'Tell me about something else...',0,1,1,0), +(5671,0,0,'Tell me again about graveyards...',0,1,1,0), +(5671,2,0,'Tell me about something else...',0,1,1,0), +(5227,0,0,'Tell me again about graveyards...',0,1,1,0), +(5227,2,0,'Tell me about something else...',0,1,1,0), +(5670,0,0,'Tell me again about graveyards...',0,1,1,0), +(5670,2,0,'Tell me about something else...',0,1,1,0), +(5673,0,0,'Who controls the Irondeep Mine?',0,1,1,0), +(5673,1,0,'Who controls the Coldtooth Mine?',0,1,1,0), +(5003,0,0,'Tell me again about the mines...',0,1,1,0), +(5003,2,0,'Tell me about something else...',0,1,1,0), +(5002,0,0,'Tell me again about the mines...',0,1,1,0), +(5002,2,0,'Tell me about something else...',0,1,1,0), +(5674,0,0,'Who controls the Dun Baldar South Bunker?',0,1,1,0), +(5674,1,0,'Who controls the Dun Baldar North Bunker?',0,1,1,0), +(5674,2,0,'Who controls the Icewing Bunker?',0,1,1,0), +(5674,3,0,'Who controls the Stonehearth Bunker?',0,1,1,0), +(5674,4,0,'Who controls the West Frostwolf Tower?',0,1,1,0), +(5674,5,0,'Who controls East Frostwolf Tower?',0,1,1,0), +(5674,6,0,'Who controls Tower Point?',0,1,1,0), +(5674,7,0,'Who controls the Iceblood Tower?',0,1,1,0), +(5674,8,0,'Who controls the West Frostwolf Tower?',0,1,1,0), +(5676,0,0,'Tell me again about towers...',0,1,1,0), +(5676,2,0,'Tell me about something else...',0,1,1,0), +(5677,0,0,'Tell me again about towers...',0,1,1,0), +(5677,2,0,'Tell me about something else...',0,1,1,0), +(5678,0,0,'Tell me again about towers...',0,1,1,0), +(5678,2,0,'Tell me about something else...',0,1,1,0), +(5679,0,0,'Tell me again about towers...',0,1,1,0), +(5679,2,0,'Tell me about something else...',0,1,1,0), +(5680,0,0,'Tell me again about towers...',0,1,1,0), +(5680,2,0,'Tell me about something else...',0,1,1,0), +(5681,0,0,'Tell me again about towers...',0,1,1,0), +(5681,2,0,'Tell me about something else...',0,1,1,0), +(5682,0,0,'Tell me again about towers...',0,1,1,0), +(5682,2,0,'Tell me about something else...',0,1,1,0), +(5683,0,0,'Tell me again about towers...',0,1,1,0), +(5683,2,0,'Tell me about something else...',0,1,1,0), +(5684,0,0,'Tell me again about towers...',0,1,1,0), +(5684,2,0,'Tell me about something else...',0,1,1,0), +(5146,0,0,'I got your back, Ichman. GO GO GO!',0,1,1,0), +(11822,0,5,'Make this inn your home.',2822,1,1,25961), +(11822,1,1,'Let me browse your goods.',2823,3,128,25961), +(7820,1,1,'Let me browse your goods.',2823,3,128,26124), +(7448,0,1,'Show me what I\'ve earned the right to purchase.',14258,1,1,26124), +(7892,0,1,'I have marks to redeem!',16146,3,128,26124), +(2001,0,11,'Help me choose wisely.',0,1,1,0), +(12010,0,3,'I seek more training in the priestly ways.',0,1,1,0), +(12010,1,0,'I wish to unlearn my talents.',0,1,1,0), +(5667,1,0,'Why should I bother fixing the trap? Why not just eliminate the guard the old fashioned way?',9368,1,1,25996), +(9427,0,5,'Make this inn your home.',2822,1,1,26365), +(9427,1,1,'Let me browse your goods.',2823,3,128,26365), +(1970,0,0,'You\'re good for nothing, Ribbly. It\'s time to pay for your wickedness!.',4972,1,1,0), +(9190,0,0,'Search for the pilot\'s insignia.',25042,1,1,26365), +(9683,1,0,'Kara, I need to be flown out the Dens of Dying to find Bixie.',27820,1,1,0), +(11767,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(11238,0,0,'These ogres are on our side?',0,1,1,0), +(1964,0,0,'I would like to buy from you.',0,1,1,0), +(10994,1,0,'Where would one go about finding damsels?',38339,1,1,26124), +(11036,0,0,'I\'d like to return to Marshal\'s Stand, please.',38393,1,1,26124), +(11036,1,0,'Who are you?',0,1,1,26124), +(11060,0,0,'What are you doing here?',0,1,1,26124), +(11059,0,0,'Tests? What kind of tests?',38472,1,1,26124), +(11058,0,0,'His creations? So you\'re saying that all the creatures here in the crater are Khaz\'goroth\'s creations?',38473,1,1,26124), +(11057,0,0,'Why are you telling me all of this?',38474,1,1,26124), +(11056,0,0,'Nablya, I must ask... did Khaz\'goroth create me and the rest of my race?',38475,1,1,26124), +(11055,0,0,'Thank you Nablya.',38476,1,1,26124), +(11043,0,0,'What can you teach me, Stomper?',38409,1,1,26124), +(11042,0,0,'I understand. Thank you.',38415,1,1,26124), +(11041,0,0,'What can you teach me, Gorilla?',38410,1,1,26124), +(11040,0,0,'I understand. Thank you.',38415,1,1,26124), +(11054,0,0,'What can you teach me, Gorilla?',0,1,1,0), +(11039,0,0,'What can you teach me, Thunderer?',38408,1,1,26124), +(11038,0,0,'I understand. Thank you.',38415,1,1,26124), +(11037,1,0,'I\'d like to return to The Shaper\'s Terrace.',38397,1,1,26124), +(9842,0,0,'I\'m sorry that I didn\'t get here sooner. What happened?',30429,1,1,26822), +(9841,0,0,'Are you okay? I\'ve come to take you back to Frosthold if you can stand.',30420,1,1,26822), +(8760,1,1,'Let me browse your goods.',2823,3,128,0), +(11437,0,5,'Make this inn your home.',0,1,1,0), +(11437,1,1,'I would like to buy from you.',0,1,1,0), +(11874,0,0,'Come with me, your highness.',0,1,1,0), +(11874,1,0,'Come with me, your highness.',0,1,1,0), +(11909,0,0,'It\'s over, Samuelson. We know who you are and I put a stop to your little cathedral scheme.',0,1,1,0), +(12042,0,0,'Here are some spare parts. I\'ll cover you while you make repairs!',45717,1,1,27326), +(12055,0,0,'I\'m ready. Let\'s go!',132063,1,1,27326), +(12113,0,0,'Yeah...',46420,1,1,27326), +(12114,0,0,'You seem very certain.',46422,1,1,27326), +(12115,0,0,'And I take it you\'re going again...',46424,1,1,27326), +(12116,0,0,'Well, let\'s get to it then.',46426,1,1,27326), +(12139,0,0,'Eoin, there\'s a full well right there.',46648,1,1,27326), +(12143,0,0,'I\'m in.',46718,1,1,27326), +(12130,0,0,'Let\'s go!',124289,1,1,27326), +(12409,0,0,'I\'m ready to fight him!',48459,1,1,27326), +(12451,0,0,'I\'m ready, Russell. Let\'s write a song!',48889,1,1,27326), +(12455,0,0,'[Romantic:] \"Wise.\"',48877,1,1,27326), +(12455,1,0,'[Silly:] \"Pint-Sized.\"',48879,1,1,27326), +(12455,2,0,'[Bawdy:] \"Thighs!\"',48880,1,1,27326), +(12456,0,0,'[Romantic:] \"Blessed.\"',48881,1,1,27326), +(12456,1,0,'[Silly:] \"Arrest.\"',48882,1,1,27326), +(12456,2,0,'[Bawdy:] \"...Chest?',48883,1,1,27326), +(12457,0,0,'[Romantic:] \"Alight.\"',48884,1,1,27326), +(12457,1,0,'[Silly:] \"Knifefight.\"',48885,1,1,27326), +(12457,2,0,'[Bawdy:] \"Tight!\"',48886,1,1,27326), +(12459,0,0,'I\'m here to escort a delivery to Kirthaven.',49050,1,1,27326), +(12920,0,3,'I require priest training.',0,1,1,0), +(12920,1,0,'I wish to unlearn my talents.',0,1,1,0), +(942,1,0,'Please tell me more about the Gordunni ogres.',3923,1,1,0), +(9983,0,9,'I would like to go to the battleground.',0,1,1,0), +(1142,0,0,'Tell me more, Trenton.',4183,1,1,26124), +(10335,0,0,'Lend us your aid, keeper. Together we will defeat Yogg-Saron.',33418,1,1,0), +(10324,0,0,'Lend us your aid, keeper. Together we will defeat Yogg-Saron.',33418,1,1,0), +(10333,0,0,'Yes.',69412,1,1,0), +(10332,0,0,'Yes.',0,1,1,0), +(10334,0,0,'Yes.',0,1,1,0), +(9084,0,3,'Flying machines?',0,1,1,0), +(9084,1,0,'Do you often squeeze gnomes?',0,1,1,0), +(9085,0,3,'That\'s... great. What about these flying machines?',0,1,1,0), +(9085,1,0,'Thanks! I\'ll try it right now.',0,1,1,0), +(8386,0,1,'Let me see your wares.',0,1,1,0), +(8371,0,0,'Search the corpse for Kagrosh\'s pack.',0,1,1,0), +(13047,0,2,'I\'d like to travel by air.',0,4,8192,0), +(9619,1,1,'Show me what you have to trade.',27299,3,128,0), +(9619,0,0,'How does this work?',27298,1,1,0), +(4004,0,1,'I would like to buy from you.',14967,3,128,25996), +(9508,2,0,'Did you see where they took Sanitation Engineer Burke?',26527,1,1,0), +(9508,3,0,'Any idea where they\'re keeping Deathguard Schneider?',26532,1,1,0), +(9507,0,0,'I\'m affraid not. Schneider. Your time has come!',26439,1,1,0), +(9507,1,0,'Can you tell me where they have Chancellor Amai caged?',26534,1,1,0), +(9507,2,0,'Where is Senior Scrivener Barriga being held?',26525,1,1,0), +(9507,3,0,'Did you see where they took Sanitation Engineer Burke?',26527,1,1,0), +(11473,0,0,'I would like to start the Blood Ritual, Lynnore.',0,1,1,0), +(7628,0,1,'I would like to buy from you.',0,1,1,26124), +(7676,1,0,'What do I need to do?',0,1,1,0), +(7735,0,0,'Who are the Sha\'tar?',15642,1,1,0), +(7730,0,0,'I have been sent by Sal\'salabim to collect a debt that you owe. Pay up or I\'m going to have to hurt you.',15560,1,1,26124), +(7731,0,0,'He wants his \"golds.\" Pay up or die... again...',15564,1,1,26124), +(7732,0,0,'I have been sent by Sal\'salabim to collect a debt that you owe. Pay up or I\'m going to have to hurt you.',15560,1,1,26124), +(7981,0,0,'I\'ve lost Archmage Vargoth\'s Staff. Can you replace it?',18546,1,1,0), +(9460,0,5,'Make this inn your home.',0,1,1,0), +(9478,0,5,'Make this inn your home.',2822,1,1,26822), +(9478,1,1,'Let me browse your goods.',2823,3,128,26365), +(9724,0,0,'Can you spare an orange?',0,1,1,0), +(9573,1,0,'I want to fly on the wings of the green flight.',26948,1,1,0), +(9573,2,0,'I want to exchange my Amber Essence for Emerald Essence.',27035,1,1,0), +(5048,0,0,'I will be your wingman!',0,1,1,0), +(10337,0,0,'Lend us your aid, keeper. Together we will defeat Yogg-Saron.',33418,1,1,0), +(9755,0,1,'I wish to make a purchase, Fineous.',0,1,1,0), +(9762,0,0,'Koltira, let\'s get out of here!',0,1,1,0), +(9800,0,4,'Return me to life.',0,1,1,0), +(8368,0,0,'Control Warchief Blackhand',19384,1,1,0), +(9761,0,0,'I require water breathing, Garren.',29212,1,1,26365), +(9568,0,0,'We need to get into the fight. Are you ready?',26896,1,1,26365), +(9586,0,0,'Why have I been sent back to this particular place and time?',27090,1,1,0), +(9594,0,0,'What was this decision?',27092,1,1,0), +(9595,0,0,'So how does the Infinite Dragonflight plan to interfere?',27094,1,1,0), +(9610,0,0,'What do you think they\'re up to?',27266,1,1,0), +(9611,0,0,'You want me to do what?',27268,1,1,0), +(9612,0,0,'Very well, Chromie.',27270,1,1,0), +(9653,0,0,'Yes, my Prince. We are ready.',27524,1,1,0), +(9696,0,0,'For Lordaeron!',28044,1,1,0), +(11352,0,0,'What\'s with the hat?',40242,1,1,27291), +(9742,4,0,'I need to find Moodle, do you have his stress ball?',28963,1,1,26822), +(9742,3,0,'I need to find Jaloot, do you have his favorite crystal?',28962,1,1,26822), +(9742,0,0,'I need to find Lafoo, do you have his bug bag?',28961,1,1,26822), +(9742,1,0,'I need to find Lafoo, do you have his bug bag?',28961,1,1,26822), +(9742,2,0,'I need to find Jaloot, do you have his favorite crystal?',28962,1,1,26822), +(9741,3,0,'I need to find Dajik, do you have his chalk?',28953,1,1,0), +(9741,2,0,'I need to find Dajik, do you have his chalk?',28953,1,1,26822), +(9741,1,0,'I need to find Goregek, do you have his shackles?',28952,1,1,0), +(9741,4,0,'I need to find Zepik, do you have his hunting horn?',28954,1,1,0), +(9741,5,0,'I need to find Zepik, do you have his hunting horn?',28954,1,1,0), +(9497,1,0,'Help us subdue him.',26377,1,1,26822), +(9497,2,0,'We could use a healer.',26378,1,1,26822), +(10336,0,0,'Lend us your aid, keeper. Together we will defeat Yogg-Saron.',33418,1,1,0), +(8301,0,0,'Borak, I need another bundle of bloodthistle.',19182,1,1,26365), +(4014,0,3,'I seek training to ride a steed.',7548,5,16,0), +(4016,0,3,'I seek training to ride a steed.',7548,5,16,0), +(4018,0,3,'I seek training to ride a steed.',7548,5,16,0), +(4020,0,3,'I seek training to ride a steed.',7548,5,16,0), +(4021,0,3,'I seek training to ride a steed.',7548,5,16,0), +(4022,0,3,'I seek training to ride a steed.',7548,5,16,0), +(8275,0,3,'I seek training to ride a steed.',7548,5,16,0), +(8553,0,3,'I seek training to ride a steed.',7548,5,16,0), +(4103,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4103,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4104,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4104,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4515,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4515,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4516,0,3,'Teach me the ways of the spirits.',7658,5,16,0), +(4516,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4516,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4528,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4528,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4529,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4529,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4530,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4530,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4652,0,3,'Teach me the ways of the spirits.',7658,5,16,0), +(4652,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(4652,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(5123,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(7357,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(7357,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(7467,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(7467,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(7522,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(7522,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(8110,0,3,'Teach me the ways of the spirits.',7658,5,16,0), +(8110,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(8110,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(7506,0,0,'What was that?',73542,1,1,0), +(7507,0,0,'What did you do then?',18742,1,1,0), +(7508,0,0,'Please, go on.',32743,1,1,0), +(7377,1,0,'Tell me of your past, Farseer.',14505,1,1,0), +(7377,2,0,'I wish to unlearn my talents.',62295,16,16,0), +(7377,3,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(8991,2,0,'Walt sent me to pick up some dark iron ingots.',23868,3,128,26755), +(9023,0,0,'Yarp.',23870,1,1,26755), +(9618,0,0,'Admiral Keller sent me, Emilune. Please send me to Westguard Keep!',27294,1,1,0), +(7208,0,0,'Friendly',12237,1,1,0), +(7208,1,0,'Honored',12238,1,1,0), +(7208,2,0,'Revered',12239,1,1,0), +(7208,3,0,'Exalted',12240,1,1,0), +(2208,0,0,'I need a Cenarion beacon.',5243,1,1,0), +(2208,1,0,'What plants are in Felwood that might be corrupted?',5384,1,1,0), +(21400,0,0,'I need a Cenarion beacon.',5243,1,1,0), +(21400,1,0,'What plants are in Felwood that might be corrupted?',5384,1,1,0), +(21331,0,0,'You have lost your mind, Nefarius. You speak in riddles.',9904,1,1,0), +(21332,0,0,'Please do.',9906,1,1,0), +(21333,0,0,'Show me.',9847,1,1,27980), +(21334,0,0,'I am ready.',10011,1,1,27980), +(9891,1,0,'I am ready to join the battle against the wyrms. Do you have an eagle ready for me, Fjorlin?',32930,1,1,0), +(9843,0,0,'I\'ll go get some help. Hang in there.',30431,1,1,26822), +(9859,0,0,'I\'m ready - lets get you out of here.',30644,1,1,26822), +(9574,2,0,'I want to exchange my Emerald Essence for Amber Essence.',27038,1,1,0), +(9899,0,0,'I am ready to be shown the fate of Krolmir.',30985,1,1,26822), +(21335,0,0,'I am ready to fight alongside you, Akama.',21522,1,1,0), +(21,1,0,'Can you tell me about this shard?',4384,1,1,0), +(262,0,0,'Where is the key to this lock?',2746,1,1,0), +(264,1,0,'Where is the key to this lock?',2746,1,1,0), +(1422,0,1,'Can you help me get down?',4519,3,128,0), +(1443,0,0,'You can cook? So can I! Is there a recipe you can teach me?',4535,1,1,0), +(1561,0,0,'I am ready, Historian Archesonus.',4603,1,1,0), +(1562,0,0,'Unbelievable! How dare they??',4609,1,1,0), +(1563,0,0,'Of course I will help!',4611,1,1,0), +(1564,0,0,'Interesting, continue please.',4607,1,1,0), +(1565,0,0,'That is tragic. How did this happen?',4605,1,1,0), +(1664,0,0,'Continue please.',21460,1,1,0), +(1665,0,0,'Fascinating. Please, tell me more.',4652,1,1,0), +(11843,1,0,'Dwarven District Inn',0,0,0,27843), +(3127,0,0,'Auction House',44627,1,1,27843), +(3127,1,0,'Bank',78584,1,1,27843), +(3127,2,0,'Inn',44629,1,1,27843), +(11841,0,0,'Trade District Bank',0,1,1,27843), +(11841,1,0,'Dwarven District Bank',0,1,1,27843), +(11845,0,0,'Champions\' Hall',0,1,1,27843), +(11845,1,0,'Deeprun Tram',6351,1,1,27843), +(11845,2,0,'Lion\'s Rest',0,1,1,27843), +(11845,3,0,'The Stockade',0,1,1,27843), +(9852,1,0,'Gymer, what do I need to know? I\'ve never ridden on a giant.',30616,1,3,26822), +(9852,2,0,'I\'m ready, Gymer. Let\'s go!',30617,1,3,26822), +(10996,5,1,'Show me the armor of Scourge lords, Ormus.',38796,3,128,0), +(9578,0,3,'Please teach me.',8442,5,16,0), +(4825,0,3,'Please teach me.',8442,5,16,0), +(8891,0,0,'Call the Headless Horseman.',22746,1,1,0), +(3923,1,0,'I wish to unlearn my talents.',62295,16,16,0), +(9574,3,0,'I want to exchange my Ruby Essence for Amber Essence.',27039,1,1,0), +(9574,4,0,'What abilities do amber drakes have?',28086,1,1,0), +(9574,5,0,'What is the ultimate ability of the amber drake?',28089,1,1,0), +(9708,0,0,'So where do we go from here?',28427,1,1,0), +(9575,0,0,'I want to fly on the wings of the red flight.',26951,1,1,0), +(9575,1,0,'I want to exchange my Amber Essence for Ruby Essence.',27040,1,1,0), +(9575,2,0,'I want to exchange my Emerald Essence for Ruby Essence.',27041,1,1,0), +(9575,3,0,'What abilities do ruby drakes have?',28085,1,1,0), +(9575,4,0,'What is the ultimate ability of the Ruby Drake?',28088,1,1,0), +(10343,0,0,'I am ready to fight!',33430,1,1,0), +(5702,0,0,'.',9332,1,1,26124), +(5701,0,0,'Caught unaware? How?',9334,1,1,26124), +(5704,0,0,'So what did Ragnaros do next?',9336,1,1,26124), +(9123,3,1,'Let me browse your goods.',2823,3,128,0), +(8616,0,0,'Yes... yes, it\'s me.',20638,1,1,0), +(8617,0,0,'Yes elder. Tell me more of the book.',20640,1,1,0), +(7533,0,0,'I did and you believed me. Thank you for the information, blood elf. You have helped us more than you could know.',14636,1,1,26124), +(7892,1,0,'I heard that your dog Fei Fei took Klatu\'s prayer beads...',20302,1,1,0), +(8544,0,0,'',20306,1,1,0), +(7352,2,0,'Tell me of your homeland.',17525,1,1,26124), +(8044,0,0,'',17471,1,1,26124), +(922,0,1,'I\'d like to browse your goods.',3370,3,128,0), +(10885,0,0,'Yeah, I\'m sure safety is your top priority. Give me a rocket pack.',37026,1,1,0), +(10024,0,0,'I\'m ready to fly to Sholazar Basin.',31594,1,1,26822), +(10425,0,1,'I want to browse your goods.',3370,3,128,0), +(9253,1,0,'I seem to have lost the Augmented Arcane Prison. Did I leave it here with you?',25369,1,1,0), +(10025,1,0,'Take me to the ship.',31625,1,1,0), +(10120,0,0,'Give me a bomber!',32344,1,1,0), +(10389,10,0,'Teleport to the Conservatory of Life.',33926,1,1,0), +(10389,6,0,'Teleport to the Shattered Walkway.',33924,1,1,0), +(10368,0,0,'Watcher Analysis: Freya',34038,1,1,0), +(10368,1,0,'Watcher Analysis: Hodir',34039,1,1,0), +(10368,2,0,'Watcher Analysis: Thorim',34041,1,1,0), +(10368,3,0,'Watcher Analysis: Mimiron',34042,1,1,0), +(8383,1,0,'Hildagard, I need a new pair of goggles.',19443,1,1,0), +(8392,0,0,'Zorus, I need a new pair of goggles.',19564,1,1,0), +(8383,0,0,'Hildagard, I need a new pair of goggles.',19443,1,1,0), +(8392,1,0,'Zorus, I need a new pair of goggles.',19564,1,1,0), +(8898,0,0,'Chief Ashtotem, I have misplaced the token that you gave me.',22811,1,1,0), +(8852,0,0,'Captain, I\'ve somehow lost my command insignia.',22809,1,1,0), +(524,0,0,'Press the red button labeled \'E.C.A.C.\'',3166,1,1,0), +(524,1,0,'Press the yellow button labeled \'Thieves\' Tools.',3149,1,1,0), +(6185,2,0,'I confiscate the corn he has stolen, warn him that stealing is a path towards doom and destruction, but I let him go to return to his family.',10051,1,1,0), +(6185,3,0,'I allow the man to take enough corn to feed his family for a couple of days, encouraging him to leave the land.',10052,1,1,0), +(6186,0,0,'I am ready to discover where my fortune lies!',10047,1,1,0), +(6187,0,0,'I execute him as per my liege\'s instructions, and do it in such a manner that he suffers painfully before he dies as retribution for his crimes against my people.',10075,1,1,0), +(6210,0,0,'I would show my liege the beast\'s ear and claim the beast\'s death as my own, taking the reward for my own use. It is wrong to claim a deed as your own that someone else in fact did.\r\n',10087,1,1,0), +(6210,1,0,'I would show my liege the beast\'s ear and claim the beast\'s death as my own - after all, I did slay it. I would then offer some of the reward to the destitute knight to help his family.',10088,1,1,0), +(6210,2,0,'I would remain silent about the kill and allow the knight to claim the reward to aid his family.',10089,1,1,0), +(6211,0,0,'I\'d love to get one of those written fortunes you mentioned! I\'ve got the space in my inventory for it.',10091,1,1,0), +(6213,1,0,'The Darkmoon Faire has already arrived, you say? Where is it located?',10110,1,1,0), +(7149,0,2,'Yes, I\'d like to purchase a ride down to the Ghostlands.',12085,4,8192,0), +(7428,0,1,'I wish to browse your wares, Ergh.',14155,3,128,26124), +(7429,0,3,'Please teach me how to skin, Gurf.',14157,5,16,26124), +(7430,0,3,'I wish to become a leatherworker, Moordo. Please train me.',14159,5,16,26124), +(7859,0,0,'Show me, Seer.',16026,1,1,0), +(8917,0,0,'So, how does a dwarf like you end up in a place like this?',22609,1,1,0), +(9200,0,0,'What can we do to assist you?',25096,1,1,0), +(9280,0,0,'',25422,1,1,26365), +(9297,0,0,'You\'re not alone here?',25562,1,1,0), +(9297,1,0,'What would Kil\'jaeden want with a mortal woman?',25564,1,1,0), +(9418,0,0,'Let\'s do this, Thassarian. It\'s now or never.',25840,1,1,26365), +(9492,0,0,'Use the outhouse.',26332,1,1,26822), +(9669,0,0,'Brann, it would be our honor!',27614,1,1,0), +(9683,0,2,'Do you think I could take a ride on one of those flying machines?',27819,4,8192,26365), +(9848,0,1,'Can you repair my gear?',30450,15,4096,26822), +(9928,0,0,'I\'m with you, Thorim.',31225,1,1,26822), +(10012,0,0,'We\'re with you Brann! Open it!',31547,1,1,0), +(10200,0,0,'I\'m ready, Highlord.',32933,1,1,26899), +(10204,0,0,'I... I think so....',32988,1,1,26365), +(10204,1,0,'I am ready, Lady Corastrasza.',32990,1,1,26365), +(10206,0,0,'There will be plenty of time for this later Brann, we need to get moving!',33002,1,1,0), +(10316,1,0,'Glad to help, my lady. I\'m told you were once the guardian of a fabled sword. Do you know where I might find it?',33363,1,1,0), +(10467,0,0,'I am ready to fight!',33430,1,1,0), +(10465,0,0,'I am ready to fight!',33430,1,1,0), +(10355,0,0,'We\'re ready. Begin the assault!',33652,1,1,0), +(10601,0,9,'I would like to go to the battleground.',10355,12,1048576,0), +(10614,0,0,'I am ready.',35320,1,1,0), +(10614,2,0,'I am ready.',35320,1,1,0), +(10614,3,0,'I am ready. However, I\'d like to skip the pageantry.',36657,1,1,0), +(10860,0,0,'We\'re ready! Let\'s go!',36885,1,1,0), +(10949,0,1,'I\'m not into any of that creepy stuff you like, Brazie. Just show me the \"legal\" wares.',37565,3,128,0), +(10949,1,0,'You\'re an odd little guy.',37619,1,1,0), +(11016,1,0,'Teleport to the Oratory of the Damned.',37722,1,1,0), +(11016,0,0,'Teleport to Light\'s Hammer.',37671,1,1,0), +(11015,1,0,'Teleport to the Oratory of the Damned.',37722,1,1,0), +(11015,0,0,'Teleport to Light\'s Hammer.',37671,1,1,0), +(11014,6,0,'Teleport to Sindragosa\'s Lair.',37728,1,1,0), +(11014,5,0,'Teleport to the Upper Spire.',37725,1,1,0), +(11104,0,1,'I wish to browse your wares.',4424,3,128,0), +(11398,0,0,'How do we do that?',40480,1,1,0), +(10366,0,0,'Activate secondary defensive systems.',34420,1,1,0), +(10426,0,1,'I want to browse your goods.',3370,3,128,0), +(10910,1,0,'I must ask that you reforge Shadow\'s Edge for me, Highlord Mograine.',37855,1,1,0), +(3307,0,0,'Why didn\'t you just leave?',6651,1,1,0), +(3306,0,0,'So what happened?',6653,1,1,0), +(3305,0,0,'No restraints? Just a circle?',6655,1,1,0), +(3304,0,0,'Tell me more',6657,1,1,0), +(3303,0,0,'This is an atrocity.',6659,1,1,0), +(3302,0,0,'I feel sick',6661,1,1,0), +(3301,0,0,'What can I do to help?',45678,1,1,0), +(10389,12,0,'Teleport to the Spark of Imagination.',33927,1,1,0), +(10389,15,0,'Teleport to the Prison of Yogg-Saron.',33928,1,1,0), +(9603,0,0,'Wyrmbait, eh? Welp, go fetch us Icestorm!',27137,1,1,26365), +(10854,1,0,'Magister Hathorel said you might be able to lend me a certain tabard.',37552,1,1,0), +(10119,0,0,'Give me a bomber!',32344,1,1,0), +(4824,0,3,'Please teach me.',8442,5,16,27602), +(4536,0,3,'Please teach me.',8442,5,16,0), +(21228,0,3,'Please teach me.',8442,5,16,0), +(7517,0,3,'Please teach me.',8442,5,16,0), +(4827,0,3,'Please teach me.',8442,5,16,0), +(4663,0,3,'Please teach me.',8442,5,16,0), +(11277,0,0,'Yes, please!',32024,1,1,0), +(12280,0,1,'Think you could repair my gear, Burrian?',47695,3,128,25950), +(8908,0,0,'I have misplaced my worg disguise.',23068,1,1,0), +(1443,2,0,'You can cook? So can I! Is there a recipe you can teach me?',4535,1,1,0), +(1443,3,0,'You\'re an alchemist? So am I. Perhaps you can teach me what you know...',4537,1,1,0), +(8113,0,0,'',18119,1,1,26365), +(8115,0,0,'',18119,1,1,26365), +(8116,0,0,'',18119,1,1,26365), +(8046,0,0,'Where did this technology come from?',17475,1,1,26365), +(8041,0,0,'Who attacked Manaforge Duro?',17464,1,1,26365), +(8040,0,0,'Ultris?',17444,1,1,26365), +(9839,0,0,'Koltira... this might sound strange, but I keep seeing some kid\'s ghost. Matthias Lehner... does the name mean anything to you?',32828,1,1,0), +(9548,0,0,'What do you have for me?',26695,3,128,0), +(13075,4,0,'Attractions?',10779,1,1,0), +(13076,0,0,'Tonks?',11934,1,1,0), +(13076,1,0,'Cannon?',11936,1,1,0), +(13076,2,0,'Whack-a-Gnoll?',53403,1,1,0), +(13076,3,0,'Ring Toss?',53415,1,1,0), +(13076,4,0,'Shooting Gallery?',53417,1,1,0), +(13076,5,0,'Fortune teller?',53419,1,1,0), +(13083,0,0,'',17471,1,1,0), +(13113,0,0,'May I have another Darkmoon Adventurer\'s Guide?',53756,1,1,0), +(7768,0,0,'Hello, Greatmother. Garrosh told me that you wanted to speak with me.',15770,1,1,0), +(7767,0,0,'You raised all of the orcs here, Greatmother?',15772,1,1,0), +(7766,0,0,'Do you believe that?',15774,1,1,0), +(7765,0,0,'What can be done? I have tried many different things. I have done my best to help the people of Nagrand. Each time I have approached Garrosh, he has dismissed me.',15776,1,1,0), +(7764,0,0,'Left? How can you choose to leave?',15778,1,1,0), +(7763,0,0,'What is this duty?',15780,1,1,0), +(7762,0,0,'Is there anything I can do for you, Greatmother?',15782,1,1,0), +(7768,1,0,'Garrosh is beyond redemption, Greatmother. I fear that in helping the Mag\'har, I have convinced Garrosh that he is unfit to lead.',16845,1,1,0), +(7974,0,0,'I have done all that I could, Greatmother. I thank you for your kind words.',16849,1,1,0), +(7979,0,0,'Greatmother, you are the mother of Durotan?',16851,1,1,0), +(7978,0,0,'Greatmother, I never had the honor. Durotan died long before my time, but his heroics are known to all on my world. The orcs of Azeroth reside in a place known as Durotar, named after your son. And... ',16853,1,1,0), +(7977,0,0,'It is my warchief, Greatmother. The leader of my people. From my world. He... He is the son of Durotan. He is your grandchild.',16855,1,1,0), +(7976,0,0,'I will return to Azeroth at once, Greatmother.',16857,1,1,0), +(12433,0,5,'Make this inn your home.',2822,1,1,25996), +(6944,0,2,'Show me where I can fly.',12271,4,8192,27547), +(3622,0,0,'How can I prove myself to the Timbermaw furbolg?',7136,1,1,25996), +(12428,0,2,'I need a ride.',3409,4,8192,0), +(12428,2,0,'I have a ride to Talonbranch Glade courtesy of James Hallow.',48727,1,1,0), +(8301,1,0,'I need another disguise, Borak. I lost the last one.',19252,1,1,26365), +(8976,1,0,'May I have another racing ram?',74294,1,1,0), +(8976,2,0,'May I have another racing ram?',74294,1,1,0), +(8976,3,0,'May I have another racing ram?',74294,1,1,0), +(8934,2,0,'May I have another racing ram?',74294,1,1,0), +(8934,3,0,'May I have another racing ram?',74294,1,1,0), +(8278,0,0,'Continue, please.',18943,1,1,26365), +(8277,0,0,'So what of the cipher now? And your boys?',18945,1,1,26365), +(8276,0,0,'I will find your boys and the cipher, Oronok.',18947,1,1,26365), +(8350,0,0,'I am ready, Oronok. Let us destroy Cyrukh and free the elements!',19307,1,1,26365), +(9022,0,0,'I\'m ready to go, Walt.',23929,1,1,0), +(5749,0,0,'',9485,1,3,0), +(9184,0,0,'I am embarassed to say it, Nork, but my deserter has gone missing.',24976,1,1,0), +(8298,0,0,'Can you cast the spell to help me breathe and move underwater?',19071,1,1,26124), +(10461,0,0,'I am ready to fight!',33430,1,1,0), +(10462,0,0,'I am ready to fight!',33430,1,1,0), +(10477,0,0,'Confirmed.',34421,1,1,0), +(9891,0,0,'King Stormheart sent me to be tested as a frostborn would. I am ready for my test, Fjorlin',32929,1,1,0), +(8650,0,0,'I am ready to join your forces in battle, Xi\'ri.',21003,1,1,26365), +(8288,0,0,'I require the aid of another spirit hunter, Ar\'tor.',19017,1,1,0), +(8366,0,0,'Control Orc Wolf',19375,1,1,0), +(8362,0,0,'Control Orc Necrolyte',19367,1,1,0), +(8367,0,0,'Control Orc Warlock',19377,1,1,0), +(7413,0,0,'Control Human Footman',14008,1,1,0), +(8345,0,0,'Control Conjured Water Elemental.',19285,1,1,0), +(8346,0,0,'Control Human Charger.',19288,1,1,0), +(8347,0,0,'Control Human Cleric',19293,1,1,0), +(8348,0,0,'Control Human Conjurer',19295,1,1,0), +(5740,0,0,'Well then... show me the tribute!',9367,1,1,25996), +(10144,0,0,'I\'m interested.',32566,1,1,0), +(10144,1,0,'I\'m interested.',32566,1,1,0), +(15682,0,0,'I\'d like to purchase a challenge card.',73714,1,1,0), +(16970,0,0,'How do I play Firebird\'s Challenge?',87053,1,1,0), +(16970,1,0,'Ready to fly! |cFF0008E8(Darkmoon Game Token)|r',87062,1,1,0), +(9212,0,0,'I am ready to leave, Durkot.',25265,1,1,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), +(5733,0,0,'Yeah, you\'re a real brainiac. Just how smart do you think you are, Slip\'kik?',9398,1,1,0), +(5734,0,0,'So, now that I\'m the king... what have you got for me?!',9451,1,1,0), +(5735,0,0,'Call me \"Boss\". What have you got for me!',9401,1,1,0), +(11451,0,0,'Tell me about the Shrine of Goldrinn.',0,1,1,0), +(11451,1,0,'What is happening at the Grove of Aessina?',0,1,1,0), +(11451,2,0,'How can I help the Shrine of Aviana?',0,1,1,0), +(11451,3,0,'Is there something I can do at the Sanctuary of Malorne?',0,1,1,0), +(10564,0,0,'I\'m ready to depart for Ban\'ethil Barrow Den.',35036,1,1,0), +(10517,3,0,'Where is the Raven Claw Talisman?',34645,1,1,0), +(10517,4,0,'Where I can find Oben Rageclaw?',34646,1,1,0), +(10517,5,0,'Can you lead me to the exit?',34670,1,1,0), +(8750,2,0,'I\'m ready. Take me to the Chamber of Command.',21879,1,1,0), +(8172,0,0,'Big ones?',18421,1,1,0), +(7139,3,0,'Please transport me to the Guardian\'s Library.',20519,1,1,0), +(5222,0,0,'Crossbow',20582,1,1,0), +(5222,1,0,'Gun',20585,1,1,0), +(5222,2,0,'Mace',20586,1,1,0), +(5222,3,0,'Polearm',20587,1,1,0), +(5222,4,0,'Staff',20588,1,1,0), +(5222,5,0,'Sword',20589,1,1,0), +(7337,0,3,'Show me what you know, Larenis.',13168,5,16,0), +(1882,0,0,'Where is Warlord Krom\'zar?',4793,1,1,0), +(4007,1,0,'I wish to unlearn my talents.',8271,16,16,0), +(4007,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4534,0,3,'I would like training.',2603,5,16,0), +(4534,1,0,'I wish to unlearn my talents.',8271,16,16,0), +(4534,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4092,0,3,'I would like training.',2603,5,16,0), +(4092,1,0,'I wish to unlearn my talents.',8271,16,16,0), +(4092,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4621,0,3,'I would like training.',2603,5,16,0), +(4621,1,0,'I wish to unlearn my talents.',8271,16,16,0), +(4621,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4694,0,3,'I would like training.',2603,5,16,0), +(4694,1,0,'I wish to unlearn my talents.',8271,16,16,0), +(4694,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(4826,0,3,'I would like training.',2603,5,16,0), +(4674,0,3,'I would like training.',2603,5,16,0), +(4674,1,0,'I wish to unlearn my talents.',8271,16,16,0), +(4674,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(21221,0,3,'I would like training.',2603,5,16,0), +(21221,1,0,'I wish to unlearn my talents.',8271,16,16,0), +(21221,2,0,'I wish to know about Dual Talent Specialization.',33762,1,1,0), +(10952,0,0,'Lok\'tar ogar! We are ready! Onward, brother orc!',37633,1,1,0), +(10933,0,0,'We\'re ready, Muradin',37446,1,1,0), +(10934,0,0,'We\'re sure. Let\'s go!',37448,1,1,0), +(11207,0,0,'The word is given. The Lich King will die by our hands!',39415,1,1,0), +(8539,1,0,'I am ready, Anchorite. Let us begin the exorcism.',20396,1,3,0), +(8096,1,0,'Send me to the Abyssal Shelf!',17936,1,1,26124), +(8100,0,0,'Send me to Shatter Point!',17937,1,1,26124), +(7970,1,0,'Send me to Shatter Point!',17935,1,1,0), +(7633,8,0,'Stable Master',8508,1,1,0), +(13210,0,1,'Let me browse your goods.',2823,3,128,0), +(13210,1,0,'No thank you.',0,1,1,0), +(13124,0,0,'Take me to the faire staging area.',52971,1,1,0), +(7415,0,0,'I am ready to be flown down to the Exodar.',14010,1,1,0), +(8229,0,0,'I\'m ready to fly! Take me up, dragon!',18637,1,1,26365), +(8782,0,0,'Lady Jaina told me to speak to you about using a gryphon to survey Alcaz Island.',22176,1,1,25996), +(7482,0,0,'Listen to me, human. I care nothing for your plight, but you have something I require. Tell me where to find the bloodforged ingots.',14392,1,1,0), +(11017,0,0,'Teleport to Light\'s Hammer.',37671,1,1,0), +(11017,1,0,'Teleport to the Oratory of the Damned.',37722,1,1,0), +(11017,3,0,'Teleport to the Rampart of Skulls.',37723,1,1,0), +(11017,4,0,'Teleport to the Deathbringer\'s Rise.',37724,1,1,0), +(11017,6,0,'Teleport to Sindragosa\'s Lair.',37728,1,1,0), +(11018,0,0,'Teleport to Light\'s Hammer.',37671,1,1,0), +(11018,1,0,'Teleport to the Oratory of the Damned.',37722,1,1,0), +(11018,3,0,'Teleport to the Rampart of Skulls.',37723,1,1,0), +(11018,4,0,'Teleport to the Deathbringer\'s Rise.',37724,1,1,0), +(11018,5,0,'Teleport to the Upper Spire.',37725,1,1,0), +(3223,0,0,'What\'s needed for the cauldron at Felstone Field?',6516,3,131,0), +(3223,1,0,'What\'s needed for the cauldron at Dalson\'s Tears?',6517,3,131,0), +(3223,2,0,'What\'s needed for the cauldron at the Writhing Haunt?',6518,3,131,0), +(3223,3,0,'What\'s needed for the cauldron at Gahrron\'s Withering?',6519,3,131,0), +(3228,0,0,'What\'s needed for the cauldron at Felstone Field?',6516,3,131,0), +(3228,1,0,'What\'s needed for the cauldron at Dalson\'s Tears?',6517,3,131,0), +(3228,2,0,'What\'s needed for the cauldron at the Writhing Haunt?',6518,3,131,0), +(3228,3,0,'What\'s needed for the cauldron at Gahrron\'s Withering?',6519,3,131,0), +(3229,0,0,'I need a Vitreous Focuser.',6531,3,131,0), +(201,0,0,'Let the event begin!',2662,1,1,0), +(9546,2,0,'Greer, I need a gryphon to ride and some bombs to drop on New Agamand!',23112,1,1,0), +(9917,1,0,'I am ready to head further into Storm Peaks.',32890,1,1,0), +(2465,0,0,'Lady Jaina, this may sound like an odd request... but I have a young ward who is quite shy. You are a hero to him, and he asked me to get your autograph.',9663,1,1,0), +(11389,1,0,'Disturb the stone and summon Lord Ahune.',40443,1,1,0), +(7735,1,0,'Isn\'t Shattrath a draenei city? Why do you allow others here?',15644,1,1,0), +(9205,0,0,'Take me to the Caverns of Time.',25111,1,1,0), +(45068,0,0,'Take me to the Slagworks.',45327,1,32769,0), +(45068,2,0,'Take me to the Warden\'s Vigil.',45330,1,32769,0), +(45068,3,0,'Take me to the East Spire.',45331,1,32769,0), +(45068,4,0,'Take me to the West Spire.',45332,1,32769,0), +(45068,5,0,'Take me to the South Spire.',45333,1,32769,0), +(45069,0,0,'Take me to the Slagworks.',45327,1,32769,0), +(45069,1,0,'Take me to the Ironclad Garrison.',45328,1,32769,0), +(45069,3,0,'Take me to the East Spire.',45331,1,32769,0), +(45069,4,0,'Take me to the West Spire.',45332,1,32769,0), +(45069,5,0,'Take me to the South Spire.',45333,1,32769,0), +(45070,0,0,'Take me to the Slagworks.',45327,1,32769,0), +(45070,1,0,'Take me to the Ironclad Garrison.',45328,1,32769,0), +(45070,2,0,'Take me to the Warden\'s Vigil.',45330,1,32769,0), +(45070,4,0,'Take me to the West Spire.',45332,1,32769,0), +(45070,5,0,'Take me to the South Spire.',45333,1,32769,0), +(45071,0,0,'Take me to the Slagworks.',45327,1,32769,0), +(45071,1,0,'Take me to the Ironclad Garrison.',45328,1,32769,0), +(45071,2,0,'Take me to the Warden\'s Vigil.',45330,1,32769,0), +(45071,3,0,'Take me to the East Spire.',45331,1,32769,0), +(45071,4,0,'Take me to the West Spire.',45332,1,32769,0), +(45072,0,0,'Take me to the Slagworks.',45327,1,32769,0), +(45072,1,0,'Take me to the Ironclad Garrison.',45328,1,32769,0), +(45072,2,0,'Take me to the Warden\'s Vigil.',45330,1,32769,0), +(45072,3,0,'Take me to the East Spire.',45331,1,32769,0), +(45072,5,0,'Take me to the South Spire.',45333,1,32769,0), +(45073,1,0,'Take me to the Ironclad Garrison.',45328,1,32769,0), +(45073,2,0,'Take me to the Warden\'s Vigil.',45330,1,32769,0), +(45073,3,0,'Take me to the East Spire.',45331,1,32769,0), +(45073,4,0,'Take me to the West Spire.',45332,1,32769,0), +(45073,5,0,'Take me to the South Spire.',45333,1,32769,0), +(18962,0,1,'I wish to browse your goods.',96697,1,1,0), +(19665,1,1,'Show me your latest wares.',108118,1,1,0), +(18758,0,3,'Train me.',3266,1,1,0), +(19601,0,3,'Train me.',3266,1,1,0), +(20471,0,1,'Let me browse your goods.',2823,3,128,0), +(18660,1,3,'I can instruct you in enchanting. Interested?',20132,1,1,0), +(20199,1,1,'Let me browse your goods.',2823,3,128,0), +(20521,14,0,'Wine & Cheese',32723,1,1,0), +(20521,11,0,'Trade Supplies',32719,1,1,0), +(20521,10,0,'Toys',32718,1,1,0), +(20521,8,0,'Pie, Pastry & Cakes',32716,1,1,0), +(20521,7,0,'Pet Supplies & Exotic Mounts',32715,1,1,0), +(20521,5,0,'Jewelry',32713,1,1,0), +(20521,4,0,'General Goods',32712,1,1,0), +(20521,3,0,'Fruit',32706,1,1,0), +(20521,2,0,'Flowers',32705,1,1,0), +(20521,1,0,'Clothing',32703,1,1,0), +(20506,13,0,'Vendors',32724,1,1,0), +(20506,12,0,'Trainers',32176,1,1,0), +(20506,11,0,'Stable Master',19208,1,1,0), +(20506,10,0,'Points of Interest',32180,1,1,0), +(20506,9,0,'Mailbox',45381,1,1,0), +(20506,7,0,'Inn',44629,1,1,0), +(20506,6,0,'Guild Master & Vendor',45380,1,1,0), +(20506,5,0,'Flight Master',45379,1,1,0), +(20506,3,0,'Barber',45376,1,1,0), +(20506,2,0,'Bank',44628,1,1,0), +(20506,0,0,'The Underbelly',123314,1,1,0), +(20522,14,0,'Tailoring',45760,1,1,0), +(20522,13,0,'Skinning',45770,1,1,0), +(20522,12,0,'Mining',45769,1,1,0), +(20522,11,0,'Leatherworking',45759,1,1,0), +(20522,10,0,'Jewelcrafting',45758,1,1,0), +(20522,9,0,'Inscription',45757,1,1,0), +(20522,8,0,'Herbalism',45434,1,1,0), +(20522,7,0,'Fishing',45436,1,1,0), +(20522,6,0,'First Aid',45765,1,1,0), +(20522,5,0,'Engineering',45756,1,1,0), +(20522,4,0,'Enchanting',45755,1,1,0), +(20522,3,0,'Cooking',45432,1,1,0), +(20522,2,0,'Blacksmithing',45754,1,1,0), +(20522,1,0,'Archaeology',44649,1,1,0), +(20522,0,0,'Alchemy',45753,1,1,0), +(20525,1,0,'Horde Inn',32134,1,1,0), +(20525,0,0,'Alliance Inn',32133,1,1,0), +(20509,1,0,'Southern Bank',32164,1,1,0), +(20509,0,0,'Northern Bank',32163,1,1,0), +(20515,10,0,'Cemetery',32111,1,1,0), +(20515,9,0,'The Eventide',32110,1,1,0), +(20515,8,0,'Chamber of the Guardian',123321,1,1,0), +(20515,7,0,'Antonidas Memorial',32108,1,1,0), +(20515,6,0,'Krasus\' Landing',32168,1,1,0), +(20515,5,0,'Trade District',32121,1,1,0), +(20515,4,0,'Sewers',32107,1,1,0), +(20515,3,0,'The Violet Hold',32106,1,1,0), +(20515,2,0,'The Violet Citadel',32105,1,1,0), +(20515,1,0,'The Horde Quarter',32104,1,1,0), +(20515,0,0,'The Alliance Quarter',32103,1,1,0), +(20518,2,0,'Well Entrance',32101,1,1,0), +(20518,1,0,'Western Sewer Entrance',32100,1,1,0), +(20518,0,0,'Eastern Sewer Entrance',32099,1,1,0), +(20513,2,0,'Krasus\' Landing',32168,1,1,0), +(20513,1,0,'Bank',32167,1,1,0), +(20513,0,0,'Inn',32166,1,1,0), +(20512,1,0,'Horde Inn',32134,1,1,0), +(20512,0,0,'Alliance Inn',32133,1,1,0), +(20508,2,0,'Well Entrance',32101,1,1,0), +(20508,1,0,'Western Sewer Entrance',32100,1,1,0), +(20508,0,0,'Eastern Sewer Entrance',32099,1,1,0), +(20019,0,28,'The Illidari are prepared to serve.',116345,1,1,0), +(20018,0,28,'We, the Broken, salute you.',116346,1,1,0), +(18830,0,1,'Let\'s see what you have.',92547,1,1,0), +(19153,1,2,'Show me where I can fly.',12271,1,1,0), +(18723,0,2,'I need a ride.',3409,1,1,0), +(19852,0,0,'Ready when you are. Taunt away.',114355,1,1,0), +(18723,4,0,'Aludane, I\'m here for the flight to Stormheim.',114257,1,1,0), +(20382,8,0,'Enter the Ordeal',0,1,1,0), +(19431,0,0,'Thalyssra sent me.',107563,1,1,0), +(19432,0,0,'Are you Silgryn?',107562,1,1,0), +(19960,2,1,'Can you repair my equipment?',118613,0,0,0), +(20453,0,0,'',122837,1,1,0), +(20332,0,0,'',122201,1,1,0), +(19217,0,0,'Thalyssra is near Meredil. Can you teleport us?',104288,1,1,0), +(20456,1,0,'I am ready.',104314,1,1,0), +(19513,0,0,'Not like this...',73694,1,1,0), +(19844,8,0,'Enter the Proving Grounds',74757,1,1,0), +(18796,1,0,'Goodbye, professor.',99454,1,1,0), +(18795,0,0,'...no.',99453,1,1,0), +(18794,0,0,'No.',99452,1,1,0), +(18598,2,0,'Can I ask you a few questions about this powder?',99450,1,1,0), +(18598,0,3,'Tell me about Inscription.',47149,1,1,0), +(18501,0,1,'Something very expensive, please.',95701,1,1,0), +(19081,0,1,'I wish to make a purchase.',6465,1,1,0), +(18792,0,0,'Now, what do you know about this powder?',99439,1,1,0), +(18786,1,0,'Of course not! I believe your story.',99423,1,1,0), +(18786,0,0,'Yes, I\'m bribing you.',99422,1,1,0), +(18785,1,0,'Just being thorough. I believe you.',99420,1,1,0), +(18785,0,0,'I WANT to believe you, but you\'re not making it easy for me.',99419,1,1,0), +(18784,1,0,'OK, I believe you.',99417,1,1,0), +(18784,0,0,'Your MULE? You\'ve got to be kidding me.',99416,1,1,0), +(18783,1,0,'Fine, I believe you.',99414,1,1,0), +(18783,0,0,'Were there any other witnesses to what happened?',99413,1,1,0), +(18782,1,0,'Very well. I believe you.',99411,1,1,0), +(18782,0,0,'I know your kind. A dirty auction house speculator.',99410,1,1,0), +(18781,1,0,'I believe you.',99408,1,1,0), +(18781,0,0,'Why should I believe you?',99407,1,1,0), +(18793,0,0,'Do you know why your cart exploded into fel flames?',99445,1,1,0), +(20537,0,3,'Train me.',3266,1,1,0), +(18500,0,1,'I would like to buy from you.',2583,1,1,0), +(18604,7,3,'Train me.',3266,1,1,0), +(18798,0,0,'Yes.',99468,1,1,0), +(18797,0,0,'I\'m not trying to kill you.',99467,1,1,0), +(18604,2,0,'What can you tell me about this powder?',99469,1,1,0), +(19948,0,21,'Yes, I\'d like to refund the traits in my artifact.',0,1,1,0), +(20176,0,28,'Let\'s continue research on my artifact.',118599,1,1,0), +(19600,0,0,'Show me their story.',106946,1,1,0), +(18845,1,3,'Train me.',3266,1,1,0), +(19093,1,3,'Train me in Engineering.',47119,1,1,0), +(19312,0,1,'Let me browse your goods.',2823,3,128,0), +(10185,0,3,'Train me.',3266,1,1,0), +(19333,3,1,'Let me in on your other projects.',65828,1,1,0), +(19333,2,3,'Train me.',3266,1,1,0), +(18907,2,1,'Any pet stuff for sale?',87415,1,1,0), +(18907,0,0,'I\'d like to heal and revive my battle pets.',64115,1,1,0), +(18383,1,0,'Can you fit these hoofplates on my mount?',94520,1,1,0), +(15263,0,0,'Let\'s party!',69799,1,1,0), +(19344,1,1,'I would like to buy from you.',2583,1,1,0), +(19344,0,3,'I seek training in Fishing.',34245,1,1,0), +(20586,1,1,'Let me browse your goods.',2823,3,128,0), +(20586,0,5,'Make this inn your home.',2822,1,1,0), +(19646,0,32,'Who\'s looking for a job?',89234,1,1,0), +(20466,0,0,'',123039,1,1,0), +(19952,0,0,'I\'m ready!',121252,1,1,0), +(18748,2,0,'I\'ve come to help the withered with their combat training.',120520,1,1,0), +(20393,0,0,'',122405,1,1,27980), +(19836,1,1,'Let me browse your goods.',2823,3,128,0), +(19836,0,5,'Make this inn your home.',2822,1,1,0), +(19687,0,0,'Feed: 300x |TINTERFACE\\ICONS\\INV_MISC_ANCIENT_MANA.BLP:20|t|Hcurrency:1155|h|cFFFFFFFF Ancient Mana|h|r',111319,1,1,27980), +(19929,1,0,'',122365,1,1,27980), +(20424,0,0,'',0,1,1,0), +(19585,0,0,'Ly\'leth would like you to visit her regarding a shipment of dusk lily pods.',109652,1,1,0), +(19568,0,0,'Come with me. Ly\'leth wants to speak with you.',109238,1,1,0), +(19566,0,0,'Pleased to meet you, Lady Ly\'leth.',109170,1,1,0), +(19505,0,0,'Is there nobody left who will stand up to Elisande?',108395,1,1,0), +(19507,0,0,'How can we be free in the Legion\'s shadow?',108392,1,1,0), +(19501,0,0,'Warlocks are not known to be trustworthy. What if Gul\'dan betrays us?',108391,1,1,0), +(19502,0,0,'How can we be free in the Legion\'s shadow?',108392,1,1,0), +(19498,0,0,' Demons. Am I right? ',108390,1,1,0), +(19503,0,0,'How do you do, fellow Nightborne?',108393,1,1,0), +(19504,0,0,'',108394,1,1,0), +(19499,0,0,' Demons. Am I right? ',108390,1,1,0), +(20439,0,1,'I want to browse your goods.',3370,1,1,0), +(20440,0,1,'I want to browse your goods.',3370,1,1,0), +(19229,0,0,'Activate the crystals when we get in trouble, right.',104541,1,1,0), +(19781,0,1,'Show me your wares.',90189,1,1,0), +(20233,0,0,'Tell me about Illidan again.',122711,1,1,0), +(18379,1,0,'Alard at the blacksmith shop will need a regular supply of foxflower. Do you have any?',94481,1,1,0), +(19565,0,0,'There is no time left. Run!',109076,1,1,0), +(19560,0,0,'There is no time left. Run!',109076,1,1,0), +(19561,0,0,'There is no time left. Run!',109076,1,1,0), +(18971,0,0,'I am ready.',98694,1,1,0), +(18939,0,0,'Let\'s do battle!',75024,1,1,0), +(18673,0,0,'Let\'s get out of here!',97823,1,1,0), +(18943,1,2,'Show me where I can fly.',12271,1,1,0), +(18943,0,0,'Send me to Shipwreck Cove, please.',100836,1,1,0), +(18927,0,0,'Let\'s go hunting!',99155,1,1,0), +(18909,0,0,'Go hunt somewhere else!',100466,1,1,0), +(18963,1,1,'Let me browse your goods.',2823,3,128,0), +(18963,0,5,'Make this inn your home.',2822,1,1,0), +(18944,0,0,'Yes!',97316,1,1,0), +(19004,0,0,'Me think me have just the right touch...',101516,1,1,0), +(19003,1,0,'',102846,1,1,0), +(19003,0,0,'Best kill job me seen! You get best reward...',101512,1,1,0), +(19002,0,0,'You keep one. I keep rest.',101509,1,1,0), +(19000,1,0,'Dig rocks, find pretties! More pretty is better.',101498,1,1,0), +(19000,0,0,'Use your pickaxe to mine precious metals from the richest vein in the cavern, and bring the samples back to me.',103013,1,1,0), +(18997,1,0,'Make big candle! Lots of wax!',101484,1,1,0), +(18997,0,0,'Use the finest wax to craft a magical candle, worthy of the Candleking.',103002,1,1,0), +(18995,1,0,'You kill basilisk! Biggest in cave! Bring back!',101474,1,1,0), +(18995,0,0,'Slay the strongest basilisk that roams these caverns and drag its lifeless corpse to my feet!',103010,1,1,0), +(18992,1,0,'Go find shiny! Dig dirt in dead place.',101468,1,1,0), +(18992,0,0,'Pilfer golden coins from graves within the nearby burial grounds.',103004,1,1,0), +(18894,0,0,'Take the Windmaster\'s Totem.',111851,1,1,0), +(18555,0,0,'Tell me more about Morashu.',97334,1,1,0), +(19806,0,0,'Your family is at the Hammer\'s Cradle.',112943,1,1,0), +(19038,0,3,'Train me in Leatherworking.',47115,1,1,0), +(18817,1,1,'Let me browse your goods.',2823,3,128,0), +(18817,0,5,'Make this inn your home.',2822,1,1,0), +(18912,0,0,'Tell me more of Huln Highmountain. [Enter Flashback]',100486,1,1,0), +(19773,0,1,'I would like to buy from you.',14967,1,1,0), +(18912,1,0,'Tell me the Story of Huln.',101955,1,1,0), +(20316,2,0,'What happened here?',92991,1,1,0), +(20316,1,1,'Show me your wares.',90189,1,1,0), +(20316,0,5,'Make this inn your home.',2822,1,1,0), +(19569,0,0,'We need your help negotiating with the Underking.',109247,1,1,0), +(19570,0,0,'We need your help negotiating with the Underking.',109247,1,1,0), +(10182,0,1,'I want to browse your goods.',3370,1,1,27377), +(18835,0,3,'Train me in Enchanting.',47111,1,1,0), +(19434,0,0,'I see.',0,0,0,0), +(19340,1,0,'Do you live here in Thunder Totem, Lessah?',0,0,0,0), +(18850,0,0,'I challenge you, Haldor.',0,1,1,0), +(18543,0,0,'Attempt to commune with the statue.',96207,1,1,0), +(18852,0,0,'Take me back to the Gates of Valor.',99988,1,1,0), +(18843,0,0,'Take me to the top, Vethir!',99941,1,1,0), +(18828,0,0,'Use the Jailer\'s Shard to break Vethir\'s prison.',99850,1,1,0), +(18790,1,0,'We have defeated your champion. Now, release us from Helheim!',99516,1,1,0), +(18790,0,0,'I do not belong here! I wish to leave Helheim!',99443,1,1,0), +(20117,0,0,'What do you know of the kvaldir?',119290,1,1,0), +(20232,1,1,'Let me browse your goods.',2823,3,128,0), +(20232,0,5,'Make this inn your home.',2822,1,1,0), +(19808,1,1,'What do you have for sale?',117193,1,1,0), +(19808,0,0,'Why are you moving the taurens\' goods over to your zeppelin?',113024,1,1,0), +(20270,1,1,'Let me browse your goods.',2823,3,128,0), +(20270,0,5,'Make this inn your home.',2822,1,1,0), +(19855,5,0,'Take me to the top of Thorim\'s Peak.',114387,1,1,0), +(19855,4,0,'Take me to Throrim\'s Peak outside the Thorignir Refuge.',114386,1,1,0), +(19855,3,0,'Take me to the top of the Galebroken Path.',114385,1,1,0), +(19774,0,0,'Um... caw?',112213,1,1,0), +(18741,0,0,'I am prepared to receive your gift.',98776,1,1,0), +(18693,0,0,'Fly me to the summit, Vethir.',98282,1,1,0), +(18672,0,0,'I am ready to receive your gift, Yotnar.',97814,1,1,0), +(18762,0,0,'Can you give me a lift back to the Foothold?',98963,1,1,0), +(20708,1,1,'I wish to browse your wares.',38807,1,1,0), +(20708,0,5,'Bind at this location.',42778,1,1,0), +(18374,0,0,'Hear what?',94392,1,1,0), +(19823,1,0,'Then, you leave me no choice, Akama. One way, or another, you WILL help us to defeat the Legion.',113550,1,1,0), +(19822,1,0,'I hear you, Kayn. Hopefully, he will listen to reason. If not...',113542,1,1,0), +(19822,0,0,'Let\'s get up there, Kayn. It\'s time to convince Akama to join us.',113278,1,1,0), +(13807,8,0,'Start Basic Healer (Bronze)',74639,1,1,0), +(13807,4,0,'Start Basic Tank (Bronze)',74549,1,1,0), +(13807,0,0,'Start Basic Damage (Bronze)',61151,1,1,0), +(20122,0,0,'I\'m ready, Velen!',119606,1,1,0), +(19939,0,0,'',119519,1,1,0), +(20100,0,0,'I am ready, Nobundo! Let them come!',118812,1,1,0), +(18723,5,0,'I\'m ready to go to Suramar.',121011,1,1,0), +(20530,0,0,'I need to be transported out of here.',123355,1,1,0), +(20082,0,0,'Yes, tell me everything, Loramus.',118531,1,1,0), +(18576,1,0,'Asha, you\'re free.',122632,1,1,0), +(18414,0,0,'How did you and your sister get separated?',96595,1,1,0), +(18571,0,0,'I\'ll help you find Maiev.',96602,1,1,0), +(18570,0,0,'So why are you trying to save her?',96597,1,1,0), +(18569,0,0,'What did she do?',96596,1,1,0), +(18406,0,0,'I am ready to go.',103408,1,1,0), +(18638,0,0,'It\'s safe now.',97379,1,1,0), +(7998,0,5,'Make this inn your home.',2822,1,1,0), +(18407,0,0,'What\'s happening here?',97340,1,1,0), +(19474,0,0,'I am ready.',98694,1,1,0), +(18596,1,5,'Make this inn your home.',2822,1,1,0), +(18596,0,1,'I would like to buy from you.',2583,1,1,0), +(19405,1,0,'By my honor you will come to no harm, priestess.',107920,1,1,0), +(18402,0,0,'I am ready, Ysera. Let us find Malfurion!',94718,1,1,27843), +(18250,0,0,'I am ready to aid you, Malfurion.',101710,1,1,0), +(18679,0,0,'Master Moonclaw! What has become of your grove?',97917,1,1,0), +(18680,0,0,'I understand.',97920,1,1,0), +(18355,0,0,'I will help you defeat Gorebeak.',94229,1,1,0), +(18461,0,0,'I\'ll save you, poor little thing.',95385,1,1,0), +(18273,0,0,'I am ready, Malfurion.',93577,1,1,0), +(18723,1,0,'Aludane, I have urgent business in Val\'sharah. Can you secure a flight for me?',102282,1,1,0), +(20131,0,0,'Sure, I\'ll take one.',119657,1,1,0), +(19843,0,0,'I\'d like to review the information we\'ve gathered on the remaining artifact weapon.',122578,1,1,0), +(20018,2,28,'We, the Broken, salute you.',116346,1,1,0), +(18241,0,0,'Begin your ritual.',93326,1,1,0), +(18352,1,0,'Sign contract in blood.',94188,1,1,0), +(18352,0,0,'Flip to Page 3.',94191,1,1,0), +(18351,2,0,'Sign contract in blood.',94188,1,1,0), +(18351,1,0,'Flip to Page 2.',94190,1,1,0), +(18351,0,0,'Flip to Page 4.',94195,1,1,0), +(18350,2,0,'Sign contract in blood.',94188,1,1,0), +(18350,1,0,'Flip to Page 1.',94192,1,1,0), +(18350,0,0,'Flip to Page 3.',94191,1,1,0), +(18349,1,0,'Sign contract in blood.',94188,1,1,0), +(18349,0,0,'Flip to Page 2.',94190,1,1,0), +(18348,1,0,'Sign contract in blood.',94188,1,1,0), +(18348,0,0,'Read contract.',94187,1,1,0), +(18451,1,1,'I wish to browse your wares.',38807,1,1,0), +(18451,0,5,'Yes, I think I\'ll stay awhile.',95167,1,1,0), +(17423,0,0,'They\'re ready, Sternfathom. Toss me into battle.',91793,1,1,0), +(17264,2,1,'Ooka, what do you have for sale?',115283,1,1,0), +(17264,1,0,'Ooka, may I please have some of your delicious Fighter Chow? I hear it\'s the best.',92236,1,1,0), +(17264,0,0,'You\'ll hand over the fighter chow now if you know what\'s good for you.',92557,1,1,0), +(17416,0,0,'Boss Whalebelly, it\'s great to meet you. Just letting you know that I\'m going to be the arena champion by the end of the day.',91623,1,1,0), +(17377,4,0,'What happened, Farondis?',91808,1,1,0), +(19917,0,0,'I was not aware of that.',115086,1,1,0), +(19916,0,0,'One of the instructors mentioned that, yes...',115084,1,1,0), +(19915,0,0,'I need you to lead me to the Tidestone of Golganneth.',115083,1,1,0), +(19926,2,1,'I want to browse your goods.',3370,1,1,0), +(19926,1,5,'Make this inn your home.',2822,1,1,0), +(19926,0,0,'You seem unhappy.',115224,1,1,0), +(19927,2,1,'I want to browse your goods.',3370,1,1,0), +(19927,1,5,'Make this inn your home.',2822,1,1,0), +(19927,0,0,'Oh, actually I am fine.',115226,1,1,0), +(17377,2,0,'Your people treat you with contempt. Why? What did you do?',91558,1,1,0), +(17377,1,0,'Please, show me where the Tidestone lies.',91617,1,1,0), +(18255,0,0,'I see.',95411,1,1,0), +(18254,0,0,'You did all this? How? Why?',91583,1,1,0), +(17377,0,0,'Let\'s go find that Tidestone.',91599,1,1,0), +(10183,0,1,'I want to browse your goods.',3370,1,1,27377), +(18196,0,0,'Let\'s get back to Azurewing Repose!',92797,1,1,0), +(18200,0,0,'Just... just lead the way, Runas.',92856,1,1,0), +(18458,1,5,'Make this inn your home.',2822,1,1,0), +(18458,0,1,'Let me browse your goods.',2823,3,128,0), +(18068,0,1,'Let\'s see what you have.',0,1,1,0), +(18199,0,0,'I\'m ready, Allari. Let\'s begin.',92238,1,1,0), +(18069,0,5,'Bind me. I might be here a while.',92551,1,1,0), +(17085,1,0,'I\'m ready. Let\'s get down to Azsuna, Khadgar.',106208,1,1,0), +(19337,0,0,'Gaze upon the Burning Legion\'s presence on Azeroth.',106258,1,1,0), +(19287,0,0,'Show me what we acquired in our conquest.',105472,1,1,0), +(19304,1,0,'What do you have to lose either way?',105845,1,1,0), +(19304,0,0,'Do you want to find out?',105844,1,1,0), +(19303,1,0,'Let us inside or I\'ll show you the difference.',105838,1,1,0), +(19303,0,0,'There\'s no time to explain. Let us inside the hold, warden.',105839,1,1,0), +(19214,0,0,'I would like to review weapons we might pursue.',103166,1,1,0), +(16524,1,1,'Let me browse your goods.',8097,3,128,27602), +(16524,0,5,'Make this inn your home.',2822,1,1,27602), +(16796,31,0,'Where can I replace a lost ring or acquire another?',91062,1,1,0), +(16593,10,0,'I am needed urgently at the Iron Docks.',87474,1,1,0), +(16593,0,2,'Show me where I can fly.',12271,1,1,0), +(18757,0,27,'Show me any available missions.',98943,1,1,27602), +(7421,2,0,'I\'ll nail it!',14120,1,1,0), +(19155,0,0,'Let us begin.',119506,1,1,0), +(20461,0,0,'I am ready to leave for Karazhan.',123019,1,1,0), +(20462,0,0,'Let\'s go inside!',123021,1,1,0), +(20460,0,0,'Let\'s save Magni!',123017,1,1,0), +(20420,0,0,'I\'m ready. To Ulduar!',122534,1,1,0), +(19170,0,0,'Address the Council, Khadgar.',103842,1,1,0), +(19165,0,0,'How can I help, Archmage?',103741,1,1,0), +(20009,0,1,'All right then, what do you have?',115987,1,1,0), +(18580,0,1,'I wish to browse your goods.',96697,1,1,0), +(19176,1,0,'This cannot wait. There are demons among your ranks. Let me show you.',122662,1,1,0), +(20260,0,0,'Do you know why Nathanos looks... different?',121465,1,1,0), +(20265,0,0,'There\'s something different about you, Blightcaller...',121476,1,1,0), +(19116,1,0,'Take me inside Grommash Hold.',103164,1,1,0), +(18424,0,0,'Why don\'t you get along with Altruis?',104591,1,1,0), +(19012,0,0,'Will it be Kayn or Altruis?',104587,1,1,0), +(18426,0,0,'Why don\'t you like Kayn?',104593,1,1,0), +(18776,0,0,'Whitemoon, I\'ll be taking one of your fel bats. We\'re going to get what we came here for.',0,1,1,0), +(18720,0,1,'Yes, thank you, Nightsong. Will you see to my equipment?',98580,1,1,0), +(18435,0,0,'Kayn, tell me what you know about Mardum.',99756,1,1,0), +(18823,0,0,'Mannethrel, prepare yourself. I am going to fill you with the power of the Legion\'s secrets.',100752,1,1,0), +(18994,0,0,'Anything else?',101473,1,1,0), +(18435,1,0,'Kayn, I will teach you what I\'ve learned of the demonic mysteries.',100747,1,1,0), +(18935,0,0,'Allari, these are the secrets I\'ve uncovered.',100734,1,1,0), +(18936,0,0,'Listen closely, Cyana. This is what I learned from the Tome of Fel Secrets.',100738,1,1,0), +(18937,0,0,'Are you ready to learn the Legion\'s secrets, Kor\'vas?',100750,1,1,0), +(19175,0,0,'Yes, Jace, I will use my spectral sight to look into the cave.',103960,1,1,0), +(17260,0,0,'Battlelord, your forces will assault The Doom Fortress to the southeast. Stop the mass of their demons from attacking us.',98385,1,1,0), +(18434,0,0,'Matron Mother, I need you to take your shivan across the gap to the Forge of Corruption. Make them suffer.',98562,1,1,0), +(18447,0,0,'Milady, you will take your naga north. Disrupt the ritual the demons are performing at their Soul Engine.',98555,1,1,0), +(19016,1,0,'I want you to sacrifice me in order to power the gateway.',101652,1,1,0), +(19016,0,0,'Sevis, I need to sacrifice you in order to power the final gateway.',101651,1,1,0), +(19133,1,0,'Hold a moment, Sevis. I\'m reconsidering.',103336,1,1,0), +(19133,0,0,'I\'m certain, Sevis. I need to sacrifice you to power the gateway.',103338,1,1,0), +(18438,1,0,'What\'s your opinion about the Shivarra?',103323,1,1,0), +(18438,0,0,'Jace, what is this Nether Crucible?',103078,1,1,0), +(19015,0,0,'Mystic, thank you for your sacrifice.',101648,1,1,0), +(18864,0,0,'Kayn, tell me what you know about Mardum.',99756,1,1,0), +(18993,0,0,'Anything else?',101473,1,1,0), +(17318,0,2,'I need a ride.',3409,1,1,0), +(999,1,0,'Suivez-moi',0,1,1,0), +(9996,8888,0,'Follow me',0,1,3,0), +(6666,6666,0,'Teleport me',0,1,3,0), +(5555,5555,0,'Téléportez-moi',0,1,1,0), +(4444,4444,0,'Téléportez-moi en haut de la montagne.',0,1,3,0), +(3333,3333,0,'Téléportez-moi',0,1,1,0), +(2222,2222,0,'Je suis un prince ! Je ne bougerait pas avec vous ! Téléportez-vous et rejoignez mon double !',0,1,3,0), +(88867,0,0,'I will not walk with you! Teleport.',0,1,3,0), +(1111,1111,0,'Je ne bougerait pas ! Téléportez=vous.',0,1,3,0), +(93428,1,0,'Teleport to Helheim.',0,1,3,0), +(86563,1,0,'On the way to Azsuna!',0,1,3,0), +(97664,1,0,'Teleport me outside Helheim.',0,1,1,0), +(19717,0,2,'I have to travel.',0,1,1,0), +(20356,0,1,'Let\'s see what you have there.',0,1,1,0), +(99914,0,0,'Mystic, thank you for your sacrifice',0,1,1,0), +(18904,1,0,'Did the taurens participate in the construction of the pavilion?',0,1,1,0), +(19102,2,0,'J’aimerais soigner et ressusciter mes mascottes de combat.',0,1,1,0), +(19102,1,1,'Je cherche un compagnon perdu.',0,1,1,0), +(19102,0,12,'I would like to put my pet in the stable.',0,1,1,0), +(19086,0,0,'Something worries you?',0,1,1,0), +(19967,0,0,'Well, I have to talk to her anyway.',0,1,1,0), +(19968,0,0,'I do not want to interfere ...',0,1,1,0), +(19969,0,0,'Wait ... I heard correctly?',0,1,1,0), +(19970,0,0,'I have never heard of \"death hunters\".',0,1,1,0), +(19966,1,0,'Uh do we know each other?',0,1,1,0), +(20360,0,1,'Let\'s see what you have there.',0,1,1,0), +(19281,0,0,'Where does this altar come from?',0,1,1,0), +(14295,4,0,'Enter the Ordeal',0,1,1,0), +(18773,0,0,'It works, get ready!',0,1,1,0), +(20352,0,1,'Let\'s see what you have there.',0,1,1,0), +(14294,4,0,'Enter the Ordeal',0,1,1,0), +(20542,8,0,'Enter the Ordeal',0,1,1,0), +(20095,0,32,'Who wants a job?',0,1,1,0), +(20370,0,1,'Let\'s see what you have there.',0,1,1,0), +(20079,0,28,'The Light is ready to serve.',0,1,1,0), +(19255,1,0,' So, do we talk business?',0,1,1,0), +(19255,0,0,'Here are 100 gold coins. Will it be ok?',0,1,1,0), +(20371,0,1,'Let\'s see what you have there.',0,1,1,0), +(20381,8,0,'Enter the Ordeal',0,1,1,0), +(20380,8,0,'Enter the Ordeal',0,1,1,0), +(18747,0,31,'Show me what missions you have prepared.',0,1,1,0), +(20386,8,0,'Enter the Ordeal',0,1,1,0), +(20383,8,0,'Enter the Ordeal',0,1,1,0), +(20384,8,0,'Enter the Ordeal',0,1,1,0), +(14084,8,0,'Enter the Ordeal',0,1,1,0), +(7260,3,0,'Enter the Ordeal',0,1,1,0), +(20369,0,1,'Let\'s see what you have there.',0,1,1,0), +(20385,8,0,'Enter the Ordeal',0,1,1,0), +(16767,1,1,'Show me your goods!',0,1,1,0), +(16767,0,0,'',0,1,1,0), +(19258,0,0,'How do you go down to the arena?',0,1,1,0), +(19792,0,0,'I have come to ask you about Arrexis and his ritual. I must face Balaadur and I need to get his attention.',112631,0,0,27843), +(18849,0,0,'I challenge you, Ranulf.',99979,0,0,27980), +(18848,0,0,'I challenge you, Tor.',99978,0,0,27980), +(60000,1,0,'FOR AZEROTH!',0,1,1,0), +(60001,1,0,'Khadgar asked us to divert attention from Kilrogg\'s eye.',0,1,1,0), +(99914,1,0,'We will not forget your sacrifice',0,1,1,0), +(60002,0,0,'Send me into the Black Temple. (Timewalking Raid)',132375,1,1,0), +(20389,1,1,'What do you have for sale?',0,0,0,0), +(18748,5,1,'I wish to trade.',0,0,0,0), +(20457,1,0,'I\'m ready, begin the teleportation of Dalaran to the broken islands.',0,1,1,0), +(15125,13,1,'Show me your wares, please.',41360,3,128,20886), +(14674,0,5,'Make this inn your home.',2822,8,65536,20886), +(14674,1,1,'What do you have for sale?',66614,3,128,20886), +(13140,0,0,'Shu, can you wake up Wuguo for me?',54025,1,1,20886), +(13726,0,0,'I\'m ready to decide.',60279,1,1,20886), +(13204,0,0,'Maybe you should talk to her.',62476,1,1,20886), +(18748,6,5,'I wish to bind my hearthstone here.',122363,0,0,0), +(21910,3,0,'Do you plan on staying with the draenei?',0,1,1,0), +(83,0,4,'Return me to life.',2547,0,0,27547), +(21910,4,0,'How do you like being on the Vindicaar?',0,1,1,0), +(20307,1,1,'Show me your wares.',90189,0,0,27980), +(19749,0,0,'Go on...',111872,0,0,0), +(19755,0,0,'Go on...',111872,0,0,0), +(19731,0,0,'Go on...',111872,0,0,0), +(18750,0,0,'What are soul chambers?',98982,0,0,27980), +(19828,1,0,'',113712,0,0,0), +(19828,0,0,'',113705,0,0,0), +(20375,0,1,'Let\'s see what you have.',0,3,4227,0), +(19828,3,0,'',113713,0,0,0), +(19828,2,0,'',113711,0,0,0), +(19796,0,0,'I have the aid of Meryl Felstorm and the spirit of Alodi, and we know what we face this time.',112633,0,0,27843), +(19601,2,1,'Let me browse your goods.',8097,0,0,27843), +(20432,4,0,'Can you tell me more about Arrexis?',112314,0,0,27843), +(20620,0,0,'You need to get out of here. It isn\'t safe!',124738,0,0,27980), +(20591,3,1,'Can you repair my equipment?',118613,0,0,27980), +(20591,2,0,'',121607,0,0,27980), +(19988,0,0,'|c9999000010 Withered:|r Bring the chest back to Thalyssra.',115558,0,0,0), +(19604,0,0,'Why are you interested in the Empyrean Society?',110247,0,0,27843), +(19603,0,0,'What do you know about their activities?',110254,0,0,27843), +(19576,0,0,'I brought you a Pearl of Arcane Wisdom. What is it you do here, exactly?',109732,0,0,27843), +(18985,0,0,'I wish to journey to Stonedark Grotto.',101377,0,0,27980), +(20997,1,0,'How can I help?',127776,0,0,27980), +(19295,1,0,'How do I complete your test?',105561,0,0,27980), +(19295,0,0,'I would like to attempt the flying challenge, please grant me your blessing.',105556,0,0,27980), +(20617,0,0,'Your father is waiting for you downstairs- hurry!',124728,0,0,27980), +(20638,0,0,'It looks like you have things handled, Scarleth. You and your girls should leave while you have a chance.',124773,0,0,27980), +(20635,0,0,'I will protect you both. Let\'s go!',124765,0,0,27980), +(19982,0,0,'|c999900005 Withered:|r Bring the chest back to Thalyssra.',115557,0,0,27980), +(18724,5,0,'Val\'sharah.',0,1,1,0), +(18724,4,0,'Azsuna.',0,1,1,0), +(18724,3,0,'Stormheim.',0,1,1,0), +(18724,2,0,'Dalaran.',0,1,1,0), +(18724,6,0,'Highmountain.',0,1,1,0), +(19986,0,0,'|c999900005 Withered:|r Bring the chest back to Thalyssra.',115557,0,0,0), +(19797,0,0,'I will face your demons, warlock.',112635,0,0,27843), +(19301,7,0,'',121649,0,0,0), +(20001,0,28,'I would like to requisition a Squad of Apprentices.',121578,0,0,27980), +(20314,1,1,'Show me your wares.',90189,0,0,27980), +(20314,0,5,'Make this inn your home.',2822,0,0,27980), +(20422,0,0,'',122567,0,0,0), +(18723,3,0,'Meryl Felstorm says you have a ride for me to Faronaar.',112817,0,0,27843), +(19709,0,0,'I seek the wisdom of the council.',111669,0,0,27843), +(20307,0,5,'Make this inn your home.',2822,0,0,27980), +(20496,0,3,'Please teach me.',8442,0,0,27980), +(20506,1,0,'Transmogrification',56155,0,0,27980), +(20086,1,0,'Why can\'t I research Artifact Knowledge?',130505,0,0,27980), +(18705,0,3,'Train me.',3266,0,0,27980), +(19241,14,1,'What recipes do you sell?',35243,0,0,27980), +(19241,3,28,'Research recipes using Fatty Bearsteaks.',104710,0,0,27980), +(19241,1,28,'Research recipes using Wildfowl Eggs.',104708,0,0,27980), +(19241,0,28,'Research recipes using Lean Shanks.',104684,0,0,27980), +(20166,1,0,'I am ready to leave now.',125916,0,0,27980), +(19198,0,0,'We are ready to challenge you Odyn!',104099,0,0,27980), +(18851,0,0,'I challenge you, Bjorn.',99981,0,0,27980), +(20618,0,0,'Your father will help you get to safety. Go downstairs now!',124730,0,0,27980), +(18475,2,3,'Train me.',3266,0,0,0), +(18933,0,0,'Let\'s do battle!',75024,0,0,27980), +(20997,2,1,'Do you have something for sale?',130333,0,0,27980), +(20378,0,1,'Let me browse your goods.',8097,0,0,27980), +(20738,0,0,'Yes, take me back.',125885,0,0,27980), +(19764,0,0,'Don\'t be coy. I know you\'re here to spy for the Grand Magistrix.',111873,0,0,27980), +(19761,0,0,'Go on...',127631,0,0,27980), +(19751,0,0,'Go on...',127631,0,0,27980), +(19741,0,0,'Go on...',127631,0,0,27980), +(19759,0,0,'Go on...',127631,0,0,27980), +(19722,0,0,'Go ahead. I\'m ready for my disguise.',111838,0,0,27980), +(19579,1,0,'While not the best solution, your Tailoring allows you to wrap up these wounds and at least stabilize this civilian.',109457,0,0,27980), +(20849,1,0,'I am ready to leave now.',125916,0,0,0), +(20502,0,0,'I will fight her in your name, Odyn!',123259,0,0,0), +(20187,9,0,'Twenty withered.\n|cFFFF0000(Costs 2000 Ancient Mana |TINTERFACE\\ICONS\\INV_Misc_ancient_mana.blp:16|t)|r',0,0,0,27980), +(20187,6,0,'Fifteen withered.\n(Costs 1300 Ancient Mana |TINTERFACE\\ICONS\\INV_Misc_ancient_mana.blp:16|t)',0,0,0,27980), +(20187,4,0,'Twelve withered.\n(Costs 900 Ancient Mana |TINTERFACE\\ICONS\\INV_Misc_ancient_mana.blp:16|t)',0,0,0,27980), +(20187,2,0,'Ten withered.\n(Costs 650 Ancient Mana |TINTERFACE\\ICONS\\INV_Misc_ancient_mana.blp:16|t)',0,0,0,27980), +(20187,0,0,'Eight withered.\n(Costs 400 Ancient Mana |TINTERFACE\\ICONS\\INV_Misc_ancient_mana.blp:16|t)',0,0,0,27980), +(20644,4,5,'I wish to bind my hearthstone here.',122363,0,0,27980), +(20644,3,1,'I wish to trade.',125204,0,0,27980), +(20644,2,0,'',121814,0,0,27980), +(20644,1,0,'I\'ve come to help the withered with their combat training.',120520,0,0,27980), +(20576,0,0,'I am ready, Thalyssra.',124117,0,0,27980), +(20643,0,0,'Right this way, Arluelle.',124832,0,0,27980), +(20620,1,0,'Eneas, you need to go now.',124740,0,0,27980), +(20007,0,28,'The Valarjar await.',117226,0,0,0), +(20344,0,28,'Place a work order for Champion armaments.',0,0,0,0), +(20345,0,28,'Begin the Call',122239,0,0,0), +(18724,8,0,'The Broken Shore.',0,1,1,0), +(18724,7,0,'Suramar.',0,1,1,0), +(18893,0,0,'...Okay?',100307,0,0,27980), +(18892,0,0,'...Deathwing? You mean the Burning Legion?',100301,0,0,27980), +(18811,1,1,'Let me browse your goods.',8097,0,0,27980), +(18811,0,5,'Make this inn your home.',2822,0,0,27980), +(20320,1,1,'Show me your wares.',90189,0,0,27980), +(20320,0,5,'Make this inn your home.',2822,0,0,27980), +(18463,1,3,'Train me in Mining.',47116,0,0,27980), +(10184,0,3,'Train me.',3266,0,0,27980), +(19341,0,0,'Are you ready for your lessons?',106314,0,0,27980), +(11387,0,0,'Insult Coren Direbrew\'s brew.',40431,1,1,0), +(11388,0,0,'Fight',40433,1,1,0), +(11388,1,0,'Apologize',40434,1,1,0), +(20737,0,0,'We\'re ready to leave now.',0,0,0,0), +(3679,0,0,'Lets Go!',0,1,1,25416), +(43042,0,0,'Lets Go!',0,1,1,29416), +(2487,0,0,'Here it IS!',0,1,1,29416), +(20007,1,28,'The Valarjar await.',0,0,0,0), +(22176,0,3,'I want to become a blacksmith.',0,0,0,0), +(21043,2,0,'I want to participate in the Trial of Style!',130512,1,1,26365), +(20690,1,0,'I would like to unlearn Arcane Momentum and Blink the direction I am facing.',125289,0,0,25881), +(14099,9,0,'I want to talk about the Arcane Momentum technique.',125293,0,0,25881), +(20690,0,0,'I would like to learn the Arcane Momentum technique and be able to Blink in the direction I am moving.',125288,0,0,26124), +(14146,9,0,'I want to talk about the Arcane Momentum technique.',125293,0,0,27144), +(14100,9,0,'I want to talk about the Arcane Momentum technique.',125293,0,0,25961), +(13920,9,0,'I want to talk about the Arcane Momentum technique.',125293,0,0,27356), +(16888,0,0,'Volunteer.',87671,0,0,25881), +(11615,0,3,'Train me.',3266,0,0,25961), +(708,1,8,'I want to create a guild crest.',3415,0,0,25881), +(708,0,7,'How do I form a guild?',3413,0,0,25881), +(11848,5,0,'Profession Trainer',0,1,1,27481), +(11848,4,0,'Horse Breeder',0,1,1,27481), +(13919,9,0,'I want to talk about the Arcane Momentum technique.',125293,0,0,25881), +(14400,1,1,'Interested in trading your battle-stones?',74772,0,0,25881), +(14400,0,3,'Interested in catching some rare pets?',62763,0,0,25881), +(13918,9,0,'I want to talk about the Arcane Momentum technique.',125293,0,0,25881), +(20871,1,0,'Take me into the Deadmines.',127852,1,1,26124), +(14238,9,0,'I want to talk about the Arcane Momentum technique.',125293,0,0,25996), +(11779,0,1,'Let me browse your goods.',2823,3,128,25881), +(11665,1,0,'I\'ve brought some food for you.',42793,0,0,25901), +(11785,1,0,'I am ready for the Mind Control ritual, Thaalia.',50739,0,0,25901), +(11785,0,0,'I am ready for the Mind Vision ritual, Thaalia.',50738,0,0,25901), +(12643,1,0,'Yes - I need another wind rider.',44118,0,0,25928), +(12643,0,0,'Sorry, not here to chat. I need a wind rider to take on a special mission.',43820,0,0,25928), +(11753,0,0,'',43694,0,0,25928), +(11761,0,0,'You know the battle plan, right?',43742,0,0,25928), +(11755,0,0,'You\'re a mutinous dog! Draw steel!',43706,0,0,25928), +(11760,0,0,'What can you tell me about the Brashtide Crew?',43739,0,0,25928), +(11751,0,0,'',43690,0,0,25928), +(11759,0,0,'Long John Copper, is the Brashtide Crew ready for battle?',43735,0,0,25928), +(11750,0,0,'',43686,0,0,25928), +(11748,1,0,'I... I need a boat.',43681,0,0,25928), +(11748,0,0,'Ahoy matey! Hoist anchor, trim the mainsail, batton down the hatches and set to sea! Today we scuttle the Venture Company\'s blasted contraptions and send \'em all to feed the fishes! Now hop to, before I put the black spot on ye!',43680,0,0,25928), +(11744,0,0,'Here\'s the head and the hat, Fleet Master.',43589,0,0,25928), +(19508,0,1,'I hear you might be selling something I\'m looking for...',108442,0,0,25928), +(9197,20,0,'Points Redemption',25079,0,0,25928), +(15404,3,0,'What other promotions do you have?',25084,0,0,25928), +(15404,2,0,'Ghastly Charger',71366,0,0,25928), +(15404,1,0,'Dark Portal Heartstone',71365,0,0,25928), +(15404,0,0,'Gusting Grimoire',71364,0,0,25928), +(11942,0,0,'I was just wondering what you knew about the gnolls to the south. Someone has been giving them supplies to practice necromancy.',45300,0,0,25928), +(11899,0,0,'Yes, Zen\'Kiki. Let\'s go run some combat practice.',44983,0,0,25928), +(12722,0,0,'Is Zen\'Kiki available for some more combat practice?',50822,0,0,25928), +(11953,0,0,'If you really want to help out, you can help me and my friends with some combat practice.',45364,0,0,25928), +(2911,0,0,'Are you interested in joining our caravan? We\'re headed to Light\'s Hope Chapel.',45662,0,0,25928), +(12033,0,0,'Are you interested in joining our caravan? We\'re headed to Light\'s Hope Chapel.',45662,0,0,25928), +(12081,0,0,'You know, if you\'re looking for a place to hide out, you\'re free to join us in our caravan.',46119,0,0,25937), +(7173,1,1,'Let me browse your goods.',2823,3,128,25937), +(3181,0,1,'I wish to make a purchase.',6465,0,0,25937), +(12043,2,0,'Throw in all 12 flasks.',45722,0,0,25937), +(12043,1,0,'Throw in an entire flask.',45721,0,0,25937), +(12035,1,0,'Ride Fiona\'s Caravan to its next destination.',45675,0,0,25937), +(3864,1,0,'Carlin, do you have the extended Annals of Darrowshire?',45603,0,0,25937), +(12207,0,0,'Hop in, baby.',47188,0,0,25950), +(12204,0,0,'Hop in, baby.',47188,0,0,25950), +(12206,0,0,'Hop in, baby.',47188,0,0,25950), +(20599,0,1,'I would like to buy from you.',2583,0,0,25961), +(21979,0,0,'',137786,0,0,25961), +(14100,8,0,'Enter the Proving Grounds',74757,0,0,25961), +(13920,8,0,'Enter the Proving Grounds',74757,0,0,27356), +(12103,1,0,'Gimme some more of that swim tonic!',47576,0,0,25961), +(12103,0,0,'Gimme some more of that swim tonic!',47576,0,0,25961), +(11613,1,0,'I would like to start the Amulet Ritual, Kasim.',42216,0,0,25961), +(11613,0,0,'I would like to start the Blood Ritual, Kasim.',42213,0,0,25961), +(14194,8,0,'Enter the Proving Grounds',74757,0,0,25961), +(3501,0,1,'I would like to buy from you.',2583,3,128,25961), +(2741,0,3,'Train me.',3266,5,16,25961), +(13949,9,0,'I want to talk about the Arcane Momentum technique.',125293,0,0,25961), +(13949,8,0,'Enter the Proving Grounds',74757,0,0,25961), +(14081,9,0,'I want to talk about the Arcane Momentum technique.',125293,0,0,25961), +(14081,8,0,'Enter the Proving Grounds',74757,0,0,25961), +(14179,9,0,'I want to talk about the Arcane Momentum technique.',125293,0,0,25961), +(14179,8,0,'Enter the Proving Grounds',74757,0,0,25961), +(14080,9,0,'I want to talk about the Arcane Momentum technique.',125293,0,0,25961), +(14080,8,0,'Enter the Proving Grounds',74757,0,0,25961), +(14079,9,0,'I want to talk about the Arcane Momentum technique.',125293,0,0,25961), +(14079,8,0,'Enter the Proving Grounds',74757,0,0,25961), +(14119,9,0,'I want to talk about the Arcane Momentum technique.',125293,0,0,25961), +(14119,8,0,'Enter the Proving Grounds',74757,0,0,25961), +(5462,1,7,'How do I form a guild?',3413,10,262144,25961), +(5462,0,8,'I want to create a guild crest.',3415,11,524288,25961), +(20944,1,0,'Hellfire Peninsula in Outland',129387,0,0,25961), +(20944,0,0,'Stormwind and other Alliance Capitals',129211,0,0,25961), +(14243,9,0,'I want to talk about the Arcane Momentum technique.',125293,0,0,25961), +(14243,8,0,'Enter the Proving Grounds',74757,0,0,25961), +(16140,0,0,'I thought Amnennar was destroyed.',78067,0,0,25996), +(16141,0,0,'Skeletons assault you constantly and plague roils out of the caves. How can I help stop the ritual?',78071,0,0,25996), +(16139,0,0,'A phylactery?',78069,0,0,25996), +(5346,0,0,'Tell me more about the history of Remulos and Zaetar.',8961,0,0,25996), +(5347,0,0,'Please tell me more about Zaetar.',8940,0,0,25996), +(5349,3,0,'Please tell me more about Maraudon.',8938,0,0,25996), +(13815,0,0,'It\'s safe to come out now.',61264,0,0,25996), +(13814,0,0,'It\'s safe to come out now.',61264,0,0,25996), +(5709,0,0,'Game? Are you crazy?',9352,0,0,25996), +(8078,0,9,'I would like to go to the battleground.',10355,0,0,25996), +(14146,8,0,'Enter the Proving Grounds',74757,0,0,27144), +(7465,0,0,'Where should I begin my search for the portal?',14503,0,0,26124), +(7452,3,0,'Jessera, could you direct me towards the blood mushrooms?',14292,0,0,26124), +(7452,2,0,'Jessera, could you direct me towards the fel cone fungus?',14290,0,0,26124), +(7452,1,0,'Jessera, could you direct me towards the ruinous polyspore?',14287,0,0,26124), +(7452,0,0,'Jessera, could you direct me towards the aquatic stinkhorn?',14284,0,0,26124), +(7399,0,0,'Admiral, I need another tree disguise kit.',13792,0,0,26124), +(7431,0,1,'Hello, Parkat. I wish to purchase something.',14161,0,0,26124), +(11037,0,0,'I\'m ready to go to The Shaper\'s Terrace.',38396,0,0,26124), +(2177,0,0,'Examine the pylon.',5152,0,0,26124), +(10978,1,0,'Maximillian, I am ready for adventure.',38164,0,0,26124), +(12644,0,0,'Examine the chest.',50640,0,0,26124), +(6646,2,0,'I\'m ready to pilot our silithid.',38743,0,0,26124), +(11403,0,1,'Let me browse your goods.',2823,3,128,25996), +(11182,0,0,'I\'m ready, Marley. Let\'s fly!',39254,0,0,25996), +(11814,1,1,'Let me browse your goods.',2823,3,128,25996), +(11814,0,5,'Make this inn your home.',2822,0,0,25996), +(11138,0,0,'Tell me what happened at Taurajo.',39123,0,0,25996), +(11140,0,0,'You\'re under arrest.',39078,0,0,25996), +(11150,0,0,'Why did you do that?',39127,0,0,25996), +(11149,0,0,'We sacked the town?',39125,0,0,25996), +(11128,0,1,'Let me browse your goods.',2823,3,128,25996), +(11119,1,0,'I\'ve heard this one. Tell me another...',38942,0,0,25996), +(11119,0,0,'A butt?',38940,0,0,25996), +(11118,1,0,'I\'ve heard this one. Tell me another...',38942,0,0,25996), +(11118,0,0,'Weep SNOT!?',38939,0,0,25996), +(11115,1,0,'I\'ve heard this one. Tell me another...',38942,0,0,25996), +(11115,0,0,'That sounds serious.',38937,0,0,25996), +(11121,1,0,'I\'ve heard this one. Tell me another...',38942,0,0,25996), +(11121,0,0,'That\'s not good.',38941,0,0,25996), +(11113,0,0,'Tell me a story, Ol\' Durty Pete!',38928,0,0,25996), +(11120,0,0,'Tell me another story, Ol\' Durty Pete!',38938,0,0,25996), +(11117,0,0,'Tell me another story, Ol\' Durty Pete!',38938,0,0,25996), +(11116,0,0,'Tell me another story, Ol\' Durty Pete!',38938,0,0,25996), +(11122,0,0,'Tell me another story, Ol\' Durty Pete!',38938,0,0,25996), +(11071,0,0,'Captain, I need a ride back to Northwatch Hold.',38581,0,0,25996), +(11068,0,0,'Admiral, can I get a ride to the Blackpool?',38574,0,0,25996), +(11197,0,0,'I\'m ready to fly.',39360,0,0,25996), +(10339,1,0,'Sentinel, I would like to ride one of your nightsabers to Astranaar.',33552,0,0,25996), +(10341,0,0,'Luara, I would like to take one of your nightsabers to Maestra\'s Post.',33588,0,0,25996), +(10490,0,0,'Ancient Onu, where may I find a Seed of the Earth?',34486,0,0,25996), +(10431,0,0,'I am ready. Begin the attack.',34222,0,0,25996), +(10491,0,0,'I\'d like to travel to Lor\'danel.',34110,0,0,25996), +(10416,0,0,'I\'d like to travel to the Ruins of Mathystra.',34105,0,0,25996), +(10427,0,0,'I\'d like to travel to the Bashal\'Aran.',34109,0,0,25996), +(14238,8,0,'Enter the Proving Grounds',74757,0,0,25996), +(10798,0,0,'I am ready! I want to join in the battle!',36414,0,0,25996), +(11775,0,0,'I want to browse your goods.',3370,0,0,25996), +(11776,0,1,'I want to browse your goods.',3370,0,0,25996), +(10715,0,0,'I am ready to do battle with the Magram clan!',36165,0,0,25996), +(10703,0,0,'I am prepared to join you in battle, Hydronis!',36079,0,0,25996), +(10680,1,0,'I need another Slitherblade Charm, Korrah.',50632,0,0,25996), +(10680,0,0,'I am ready to be shown this threat you speak of, Korrah.',35973,0,0,25996), +(11372,2,0,'Dyslix, I need to get to New Thalanaar!',40364,0,0,25996), +(8851,3,0,'Profession Trainer',2869,0,0,25996), +(8851,2,0,'Class Trainer',2868,0,0,25996), +(8851,1,0,'Bank',3426,0,0,25996), +(9123,1,1,'I want to browse your goods.',3370,0,0,25996), +(8846,0,0,'Can you send me to Theramore? I have an urgent message for Lady Jaina from King Wrynn.',22524,0,0,25996), +(2465,1,0,'I\'m ready to travel to Stormwind.',22522,0,0,25996), +(14297,8,1,'How may I help you?',30864,0,0,25996), +(14291,9,0,'I want to talk about the Arcane Momentum technique.',125293,0,0,25996), +(14291,8,0,'Enter the Proving Grounds',74757,0,0,25996), +(8254,1,3,'Train me.',3266,5,16,26124), +(8096,2,0,'Send me to the Abyssal Shelf!',16615,0,0,26124), +(7970,2,0,'Send me to Shatter Point!',17935,0,0,26124), +(7970,3,0,'I\'m on a bombing mission for Forward Commander Kingston. I need a gryphon destroyer!',18198,0,0,26124), +(8002,0,1,'I wish to browse your wares.',4424,0,0,26124), +(7883,0,1,'I want to browse your goods.',3370,0,0,26124), +(7884,0,1,'I want to browse your goods.',3370,0,0,26124), +(7512,0,3,'Train me.',3266,5,16,26124), +(7724,0,0,'Give me a battle standard. I will take control of Twin Spire Ruins.',15537,0,0,26124), +(7952,0,5,'Make this inn your home.',2822,0,0,26124), +(10363,1,1,'Let me browse your goods.',2823,3,128,26124), +(10363,0,3,'Train me.',3266,5,16,26124), +(14136,9,0,'I want to talk about the Arcane Momentum technique.',125293,0,0,26124), +(14136,8,0,'Enter the Proving Grounds',74757,0,0,26124), +(7484,1,8,'I want to create a guild crest.',3415,11,524288,26124), +(7484,0,7,'How do I form a guild?',3413,10,262144,26124), +(8282,11,0,'Gem Merchant',20385,0,0,26124), +(8326,21,0,'Skinning',2948,0,0,26124), +(8326,20,0,'Tailoring',2951,0,0,26124), +(8326,18,0,'Mining',2944,0,0,26124), +(8326,16,0,'Leatherworking',2947,0,0,26124), +(8326,15,0,'Jewelcrafting',15267,0,0,26124), +(8326,13,0,'Inscription',31542,0,0,26124), +(8326,11,0,'Herbalism',2950,0,0,26124), +(8326,9,0,'Fishing',3005,0,0,26124), +(8326,8,0,'First Aid',2949,0,0,26124), +(7771,0,0,'Private Weeks, I need another disguise.',15788,0,0,26124), +(7719,2,0,'Ready to survey the land.',56571,0,0,26124), +(8375,0,5,'Make this inn your home.',2822,0,0,26124), +(8304,5,0,'I want to fly to an old location!',19735,0,0,26124), +(8455,0,0,'Send me back to the Jagged Ridge.',19729,0,0,26124), +(8950,0,1,'Let me browse your goods.',2823,3,128,26124), +(8071,0,0,'Wind Trader Marid, I\'ve returned with more information on the nether drakes. I\'m prepared to be your business partner, and for an extra sum, I\'ll take care of that troublesome elf and her human friend.',17754,0,0,26365), +(8230,0,0,'I am ready. Let\'s make history!',18641,0,0,26365), +(8228,0,0,'I am that fleshling, Saeed. Let\'s go!',18639,0,0,26365), +(9113,0,5,'Make this inn your home.',2822,0,0,26365), +(8287,0,0,'I require the aid of another spirit hunter, Ar\'tor.',19017,0,0,26365), +(9055,1,1,'I want to browse your goods.',3370,0,0,26365), +(9055,0,5,'Make this inn your home.',2822,0,0,26365), +(15125,11,0,'Tell me about gathering professions.',47106,1,1,20886), +(15125,12,0,'Tell me about production professions.',47107,1,1,20886), +(46014,0,0,'Check his pocket...',0,1,1,29416), +(48705,0,0,'I am ready to GO!!!',0,1,1,29416), +(46881,0,0,'Check solder...',0,1,1,29416), +(46882,0,0,'Check solder...',0,1,1,29416), +(43572,0,0,'Lets Go!',0,1,1,29416), +(47814,0,0,'Take him.',0,1,1,29416), +(47820,0,0,'Take him.',0,1,1,29416), +(47821,0,0,'Take him.',0,1,1,29416), +(47822,0,0,'Take him.',0,1,1,29416), +(13060,0,1,'What do you have for sale?',66614,3,128,20886), +(33220,0,0,'Do you know, where I can find Ashwood Brand Sword?',0,1,1,29416), +(12416,0,0,'Talk....',0,1,1,29416), +(12414,0,0,'Talk....',0,1,1,29416), +(12415,0,0,'Talk....',0,1,1,29416), +(21910,5,0,'Can you teleport me back up to the bridge?',0,1,1,0), +(11131,0,0,'Да. Не могу ли я одолжить у тебя верхового ящера, который может доставить меня туда?',0,0,0,0), +(10972,1,0,'Я готов принять вызов.',0,0,0,0), +(12634,0,0,'I need a new GS-9x Multibot.',50617,1,1,29416), +(12185,3,3,'Train me in Engineering.',0,3,16,26365), +(12185,8,3,'Train me in Mining.',0,3,16,26365), +(12185,11,0,'Tell me about Herbalism.',47142,1,1,27547), +(12185,12,0,'Tell me about Mining.',47143,1,1,27547), +(12185,13,0,'Tell me about Skinning.',47144,1,1,27547), +(12185,14,0,'Tell me about production professions.',47107,1,1,27547), +(12188,11,3,'Train me in Herbalism.',47112,5,1,27547), +(12188,12,0,'Tell me about Alchemy.',47145,1,1,27547), +(17404,0,0,'You are free.....',0,1,1,29416), +(34959,0,0,'Lets take a ride!',0,1,1,29416), +(34957,0,0,'Lets take a ride!',0,1,1,29416), +(34958,0,0,'Lets take a ride!',0,1,1,29416), +(18956,0,0,'I\'ll have you out of there in just a moment.',0,1,1,29416), +(11136,0,0,'Your father?',38991,1,1,0), +(24381,0,0,'Runes changing',0,1,1,29416), +(25794,0,0,'Power ON!',0,1,1,29416), +(25318,0,0,'Lets Go!',0,1,1,29416), +(29384,0,0,'I\'m not a laborer. I\'m here to free you from servitude in the mines.',0,1,1,29416), +(30127,0,0,'Take this Iron!',0,1,1,29416), +(20000,0,28,'Its... Elementary...',117229,0,0,27980), +(19263,0,0,'Give me the crystal.',105073,0,0,27980), +(19237,0,0,'Drog me, brul.',104610,0,0,27980), +(20524,0,0,'I would like to witness the fall of Illidan Stormrage at the Black Temple again, Xe\'ra.',123324,0,0,27980), +(20328,0,28,'Place work order for Champion armaments.',122137,0,0,27980), +(19979,0,0,'|c999900005 Withered:|r Bring the chest back to Thalyssra.',115557,0,0,27980), +(1750,0,0,'I am ready to GO!',0,1,1,29416), +(66292,0,0,'I am ready to GO!',0,1,1,29416), +(15187,0,0,'Could you, please, send me to Moonglade, Emissary?',0,1,1,29416), +(39865,0,0,'Could you, please, send me to Hyjal?',0,1,1,29416), +(40056,0,0,'Please help us!',0,1,1,29416), +(39999,0,0,'Save Him!',0,1,1,29416), +(43036,0,0,'Lets Go!',0,1,1,29416), +(44768,0,0,'You free now!',0,1,1,29416), +(43170,0,0,'Destroy Entrance!!',0,1,1,29416), +(43170,1,0,'Destroy Entrance!!',0,1,1,29416), +(43170,2,0,'Destroy Entrance!!',0,1,1,29416), +(43170,3,0,'Destroy Entrance!!',0,1,1,29416), +(42468,0,0,'Here you Are!',0,1,1,29416), +(42465,0,0,'I am listening!',0,1,1,29416), +(19241,12,28,'Research recipes using Silver Mackerel.',104858,0,0,27980), +(65910,0,0,'Iam from Allience',0,1,1,29416), +(66567,0,0,'You saved now!',0,1,1,29416), +(66564,0,0,'You saved now!',0,1,1,29416), +(61492,0,0,'You saved now!',0,1,1,29416), +(67067,0,0,'Lets Go!',0,1,1,29416), +(55490,0,0,'You saved now!',0,1,1,29416), +(55201,0,0,'You saved now!',0,1,1,29416), +(56222,0,0,'I can beat you!',0,1,1,29416), +(59348,0,0,'I can help you!',0,1,1,29416), +(59572,0,0,'I can beat you!',0,1,1,29416), +(64475,0,0,'Give him relic...',0,1,1,29416), +(64491,0,0,'You saved!',0,1,1,29416), +(64493,0,0,'You saved!',0,1,1,29416), +(64494,0,0,'You saved!',0,1,1,29416), +(59899,0,0,'I am ready to go!',0,1,1,29416), +(56737,1,0,'I want to travel!',0,1,1,29416), +(56737,0,2,'I want to travel fast',0,4,8192,29416), +(54894,0,0,'Lets begin!',0,1,1,29416), +(55333,0,0,'Tell me everything!',0,1,1,29416), +(55283,0,0,'Tell me everything!',0,1,1,29416), +(54763,0,0,'You must go!',0,1,1,29416), +(55009,0,0,'We found it!',0,1,1,29416), +(54990,0,0,'You are free now!',0,1,1,29416), +(54914,0,0,'I found it!',0,1,1,29416), +(54944,0,0,'Let\'s get started!',0,1,1,29416), +(54925,0,0,'Let\'s get started!',0,1,1,29416), +(54924,0,0,'Let\'s get started!',0,1,1,29416), +(54926,0,0,'Let\'s get started!',0,1,1,29416), +(1951,16,0,'Zeppelin Master',0,1,1,27404), +(13365,0,0,'Actually, I saw Benedictus at Wyrmrest. He was the Twilight Prophet.',56677,1,1,25881), +(13366,0,0,'I\'m serious. Benedictus tried to kill Thrall and deliver Azeroth to Deathwing. I saw it with my own eyes.',56678,1,1,25881), +(22201,3,0,'What can you tell me about the Dark Iron dwarves?',0,0,0,28153), +(22082,0,0,'What do we know about the void elves?',0,0,0,28153), +(22177,0,3,'Tell me about Mining.',0,0,0,0), +(22173,0,3,'Train me in Engineering.',0,5,81,0), +(22172,0,1,'Let me browse your goods.',0,0,0,0), +(341,0,5,'Make this inn your home.',0,8,65537,0), +(14991,0,3,'Interested in catching some rare pets?',0,1,1,27404), +(22171,0,3,'Train me in Tailoring.',0,5,81,0), +(22169,0,3,'Train me in First Aid.',0,5,81,0), +(14991,1,1,'Interested in trading your battle-stones?',0,1,1,27404), +(20389,0,5,'Make this inn your home.',0,0,0,0), +(19515,0,0,'Send a signal to Ly\'leth Lunastre.',108581,0,0,27980), +(22234,1,1,'What do you have for sale?',0,3,66177,0), +(22234,0,5,'Make this inn your home.',0,8,66177,0), +(22068,0,0,'What do you know of Telogrus?',0,1,1,0), +(21910,1,0,'I passed my trial!',0,1,1,0), +(21910,0,0,'Hello, Vigilant Quoram. We met before on Argus.',0,1,1,0), +(8522,0,3,'Train me.',0,0,0,27356), +(20001,1,28,'I would like to requisition a Squad of Conjurors.',121579,0,0,27980), +(9821,3,0,'I\'d like to heal and revive my battle pets.',0,0,0,27377), +(9821,1,1,'I\'m looking for a lost companion.',56613,0,0,27547), +(11061,1,0,'I wish to join the battle underway.',38797,0,0,25549), +(63908,1,0,'Bien ! je suis prêt !',0,1,3,0), +(10708,0,0,'Kilag, I... uh, somehow... er, lost my scout.',36148,0,0,27481), +(10677,0,0,'Er, Dampwick, I need another miner....',36020,0,0,27481), +(18860,0,0,'I will fight alongside the Alliance in battlegrounds, for now.',100693,1,1,27481), +(18861,0,0,'I will fight alongside the Horde in battlegrounds, for now.',99976,1,1,0), +(1942,9,0,'Herbalism',0,1,1,27404), +(1942,8,0,'Flying',0,1,1,27404), +(1942,7,0,'Fishing',0,1,1,27404), +(1942,6,0,'First Aid',0,1,1,27404), +(1942,5,0,'Engineering',0,1,1,27404), +(1942,4,0,'Enchanting',0,1,1,27404), +(1942,3,0,'Cooking',0,1,1,27404), +(1942,2,0,'Blacksmithing',0,1,1,27404), +(1942,1,0,'Archaeology',0,1,1,27404), +(1942,0,0,'Alchemy',0,1,1,27404), +(12245,8,0,'Dalaran above the Broken Isles',0,1,1,27404), +(12245,7,0,'Blasted Lands and the Portal to Draenor',0,1,1,27404), +(12245,6,0,'Honeydew Village in Pandaria',0,1,1,27404), +(12245,5,0,'Areas opened up in the Cataclysm',0,1,1,27404), +(12245,4,0,'Borean Tundra in Northrend',0,1,1,27404), +(12245,3,0,'Hellfire Peninsula in Outland',0,1,1,27404), +(12245,2,0,'Stranglethorn Vale in the Eastern Kingdoms',0,1,1,27404), +(12245,1,0,'Undercity or Silvermoon City in the Eastern Kingdoms',0,1,1,27404), +(12245,0,0,'Thunder Bluff in Mulgore',0,1,1,27404), +(9727,1,0,'Western Zeppelin Tower',0,1,1,27404), +(9727,0,0,'Eastern Zeppelin Tower',0,1,1,27404), +(12637,1,0,'The Valley of Honor',0,1,1,27404), +(12637,0,0,'The Valley of Strength',0,1,1,27404), +(1949,9,0,'Monk',0,1,1,27404), +(1949,8,0,'Warrior',0,1,1,27404), +(1949,7,0,'Warlock',0,1,1,27404), +(1949,6,0,'Rogue',0,1,1,27404), +(1949,5,0,'Shaman',0,1,1,27404), +(1949,4,0,'Priest',0,1,1,27404), +(1949,3,0,'Paladin',0,1,1,27404), +(1949,2,0,'Mage',0,1,1,27404), +(1949,1,0,'Hunter',0,1,1,27404), +(1949,0,0,'Druid',0,1,1,27404), +(12638,1,0,'The Valley of Honor',0,1,1,27404), +(12638,0,0,'The Valley of Strength',0,1,1,27404), +(12639,1,0,'The Valley of Honor',0,1,1,27404), +(12639,0,0,'The Valley of Strength',0,1,1,27404), +(401,4,0,'Priest',45405,1,1,27843), +(401,3,0,'Paladin',48028,1,1,27843), +(401,2,0,'Mage',45404,1,1,27843), +(401,1,0,'Hunter',50546,1,1,27843), +(401,0,0,'Druid',45409,1,1,27843), +(11855,1,0,'Old Town Hunter Trainer',0,1,1,27843), +(11855,0,0,'Dwarven District Hunter Trainer',0,1,1,27843), +(9165,1,0,'Crafty, I need another Warsong banner.',24760,0,0,26365), +(9165,0,0,'Crafty, I lost my Warsong orc disguise.',24759,0,0,26365), +(18865,1,3,'Train me in the ways of herbalism.',15944,0,0,26365), +(14163,9,0,'I want to talk about the Arcane Momentum technique.',125293,0,0,26365), +(14163,8,0,'Enter the Proving Grounds',74757,0,0,26365), +(15134,2,0,'I\'d like to heal and revive my battle pets.',64115,0,0,26365), +(15134,1,1,'I\'m looking for a lost companion.',56613,0,0,26365), +(8886,0,0,'Sergeant, loan me your spyglass.',22774,0,0,26365), +(15135,2,0,'I\'d like to heal and revive my battle pets.',64115,0,0,26365), +(15135,1,1,'I\'m looking for a lost companion.',56613,0,0,26365), +(20913,1,1,'What do you have for sale?',20994,0,0,26365), +(12744,0,0,'Im ready. Lets go',0,1,1,0), +(12754,0,0,'Im ready to ride',0,1,1,0), +(11304,1,0,'Shym, I need to get to Westreach Summit',0,1,1,0), +(12711,0,0,'Honor the Earthen Ring bonfire!',50762,0,0,26899), +(12759,0,1,'Show me what you have for sale.',29959,0,0,25881), +(12037,0,0,'What can I do to help?',58813,0,0,26972), +(11967,0,0,'I\'m ready, Doctor Jones!',45392,0,0,26972), +(12763,1,0,'I am ready to meet Nozdormu at the End Time.',56606,0,0,26972), +(12990,0,0,'You turned Fandral Staghelm over to the Twilight\'s Hammer. Why have you betrayed the dragonflights?',52961,0,0,26972), +(10417,1,1,'I want to browse your goods.',3370,0,0,26899), +(9900,1,0,'If it please you, King Jokkum, may I know what has become of Krolmir?',30982,0,0,26822), +(10202,1,5,'Make this inn your home.',2822,8,65536,26365), +(9838,1,7,'How do I form a guild?',3413,10,262144,26822), +(9838,0,8,'I want to create a guild crest.',3415,11,524288,26822), +(10201,1,5,'Make this inn your home.',2822,8,65536,26365), +(9733,1,5,'Make this inn your home.',2822,8,65536,26365), +(9873,9,1,'May I browse your ancient gem recipes?',36327,0,0,26822), +(8833,0,5,'Make this inn your home.',2822,0,0,26755), +(8806,0,5,'Make this inn your home.',2822,0,0,26365), +(9299,0,5,'Make this inn your home.',2822,0,0,26822), +(9498,0,5,'Make this inn your home.',2822,0,0,26365), +(9628,0,5,'Make this inn your home.',2822,0,0,26365), +(9476,0,5,'Make this inn your home.',2822,0,0,26365), +(9245,0,5,'Make this inn your home.',2822,0,0,26365), +(9217,0,0,'What do you know about the Cult of the Damned?',25237,0,0,26365), +(18326,1,0,'Take me to the Tanaan Jungle.',96072,0,0,27602), +(18488,0,1,'What kind of naval equipment do you have?',95559,0,0,27791), +(17051,0,1,'I would like to buy from you.',14967,0,0,27602), +(16872,0,28,'I\'d like to submit a work order.',85816,0,0,27602), +(16707,2,2,'Show me where I can fly.',12271,0,0,27602), +(16877,1,2,'Show me where I can fly.',12271,0,0,27602), +(16718,1,3,'Train me in Inscription.',88801,0,0,27602), +(16718,0,3,'Train me in Archaeology.',88800,0,0,27602), +(16283,0,2,'Show me where I can fly.',12271,0,0,27602), +(16597,0,2,'Show me where I can fly.',12271,0,0,27791), +(16897,0,30,'I\'m looking to recruit someone.',86488,0,0,27602), +(17055,0,1,'I want a new recipe for myself.',85295,0,0,27602), +(17431,0,28,'I would like to place a work order.',83605,0,0,27602), +(16864,0,1,'I want a new recipe for myself.',85295,0,0,27602), +(18201,30,0,'Play \"Way of the Monk\"',92960,0,0,27602), +(18201,15,0,'Play Default Garrison Music',93061,0,0,27602), +(18201,14,0,'Play \"Curse of the Worgen\"',92959,0,0,27602), +(18201,13,0,'Play \"Exodar\"',92958,0,0,27602), +(18201,12,0,'Play \"Tinkertown\"',92957,0,0,27602), +(18201,11,0,'Play \"Gnomeregan\"',92956,0,0,27602), +(18201,10,0,'Play \"Night Song\"',92954,0,0,27602), +(18201,8,0,'Play \"Ironforge\"',92952,0,0,27602), +(18201,6,0,'Play \"Stormwind\"',86740,0,0,27602), +(18268,1,0,'Where can I get more music rolls?',93689,0,0,27602), +(18268,0,0,'Where are the jukebox parts?',93547,0,0,27602), +(16811,0,0,'Enter the Proving Grounds',74757,0,0,27791), +(16514,2,0,'Kalandrios, I would like to witness the Ritual of Binding again.',79317,0,0,27602), +(16595,0,0,'Remember the Battle at the Stones of Prophecy.',83478,0,0,27602), +(16829,0,0,'Give the order, Yrel. Destroy the gates and get us in there.',85568,0,0,27602), +(16825,0,0,'Like it or not, we need to move ahead. What\'s the situation?',85566,0,0,27602), +(16823,0,0,'I agree. A flanking maneuver will buy you the time you need to move most of our forces closer to Garrosh.',85559,0,0,27602), +(16586,0,0,'Yrel, let\'s blow open those gates and take Grommashar.',84079,0,0,27602), +(16423,1,0,'Thaelin, let\'s change this building into a corral.',85701,0,0,27602), +(17317,0,2,'I need a ride.',3409,0,0,27602), +(16894,5,0,'I\'m ready to fight in the Blood Championship.',86399,0,0,27602), +(18287,0,28,'I would like to place a work order.',83605,0,0,27602), +(16916,7,1,'What do we have in stock?',92025,0,0,27602), +(16452,1,1,'I want to browse your goods.',3370,0,0,27602), +(16452,0,5,'Make this inn your home.',2822,0,0,27602), +(16728,2,2,'Show me where I can fly.',12271,0,0,27602), +(16728,0,0,'Fly me to the Spirit Woods near Oshu\'gun.',83811,0,0,27602), +(16514,1,0,'Kalandrios, I would like to witness the Ritual of Binding again.',79317,0,0,27602), +(16514,0,0,'I am ready to begin the Ritual of Binding.',83982,0,0,27602), +(16492,0,0,'I stand with you, Gar\'rok. Rest with honor.',82719,0,0,27602), +(16494,0,0,'I wish to know the truth about Dahaka. What do you know of her death?',82686,0,0,27602), +(16653,0,0,'I am ready to commune with the furies.',82853,0,0,27602), +(16732,0,0,'Reel it in!',84868,0,0,27602), +(16904,0,0,'Marybelle Walsh sent me to rescue you. Go and I\'ll protect you!',86518,0,0,27602), +(17357,0,0,'The saberon attack is over. Go now, and rest in peace.',91492,0,0,27602), +(16467,0,0,'What can you tell me about the Steamwheedle Preservation Society?',82367,0,0,27602), +(16416,4,0,'I am ready to begin the fifth Trial of The Ring.',81662,0,0,27602), +(16416,3,0,'I am ready to begin the fourth Trial of The Ring.',81661,0,0,27602), +(16416,2,0,'I am ready to begin the third Trial of The Ring.',81660,0,0,27602), +(16416,1,0,'I am ready to begin the second Trial of The Ring.',81659,0,0,27602), +(16416,0,0,'I am ready to begin the first Trial of The Ring.',81656,0,0,27602), +(16569,1,1,'I want to browse your goods.',3370,0,0,27602), +(16569,0,5,'Make this inn your home.',2822,0,0,27602), +(16570,0,1,'I want to browse your goods.',3370,0,0,27602), +(18167,0,1,'I would like to buy from you.',14967,0,0,27602), +(16721,0,0,'Check for a pulse.',84745,0,0,27602), +(16597,2,0,'I need a flight to the border of Nagrand.',83511,0,0,27602), +(16650,0,0,'Show the schematic to Bryan.',83978,0,0,27602), +(16875,1,2,'Show me where I can fly.',12271,0,0,27602), +(16875,0,0,'Fly me to Talon Watch.',86449,0,0,27602), +(16832,0,5,'Make this inn your home.',2822,0,0,27602), +(16640,0,0,'Your prisoner is with me. He means your people no harm.',83844,0,0,27602), +(17043,1,1,'Let me browse your goods.',8097,0,0,27602), +(17043,0,5,'Make this inn your home.',2822,0,0,27602), +(17201,0,1,'I need reagents.',89963,0,0,27602), +(17107,1,3,'Train me in Inscription.',88801,0,0,27602), +(17107,0,3,'Train me in Archaeology.',88800,0,0,27602), +(16476,0,0,'\"Shadows gather...\"',83412,0,0,27602), +(16575,0,0,'\"Shadows gather...\"',83412,0,0,27602), +(16597,10,0,'I am needed urgently at the Iron Docks.',87474,0,0,27602), +(16597,9,0,'Please fly me to Spires of Arak.',91501,0,0,27602), +(16597,1,0,'Take me to my base in Talador.',83474,0,0,27602), +(16688,1,1,'Let me browse your goods.',8097,0,0,27602), +(16688,0,5,'Make this inn your home.',2822,0,0,27602), +(16597,7,0,'I\'m responding to the Steamwheedle call for help. Take me to the Spires of Arak.',88555,0,0,27602), +(18677,4,1,'Let me browse your goods.',8097,0,0,27602), +(18677,0,0,'How do I obtain spooky supplies and merry supplies?',99089,0,0,27602), +(17531,0,0,'I need you to come on patrol with me.',81638,0,0,27602), +(17422,0,0,'I need you to come on patrol with me.',81638,0,0,27602), +(17306,5,0,'Legendary: Gul\'dan Ascendant',95564,0,0,27602), +(17306,2,0,'Shadowmoon Valley: Darkness Falls',90937,0,0,27602), +(17306,1,0,'Tanaan Jungle: A Taste of Iron',90949,0,0,27602), +(17306,0,0,'Blasted Lands: Into the Portal',90945,0,0,27602), +(17319,0,1,'Show me what contracts are available.',92816,0,0,27602), +(16998,2,1,'I would like to buy from you.',14967,0,0,27602), +(18322,0,1,'Let me browse your goods.',8097,0,0,27602), +(18566,11,0,'Grant me a vision of Archimonde\'s fall at the Black Gate.',121897,0,0,27602), +(18566,10,0,'Grant me a vision of the Destructor\'s Rise atop Hellfire Citadel.',121896,0,0,27602), +(18566,9,0,'Grant me a vision of the Hellfire Citadel\'s Bastion of Shadows.',121895,0,0,27602), +(18566,8,0,'Grant me a vision of the Hellfire Citadel\'s Halls of Blood.',121894,0,0,27602), +(18566,7,0,'Grant me a vision of the Hellbreach, before the gates of Hellfire Citadel.',121893,0,0,27602), +(18566,6,0,'Grant me a vision of Blackhand\'s Crucible within the Blackrock Foundry.',121892,0,0,27602), +(18566,5,0,'Grant me a vision of the Blackrock Foundry\'s Iron Assembly.',121891,0,0,27602), +(18566,4,0,'Grant me a vision of the Blackrock Foundry\'s Black Forge.',121889,0,0,27602), +(18566,3,0,'Grant me a vision of the Blackrock Foundry\'s Slagworks.',121890,0,0,27602), +(18566,2,0,'Grant me a vision of the Imperator\'s Rise atop Highmaul.',121888,0,0,27602), +(18566,1,0,'Grant me a vision of the Arcane Sanctum of Highmaul.',121887,0,0,27602), +(18566,0,0,'Grant me a vision of the Walled City of Highmaul.',121886,0,0,27602), +(17330,1,0,'Me too!',91476,0,0,27602), +(17330,0,1,'I want to browse your goods.',3370,0,0,27602), +(16518,1,1,'I would like to buy from you.',14967,0,0,27404), +(16518,0,0,'Yes. I need you to help me operate that enormous tank.',83004,0,0,27404), +(16641,0,0,'Khadgar has asked us to go distract the Eye of Kilrogg.',83852,0,0,27404), +(16863,0,0,'FOR AZEROTH!',94100,0,0,27404), +(13843,0,0,'I am here with Ban Bearheart, and we demand an audience with Taran Zhu!',61677,0,0,27377), +(13831,1,0,'Alright, let\'s go up to the monastery.',63457,0,0,27377), +(13831,0,0,'I\'m ready to leave. Let\'s go!',63439,0,0,27377), +(13836,0,0,'Alright, I\'m ready to get back to the front.',61502,0,0,27377), +(13830,1,0,'I need a kite to get up to the wall!',61468,0,0,27377), +(13830,0,2,'I\'d like to take a kite somewhere.',61467,0,0,27377), +(13678,0,0,'Let\'s get out of here.',124915,0,0,27377), +(13681,0,0,'Yes... why don\'t you \"escort\" me out of here.',59730,0,0,27377), +(13680,0,0,'...That\'s enough. Let\'s go.',59728,0,0,27377), +(13794,0,1,'I would like to buy from you.',14967,0,0,27377), +(13795,1,5,'Make this inn your home.',2822,0,0,27377), +(13795,0,1,'I would like to buy from you.',14967,0,0,27377), +(13720,0,0,'',60198,0,0,27377), +(13893,0,0,'What is a \"luckydo\"?',61779,0,0,27377), +(13892,0,0,'I want to ask something else.',121489,0,0,27377), +(13796,0,1,'I would like to buy from you.',14967,0,0,27377), +(15055,2,0,'I\'d like to heal and revive my battle pets.',64115,0,0,27377), +(15055,1,1,'I\'m looking for a lost companion.',56613,0,0,27377), +(13686,0,1,'Let me browse your goods.',8097,0,0,27377), +(13467,2,0,'I\'ve changed my mind.',57673,0,0,27377), +(13467,0,0,'Let\'s go.',128698,0,0,27377), +(13462,4,2,'Show me where I can fly.',12271,0,0,27377), +(13462,3,0,'I need to meet up with Kang Bramblestaff.',57650,0,0,27377), +(13462,1,0,'I need to meet up with Ken-Ken, the hozen.',57649,0,0,27377), +(13464,2,0,'I\'ve changed my mind.',57673,0,0,27377), +(13464,0,0,'Let\'s go.',128698,0,0,27377), +(13745,0,0,'What is happening here?',95092,0,0,27377), +(13301,4,0,'Master, I wish to review my advanced training.',57458,0,0,27377), +(13301,3,0,'Master, I wish to review my basic training.',57434,0,0,27377), +(13301,2,0,'I\'ve done all that you\'ve asked of me. I\'m ready for the trial of stone.',55823,0,0,27377), +(13437,0,0,'Yes, the one with the eggs.',57459,0,0,27377), +(13301,1,0,'My fists are ready. Bring on the trial of wood.',55822,0,0,27377), +(13301,0,0,'I\'m ready for the trial of bamboo.',55821,0,0,27377), +(13310,1,0,'Yes, they\'re right here. Let\'s go.',55951,0,0,27377), +(13310,0,0,'Loon Mai has issued evacuation orders.',55941,0,0,27377), +(13318,0,0,'Yes, Commander Mai sent me, and I carry his evacuation orders.',55928,0,0,27377), +(13317,0,0,'Yes, Commander Mai sent me, and I carry his evacuation orders.',55928,0,0,27377), +(13320,0,0,'Loon Mai has issued evacuation orders.',55941,0,0,27377), +(13316,0,0,'Loon Mai has issued evacuation orders.',55941,0,0,27377), +(13311,0,0,'Loon Mai has issued evacuation orders.',55941,0,0,27377), +(13748,0,0,'I understand.',97920,0,0,27377), +(13747,0,0,'What happened to the wall, anyway?',60547,0,0,27377), +(13746,0,0,'Shado-Pan?',60546,0,0,27377), +(13424,0,0,'',57262,0,0,27377), +(14795,1,1,'I would like to buy from you.',14967,0,0,27377), +(14795,0,3,'Train me in Engineering.',47119,0,0,27377), +(14324,0,3,'Train me in Skinning.',47117,0,0,27377), +(13379,1,0,'Let\'s do this, Chen.',56890,0,0,27377), +(13378,0,0,'I\'ll help.',56889,0,0,27377), +(13398,0,0,'',56980,0,0,27377), +(13622,10,0,'How is my relationship with Tina Mudclaw?',59186,0,0,27377), +(13622,9,0,'How is my relationship with Sho?',59185,0,0,27377), +(13622,8,0,'How is my relationship with Old Hillpaw?',59184,0,0,27377), +(13622,7,0,'How is my relationship with Haohan Mudclaw?',59183,0,0,27377), +(13622,6,0,'How is my relationship with Jogu the Drunk?',59182,0,0,27377), +(13622,5,0,'How is my relationship with Gina Mudclaw?',59181,0,0,27377), +(13622,4,0,'How is my relationship with Farmer Fung?',59180,0,0,27377), +(13622,3,0,'How is my relationship with Fish Fellreed?',59179,0,0,27377), +(13622,2,0,'How is my relationship with Ella?',59178,0,0,27377), +(13622,1,0,'How is my relationship with Chee Chee?',59177,0,0,27377), +(13470,5,1,'I would like to buy from you.',14967,0,0,27377), +(13470,2,0,'Where does everyone live?',57739,0,0,27377), +(13470,1,0,'What kind of gifts do you like?',58603,0,0,27377), +(13470,0,0,'What can you tell me about gifts?',57703,0,0,27377), +(12135,0,0,'Well, let\'s get to it then.',46426,0,0,27326), +(12136,0,0,'And I take it you\'re going again...',46424,0,0,27326), +(12137,0,0,'You seem very certain.',46422,0,0,27326), +(12138,0,0,'Yeah...',46420,0,0,27326), +(11522,1,1,'Do you have any supplies?',45532,0,0,27178), +(11522,0,5,'May I rest here?',41414,0,0,27178), +(11489,0,0,'Who are you, friend?',40025,0,0,27178), +(11514,0,0,'Are there any weaknesses we can exploit? Any holes in the naga defenses?',41378,0,0,27178), +(11510,0,0,'Did you see Captain Taylor and his men?',41376,0,0,27178), +(11511,0,0,'How did you escape, Pollard?',41372,0,0,27178), +(11508,0,0,'What can you tell me about your captors?',41370,0,0,27178), +(11509,0,0,'How did you get down here?',41707,0,0,27178), +(11444,0,0,'Make for that cave to the west. It\'s safe and dry.',40804,0,0,27178), +(12213,0,0,'The perimeter is secure, commander.',47376,0,0,27291), +(18536,0,27,'Greetings and salutations, hero! I have the latest news from both continents and points beyond for your consideration.',9551,0,0,27843), +(18486,4,28,'I would like to build a battleship.',95672,0,0,27843), +(18486,3,28,'I would like to build a transport.',95673,0,0,27843), +(18486,1,28,'I would like to build a destroyer.',98364,0,0,27843), +(18253,0,2,'Show me where I can fly.',12271,0,0,27791), +(18599,0,1,'I would like to buy from you.',14967,0,0,27791), +(18437,0,1,'I need reagents.',89963,0,0,27791), +(18335,1,0,'How defended is that Iron Horde tunnel?',94827,0,0,27791), +(18335,0,0,'Arakkoa in Tanaan? Tell me more of Aktar\'s Watch.',94073,0,0,27791), +(18331,2,0,'What do you know of Zorammarsh?',94825,0,0,27791), +(18331,1,0,'What is happening at the Temple of Sha\'naar?',94068,0,0,27791), +(18331,0,0,'Tell me of Zeth\'Gol.',94064,0,0,27791), +(18333,0,0,'What is happening at the Temple of Sha\'naar?',94068,0,0,27791), +(18412,1,0,'What do those challenge totems you sell do?',94792,0,0,27791), +(18412,0,1,'Let me browse your goods.',8097,0,0,27791), +(18620,0,0,'Yes I would! You, sir, are a gentleman and a ... Skoller.',97090,0,0,27791), +(18228,0,0,'You are Lagar? I bring word from a shaman of your order. He says... Gul\'dan knows. May I ask what this means?',92994,0,0,27791), +(18670,0,1,'I would like to buy from you.',14967,0,0,27791), +(17542,0,0,'I need you to come on patrol with me.',81638,0,0,27602), +(17038,0,1,'Let me browse your goods.',8097,0,0,27602), +(16353,0,0,'What can you tell me about this place?',81043,0,0,27602), +(16367,0,0,'I am ready to return to the Jorune Mine.',81135,0,0,27602), +(16357,0,0,'I am ready to confront Kaelynara.',81134,0,0,27602), +(16312,0,0,'Do you need help?',80425,0,0,27602), +(16448,0,0,'So be it.',114186,0,0,27602), +(16447,0,0,'Very well. Let us fight.',81956,0,0,27602), +(16692,0,0,'Bring the Constructs back here.',92565,0,0,27602), +(16850,0,0,'Then let\'s hurry!',85801,0,0,27602), +(16814,0,0,'I am ready to teleport to the ship.',82591,0,0,27602), +(16878,0,0,'Begin your spell. I\'ll protect you!',86124,0,0,27602), +(17094,0,0,'Thanks. I\'ll meet them at the docks.',88735,0,0,27602), +(17321,0,1,'Let me browse your goods.',8097,0,0,27602), +(17541,0,0,'I need you to come on patrol with me.',81638,0,0,27602), +(17443,0,0,'I need you to come on patrol with me.',81638,0,0,27602), +(17511,0,0,'I need you to come on patrol with me.',81638,0,0,27602), +(18498,0,1,'I would like to buy outdated equipment from you.',95561,0,0,27602), +(18497,0,1,'I would like to buy outdated equipment from you.',95561,0,0,27602), +(18492,0,1,'I would like to buy outdated equipment from you.',95561,0,0,27602), +(18489,0,1,'I would like to buy outdated equipment from you.',95561,0,0,27602), +(17183,0,1,'Let me browse your goods.',8097,0,0,27602), +(17148,2,0,'Now show me \"Magnuum!\"',89201,0,0,27602), +(17148,1,0,'Okay, how about \"Azure Steel?\"',89200,0,0,27602), +(17148,0,0,'Show me \"Le Talbuk!\"',89199,0,0,27602), +(17182,0,1,'Let me browse your goods.',8097,0,0,27602), +(17152,0,3,'Train me in Skinning.',47117,0,0,27602), +(17153,0,3,'Train me in Blacksmithing.',47110,0,0,27602), +(17157,0,3,'Train me in Fishing.',89249,0,0,27602), +(17131,0,1,'What recipes do you sell?',35243,0,0,27602), +(17130,0,3,'Train me in Enchanting.',47111,0,0,27602), +(17334,11,0,'Item Upgrade',105470,0,0,27843), +(17334,10,0,'Vendor',44612,0,0,27843), +(17334,9,0,'Transmogrification & Void Storage',66651,0,0,27843), +(17334,8,0,'Stable Master',45383,0,0,27843), +(17334,7,0,'Profession Trainer',45382,0,0,27843), +(17334,6,0,'Pet Battle Trainer',66645,0,0,27843), +(17334,5,0,'Other Continents',129194,0,0,27843), +(17334,4,0,'Mailbox',45381,0,0,27843), +(17334,3,0,'Inn',44629,0,0,27843), +(17334,2,0,'Flight Master',45379,0,0,27843), +(17334,1,0,'Bank',78584,0,0,27843), +(17334,0,0,'Auction House',44627,0,0,27843), +(17312,0,1,'I would like to buy from you.',14967,0,0,27602), +(18324,0,1,'I\'d like to purchase Seals of Tempered Fate.',96895,0,0,27602), +(17044,0,1,'I would like to buy from you.',14967,0,0,27602), +(17126,0,1,'Let me browse your goods.',8097,0,0,27602), +(18275,0,0,'Why are you here?',93595,0,0,27602), +(18276,0,0,'Would you like to join our cause?',93588,0,0,27602), +(17049,1,0,'I\'d like to heal and revive my battle pets.',64115,0,0,27602), +(17128,0,5,'Make this inn your home.',2822,0,0,27602), +(17372,4,0,'Trade Supplies',45445,0,0,27602), +(17372,3,0,'Reputation Vendors',91526,0,0,27602), +(17372,2,0,'General Goods',45444,0,0,27602), +(17372,1,0,'Auction House',44627,0,0,27602), +(17372,0,0,'Apexis Shard Vendor',91525,0,0,27602), +(17349,14,0,'Tailoring',52077,0,0,27602), +(17349,13,0,'Skinning',106243,0,0,27602), +(17349,12,0,'Mining',78976,0,0,27602), +(17349,11,0,'Leatherworking',52071,0,0,27602), +(17349,10,0,'Jewelcrafting',45758,0,0,27602), +(17349,9,0,'Inscription',48811,0,0,27602), +(17349,8,0,'Herbalism',45768,0,0,27602), +(17349,7,0,'Fishing',99684,0,0,27602), +(17349,6,0,'First Aid',52066,0,0,27602), +(17349,5,0,'Engineering',51347,0,0,27602), +(17349,4,0,'Enchanting',52063,0,0,27602), +(17349,3,0,'Cooking',45763,0,0,27602), +(17349,2,0,'Blacksmithing',51346,0,0,27602), +(17349,1,0,'Archaeology',44649,0,0,27602), +(17349,0,0,'Alchemy',52058,0,0,27602), +(17348,2,0,'Stormwind',91470,0,0,27843), +(17348,1,0,'Ironforge',129104,0,0,27843), +(17348,0,0,'Darnassus',129386,0,0,27843), +(17344,2,0,'Town Hall',91463,0,0,27602), +(17344,1,0,'Inn',44629,0,0,27602), +(17344,0,0,'Bank',78584,0,0,27602), +(16597,5,0,'Take me to Stormshield in Ashran.',87595,0,0,27602), +(17009,1,0,'I need you to come on patrol with me.',81638,0,0,27602), +(17000,4,0,'Heard any pet battle news out of Tanaan Jungle?',96547,0,0,27602), +(17000,3,0,'Why are you called the Lioness?',87407,0,0,27602), +(17000,2,1,'Any pet stuff for sale?',87415,0,0,27602), +(17000,0,0,'I\'d like to heal and revive my battle pets.',64115,0,0,27602), +(17271,6,1,'What do we have in stock?',92025,0,0,27602), +(17271,3,0,'Prepare to battle the Shadowmoon clan.',86828,0,0,27602), +(17535,0,0,'I need you to come on patrol with me.',81638,0,0,27602), +(17308,0,0,'Listen to the Prophet\'s final message.',90923,0,0,27602), +(17089,1,1,'I want to browse your goods.',3370,0,0,27602), +(17089,0,5,'Make this inn your home.',2822,0,0,27602), +(16292,0,0,'I am ready to join the attack against the Iron Horde.',79399,0,0,27602), +(17426,0,28,'I would like to place a work order.',83605,0,0,27547), +(16236,0,0,'Who are you?',97339,0,0,27547), +(16872,4,0,'I don\'t have the 10 timber required to place a work order. Where can I find more timber?',85919,0,0,27547), +(16739,0,0,'I need you to come on patrol with me.',81638,0,0,27547), +(16744,1,0,'I\'d like to speak to the others.',85038,0,0,27547), +(16744,0,0,'Onaala, I choose you!',85040,0,0,27547), +(16745,1,0,'I\'d like to speak to the others.',85038,0,0,27547), +(16745,0,0,'Andren, I choose you!',85036,0,0,27547), +(16743,1,0,'I\'d like to speak to the others.',85038,0,0,27547), +(16743,0,0,'Chel, I choose you!',85039,0,0,27547), +(16690,0,0,'I am ready. Begin the ritual, Exarch.',84452,0,0,27547), +(16526,1,0,'How exactly did you get to Draenor, anyway?',83335,0,0,27547), +(16526,0,0,'Exotic pets? These all seem pretty ordinary...',83073,0,0,27547), +(16999,0,1,'Let me browse your goods.',8097,0,0,27547), +(16986,0,3,'I\'m interested in fishing these savage lands.',82737,0,0,27547), +(16994,0,28,'Can you refine this draenic stone into ore for me?',87263,0,0,27547), +(17069,2,1,'I want to browse your goods.',3370,0,0,27547), +(16862,0,0,'You look like an able fisherman, do you think you can help us out?\n\nWe have established a small garrison nearby, but we are finding it difficult to feed our troops. Any fishing advice you could give us would really help.',0,0,0,27547), +(17005,0,0,'Nevermind!',87414,0,0,27547), +(16464,0,1,'Let me browse your goods.',8097,0,0,27547), +(17199,0,1,'Let me browse your goods.',8097,0,0,27547), +(16966,0,28,'Can you grow these draenic seeds into herbs for me?',86940,0,0,27547), +(16962,1,1,'I want to browse your goods.',3370,0,0,27547), +(16561,0,1,'Let me browse your goods.',8097,0,0,27547), +(7742,1,0,'Khadgar, let\'s go over what happened when Garona attacked.',81168,0,0,27547), +(7742,0,0,'Remember when we compelled the All-Seeing Eye to spy upon the Shadow Council?',75144,0,0,27547), +(16609,0,0,'Very good, Zipfizzle. Move out.',83641,0,0,27547), +(15802,0,0,'Begin the compulsion of the All-Seeing Eye.',75188,0,0,27547), +(17235,3,0,'Blessing of K\'ure',90140,0,0,27547), +(17235,2,0,'Blessing of K\'ara',90170,0,0,27547), +(17235,1,0,'Blessing of D\'ore',90169,0,0,27547), +(17235,0,0,'Blessing of A\'dal',90171,0,0,27547), +(16598,0,0,'Gather Shelly\'s report.',83504,0,0,27547), +(16613,0,0,'Time to get back to work.',83683,0,0,27547), +(16998,1,0,'I have lost my garrison hearthstone, can you give me another?',87395,0,0,27547), +(16871,0,0,'We have everything we need. It\'s time to build the garrison.',81731,0,0,27547), +(13847,6,0,'Grant me your assistance, Wind-Reaver. [Klaxxi Enhancement]',62448,0,0,27377), +(13847,4,0,'Please fly me to Zan\'vess.',64747,0,0,27377), +(14314,0,0,'Grant me your assistance, Manipulator. [Klaxxi Augmentation]',66189,0,0,27377), +(14272,0,0,'Grant me your assistance, Bloodseeker. [Klaxxi Augmentation]',62565,0,0,27377), +(14271,0,0,'Grant me your assistance, Prime. [Klaxxi Augmentation]',62562,0,0,27377), +(14655,0,0,'Grant me your assistance, Iyyokuk. [Klaxxi Enhancement]',66186,0,0,27377), +(14656,0,0,'Grant me your assistance, Locust. [Klaxxi Augmentation]',66188,0,0,27377), +(13888,0,0,'Grant me your assistance, Malik. [Klaxxi Enhancement]',63617,0,0,27377), +(14398,0,0,'Deck Boss said you needed some help.',64125,0,0,27377), +(14663,0,1,'I would like to buy from you.',14967,0,0,27377), +(14044,2,0,'What are you doing here?',123345,0,0,27377), +(14275,0,0,'The forked blade is ready, and we have given our gift. Please perform your incantation.',62593,0,0,27377), +(14044,1,0,'Have you seen anybody named Stormstout come through here?',62382,0,0,27377), +(14043,1,0,'Is your name really Stormstout?',62374,0,0,27377), +(14046,1,0,'Have you seen any Stormstouts here in the Brewgarden?',62384,0,0,27377), +(14484,0,0,'I\'m ready to help you find your weapon.',68817,0,0,27377), +(13847,1,0,'Please fly me to the Clutches of Shek\'zeer',62449,0,0,27377), +(14667,0,0,'What was your old job?',66490,0,0,27377), +(14666,0,0,'Why is that?',66489,0,0,27377), +(14665,0,0,'And you make beer out of it.',66488,0,0,27377), +(14664,0,0,'Beer made with sap? That sounds...',66487,0,0,27377), +(14807,1,1,'I would like to buy from you.',14967,0,0,27377), +(14807,0,5,'Make this inn your home.',2822,0,0,27377), +(14641,0,3,'Train me in Alchemy.',47109,0,0,27377), +(13847,0,0,'Take me to Klaxxi\'vess.',62093,0,0,27377), +(15570,0,0,'I\'m ready to go.',126740,0,0,27377), +(13781,0,0,'I have orders for you to return to the battlefront.',60910,0,0,27377), +(13799,0,0,'I have orders for you to return to the battlefront.',60910,0,0,27377), +(13798,0,0,'I have orders for you to return to the battlefront.',60910,0,0,27377), +(13797,0,0,'I have orders for you to return to the battlefront.',60910,0,0,27377), +(13731,0,0,'',60318,0,0,27377), +(13739,1,0,'I need another Totem of Harmony.',60568,0,0,27377), +(13739,2,0,'I am ready to begin the ritual.',103586,0,0,27377), +(13733,0,0,'Examine the body.',60367,0,0,27377), +(14636,0,1,'Let me browse your goods.',8097,0,0,27377), +(14599,0,0,'Let\'s find out!',65517,0,0,27377), +(13753,0,1,'Let me browse your goods.',8097,0,0,27377), +(13810,0,5,'Please, sit and make yourself comfortable.',16966,0,0,27377), +(15041,1,3,'Train me in Mining.',47116,0,0,27377), +(15041,0,3,'Train me in Blacksmithing.',47110,0,0,27377), +(14993,1,3,'Train me in Inscription.',88801,0,0,27377), +(14993,0,3,'Train me in Herbalism.',47112,0,0,27377), +(14992,1,3,'Train me in Skinning.',47117,0,0,27377), +(14992,0,3,'Train me in Leatherworking.',47115,0,0,27377), +(14986,1,1,'What brews do you have available?',67501,0,0,27377), +(14986,0,3,'Train me.',3266,0,0,27377), +(14994,0,3,'Train me in First Aid.',66761,0,0,27377), +(14867,0,0,'I\'m ready to leave.',60252,0,0,27377), +(14288,0,0,'Where have the Thunder King\'s Remains been taken?!',63379,0,0,27377), +(14326,0,1,'I would like to buy from you.',14967,0,0,27377), +(14304,0,0,'I\'ll cover your post. Go rest and be with your family.',63477,0,0,27377), +(14305,0,0,'I\'ll cover your post. Go rest and be with your family.',63477,0,0,27377), +(14325,1,1,'I would like to buy from you.',14967,0,0,27377), +(14325,0,5,'Make this inn your home.',2822,0,0,27377), +(14597,0,1,'How may I help you?',113783,0,0,27377), +(13761,0,0,'I\'m ready to leave.',60252,0,0,27377), +(13760,0,0,'Have you noticed anything strange happening around Zouchin Village?',60780,0,0,27377), +(13759,0,0,'I\'m ready to leave.',60252,0,0,27377), +(13724,0,0,'I\'m ready to leave.',60252,0,0,27377), +(13723,0,0,'Go ahead with the binding, Cho.',60721,0,0,27377), +(14640,0,1,'I would like to buy from you.',14967,0,0,27377), +(13665,0,0,'Let\'s go, Miss Fanny.',59610,0,0,27377), +(13690,0,0,'Can you increase my swim speed again?',59852,0,0,27377), +(14039,1,1,'I would like to buy from you.',14967,0,0,27377), +(14039,0,5,'Make this inn your home.',2822,0,0,27377), +(14648,1,1,'I would like to buy from you.',14967,0,0,27377), +(14648,0,25,'Queue for Unga Ingoo.',64700,0,0,27377), +(13460,0,0,'',57630,0,0,27377), +(13440,0,0,'Why were you travelling to the Crane Temple?',57792,0,0,27377), +(13494,0,0,'Mantid?',57794,0,0,27377), +(13455,1,0,'Did you know that Lin found the Hidden Master? He\'s in Paoquan Hollow.',68821,0,0,27377), +(13611,0,0,'',59163,0,0,27377), +(13537,0,0,'How did you end up here?',68261,0,0,27377), +(13535,0,0,'How did you end up here?',68261,0,0,27377), +(13468,0,0,'I\'m ready, Koro.',57913,0,0,27377), +(15091,0,0,'Why didn\'t you return to Stormwind with the SI:7?',68264,0,0,27377), +(13454,0,0,'What are you doing here?',123345,0,0,27377), +(13446,0,0,'What are you doing here?',123345,0,0,27377), +(13455,0,0,'Join me!',56954,0,0,27377), +(13189,0,0,'Attempt to free Na Lek from his prison.',56956,0,0,27377), +(13488,1,0,'Did you know that Lin found the Hidden Master? He\'s in Paoquan Hollow.',68821,0,0,27377), +(14916,0,0,'Wow, Duyi. What have you got there?',67143,0,0,27377), +(14917,0,0,'Thank you, Maolin.',67147,0,0,27377), +(14310,1,3,'Train me.',3266,0,0,27377), +(14310,0,1,'I want to browse your goods.',3370,0,0,27377), +(14333,0,0,'What are you doing so far from home?',63799,0,0,27377), +(13491,1,0,'What is wrong with the portal?',57798,0,0,27377), +(13499,0,1,'I would like to buy from you.',14967,0,0,27377), +(13519,0,0,'Take the supplies.',58107,0,0,27377), +(13384,0,0,'How did you get here?',57304,0,0,27377), +(13419,0,0,'I have a different question.',62620,0,0,27377), +(13351,2,0,'Please tell me about Zhu\'s legacy.',57053,0,0,27377), +(13403,0,0,'Longbrow? Does that mean Yi-Mo is a descendant of Zhu?!',57054,0,0,27377), +(13387,2,0,'Did you know that Lin found the Hidden Master? He\'s in Paoquan Hollow.',68821,0,0,27377), +(13351,0,0,'Mei, do you have any idea where I can find salt around here?',56986,0,0,27377), +(13354,1,0,'I don\'t have time for this. Move your ass or I\'ll move it for you.',56553,0,0,27377), +(13354,0,0,'You have your whole life ahead of you.',56557,0,0,27377), +(13353,1,0,'You have your whole life ahead of you.',56557,0,0,27377), +(13353,0,0,'Please, Yi-Mo: your aunt\'s worried sick about you.',56552,0,0,27377), +(13355,1,0,'I don\'t have time for this. Move your ass or I\'ll move it for you.',56553,0,0,27377), +(13355,0,0,'Please, Yi-Mo: your aunt\'s worried sick about you.',56552,0,0,27377), +(14050,1,1,'Let me browse your goods.',8097,0,0,27377), +(14050,0,5,'Make this inn your home.',2822,0,0,27377), +(13334,0,0,'What weeds?',56221,0,0,27377), +(13334,2,0,'Can I buy some hops from you?',56243,0,0,27377), +(13850,0,0,'I\'m ready to go!',56189,0,0,27377), +(13850,2,0,'I\'m helping a friend brew some beer, and we need hops. Do you have any to spare?',56242,0,0,27377), +(13332,0,0,'What kind of gifts do you like?',58603,0,0,27377), +(13593,0,0,'What kind of gifts do you like?',58603,0,0,27377), +(13338,0,0,'What kind of gifts do you like?',58603,0,0,27377), +(13853,1,0,'Do you have any hops you can spare?',56244,0,0,27377), +(13594,0,0,'What kind of gifts do you like?',58603,0,0,27377), +(13409,1,0,'I\'m ready to go, Mudmug.',57599,0,0,27377), +(13445,2,0,'Yoon, I need some farming advice.',59501,0,0,27377), +(13653,11,0,'Can I replace something I\'ve already planted?',68850,0,0,27377), +(13653,10,0,'My crop is Growing... now what?',59688,0,0,27377), +(13653,9,0,'How do I deal with Stubborn weeds?',59526,0,0,27377), +(13653,8,0,'How do I deal with Occupied soil?',59525,0,0,27377), +(13653,7,0,'How do I care for Tangled crops?',59510,0,0,27377), +(13653,6,0,'How do I care for Runty crops?',59509,0,0,27377), +(13653,5,0,'How do I care for Wild crops?',59508,0,0,27377), +(13653,4,0,'How do I care for Smothered crops?',59507,0,0,27377), +(13653,3,0,'How do I care for Alluring crops?',59506,0,0,27377), +(13653,2,0,'How do I care for Wiggling crops?',59505,0,0,27377), +(13653,1,0,'How do I care for Infested crops?',59504,0,0,27377), +(13653,0,0,'How do I care for Parched crops?',59503,0,0,27377), +(15156,0,0,'I have another question...',59523,0,0,27377), +(13663,0,0,'I have another question...',59523,0,0,27377), +(13662,0,0,'I have another question...',59523,0,0,27377), +(13661,0,0,'I have another question...',59523,0,0,27377), +(13660,0,0,'I have another question...',59523,0,0,27377), +(13659,0,0,'I have another question...',59523,0,0,27377), +(13658,0,0,'I have another question...',59523,0,0,27377), +(13657,0,0,'I have another question...',59523,0,0,27377), +(13656,0,0,'I have another question...',59523,0,0,27377), +(13655,0,0,'I have another question...',59523,0,0,27377), +(13654,0,0,'I have another question...',59523,0,0,27377), +(13642,1,1,'Let me browse your goods.',8097,0,0,27377), +(13476,10,0,'I can\'t find someone. Help!',57727,0,0,27377), +(13476,9,0,'Where does Tina Mudclaw live?',57723,0,0,27377), +(13476,8,0,'Where does Sho live?',57720,0,0,27377), +(13476,7,0,'Where does Old Hillpaw live?',57719,0,0,27377), +(13476,6,0,'Where does Jogu live?',57726,0,0,27377), +(13476,5,0,'Where does Haohan Mudclaw live?',57722,0,0,27377), +(13476,4,0,'Where does Gina Mudclaw live?',57724,0,0,27377), +(13476,3,0,'Where does Fish Fellreed live?',57738,0,0,27377), +(13476,2,0,'Where does Farmer Fung live?',57725,0,0,27377), +(13476,1,0,'Where does Ella live?',57718,0,0,27377), +(13476,0,0,'Where does Chee Chee live?',57721,0,0,27377), +(13445,1,0,'What are you going to do, Farmer Yoon?',64134,0,0,27377), +(13641,0,0,'He just inherited Sunsong Ranch. You can literally see him from where you are standing.',59336,0,0,27377), +(13642,0,0,'I\'m here to pick up seeds for Farmer Yoon.',59334,0,0,27377), +(13584,2,5,'Make this inn your home.',2822,0,0,27377), +(13583,2,1,'Let me browse your goods.',8097,0,0,27377), +(14379,1,1,'I need supplies for cooking lessons.',63983,0,0,27377), +(14379,0,3,'I seek training in Pandaren cooking.',65287,0,0,27377), +(14585,0,1,'I need ingredients and equipment for my kitchen.',65288,0,0,27377), +(14422,0,3,'I seek training in the Way of the Oven.',65282,0,0,27377), +(13608,2,3,'I seek training in the Way of the Brew.',65272,0,0,27377), +(14581,0,3,'I seek training in the Way of the Wok.',65271,0,0,27377), +(13609,2,3,'I seek training in the Way of the Grill.',65279,0,0,27377), +(14584,0,3,'I seek training in the Way of the Pot.',65280,0,0,27377), +(14583,0,3,'I seek training in the Way of the Steamer.',65281,0,0,27377), +(15579,20,1,'Do you happen to have any fishing supplies?',72911,0,0,27377), +(15579,18,3,'I don\'t even know how to fish! Can you teach me?',72910,0,0,27377), +(15579,11,0,'Even better, can you just show me on my map?',72908,0,0,27377), +(15579,10,0,'Sure, I\'d love to hear a secret.',72907,0,0,27377), +(13343,0,3,'I can instruct you in tailoring. Interested?',20133,0,0,27377), +(13315,0,0,'Go ahead and speak with the water, Ashyo.',55764,0,0,27377), +(13740,0,0,'So, you\'re a homebrewer?',60517,0,0,27377), +(13279,0,0,'What happened, Chen?',55596,0,0,27377), +(13750,0,0,'Why aren\'t you helping me fight things?',60556,0,0,27377), +(13742,0,0,'Ha ha.',60521,0,0,27377), +(13741,0,0,'Is Mudmug your real name?',60519,0,0,27377), +(13270,0,0,'I\'m ready. Let\'s hit the road.',55319,0,0,27377), +(14315,1,1,'I would like to buy from you.',14967,0,0,27377), +(14315,0,25,'Queue for the Brewmoon Festival.',64698,0,0,27377), +(14330,1,1,'I would like to buy from you.',14967,0,0,27377), +(14330,0,5,'Make this inn your home.',2822,0,0,27377), +(14934,0,0,'Who are you?',97339,0,0,27377), +(13230,11,0,'Hit me as hard as you possibly can!',54815,0,0,27377), +(13230,10,0,'Hit me with average power!',54813,0,0,27377), +(13230,9,0,'Hit me softly!',54814,0,0,27377), +(13230,5,0,'Hit it as hard as possible.',54811,0,0,27377), +(13230,4,0,'Hit it with average power.',54809,0,0,27377), +(13230,3,0,'Hit it very softly.',54810,0,0,27377), +(13230,2,0,'Hit it as hard as possible.',54811,0,0,27377), +(13230,1,0,'Hit it with average power.',54809,0,0,27377), +(13230,0,0,'Hit it very softly.',54810,0,0,27377), +(13230,8,0,'Hit it as hard as possible.',54811,0,0,27377), +(13230,7,0,'Hit it with average power.',54809,0,0,27377), +(13230,6,0,'Hit it very softly.',54810,0,0,27377), +(13237,0,0,'Does all of this farmland belong to you?',55077,0,0,27377), +(12009,0,0,'I\'ve come at your call, Stonemother.',45522,0,0,27326), +(11689,1,0,'Throw me back up!',45329,0,0,27326), +(12243,6,0,'Blasted Lands and the portal to Draenor',129108,0,0,27843), +(12243,5,0,'Paw\'don Village in Pandaria',129105,0,0,27843), +(12243,4,0,'Areas opened up in the Cataclysm',129111,0,0,27843), +(12243,3,0,'Borean Tundra in Northrend',129110,0,0,27843), +(12243,2,0,'Hellfire Peninsula in Outland',129107,0,0,27843), +(19861,0,0,'Let\'s duel.',114449,0,0,27843), +(20486,0,0,'I\'ve heard this tale before... ',123132,0,0,27843), +(19930,1,0,'No, thank you.',115299,0,0,27843), +(19930,0,0,'Sure, I\'ll take a sip.',115298,0,0,27843), +(18488,1,0,'I hear you\'re an expert on naval equipment. Have some time to help me out?',98453,0,0,27602), +(18486,7,28,'I would like to build another destroyer.',98351,0,0,27602), +(18486,6,28,'Start construction on our first destroyer.',95538,0,0,27602), +(18337,2,0,'Fel corrupted water is just pouring down from the mountain. What is going on at the Throne of Kil\'jaeden?',94832,0,0,27602), +(18337,1,0,'The Fel Forge looks completely corrupted, what are they building there?',94830,0,0,27602), +(18337,0,0,'Lots of ships coming into that harbor, what\'s going on there?',94085,0,0,27602), +(18226,0,0,'What happened here?',107100,0,0,27602), +(18328,0,0,'What\'s the situation?',92972,0,0,27602), +(18253,2,0,'Take me to the Iron Front.',92950,0,0,27602), +(18582,4,0,'The Mechashredder.',96771,0,0,27602), +(18582,2,0,'Artillery Strike.',96769,0,0,27602), +(18582,0,0,'Call to Arms.',96767,0,0,27602), +(16242,0,0,'I\'m ready, Fiona.',79206,0,0,27547), +(16663,2,0,'Brighteye, go fetch!',84053,0,0,27547), +(16663,1,0,'Okay, Brighteye, now play dead!',84056,0,0,27547), +(16663,0,0,'Sit, Brighteye, sit!',84055,0,0,27547), +(17533,0,0,'I need you to come on patrol with me.',81638,0,0,27602), +(16940,1,0,'What are you doing here?',123345,0,0,27547), +(16424,0,0,'Prophet, we\'re being overrun!',81697,0,0,27547), +(15997,0,0,'Let\'s get out of here!',106187,0,0,27547), +(16442,2,0,'Your allies\' lives will mean nothing if you give up here. Let their sacrifice inspire you.',81927,0,0,27547), +(16442,1,0,'It is not our deaths that matter in the end, but how we live. How will you live, Yrel?',81926,0,0,27547), +(16442,0,0,'You cannot abandon them to this fate. If we forsake our friends now, we are no better than Ner\'zhul.',81925,0,0,27547), +(15997,3,0,'Think of your people. The captives still need our help!',81487,0,0,27547), +(15997,2,0,'Believe in the Light! Despite setbacks, it will always prevail.',81497,0,0,27547), +(15997,1,0,'We can\'t give up now! Heroes learn from their mistakes.',81489,0,0,27547), +(16395,8,0,'Pull yourself together, Yrel! You can do better than this!',81493,0,0,27547), +(16395,3,0,'We all start from humble beginnings. I took my first steps outside an abbey in Elwynn Forest.',81916,0,0,27547), +(16395,0,0,'You must choose, Yrel. Will you rise and fight, or fall here to doubt?',81495,0,0,27547), +(16396,2,0,'Your people have triumphed over endless persecution. Will you let their hopes die here without a fight?',81501,0,0,27547), +(16396,1,0,'\'Doubt the Light\' just doesn\'t have the same ring to it.',81500,0,0,27547), +(16396,0,0,'The Light is only as strong as its champions. Believe in YOURSELF.',81499,0,0,27547), +(15860,0,0,'I need a Shadowmoon orc illusion.',81975,0,0,27547), +(16454,1,1,'I would like to buy from you.',14967,0,0,27547), +(16454,0,5,'Make this inn your home.',2822,0,0,27547), +(15174,3,1,'Can I purchase one of your traps?',68924,0,0,27377), +(15212,0,1,'I would like to buy from you.',14967,0,0,27377), +(14955,1,0,'I\'m ready to leave.',60252,0,0,27377), +(16509,13,0,'Tell me of the Downfall of Garrosh Hellscream.',82880,0,0,27377), +(16509,12,0,'Tell me of the Underhold beneath Orgrimmar.',82879,0,0,27377), +(16509,11,0,'Tell me of the war that came to the Gates of Retribution.',82878,0,0,27377), +(16509,10,0,'Tell me of the Vale of Eternal Sorrows that surrounds us.',82877,0,0,27377), +(16509,9,0,'Tell me of Lei Shen\'s Pinnacle of Storms.',82876,0,0,27377), +(16509,8,0,'Tell me of the twisted mogu Halls of Flesh-Shaping.',82875,0,0,27377), +(16509,7,0,'Tell me of the Forgotten Depths beneath the Throne of Thunder.',82874,0,0,27377), +(16509,6,0,'Tell me of the Last Stand of the Zandalari.',82873,0,0,27377), +(16509,5,0,'Tell me of the Terrace of Endless Spring.',82871,0,0,27377), +(16509,4,0,'Tell me of the Nightmare of Shek\'zeer.',82870,0,0,27377), +(16509,3,0,'Tell me of the Dread Approach to the Heart of Fear.',82869,0,0,27377), +(16509,2,0,'Tell me of the Vault of Mysteries.',82868,0,0,27377), +(16509,1,0,'Tell me of the Guardians of Mogu\'shan.',82865,0,0,27377), +(16370,6,0,'Tell me of the Crypt of Forgotten Kings (Heroic).',81201,0,0,27377), +(16370,5,0,'Tell me the tale of a Brewing Storm (Heroic).',81200,0,0,27377), +(16370,4,0,'Tell me the tale of Blood in the Snow (Heroic).',81199,0,0,27377), +(16370,3,0,'Tell me of the Secrets of Ragefire (Heroic).',81198,0,0,27377), +(16370,2,0,'Tell me of the unearthing of the Dark Heart of Pandaria (Heroic).',81197,0,0,27377), +(16370,1,0,'Tell me of the Battle on the High Seas (Heroic).',81196,0,0,27377), +(16364,16,0,'Tell me the tale of Blood in the Snow.',81154,0,0,27377), +(16364,15,0,'Tell me of the Secrets of Ragefire.',81153,0,0,27377), +(16364,14,0,'Tell me of the unearthing of the Dark Heart of Pandaria.',81152,0,0,27377), +(16364,13,0,'Tell me of the Battle on the High Seas.',81150,0,0,27377), +(16364,12,0,'Tell me of the defense of Lion\'s Landing.',83422,0,0,27377), +(16364,10,0,'Tell me of how Varian and Tyrande learned a Little Patience.',81151,0,0,27377), +(16364,9,0,'Tell me of the Dagger in the Dark that felled Vol\'jin.',81149,0,0,27377), +(16364,8,0,'Tell me of the Assault on Zan\'vess.',81146,0,0,27377), +(16364,7,0,'Tell me of Theramore\'s Fall.',81148,0,0,27377), +(16364,6,0,'Tell me of the Brewmoon Festival.',81147,0,0,27377), +(16364,5,0,'Tell me the tale of a Brewing Storm.',81145,0,0,27377), +(16364,4,0,'Tell me of the Arena of Annihilation.',81144,0,0,27377), +(16364,3,0,'Tell me of the Crypt of Forgotten Kings.',81143,0,0,27377), +(16364,2,0,'Tell me of Unga Ingoo.',81142,0,0,27377), +(16364,1,0,'Tell me of Greenstone Village.',81141,0,0,27377), +(14615,1,1,'Let me in on your other projects.',65828,0,0,27377), +(14615,0,3,'I need some training.',65826,0,0,27377), +(14582,0,3,'Train me in Inscription.',88801,0,0,27377), +(15152,11,0,'Other',66646,0,0,27377), +(15152,10,0,'Vendor',44612,0,0,27377), +(15152,9,0,'Stable Master',45383,0,0,27377), +(15152,8,0,'Transmogrification and Void Storage',72967,0,0,27377), +(15152,7,0,'Quartermasters',66700,0,0,27377), +(15152,6,0,'Profession Trainer',45382,0,0,27377), +(15152,5,0,'Pet Battle Trainer',66645,0,0,27377), +(15152,4,0,'Inn',44629,0,0,27377), +(15152,3,0,'Flying Trainer',66644,0,0,27377), +(15152,2,0,'Flight Master',45379,0,0,27377), +(15152,1,0,'Bank',78584,0,0,27377), +(14404,0,0,'Can you play me a song?',64617,0,0,27377), +(14558,11,0,'Other',66646,0,0,27377), +(14558,10,0,'Vendor',44612,0,0,27377), +(14558,9,0,'Stable Master',45383,0,0,27377), +(14558,7,0,'Quartermasters',66700,0,0,27377), +(14558,6,0,'Profession Trainer',45382,0,0,27377), +(14558,5,0,'Pet Battle Trainer',66645,0,0,27377), +(14558,4,0,'Inn',44629,0,0,27377), +(14558,3,0,'Flying Trainer',66644,0,0,27377), +(14558,2,0,'Flight Master',45379,0,0,27377), +(14558,1,0,'Bank',78584,0,0,27377), +(15718,0,1,'I would like to buy from you.',14967,0,0,27377), +(15952,0,1,'Examine his goods.',76560,0,0,27377), +(14680,2,0,'What can I find here in the city?',66598,0,0,27377), +(14680,0,5,'Make this inn your home.',2822,0,0,27377), +(14806,0,0,'He knows more about this land than we do. Perhaps you should heed his warnings.',66784,0,0,27377), +(14833,11,0,'Other',66646,0,0,27377), +(14833,10,0,'Vendor',44612,0,0,27377), +(14833,9,0,'Stable Master',45383,0,0,27377), +(14833,7,0,'Quartermasters',66700,0,0,27377), +(14833,6,0,'Profession Trainer',45382,0,0,27377), +(14833,5,0,'Pet Battle Trainer',66645,0,0,27377), +(14833,4,0,'Inn',44629,0,0,27377), +(14833,3,0,'Flying Trainer',66644,0,0,27377), +(14833,2,0,'Flight Master',45379,0,0,27377), +(14833,1,0,'Bank',78584,0,0,27377), +(14690,0,0,'I have another question.',98552,0,0,27377), +(15690,0,0,'I\'d like to travel to Ratchet.',73922,0,0,27377), +(15107,0,0,'How do I become a battle pet trainer?',68459,0,0,27377), +(14518,0,0,'Where can I find the Shado-Pan Quartermaster?',66722,0,0,27377), +(14346,1,0,'Why should I help the Shado-Pan?',64751,0,0,27377), +(14346,0,0,'How can I help the Shado-Pan?',64752,0,0,27377), +(14523,0,0,'Where can I find the Klaxxi Quartermaster?',66719,0,0,27377), +(14522,1,0,'How will I be rewarded by helping the Klaxxi?',64761,0,0,27377), +(14522,0,0,'How can I help the Klaxxi?',64762,0,0,27377), +(13651,2,1,'I would like to buy from you.',14967,0,0,27377), +(14514,0,0,'Where can I find the Golden Lotus Quartermaster?',66718,0,0,27377), +(14347,1,0,'Will I be rewarded for helping to defend the Vale?',64745,0,0,27377), +(14347,0,0,'How can I help The Golden Lotus?',64746,0,0,27377), +(14348,3,1,'I would like to buy from you.',14967,0,0,27377), +(14348,2,0,'Why should I help the August Celestials?',64740,0,0,27377), +(14348,1,0,'How can I help the August Celestials today?',64741,0,0,27377), +(14512,0,1,'I would like to buy from you.',14967,0,0,27377), +(14513,0,1,'I would like to buy from you.',14967,0,0,27377), +(14508,0,0,'Where can I find the Order of the Cloud Serpent Quartermaster?',66721,0,0,27377), +(14507,1,0,'What is the reward for rising through the Order of the Cloud Serpent?',64730,0,0,27377), +(14507,0,0,'What does it mean to join the Order of the Cloud Serpent?',64729,0,0,27377), +(14504,0,1,'I would like to buy from you.',14967,0,0,27377), +(14505,0,0,'Where can I find the Tillers Quartermaster?',66723,0,0,27377), +(14350,1,0,'Why should I help the Tillers?',64724,0,0,27377), +(14350,0,0,'What kind of stuff can I do with the Tillers?',64725,0,0,27377), +(14503,0,0,'Where can I find the Anglers Quartermaster?',66716,0,0,27377), +(14349,1,0,'If I help the Anglers, what\'s in it for me?',64716,0,0,27377), +(14349,0,0,'Where can I find the Anglers?',64717,0,0,27377), +(14351,1,0,'Are there rewards for helping brewmasters?',64693,0,0,27377), +(14351,0,0,'Where can I find brewmasters that might need aid?',64694,0,0,27377), +(14520,0,0,'Where can I find the Lorewalkers Quartermaster?',66720,0,0,27377), +(14519,1,0,'Why should I help the Lorewalkers?',64756,0,0,27377), +(14519,0,0,'How can I help the Lorewalkers?',64757,0,0,27377), +(14575,0,1,'I would like to buy from you.',14967,0,0,27377), +(14692,2,0,'I have another question.',98552,0,0,27377), +(14692,1,0,'Class Trainer',45378,0,0,27377), +(14692,0,0,'Battlemasters',45377,0,0,27377), +(14751,0,0,'I have another question.',98552,0,0,27377), +(14752,0,0,'I have another question.',98552,0,0,27377), +(14693,22,0,'I have another question.',98552,0,0,27377), +(14693,21,0,'Trade Supplies',45445,0,0,27377), +(14693,20,0,'Tailoring Supplies',66673,0,0,27377), +(14693,19,0,'Sweet Treats',66672,0,0,27377), +(14693,18,0,'Poisons & Reagents',45446,0,0,27377), +(14693,17,0,'Mining Supplies',66671,0,0,27377), +(14693,16,0,'Meat',66670,0,0,27377), +(14693,15,0,'Leatherworking & Skinning Supplies',66669,0,0,27377), +(14693,14,0,'Jewelcrafting Supplies',66668,0,0,27377), +(14693,13,0,'Inscription Supplies',66667,0,0,27377), +(14693,12,0,'Herbs',66665,0,0,27377), +(14693,11,0,'General Goods',45444,0,0,27377), +(14693,10,0,'Food & Drink',66664,0,0,27377), +(14693,9,0,'Fishing Supplies',66663,0,0,27377), +(14693,8,0,'First Aid Supplies',66662,0,0,27377), +(14693,7,0,'Fireworks',66661,0,0,27377), +(14693,6,0,'Engineering Supplies',66659,0,0,27377), +(14693,5,0,'Enchanting Supplies',66658,0,0,27377), +(14693,4,0,'Cooking Supplies',66657,0,0,27377), +(14693,3,0,'Brews',66656,0,0,27377), +(14693,2,0,'Bread',66655,0,0,27377), +(14693,1,0,'Blacksmithing Supplies',66654,0,0,27377), +(14693,0,0,'Alchemy Goods',66653,0,0,27377), +(14771,0,0,'I have another question.',98552,0,0,27377), +(14750,0,0,'I have another question.',98552,0,0,27377), +(14749,0,0,'I have another question.',98552,0,0,27377), +(14748,0,0,'I have another question.',98552,0,0,27377), +(14747,0,0,'I have another question.',98552,0,0,27377), +(14746,0,0,'I have another question.',98552,0,0,27377), +(14745,0,0,'I have another question.',98552,0,0,27377), +(14744,0,0,'I have another question.',98552,0,0,27377), +(14743,0,0,'I have another question.',98552,0,0,27377), +(14742,0,0,'I have another question.',98552,0,0,27377), +(14770,0,0,'I have another question.',98552,0,0,27377), +(14741,0,0,'I have another question.',98552,0,0,27377), +(14740,0,0,'I have another question.',98552,0,0,27377), +(14739,0,0,'I have another question.',98552,0,0,27377), +(14738,0,0,'I have another question.',98552,0,0,27377), +(14737,0,0,'I have another question.',98552,0,0,27377), +(14736,0,0,'I have another question.',98552,0,0,27377), +(14735,0,0,'I have another question.',98552,0,0,27377), +(14697,0,0,'I have another question.',98552,0,0,27377), +(14696,0,0,'I have another question.',98552,0,0,27377), +(14695,0,0,'I have another question.',98552,0,0,27377), +(14694,0,0,'I have another question.',98552,0,0,27377), +(14691,0,0,'I have another question.',98552,0,0,27377), +(14772,13,0,'I have another question.',98552,0,0,27377), +(14772,12,0,'Tillers',66706,0,0,27377), +(14772,11,0,'Shado-Pan',66709,0,0,27377), +(14772,10,0,'Order of the Cloud Serpent',66707,0,0,27377), +(14772,9,0,'Lorewalkers',66713,0,0,27377), +(14772,8,0,'Klaxxi',66708,0,0,27377), +(14772,7,0,'Golden Lotus',66710,0,0,27377), +(14772,5,0,'August Celestials',66712,0,0,27377), +(14772,4,0,'Anglers',66704,0,0,27377), +(14772,3,0,'Valor Quartermaster',66702,0,0,27377), +(14772,2,0,'Justice Quartermaster',66945,0,0,27377), +(14772,1,0,'Honor Quartermaster',66703,0,0,27377), +(14772,0,0,'Conquest Quartermaster',66701,0,0,27377), +(14785,0,0,'I have another question.',98552,0,0,27377), +(14784,0,0,'I have another question.',98552,0,0,27377), +(14783,0,0,'I have another question.',98552,0,0,27377), +(14782,0,0,'I have another question.',98552,0,0,27377), +(14781,0,0,'I have another question.',98552,0,0,27377), +(14780,0,0,'I have another question.',98552,0,0,27377), +(14778,0,0,'I have another question.',98552,0,0,27377), +(14776,0,0,'I have another question.',98552,0,0,27377), +(14775,0,0,'I have another question.',98552,0,0,27377), +(14831,0,0,'I have another question.',98552,0,0,27377), +(14774,0,0,'I have another question.',98552,0,0,27377), +(14773,0,0,'I have another question.',98552,0,0,27377), +(14769,15,0,'I have another question.',98552,0,0,27377), +(14769,14,0,'Tailoring',52077,0,0,27377), +(14769,13,0,'Skinning',106243,0,0,27377), +(14769,12,0,'Mining',78976,0,0,27377), +(14769,11,0,'Leatherworking',52071,0,0,27377), +(14769,10,0,'Jewelcrafting',45758,0,0,27377), +(14769,9,0,'Inscription',48811,0,0,27377), +(14769,8,0,'Herbalism',45768,0,0,27377), +(14769,7,0,'Fishing',99684,0,0,27377), +(14769,6,0,'First Aid',52066,0,0,27377), +(14769,5,0,'Engineering',51347,0,0,27377), +(14769,4,0,'Enchanting',52063,0,0,27377), +(14769,3,0,'Cooking',45763,0,0,27377), +(14769,2,0,'Blacksmithing',51346,0,0,27377), +(14769,1,0,'Archaeology',44649,0,0,27377), +(14769,0,0,'Alchemy',52058,0,0,27377), +(14768,0,0,'I have another question.',98552,0,0,27377), +(14767,0,0,'I have another question.',98552,0,0,27377), +(14766,0,0,'I have another question.',98552,0,0,27377), +(14765,0,0,'I have another question.',98552,0,0,27377), +(14764,0,0,'I have another question.',98552,0,0,27377), +(14763,0,0,'I have another question.',98552,0,0,27377), +(14761,0,0,'I have another question.',98552,0,0,27377), +(14762,0,0,'I have another question.',98552,0,0,27377), +(14754,0,0,'I have another question.',98552,0,0,27377), +(14760,0,0,'I have another question.',98552,0,0,27377), +(14759,0,0,'I have another question.',98552,0,0,27377), +(14758,0,0,'I have another question.',98552,0,0,27377), +(14756,0,0,'I have another question.',98552,0,0,27377), +(14757,0,0,'I have another question.',98552,0,0,27377), +(14755,0,0,'I have another question.',98552,0,0,27377), +(14689,0,0,'I have another question.',98552,0,0,27377), +(14688,0,0,'I have another question.',98552,0,0,27377), +(14686,0,0,'I have another question.',98552,0,0,27377), +(14561,0,0,'I have another question.',98552,0,0,27377), +(15127,2,0,'I\'d like to heal and revive my battle pets.',64115,0,0,27377), +(14630,0,3,'Train me in Blacksmithing.',47110,0,0,27377), +(14470,0,1,'Let me browse your goods.',8097,0,0,27377), +(13637,0,1,'I would like to buy from you.',14967,0,0,27377), +(13635,1,1,'I would like to buy from you.',14967,0,0,27377), +(13635,0,5,'Make this inn your home.',2822,0,0,27377), +(13691,0,0,'Well you can\'t just stay in here! You leave me no choice!\n',0,0,0,27377), +(13692,0,0,'Are you sure you don\'t want to come with me?',59849,0,0,27377), +(13636,0,1,'I would like to buy from you.',14967,0,0,27377), +(13644,0,1,'I would like to buy from you.',14967,0,0,27377), +(13591,0,1,'I would like to buy from you.',14967,0,0,27377), +(13554,0,1,'Show me your wares.',90189,0,0,27377), +(13671,1,0,'What is a grummle?',61782,0,0,27377), +(13671,0,0,'What is a \"luckydo\"?',61779,0,0,27377), +(13852,0,0,'I want to ask something else.',121489,0,0,27377), +(13851,0,0,'I want to ask something else.',121489,0,0,27377), +(15540,0,1,'I\'ll... take a look.',16317,0,0,27377), +(14528,0,1,'I would like to buy from you.',14967,0,0,27377), +(13789,0,1,'I would like to buy from you.',14967,0,0,27377), +(14868,0,0,'I\'m from the Alliance. We\'re here to save you and rebuild your village.',67011,0,0,27377), +(14855,0,0,'I\'m from the Alliance. We\'re here to save you and rebuild your village.',67011,0,0,27377), +(13783,0,0,'I\'m ready. Begin the ritual.',61092,0,0,27377), +(13803,0,0,'There\'s still hope - Gorai is still alive, to the south. Go!',61045,0,0,27377), +(14800,0,3,'Train me in First Aid.',66761,0,0,27377), +(14530,0,0,'Who is in the Vale now?',64795,0,0,27377), +(14532,0,0,'What is the Vale of Eternal Blossoms?',64777,0,0,27377), +(13580,1,1,'I would like to buy from you.',14967,0,0,27366), +(13580,0,25,'Queue for A Brewing Storm.',64696,0,0,27366), +(13044,0,0,'Get to Hanae\'s house. It\'s safe there.',53135,0,0,27366), +(13646,0,0,'I am ready to leave.',59390,0,0,27366), +(14381,0,0,'Let\'s do this, Mishi!',63998,0,0,27366), +(14364,0,0,'I am ready to leave.',59390,0,0,27366), +(13592,0,0,'What can I do to help?',83851,0,0,27366), +(13605,1,3,'What can you teach me?',9980,0,0,27366), +(13605,0,0,'What can I do to help?',83851,0,0,27366), +(13581,0,0,'Let\'s see what you\'ve got.',58725,0,0,27366), +(13228,0,0,'What can I do to help?',83851,0,0,27366), +(13281,0,1,'Let me browse your goods.',8097,0,0,27366), +(13325,0,0,'I would like to return to the temple grounds.',56094,0,0,27366), +(13324,1,0,'I have a message for the Jade Serpent.',56092,0,0,27366), +(13372,0,1,'I would like to buy from you.',14967,0,0,27366), +(13371,0,5,'Make this inn your home.',2822,0,0,27366), +(13550,2,0,'Take me to the Temple of the Jade Serpent.',61342,0,0,27366), +(13550,0,0,'I need a ride to the top of the statue.',58416,0,0,27366), +(13551,0,0,'Did someone say they needed jade?',58442,0,0,27366), +(13550,1,0,'I\'ve got a jade delivery for you.',58443,0,0,27366), +(13553,0,0,'I\'ve got your jade right here.',58441,0,0,27366), +(13549,0,0,'I\'ve got a new jade shipment for you.',58444,0,0,27366), +(14941,0,1,'I want to browse your goods.',3370,0,0,27366), +(13396,1,0,'Wait, I\'ve changed my mind about my egg.',57017,0,0,27366), +(13401,2,0,'I would like a yellow serpent egg.',57021,0,0,27366), +(13401,1,0,'I would like a green serpent egg.',57020,0,0,27366), +(13401,0,0,'I would like a blue serpent egg.',57019,0,0,27366), +(13058,0,0,'Put down your fork, and pick up your fists! I challenge you!',53218,0,0,27366), +(13054,0,0,'Wanna fight?',53202,0,0,27366), +(13057,0,0,'I challenge you to a fight, Husshun!',53211,0,0,27366), +(13059,0,0,'Let\'s fight!',59915,0,0,27366), +(13072,1,0,'I am certain. Let\'s move on to the fighting.',53379,0,0,27366), +(13072,0,0,'Fine. Let\'s proceed with the introductions.',53378,0,0,27366), +(13070,2,0,'I don\'t need any introductions, old man. Let\'s skip ahead to the good part.',53377,0,0,27366), +(13070,0,0,'I\'m ready to be introduced to the instructors, High Elder.',53375,0,0,27366), +(14624,0,3,'Train me in Mining.',47116,0,0,27366), +(14649,8,25,'Queue for Greenstone Village.',64701,0,0,27366), +(14626,1,1,'I would like to buy from you.',14967,0,0,27366), +(14626,0,3,'Train me in Blacksmithing.',47110,0,0,27366), +(14625,0,3,'Train me in Jewelcrafting.',47114,0,0,27366), +(13226,0,0,'Challenge the Pandriarch.',54783,0,0,27366), +(13225,0,0,'Challenge the Pandriarch.',54783,0,0,27366), +(13227,0,0,'Challenge the Pandriarch.',54783,0,0,27366), +(13291,0,3,'Tell me about Inscription.',47149,0,0,27366), +(13808,0,1,'I would like to buy from you.',14967,0,0,27366), +(13427,5,0,'Are these serpent hatchlings suitable for pet battles?',66345,0,0,27366), +(13286,1,0,'Have you seen Lo Wanderbrew?',55738,0,0,27366), +(13286,0,0,'I\'m ready to see Lorewalker Cho.',55718,0,0,27366), +(13530,1,1,'I would like to buy from you.',14967,0,0,27366), +(13137,0,0,'Where is Shin?',53908,0,0,27366), +(13110,0,0,'What happened out here?',54167,0,0,27366), +(13109,0,0,'It\'s safe now. You can come down.',53675,0,0,27366), +(13552,0,0,'I need a ride to the bottom of the statue.',58419,0,0,27366), +(13374,2,1,'I would like to buy from you.',14967,0,0,27356), +(13374,1,5,'Make this inn your home.',2822,0,0,27356), +(13283,1,3,'I seek training in Pandaren cooking.',65287,0,0,27356), +(13283,0,1,'I would like to buy from you.',14967,0,0,27356), +(13782,0,1,'I would like to buy from you.',14967,0,0,27356), +(14628,1,1,'Let me browse your goods.',8097,0,0,27356), +(14628,0,3,'Train me in Alchemy.',47109,0,0,27356), +(13538,1,0,'I would like to travel to Dawn\'s Blossom.',58233,0,0,27356), +(13538,0,2,'Show me where I can fly.',12271,0,0,27356), +(13254,0,0,'It is time to go home, Prince Anduin.',55156,0,0,27356), +(13531,3,0,'Can you help me find the White Pawn?',54862,0,0,27356), +(13531,2,0,'How can I help the jinyu win against those monkey savages?',54861,0,0,27356), +(13531,1,0,'What is this land? Why has its presence been hidden for centuries?',54860,0,0,27356), +(13531,0,0,'Who are you... WHAT are you?',54859,0,0,27356), +(14280,3,0,'',63367,0,0,27356), +(14280,2,0,'',63366,0,0,27356), +(14280,0,0,'',62649,0,0,27356), +(13272,3,0,'Will these daggers help?',55416,0,0,27356), +(13272,2,0,'This spellcaster\'s staff is for you.',55415,0,0,27356), +(13272,1,0,'Take this book of healing prayers.',55413,0,0,27356), +(13272,0,0,'You might need this shield.',55412,0,0,27356), +(13274,3,0,'Will these daggers help?',55416,0,0,27356), +(13274,2,0,'This spellcaster\'s staff is for you.',55415,0,0,27356), +(13274,1,0,'Take this book of healing prayers.',55413,0,0,27356), +(13274,0,0,'You might need this shield.',55412,0,0,27356), +(13273,3,0,'Will these daggers help?',55416,0,0,27356), +(13273,2,0,'This spellcaster\'s staff is for you.',55415,0,0,27356), +(13273,1,0,'Take this book of healing prayers.',55413,0,0,27356), +(13273,0,0,'You might need this shield.',55412,0,0,27356), +(13271,3,0,'Will these daggers help?',55416,0,0,27356), +(13271,2,0,'This spellcaster\'s staff is for you.',55415,0,0,27356), +(13271,1,0,'Take this book of healing prayers.',55413,0,0,27356), +(13271,0,0,'You might need this shield.',55412,0,0,27356), +(13265,0,3,'What can you teach me?',9980,0,0,27356), +(13128,0,0,'Can you help us? Our friend is injured.',53800,0,0,27356), +(13115,0,0,'You did well, Agent Kearnen. Now save your energy... we\'ll fend them off.',53765,0,0,27356), +(13250,0,0,'I have brought the items for the ceremony.',55031,0,0,27356), +(13281,1,0,'What are you doing?',120848,0,0,27356), +(13510,0,0,'My friends and I come with peaceful intentions.',58050,0,0,27356), +(13250,1,0,'I come from the Alliance. We wish to be allies, not enemies.',58051,0,0,27356), +(13509,0,0,'Please allow us a chance to prove our friendship. We wish you no harm.',58048,0,0,27356), +(13809,0,5,'Make this inn your home.',2822,0,0,27356), +(13312,1,3,'What can you teach me?',9980,0,0,27356), +(14918,0,0,'What of Jor Jor? He seems to protect the mayor.',67155,0,0,27356), +(14912,0,0,'Please, don\'t cry. What happened next?',67121,0,0,27356), +(14913,0,0,'What\'s wrong?',67118,0,0,27356), +(15110,0,1,'What brews do you have for sale?',68465,0,0,27356), +(14935,1,1,'Let me browse your goods.',8097,0,0,27356), +(14935,0,5,'Make this inn your home.',2822,0,0,27356), +(15099,0,3,'Train me in Herbalism.',47112,0,0,27356), +(15100,0,3,'Train me in Skinning.',47117,0,0,27356), +(14926,0,1,'Let me browse your wares.',83214,0,0,27356), +(15098,0,3,'Train me in Mining.',47116,0,0,27356), +(14971,1,0,'You really have it in for the Horde, don\'t you?',68469,0,0,27356), +(14971,0,0,'I am ready to depart.',67429,0,0,27356), +(15111,0,0,'I am ready to depart.',67429,0,0,27356), +(11920,0,1,'I would like to buy from you.',14967,0,0,27326), +(12591,0,1,'I wish to browse your wares.',38807,0,0,27291), +(11535,0,0,'Hexascrub, let me see that merciless one again.',41660,0,0,27291), +(11574,0,0,'Why are you upside-down?',41907,0,0,27291), +(11581,0,0,'...',131549,0,0,27291), +(11580,0,0,'I really need to get going now.',41914,0,0,27291), +(11579,0,0,'That\'s too bad. Anyhow...',41913,0,0,27291), +(11578,0,0,'Sounds impressive.',41912,0,0,27291), +(11577,0,0,'How did you get all the way over here, then?',41911,0,0,27291), +(11576,0,0,'Fascinating.',111681,0,0,27291), +(11575,0,0,'Why is that?',66489,0,0,27291), +(11535,7,0,'Here, I made a Promising Fuel Sample. Three parts hammerhead and two parts remora.',42016,0,0,27291), +(11592,0,0,'Mix the samples together!',42003,0,0,27291), +(11535,1,0,'Here, I made a Billowing Fuel Sample. It\'s really smoky!',42009,0,0,27291), +(11535,5,0,'Here, I made a Smoky Fuel Sample. Pretty, isn\'t it?',42014,0,0,27291), +(11535,3,0,'Here, I made an Anemic Fuel Sample. It seems... weak.',42011,0,0,27291), +(11535,2,0,'Here, I made an Atomic Fuel Sample. It seems to be a little too hot.',42010,0,0,27291), +(11477,0,0,'I\'m ready to begin the assault on the terrace.',41193,0,0,27291), +(11525,1,0,'Let\'s speak with Nespirah.',41530,0,0,27291), +(11525,0,0,'Whenever you\'re ready, Duarn.',41467,0,0,27291), +(11352,5,0,'Can I have an Earth Elemental Totem instead?',40250,0,0,27291), +(11352,4,0,'Can I have a Stoneskin Totem instead?',40264,0,0,27291), +(11352,3,0,'Can I have a Strength of Earth Totem instead?',40248,0,0,27291), +(11352,2,0,'Can I have a Stoneclaw Totem instead?',40247,0,0,27291), +(11352,1,0,'Can I have an Earthbind Totem instead?',40246,0,0,27291), +(11608,0,0,'I am ready to join you in the vision, Farseer.',42108,0,0,27291), +(17546,0,0,'I need you to come on patrol with me.',81638,0,0,27602), +(17557,0,0,'I need you to come on patrol with me.',81638,0,0,27602), +(17104,0,0,'Let\'s go.',128698,0,0,27602), +(16707,1,0,'I am needed urgently at the Iron Docks.',87474,0,0,27602), +(16665,0,0,'So getting that bloom back might fix things... interesting...',84060,0,0,27602), +(16664,0,0,'What were you supposed to do?',84058,0,0,27602), +(16662,0,0,'Thank you for not killing me. What duty have you failed?',84054,0,0,27602), +(16793,0,0,'No one should become fertilizer for these monsters. How did you come to be here?',85353,0,0,27602), +(16792,0,0,'I doubt he took that well...',85355,0,0,27602), +(16329,0,0,'What?',127498,0,0,27602), +(18867,1,3,'Train me in the ways of herbalism.',15944,0,0,27602), +(16777,1,0,'Brightblade? That name sounds familiar...',90017,0,0,27602), +(17203,0,0,'I admire your morals. Carry on.',90102,0,0,27602), +(16686,0,0,'',84326,0,0,27602), +(16895,0,0,'Thaelin is on his way soon.',90316,0,0,27602), +(16542,0,0,'D\'kaan is coming with help.',83161,0,0,27602), +(16538,0,0,'D\'kaan is coming with help.',83161,0,0,27602), +(16539,0,0,'D\'kaan is coming with help.',83161,0,0,27602), +(18491,0,0,'Let us begin the invasion.',92740,0,0,27602), +(18486,5,28,'Start construction on our first transport.',98383,0,0,27602), +(18189,0,0,'Take me back to the garrison.',92715,0,0,27602), +(16762,2,2,'Show me where I can fly.',12271,0,0,27602), +(16849,1,3,'Train me in Inscription.',88801,0,0,27602), +(16849,0,3,'Train me in Archaeology.',88800,0,0,27602), +(16703,0,0,'I am ready to fly, Ka\'alu.',84668,0,0,27602), +(16515,0,0,'I\'m ready, High Ravenspeaker.',85116,0,0,27602), +(17246,0,1,'Show me your wares.',90189,0,0,27602), +(16822,0,0,'Accept Terokk\'s power.',85064,0,0,27602), +(16737,3,0,'Call upon Terokk.',85436,0,0,27602), +(16737,1,0,'Touch the bangle to witness Terokk\'s fall.',85063,0,0,27602), +(16737,0,0,'Touch the wingblades to witness one of Terokk\'s legends.',84937,0,0,27602), +(16651,0,0,'',81817,0,0,27602), +(16502,0,0,'Search him for the gavel.',86757,0,0,27602), +(16876,1,2,'Show me where I can fly.',12271,0,0,27602), +(16977,0,0,'I am ready Anzu, we will not fail.',87145,0,0,27602), +(17275,0,0,'It\'s over, Jacob. Come quietly and we\'ll get you on the first gryphon to prison for treason.',90371,0,0,27602), +(16854,0,0,'Administer the antidote to Kolrigg.',85820,0,0,27602), +(16817,0,0,'Take me back to my outpost.',85529,0,0,27602), +(16762,0,0,'Take me to Shadow\'s Vigil.',85065,0,0,27602), +(16652,0,0,'Show the spectral essences to Alice.',83993,0,0,27602), +(19197,1,1,'I would like to buy from you.',2583,0,0,27843), +(11672,0,1,'I would like to buy from you.',2583,0,0,27547), +(12195,4,3,'Train me in Herbalism.',47112,0,0,27547), +(12195,0,3,'Train me in Alchemy.',47109,0,0,27547), +(12186,4,3,'Train me in Herbalism.',47112,0,0,27547), +(12186,0,3,'Train me in Alchemy.',47109,0,0,27547), +(12196,4,3,'Train me in Herbalism.',47112,0,0,27547), +(12196,0,3,'Train me in Alchemy.',47109,0,0,27547), +(12188,4,3,'Train me in Herbalism.',47112,0,0,27547), +(12188,0,3,'Train me in Alchemy.',47109,0,0,27547), +(12191,0,3,'Train me in Alchemy.',47109,0,0,27547), +(12185,4,3,'Train me in Herbalism.',47112,0,0,27547), +(12185,0,3,'Train me in Alchemy.',47109,0,0,27547), +(12198,4,3,'Train me in Herbalism.',47112,0,0,27547), +(12198,0,3,'Train me in Alchemy.',47109,0,0,27547), +(12190,4,3,'Train me in Herbalism.',47112,0,0,27547), +(12190,0,3,'Train me in Alchemy.',47109,0,0,27547), +(20697,3,0,'Teleport to the Nightspire.',0,0,0,0), +(20094,0,0,'Я готов.',0,0,0,0), +(19850,0,0,'Who are you? Yes, I am looking to recreate Arrexis\'s ritual.',114298,0,0,27843), +(19778,0,0,'I would like access to the personal vault of Alodi, Archmage of Dalaran.',112368,0,0,27843), +(20431,0,0,'Okay.',111465,0,0,27843), +(20432,0,0,'',112316,0,0,27843), +(20432,6,0,'I\'ve changed my mind. Let me pick a different artifact.',103823,0,0,27843), +(20362,0,1,'Let\'s see what you have.',122309,0,0,27843), +(20000,2,28,'Its... Elementary...',117229,0,0,27843), +(20432,5,0,'I\'ve changed my mind. Let me pick a different artifact.',103823,0,0,27843), +(19321,2,0,'Wait, who are you again?',128607,0,0,27843), +(19321,1,0,'What is the Forge of the Guardian?',106048,0,0,27843), +(19476,2,1,'Show me your latest wares.',108118,0,0,27843), +(20679,1,1,'Let me browse your goods.',8097,0,0,27843), +(20679,0,5,'Make this inn your home.',2822,0,0,27843), +(18380,2,0,'Alard at the blacksmith shop will need a regular supply of foxflower flux. Can you make any?',94482,1,1,0), +(18735,1,0,'Sounds like an exciting life!',98724,0,0,27843), +(18735,0,3,'I would like to train.',8221,0,0,27843), +(18728,1,0,'How have you fared since Northrend?',98729,0,0,27843), +(18728,0,1,'I\'d like to buy from you.',98649,0,0,27843), +(18918,0,3,'Train me.',3266,0,0,27843), +(18917,0,3,'Train me.',3266,0,0,27843), +(20157,0,1,'I\'d like to buy from you.',98649,0,0,27843), +(20489,1,0,'I want to experience the return of Magni Bronzebeard and Khadgar\'s adventures in Karazhan.',123228,0,0,27843), +(21018,0,1,'I would like to look at your wares.',130123,0,0,27843), +(19094,1,1,'I would like to buy from you.',14967,0,0,27843), +(20252,0,0,'Need any help?',121432,0,0,27843), +(20251,0,0,'And who\'s this little fellow?',121425,0,0,27843), +(20250,0,0,'What are you up to?',121423,0,0,27843), +(21017,0,0,'Could you be quiet?',130126,0,0,27843), +(11383,0,20,'Queue for the Coren Direbrew battle.',40422,0,0,27843), +(20815,0,1,'Let me browse your goods.',8097,0,0,27843), +(18961,0,1,'I wish to browse your goods.',96697,0,0,27843), +(19540,2,1,'Show me what you have available.',108794,0,0,27843), +(18905,3,1,'Any pet stuff for sale?',87415,0,0,27843), +(18905,2,0,'Why are you called the Lioness?',87407,0,0,27843), +(18905,0,0,'I\'d like to heal and revive my battle pets.',64115,0,0,27843), +(18906,0,0,'Nevermind!',87414,0,0,27843), +(20367,0,1,'I wish to browse your goods.',96697,0,0,27843), +(19134,0,0,'Show me the proof.',103351,0,0,27843), +(19075,0,0,'I come bearing a letter from your father.',102376,0,0,27843), +(19068,0,0,'Why not deliver the letter yourself, Lord Greymane?',102170,0,0,27843), +(19870,0,0,'I am ready to face the Legion.',114581,1,1,27843), +(18500,1,0,'I need somebody summoned up to Dalaran. Can you help me?',95691,0,0,27980), +(19238,0,0,'What\'s going on here, Toryl?',104639,0,0,27980), +(20417,0,0,'',122513,0,0,27980), +(18973,0,0,'Try to rouse the vrykul.',101337,0,0,27980), +(18987,0,0,'I am no naga, Stokalfr! I come on behalf of Brandolf!',101383,0,0,27980), +(20212,0,0,'Arluin is not coming, I\'m afraid. He died to ensure we could bring this to you. ',120809,0,0,27980), +(19301,8,0,'',121650,0,0,27980), +(20196,0,0,'',120732,0,0,27980), +(20197,0,0,'',120732,0,0,27980), +(20198,0,0,'',120732,0,0,27980), +(18748,4,0,'',121814,0,0,27980), +(18748,3,0,'I\'ve come to help the withered with their combat training.',120520,0,0,27980), +(19960,1,0,'',121607,0,0,27980), +(19929,0,0,'I\'ve brought you some arcwine... drink up!',115294,0,0,27980), +(19933,0,0,'I will take your Arcwine and share it with the needy.',115399,0,0,27980), +(20327,0,0,'',122177,0,0,27980), +(20324,0,0,'',122172,0,0,27980), +(20372,0,1,'Let me see what you have for sale.',51295,0,0,27980), +(19301,0,0,'All conduits are active. Can you amplify the feed?',119710,0,0,27980), +(19301,6,0,'',121648,0,0,27980), +(20376,0,1,'I would like to buy from you.',14967,0,0,27980), +(20187,7,0,'Fifteen withered.\n|cFFFF0000(Costs 1300 Ancient Mana |TINTERFACE\\ICONS\\INV_Misc_ancient_mana.blp:16|t)|r',0,0,0,27980), +(20187,5,0,'Twelve withered.\n|cFFFF0000(Costs 900 Ancient Mana |TINTERFACE\\ICONS\\INV_Misc_ancient_mana.blp:16|t)|r',0,0,0,27980), +(20119,0,0,'I am ready to face Coryn.',119387,0,0,27980), +(20391,0,1,'I\'d like to see what goods you have for sale.',68295,0,0,27980), +(20111,0,0,'There is talk in the streets that they found a silver crescent near his corpse- is that true?',119175,0,0,27980), +(20110,0,0,'I heard that Coryn Stelleris has begun to purchase the remaining Duskmere attendants - is that true?',119173,0,0,27980), +(20112,0,0,'I overheard a rather crude joke at poor Ruven\'s expense while visiting the Stelleris family. I can\'t imagine you would want to hear it...',119174,0,0,27980), +(19696,4,0,'Offer: 1200x |TINTERFACE\\ICONS\\INV_MISC_ANCIENT_MANA.BLP:20|t|Hcurrency:1155|h|cFFFFFFFF Ancient Mana|h|r',121778,0,0,27980), +(19696,3,0,'We need your help \'persuading\' some noble houses to support Ly\'leth\'s bid for advisor. Are you in?',119241,0,0,27980), +(20390,0,1,'Let me browse your goods.',8097,0,0,27980), +(19706,0,0,'The owl hoots at dusk.',111641,0,0,27980), +(19704,0,0,'The cruel caskmaster has breathed his last.',111639,0,0,27980), +(19705,0,0,'The saber prowls the plaza.',111640,0,0,27980), +(18531,0,1,'I would like to buy from you.',14967,0,0,27980), +(19696,2,0,'Offer: 800x |TINTERFACE\\ICONS\\INV_MISC_ANCIENT_MANA.BLP:20|t|Hcurrency:1155|h|cFFFFFFFF Ancient Mana|h|r',115303,0,0,27980), +(19696,1,0,'Vanthir and I need your help to avenge-',112482,0,0,27980), +(19696,0,0,'',111853,0,0,27980), +(20193,0,0,'Yes, I am ready to help make arcwine.',114922,0,0,27980), +(19908,0,0,'Hope is not lost. We are making progress every day.',115000,0,0,27980), +(19905,0,0,'Thank you! I am ready to move on now.',115006,0,0,27980), +(19906,0,0,'Thalyssra said you had a unique way of dealing with insects. What is it?',114999,0,0,27980), +(19902,0,0,'After you, Margaux.',115004,0,0,27980), +(19893,0,0,'She is surviving, but not easily.',114998,0,0,27980), +(19895,0,0,'',114966,0,0,27980), +(19885,0,0,'Thalyssra said you would be able to help me infiltrate the Twilight Vineyards.',121276,0,0,27980), +(19519,0,0,'I wanted to speak with you about a gem design.',108606,0,0,27980), +(19524,0,0,'Lespin wants his brooch back.',108640,0,0,27980), +(19573,0,0,'He insists that you return it, and that I may use force if necessary.',109288,0,0,27980), +(19475,0,0,'Lespin wants his sculpture back.',108113,0,0,27980), +(19718,0,0,'I\'m ready. Let\'s go!',132063,0,0,27980), +(19152,1,0,'I am ready to begin the ritual.',103586,0,0,27980), +(19152,0,0,'I am ready to begin the ritual.',103586,0,0,27980), +(19041,0,1,'I would like to buy from you.',14967,0,0,27980), +(19392,0,0,'Lead the way. I\'ll be right behind you.',106702,0,0,27980), +(19042,1,0,'Why put yourself at risk to help them?',104220,0,0,27980), +(19211,0,0,'Very well.',128544,0,0,27980), +(19042,0,0,'\"We shall drink of the Well again.\"',101823,0,0,27980), +(19301,5,0,'',121647,0,0,27980), +(19301,4,0,'',121646,0,0,27980), +(20318,0,0,'',122110,0,0,27980), +(18748,1,0,'',115438,0,0,27980), +(19692,0,0,'I found a cask of wine!',111355,0,0,27980), +(19692,1,0,'',114966,0,0,27980), +(19832,0,0,'',112433,0,0,27980), +(19831,0,0,'',112433,0,0,27980), +(19830,0,0,'',112433,0,0,27980), +(19829,0,0,'',112433,0,0,27980), +(19783,0,0,'You wished to speak to me?',112392,0,0,27980), +(19360,0,0,'Very well.',128544,0,0,27980), +(19980,0,0,'|c999900005 Withered:|r Bring the chest back to Thalyssra.',115557,0,0,27980), +(20491,0,0,'Okay.',111465,0,0,27980), +(20490,0,0,'Um, what?',123230,0,0,27980), +(20603,0,0,'I seek the guidance of the Moon Guard.',124579,0,0,27980), +(18966,0,0,'What will you do now?',103139,0,0,27980), +(18967,0,0,'We may have a way to stave off the hunger - long enough to find a cure. Let us help.',101204,0,0,27980), +(18959,0,0,'Very well.',128544,0,0,27980), +(18958,0,0,'There is another way, Thaedris. We have a refuge not far from here. Thalyssra is there.',101033,0,0,27980), +(20399,0,0,'',122432,0,0,27980), +(20406,0,0,'',122448,0,0,27980), +(19506,0,0,'What if we tried not watching the world burn? Just for once, to see if we like it.',108396,0,0,27980), +(19554,0,0,'',108946,0,0,27980), +(18755,0,0,'Let\'s do this.',98940,0,0,27980), +(20118,0,1,'Ravis, let\'s see what you have.',119371,0,0,27843), +(17085,0,0,'I\'m ready. Let\'s get down to Azsuna, Khadgar.',106208,0,0,27843), +(20211,1,0,'',120835,0,0,27980), +(20211,0,0,'',120834,0,0,27980), +(20266,1,0,'',120835,0,0,27980), +(20266,0,0,'Why the boat?',121488,0,0,27980), +(20267,0,0,'I want to ask something else.',121489,0,0,27980), +(20493,0,0,'Okay.',111465,0,0,27980), +(20492,0,0,'Um, what?',123230,0,0,27980), +(20091,0,0,'What is going on here?',118737,0,0,27980), +(18634,0,5,'Bind at this location.',42778,0,0,27980), +(20077,0,0,'Take all of the Timeworn Artifacts I have on me!',117143,0,0,27843), +(18182,2,0,'Ooka, may I please have some of your delicious Fighter Chow? I hear it\'s the best.',92236,0,0,27843), +(18182,0,0,'Blikkety slickety ook. This mank jeeked on my dook. Face! Now hand over the Fighter Chow!',88933,0,0,27843), +(18180,2,0,'Ooka, may I please have some of your delicious Fighter Chow? I hear it\'s the best.',92236,0,0,27843), +(18180,0,0,'You can mank my dook, Ooka. I\'m taking the chow and there\'s nothing you can ookin do about it, wicket licker.',92417,0,0,27843), +(18178,2,0,'Ooka, may I please have some of your delicious Fighter Chow? I hear it\'s the best.',92236,0,0,27843), +(18178,0,0,'You\'ve got quite the mouth on you, Ooka. Maybe I should stuff it full of your blookin mank chow.',91448,0,0,27843), +(18177,2,0,'Ooka, may I please have some of your delicious Fighter Chow? I hear it\'s the best.',92236,0,0,27843), +(18177,0,0,'Slicky slapper! That\'s right, I said it. Slicky slapper.',91591,0,0,27843), +(18176,2,0,'Ooka, may I please have some of your delicious Fighter Chow? I hear it\'s the best.',92236,0,0,27843), +(18176,0,0,'You know what, Ooka? You have a dook for a head!',91597,0,0,27843), +(18175,2,0,'Ooka, may I please have some of your delicious Fighter Chow? I hear it\'s the best.',92236,0,0,27843), +(18175,0,0,'Ookin\' wikket! Walk away, just like your brother.',91799,0,0,27843), +(18174,2,0,'Ooka, may I please have some of your delicious Fighter Chow? I hear it\'s the best.',92236,0,0,27843), +(18174,0,0,'Your mom.',90224,0,0,27843), +(18173,2,0,'Ooka, may I please have some of your delicious Fighter Chow? I hear it\'s the best.',92236,0,0,27843), +(18173,0,0,'Hey, Ooka, your ooker is showing. That\'s unsavory and not the least bit sanitary.',90223,0,0,27843), +(18066,2,0,'Ooka, may I please have some of your delicious Fighter Chow? I hear it\'s the best.',92236,0,0,27843), +(18066,0,0,'I said, when I beat your brother black and blue, he dooked his pants and jumped away. Now give me the chow!',90222,0,0,27843), +(19040,0,3,'Train me in Leatherworking.',47115,0,0,27843), +(8434,0,3,'I would like to train.',8221,0,0,27843), +(19682,0,1,'I would like to buy from you.',14967,0,0,27843), +(20063,0,0,'Send me back home, Oculeth.',116408,0,0,27980), +(19978,0,0,'|c999900005 Withered:|r Bring the chest back to Thalyssra.',115557,0,0,27980), +(19945,0,0,'|c999900005 Withered:|r Bring the chest back to Thalyssra.',115557,0,0,27980), +(19991,0,0,'|c9999000010 Withered:|r Bring the chest back to Thalyssra.',115558,0,0,27980), +(19990,0,0,'|c9999000010 Withered:|r Bring the chest back to Thalyssra.',115558,0,0,27980), +(19944,0,0,'|c999900005 Withered:|r Bring the chest back to Thalyssra.',115557,0,0,27980), +(19365,0,0,'Напомни, какие у меня варианты?',0,1,1,0), +(19336,0,0,'Я позабочусь о них, предсказатель.',0,0,0,0), +(19169,0,0,'Я передумал. Позволь мне выбрать другой артефакт.',122690,1,1,0), +(20745,2,0,'Tell me more about Arcanist Ryanna.',128650,0,0,27980), +(20745,1,0,'How did the Legion gain access to Dalaran\'s weapons?',128616,0,0,27980), +(20745,0,0,'I\'m ready to go. Summon a portal, please.',127341,0,0,27980), +(20903,0,0,'I will not let that happen.',128872,0,0,27980), +(20902,0,0,'Go on.',128619,0,0,27980), +(20906,0,0,'How did you meet Aethas?',128680,0,0,27980), +(20563,0,0,'Where would I find such a thing?',128459,0,0,27980), +(19934,0,0,'Can you think of a way to safely use the Nightborne Soulstone?',123927,0,0,27980), +(20886,0,0,'For the honor of Highmountain. I am ready! [Queue for Scenario]',128150,0,0,27980), +(20591,0,0,'I am ready to enter the Sanctum.',125396,0,0,27980), +(20376,1,0,'',108946,0,0,27980), +(20684,4,0,'',125250,0,0,27980), +(20684,3,0,'',125249,0,0,27980), +(20684,2,0,'',125248,0,0,27980), +(20684,1,0,'',125247,0,0,27980), +(20684,0,0,'',125246,0,0,27980), +(20695,3,0,'What happened here?',107100,0,0,27980), +(20695,0,0,'I\'m ready for the siege.',125348,0,0,27980), +(20689,0,0,'',125259,0,0,27980), +(20688,0,0,'',125259,0,0,27980), +(20687,0,0,'',125259,0,0,27980), +(20686,0,0,'',125259,0,0,27980), +(20685,0,0,'',125259,0,0,27980), +(20556,1,5,'Make this inn your home.',2822,0,0,27980), +(20556,0,1,'Show me your wares.',90189,0,0,27980), +(20544,0,0,'Plans from Thalyssra.',123554,0,0,27980), +(20543,0,0,'Plans from Thalyssra.',123554,0,0,27980), +(20545,0,0,'Plans from Thalyssra.',123554,0,0,27980), +(20601,2,0,'I am ready, Valtrois.',124421,0,0,27980), +(20601,1,0,'I am ready, Valtrois.',124421,0,0,27980), +(20601,0,0,'I am ready, Valtrois.',124421,0,0,27980), +(20591,1,0,'Let\'s go!',124289,0,0,27980), +(20651,8,0,'',121650,0,0,27980), +(19157,0,0,'Я хочу еще раз освежить в памяти, поисками какого оружия мы можем заняться.',0,1,1,0), +(19091,0,0,'Я хочу еще раз освежить в памяти, поисками какого оружия мы можем заняться.',0,1,1,0), +(19868,0,0,'Хочу долететь на орле до Приюта Стрелка.',0,1,1,0), +(22081,0,0,'What can you tell me about the Lightforged draenei?',0,0,0,28153), +(19156,0,0,'Я хочу еще раз освежить в памяти, поисками какого оружия мы можем заняться.',0,1,1,0), +(21513,0,1,'I want to browse your goods.',3370,0,0,27980), +(21509,0,1,'I want to browse your goods.',3370,0,0,27980), +(19896,1,0,'Can you tell me more about Arrexis?',112314,0,0,27980), +(19864,0,0,'That is quite a story. Let\'s go.',114491,0,0,27980), +(19860,0,0,'I see. Is Kathra\'natir behind the attack on Meryl?',114431,0,0,27980), +(19859,0,0,'You have much to explain. Why have you betrayed us?',114428,0,0,27980), +(21580,2,0,'I\'d like to heal and revive my battle pets.',64115,0,0,27980), +(21580,1,1,'I\'m looking for a lost companion.',56613,0,0,27980), +(21336,0,0,'',0,0,0,27980), +(21326,1,0,'Let\'s go!',124289,0,0,27980), +(19044,0,0,'Я хочу еще раз освежить в памяти, поисками какого оружия мы можем заняться.',0,1,1,0), +(19115,0,0,'Я хочу еще раз освежить в памяти, поисками какого оружия мы можем заняться.',0,1,1,0), +(19545,0,0,'Я готова принять решение.',108894,1,1,0), +(20895,0,0,'Let us hear what she has to say, Magni.',128392,0,0,27980), +(20821,0,0,'Go find Levia, Fhambar!',126801,0,0,27980), +(20819,0,0,'The runes are activated. Stabilize the portal.',126752,0,0,27980), +(20679,3,0,'Do you know where I can find Levia Laurence?',125159,0,0,27980), +(20815,2,0,'Do you know where I can find Levia Laurence?',125159,0,0,27980), +(18598,4,0,'Do you know where I can find Levia Laurence?',125159,0,0,27980), +(20732,0,0,'This vrykul is the heir to the God-King. She seeks an audience with Eyir.',125802,0,0,27980), +(20867,0,0,'Have any vrykul passed through here that struck you as odd?',127719,0,0,27980), +(20865,0,0,'Slodi mentioned you could help find the vrykul mentioned in these scrolls.',127716,0,0,27980), +(20863,0,0,'I am searching for the vrykul mentioned in these scrolls.',127711,0,0,27980), +(21063,0,1,'I would like to buy from you.',14967,0,0,27980), +(21064,1,1,'Let me browse your goods.',8097,0,0,27980), +(21064,0,5,'Make this inn your home.',2822,0,0,27980), +(21065,0,1,'I would like to buy from you.',14967,0,0,27980), +(19472,2,0,'What are you exactly?',108092,0,0,27980), +(19473,0,0,'Let\'s get back to the matter at hand.',108101,0,0,27980), +(18807,0,1,'I would like to buy from you.',14967,0,0,27980), +(18778,0,1,'I would like to buy from you.',14967,3,128,26972), +(18778,1,0,'Raethan, call off your guards.\n\n[Cost: 50 |TInterface\\Icons\\achievement_reputation_kirintor_offensive.blp:12|t Sightless Eyes]',99085,1,1,26972), +(19241,2,28,'Research recipes using Big Gamy Ribs.',104709,0,0,27980), +(20498,0,0,'How do I get Obliterum?',123249,0,0,27980), +(20500,0,0,'What happened to your donkey?',123251,0,0,27980), +(20499,0,0,'What can I do with Obliterum?',123250,0,0,27980), +(20269,1,1,'Let me browse your goods.',8097,0,0,27980), +(20269,0,5,'Make this inn your home.',2822,0,0,27980), +(18656,0,0,'Take me to Greywatch.',97469,0,0,27980), +(20539,1,0,'Helya can corrupt the Stormforged!',123455,0,0,27980), +(19484,0,0,'Let\'s do battle!',75024,0,0,27980), +(19073,0,0,'Leave the Darkpens.',102275,0,0,27843), +(18576,0,0,'Arduen sent me. You\'re free.',96673,0,0,27843), +(18574,0,0,'Excuse me...',96670,0,0,27843), +(19405,0,0,'Yes, Tyrande.',107098,0,0,27843), +(19869,0,0,'Free Remulos from captivity.',114547,0,0,27843), +(20273,0,5,'Make this inn your home.',2822,0,0,27843), +(60002,1,0,'We have everything we need. It\'s time to build this Garrison.',0,1,1,0), +(20698,3,0,'Телепорт в Искрящие глубины.',0,0,0,0), +(20698,2,0,'Телепорт к Купели Ночи.',0,0,0,0), +(20698,0,0,'Телепорт к входу во дворец.',0,0,0,0), +(20697,4,0,'Телепорт в Искрящие глубины.',0,0,0,0), +(20697,0,0,'Телепорт к Ночному Шпилю.',0,0,0,0), +(9219,0,0,'How long have you worked for the Cult of the Damned?',25242,0,0,26365), +(9218,0,0,'I have reason to believe you\'re involved in cultist activity.',25239,0,0,26365), +(9253,0,0,'What is the cause of this conflict?',25371,1,1,0), +(18380,1,0,'Hello again, Linzy. What\'s new with you?',98720,1,1,0), +(18380,0,3,'I Would like to train',8221,5,16,0), +(18379,0,3,'I Would like to train',8221,5,16,0), +(30020,0,3,'I Would like to train',8221,5,16,0), +(18383,0,0,'I want to browse your goods.',3370,3,128,0), +(65025,1,0,'Нам пора в сердце порчи! Отправляемся к Илгиноту',0,1,1,0), +(65026,1,0,'Пора покончить с кошмаром! Отправляемся к Драконам кошмара!',0,1,1,0), +(65027,1,0,'Освободим сознание Элерт, возможно там-же мы и найдём Ксавия. Я начинаю перемещение в Мулгор!',0,1,1,0), +(65029,1,0,'Надо избавить древнего бога, заступника Азерота от кошмара. Пока он спал порча коснулась и его. Если не получиться образумить его, тогда выход только один - убить его пока он не убил нас! Вперёд!!!',0,1,1,0), +(65028,1,0,'Главное не заблудиться в этом Кошмаре! Назад к Малфуриону',0,1,1,0), +(6001,0,0,'',0,1,1,0), +(6021,0,0,'I cannot, Vaelastrasz! Surely something can be done to heal you!',0,1,3,0), +(6101,0,0,'Vaelastrasz, no!!!',0,1,3,0), +(21072,0,0,'I am ready.',134034,1,1,0), +(20871,2,1,'I wish to trade.',122362,3,128,26124), +(18778,2,0,'Raethan, call back your guards.\n\n[Cost: 50 |TInterface\\Icons\\achievement_reputation_kirintor_offensive.blp:12|t Sightless Eyes]',99086,1,1,26972), +(18778,3,0,'I want to hire a personal bodyguard.',105615,1,1,26972), +(1041,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(1042,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(1043,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(2749,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(3202,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(3203,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(4129,1,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(4156,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(4171,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(4208,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(4244,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(4356,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(8460,1,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(8784,2,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(11637,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(12180,13,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(13283,2,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(14615,2,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(14625,1,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(14972,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(15125,14,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(18475,3,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(56340,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(2742,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(2747,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(2748,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(2761,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(2782,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(4116,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(4119,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(4134,1,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(4154,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(4157,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(4158,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(4164,1,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(4170,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(4181,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(4187,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(4204,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(4207,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(4842,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(6087,2,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(7455,1,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(8379,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(8381,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(8434,1,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(8828,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(8863,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(10350,2,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(13291,1,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(14582,1,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(14624,1,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(14628,2,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(15098,1,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(15099,1,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(15100,1,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(1465,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(1467,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(1468,1,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(1469,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(4136,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(4137,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(4147,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(12046,3,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(79519,0,3,'Je voudrais m\'entraîner.',0,5,16,26972), +(99916,0,0,'Bank',0,1,1,0), +(99916,1,0,'Auction House',0,1,1,0), +(99916,2,0,'Inn',0,1,1,0), +(99916,3,0,'Flight Master',0,1,1,0), +(99916,4,0,'Mailbox',0,1,1,0), +(99916,5,0,'Barber',0,1,1,0), +(99916,6,0,'Battle Pet Trainer',0,1,1,0), +(99916,7,0,'Battlemasters',0,1,1,0), +(99917,0,0,'Bank',0,1,1,0), +(99917,1,0,'Auction House',0,1,1,0), +(99917,2,0,'Inn',0,1,1,0), +(99917,3,0,'Hippogryph Master',0,1,1,0), +(99917,4,0,'Guild Master',0,1,1,0), +(99917,5,0,'Mailbox',0,1,1,0), +(99917,6,0,'Battlemasters',0,1,1,0), +(99918,0,0,'Bank',0,1,1,0), +(99918,1,0,'Inn',0,1,1,0), +(99918,2,0,'Flight Master',0,1,1,0), +(99918,3,0,'Barber',0,1,1,0), +(99918,4,0,'Trade District',0,1,1,0), +(99919,0,0,'Taxi (Flight Master)',0,1,1,0), +(99919,1,0,'Bank - Aldor',0,1,1,0), +(99919,2,0,'Bank - Scryer',0,1,1,0), +(99919,3,0,'Inn - Aldor',0,1,1,0), +(99919,4,0,'Inn - Scryer',0,1,1,0), +(99919,5,0,'Guild Services',0,1,1,0), +(99919,6,0,'City Center',0,1,1,0), +(99916,8,0,'Profession Trainer',0,1,1,0), +(99921,0,0,'Alchemy',0,1,1,0), +(99921,1,0,'Cooking',0,1,1,0), +(99921,2,0,'Enchanting',0,1,1,0), +(99921,3,0,'Engineering',0,1,1,0), +(99921,4,0,'Fishing',0,1,1,0), +(99921,5,0,'Herbalism',0,1,1,0), +(99921,6,0,'Inscription',0,1,1,0), +(99921,7,0,'Jewelcrafting',0,1,1,0), +(99921,8,0,'Leatherworking',0,1,1,0), +(99921,9,0,'Mining',0,1,1,0), +(99921,10,0,'Tailoring',0,1,1,0), +(99917,7,0,'Profession Trainer',0,1,1,0), +(99922,0,0,'Alchemy',0,1,1,0), +(99922,1,0,'Blacksmithing',0,1,1,0), +(99922,2,0,'Cooking',0,1,1,0), +(99922,3,0,'Enchanting',0,1,1,0), +(99922,4,0,'First Aid',0,1,1,0), +(99922,5,0,'Fishing',0,1,1,0), +(99922,6,0,'Inscription',0,1,1,0), +(99922,7,0,'Leatherworking',0,1,1,0), +(99922,8,0,'Skinning',0,1,1,0), +(99922,9,0,'Tailoring',0,1,1,0), +(7487,0,7,'How do I form a guild?',3413,10,262144,0), +(7487,1,8,'I want to create a guild crest.',3415,11,524288,0), +(61000,2,0,'Protection - Ecaille du Gardien de la Terre',0,1,0,0), +(61000,1,0,'Fureur - Epees de guerre des Valarjar',0,1,0,0), +(61000,0,0,'Armes - Strom\'kar, le Brise-guerre',0,1,0,0), +(61000,3,0,'Sacre - La Main d\'argent',0,1,0,0), +(61000,4,0,'Protection - Gardevrai',0,1,0,0), +(61000,5,0,'Vindicte - Porte-cendres',0,1,0,0), +(61000,6,0,'Maitrise des betes - Frappe-titan',0,1,0,0), +(61000,7,0,'Precision - Thas\'dorah, heritage des Coursevent',0,1,0,0), +(61000,8,0,'Survie - Serre-de-guerre',0,1,0,0), +(61000,9,0,'Assassinat - Les Tueurs-de-rois',0,1,0,0), +(61000,10,0,'Hors-la-loi - Les Lames-funestes',0,1,0,0), +(61000,11,0,'Finesse - Crocs du Devoreur',0,1,0,0), +(61000,12,0,'Discipline - Courroux de la Lumiere',0,1,0,0), +(61000,13,0,'Sacre - T\'uure, phare des Naaru',0,1,0,0), +(61000,14,0,'Ombre - Xal\'atath, lame de l\'Empire noir',0,1,0,0), +(61000,15,0,'Sang - Gueule des damnes',0,1,0,0), +(61000,16,0,'Givre - Lames du prince dechu',0,1,0,0), +(61000,17,0,'Impie - Apocalypse',0,1,0,0), +(61000,18,0,'Elementaire - Le Poing de Ra-den',0,1,0,0), +(61000,19,0,'Amelioration - Marteau du destin',0,1,0,0), +(61000,20,0,'Restauration - Sharas\'dal, sceptre des marees',0,1,0,0), +(61000,21,0,'Arcanes - Aluneth',0,1,0,0), +(61000,22,0,'Feu - Felo\'melorn',0,1,0,0), +(61000,23,0,'Givre - Sombreglace',0,1,0,0), +(61000,24,0,'Affliction - Ulthalesh, la Faux du vent noir',0,1,0,0), +(61000,25,0,'Demonologie - Crane du man\'ari',0,1,0,0), +(61000,26,0,'Destruction - Sceptre de Sargeras',0,1,0,0), +(61000,27,0,'Maitre brasseur - Fu Zan',0,1,0,0), +(61000,28,0,'Marche-vent - Poings des Cieux',0,1,0,0), +(61000,29,0,'Tisse-brume - Sheilun',0,1,0,0), +(61000,30,0,'Equilibre - Faux d\'Elune',0,1,0,0), +(61000,31,0,'Farouche - Crocs d\'Ashamane',0,1,0,0), +(61000,32,0,'Gardien - Griffes d\'Ursoc',0,1,0,0), +(61000,33,0,'Restauration - G\'Hanir, l\'Arbre-mere',0,1,0,0), +(61000,34,0,'Devastation - Bilames du Trompeur',0,1,0,0), +(61000,35,0,'Vengeance - Lames-de-guerre aldrachies',0,1,0,0), +(61000,36,0,'Scénario d\'acquisition : Les Cieux tonnants — affronter Typhinius (Marche-vent)',0,1,1,0), +(61000,37,0,'Scénario d\'acquisition : Les Lames du prince déchu — Couronne de glace (DK Givre)',0,1,1,0), +(61000,38,0,'Scénario d\'acquisition : La Main d\'argent — Espoir de Lumière (Paladin Sacré)',0,1,1,0), +(61000,39,0,'Scénario d\'acquisition : Apocalypse — monastère Écarlate (DK Impie)',0,1,1,0), +(61000,40,0,'Scénario d\'acquisition : Les Crocs du Dévoreur — Akaari (Voleur Finesse)',0,1,1,0), +(61000,41,0,'Scénario d\'acquisition : Le Sceptre de Sargeras — Tol Barad (Démoniste Destruction)',0,1,1,0), +(61000,42,0,'Scénario d\'acquisition : Le Poing de Ra-den — pic du Vortex (Chaman Élémentaire)',0,1,1,0), +(61000,43,0,'Scénario d\'acquisition : Frappe-titan — temple des Orages (Chasseur Maîtrise des bêtes)',0,1,1,0), +(61000,44,0,'Scénario d\'acquisition : Les Tueurs-de-rois — manoir Ravenholdt (Voleur Assassinat)',0,1,1,0), +(61000,45,0,'Scénario : L\'Arcway — les profondeurs de Suramar (défi)',0,1,1,0), +(61000,46,0,'Scénario : L\'Invasion de Niskara — monde de la Légion (défi)',0,1,1,0), +(61000,47,0,'Scénario : La Fournaise — Terres de Feu (défi)',0,1,1,0), +(61000,48,0,'Scénario : Le Tonnerre des titans — Ulduar (Chasseur Maîtrise des bêtes)',0,1,1,0), +(61000,49,0,'Scénario : Le sauvetage de Koltira (Chevalier de la mort)',0,1,1,0), +(61000,50,0,'Scénario : Le Rêvechemin corrompu (Druide)',0,1,1,0), +(61000,51,0,'Scénario : Sombreglace — l\'épreuve du givre (Mage Givre)',0,1,1,0), +(61000,52,0,'Scénario : Les Épées de guerre des Valarjar — Helheim (Guerrier Fureur)',0,1,1,0), +(61000,53,0,'Scénario : Marteau-du-Destin — la forge des éléments (Chaman Amélioration)',0,1,1,0), +(61000,54,0,'Scénario : Les Crocs d\'Ashamane — récif du Crépuscule (Druide Farouche)',0,1,1,0), +(61000,55,0,'Scénario : L\'épreuve titanique — Maelstrom (défi)',0,1,1,0), +(61000,56,0,'Scénario : Le cœur du Maelstrom (Chaman)',0,1,1,0), +(61000,57,0,'Scénario : Le temple Netherlight assiégé (Prêtre)',0,1,1,0), +(61000,58,0,'Scénario : La citadelle Shadowgore (défi)',0,1,1,0), +(61000,59,0,'Scénario : L\'incursion du hall du Gardien (Mage)',0,1,1,0); +/*!40000 ALTER TABLE `gossip_menu_option` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*M!100616 SET NOTE_VERBOSITY=@OLD_NOTE_VERBOSITY */; + +-- Dump completed on 2026-08-31 10:53:49 diff --git a/sql/sylvania/aubergiste_port_phase.sql b/sql/sylvania/aubergiste_port_phase.sql new file mode 100644 index 0000000..4147ab7 --- /dev/null +++ b/sql/sylvania/aubergiste_port_phase.sql @@ -0,0 +1,26 @@ +-- ===================================================================== +-- Aubergiste du port de Hurlevent — phase manquante +-- +-- Spawn cree en jeu par `.npc add 6727` (Innkeeper Brianna) a +-- (-8296.06, 1388.89, 4.95), aire 4411 « Port de Hurlevent ». +-- +-- La commande a enregistre la ligne SANS phase, alors que `phase_area` +-- place tout joueur de cette aire en 6666 « Pre-Broken Shore Stormwind +-- Harbor » (et 13306 pour la rampe). PhaseShift::CanSee exigeant une +-- intersection, la creature etait invisible a tout joueur normal, et +-- visible en mode MJ seulement -- SetAlwaysVisible court-circuitant le +-- test de phase. +-- +-- La cause est corrigee dans le core (cs_npc.cpp) : les prochains +-- `.npc add` conserveront la phase. Cette ligne repare le spawn deja +-- pose, pour ne pas avoir a le recreer. +-- +-- 6666 et non 13306 : l'aubergiste est sur le quai, pas sur la rampe, +-- et c'est la phase que portent les 371 autres creatures de cette aire. +-- ===================================================================== + +UPDATE `creature` + SET `PhaseId` = 6666 + WHERE `guid` = 290200759 + AND `id` = 6727 + AND `PhaseId` = 0; diff --git a/sql/sylvania/gossip_options_mortes.sql b/sql/sylvania/gossip_options_mortes.sql new file mode 100644 index 0000000..0f9b328 --- /dev/null +++ b/sql/sylvania/gossip_options_mortes.sql @@ -0,0 +1,42 @@ +-- ===================================================================== +-- Options de dialogue mortes qui doublonnent une option fonctionnelle +-- +-- Une ligne de type 1 (bavardage) est affichee sans aucune verification +-- par Player::PrepareGossipMenu (« no checks »), mais sa selection ne +-- declenche aucune action. Lorsqu'une telle ligne porte le MEME texte +-- qu'une option reellement fonctionnelle du meme menu -- aubergiste (8), +-- marchand (3), transmogrification (16) -- le joueur voit la ligne en +-- double et celle du haut ne fait rien. +-- +-- PREMIERE VERSION ERRONEE, CORRIGEE ICI +-- La version precedente supprimait aussi huit options portant des +-- CONDITIONS : evenement 12 (Halloween) actif et absence de l'aura +-- 24755 « Tricked or Treated ». C'etait l'option « Des bonbons ou un +-- sort ! », que la base habille du meme texte que l'option d'auberge. +-- Hors periode d'Halloween elle n'est jamais affichee : la supprimer +-- ne corrigeait rien et retirait du contenu saisonnier. +-- +-- D'ou la clause NOT EXISTS : toute option soumise a une condition est +-- desormais preservee, sans avoir a juger de la condition elle-meme. +-- +-- CE CORRECTIF NE RESOUT PAS le probleme de liaison de pierre de foyer +-- signale en jeu : le menu 342 fait partie des huit cas conditionnes, +-- son option morte n'etait donc pas affichee. La cause reste a trouver. +-- Il est conserve parce qu'il corrige un vrai defaut d'affichage +-- ailleurs, pas parce qu'il repond au symptome signale. +-- +-- Retour arriere : chantiers/gossip_menu_option_retour_20260831.sql +-- ===================================================================== + +DELETE g1 + FROM `gossip_menu_option` g1 + JOIN `gossip_menu_option` g2 + ON g2.`MenuId` = g1.`MenuId` + AND g2.`OptionText` = g1.`OptionText` + AND g2.`OptionType` IN (3, 8, 16) + WHERE g1.`OptionType` = 1 + AND NOT EXISTS (SELECT 1 + FROM `conditions` c + WHERE c.`SourceTypeOrReferenceId` = 15 + AND c.`SourceGroup` = g1.`MenuId` + AND c.`SourceEntry` = g1.`OptionIndex`); diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp index 809da23..12777d1 100644 --- a/src/server/scripts/Commands/cs_npc.cpp +++ b/src/server/scripts/Commands/cs_npc.cpp @@ -316,6 +316,64 @@ public: return false; PhasingHandler::InheritPhaseShift(creature, chr); + + // ============================================================= + // SylvaniaCore : conserver la phase du maitre de jeu. + // + // SIGNALE EN JEU : « j'ai tente de me creer un point de pierre + // de foyer en invoquant un aubergiste .npc add mais celui-ci + // n'est visible qu'en mode gm, j'ai teste avec plein d'autres + // c'est pareil ». + // + // CE QUI SE PASSAIT + // InheritPhaseShift donne bien la phase du joueur a la creature, + // mais SaveToDB ne l'ecrit pas : Creature.cpp ne retient que + // GetDBPhase(), la phase DECLAREE EN BASE, nulle pour une + // creature creee a la volee. La commande detruit ensuite l'objet + // et le recree depuis la ligne enregistree -- donc sans phase. + // La creature finale est orpheline de phase des la seconde meme. + // + // Le joueur, lui, herite des phases de son aire : dans le port + // de Hurlevent, phase_area declare 6666 et 13306. PhaseShift:: + // CanSee exige une intersection, un objet sans phase est donc + // invisible a qui en porte une. Le mode MJ masquait le defaut : + // SetAlwaysVisible court-circuite tout test de phase. + // + // POURQUOI CE CORRECTIF EST LEGITIME + // TrinityCore 3.3.5 fait exactement cela, explicitement : + // creature->Create(..., chr->GetPhaseMaskForSpawn(), ...); + // creature->SaveToDB(map->GetId(), ..., chr->GetPhaseMaskForSpawn()); + // et GetPhaseMaskForSpawn ignore volontairement l'etat « MJ voit + // tout » pour retenir la phase ou se trouverait un joueur normal. + // La reecriture du systeme de phases a perdu ce principe en + // chemin : master herite du meme defaut que nous. On le restaure. + // + // Un decalage subsiste avec 3.3.5 : une phase moderne est un + // ENSEMBLE, alors qu'une ligne de `creature` n'a qu'un champ. + // On retient la premiere et on ANNONCE le choix ainsi que les + // autres phases presentes, plutot que de trancher en silence. + // ============================================================= + if (creature->GetDBPhase() == 0) + { + auto const& phasesJoueur = chr->GetPhaseShift().GetPhases(); + if (!phasesJoueur.empty()) + { + uint32 phaseRetenue = phasesJoueur.begin()->Id; + creature->SetDBPhase(int32(phaseRetenue)); + + std::string listePhases; + for (auto const& phase : phasesJoueur) + { + if (!listePhases.empty()) + listePhases += ", "; + listePhases += std::to_string(uint32(phase.Id)); + } + + handler->PSendSysMessage("Phase %u enregistree sur ce spawn (vous etes dans les phases : %s). Sans elle la creature serait invisible a tout joueur de cette aire.", + phaseRetenue, listePhases.c_str()); + } + } + creature->SaveToDB(map->GetId(), { map->GetDifficultyID() }); ObjectGuid::LowType db_guid = creature->GetSpawnId(); From ce69bad85bb660427b3ed1fb6409164a454662b5 Mon Sep 17 00:00:00 2001 From: BlaMacfly Date: Mon, 31 Aug 2026 22:32:29 +0200 Subject: [PATCH 02/50] Bassin d'Arathi : lecture hors limites de BgObjects Signale par un utilisateur de SylvaniaCore : ses matchs de Bassin d'Arathi avec pbotbg=1 faisaient tomber le serveur, avec dans le journal GetBGObject: gameobject (type: 24, ... Entry: 7735234) not found GetBGObject: gameobject (type: 32, ... Entry: 0) not found soit des GUID manifestement arbitraires, sur une carte 529 dont le tableau BgObjects ne compte que 22 cases. GetNearGameObjectFlag, introduit par le module BG BotFill (a7b1fa78), indexait BgObjects en node*8+status. Cette disposition -- huit objets par noeud -- est celle de l'ancien Bassin d'Arathi de TrinityCore. Le notre n'a qu'UNE banniere par noeud, aux indices 0 a 4 : _ChangeBanner modifie son visuel selon l'etat au lieu d'echanger huit objets. Le calcul donnait donc 24 pour le noeud 3 et 32 pour le noeud 4. Le defaut de fond est ailleurs : huit accesseurs de Battleground.cpp indexent BgObjects ou BgCreatures avec une valeur fournie par l'appelant, sans jamais verifier la borne -- AddObject y ECRIT meme. Une faute de calcul y devient une corruption memoire, et le plantage survient loin de son origine. Tous sont desormais bornes : ils journalisent l'indice fautif et renvoient l'echec. Co-Authored-By: Claude Opus 5 --- .../game/Battlegrounds/Battleground.cpp | 84 +++++++++++++++++++ .../Battlegrounds/Zones/BattlegroundAB.cpp | 13 ++- 2 files changed, 94 insertions(+), 3 deletions(-) diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index 2fbad13..760ebe1 100644 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -1560,6 +1560,15 @@ void Battleground::RelocateDeadPlayers(ObjectGuid guideGuid) bool Battleground::AddObject(uint32 type, uint32 entry, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3, uint32 /*respawnTime*/, GOState goState) { + // Garde-fou : voir GetBGObject. Ici l'indice sert a une ECRITURE, + // BgObjects[type] = go->GetGUID() -- plus grave encore qu'une lecture. + if (type >= BgObjects.size()) + { + TC_LOG_ERROR("bg.battleground", "Battleground::AddObject: type %u hors limites (%u objets) pour le BG (carte %u, instance %u), entree %u ignoree.", + type, uint32(BgObjects.size()), m_MapId, m_InstanceID, entry); + return false; + } + // If the assert is called, means that BgObjects must be resized! ASSERT(type < BgObjects.size()); @@ -1629,6 +1638,14 @@ bool Battleground::AddObject(uint32 type, uint32 entry, Position const& pos, flo // It would be nice to correctly implement GO_ACTIVATED state and open/close doors in gameobject code void Battleground::DoorClose(uint32 type) { + // Garde-fou : voir GetBGObject. + if (type >= BgObjects.size()) + { + TC_LOG_ERROR("bg.battleground", "Battleground::DoorClose: type %u hors limites (%u objets) pour le BG (carte %u, instance %u).", + type, uint32(BgObjects.size()), m_MapId, m_InstanceID); + return; + } + if (GameObject* obj = GetBgMap()->GetGameObject(BgObjects[type])) { // If doors are open, close it @@ -1645,6 +1662,14 @@ void Battleground::DoorClose(uint32 type) void Battleground::DoorOpen(uint32 type) { + // Garde-fou : voir GetBGObject. + if (type >= BgObjects.size()) + { + TC_LOG_ERROR("bg.battleground", "Battleground::DoorOpen: type %u hors limites (%u objets) pour le BG (carte %u, instance %u).", + type, uint32(BgObjects.size()), m_MapId, m_InstanceID); + return; + } + if (GameObject* obj = GetBgMap()->GetGameObject(BgObjects[type])) { obj->SetLootState(GO_ACTIVATED); @@ -1657,6 +1682,33 @@ void Battleground::DoorOpen(uint32 type) GameObject* Battleground::GetBGObject(uint32 type, bool logError) { + // ================================================================= + // SylvaniaCore : refuser les indices hors limites. + // + // SIGNALE PAR UN UTILISATEUR DE SYLVANIACORE : ses matchs de Bassin + // d'Arathi faisaient tomber le serveur, avec dans le journal + // GetBGObject: gameobject (type: 24, ... Entry: 7735234) not found + // GetBGObject: gameobject (type: 32, ... Entry: 0) not found + // Des GUID manifestement arbitraires : BgObjects ne compte que 22 + // cases pour ce champ de bataille. + // + // La cause etait une indexation node*8 heritee de l'ancien Bassin + // d'Arathi (corrigee dans BattlegroundAB.cpp), mais le defaut de + // fond est ici : ces accesseurs indexent un std::vector avec une + // valeur fournie par l'appelant, SANS jamais verifier la borne. Une + // simple faute de calcul devient alors une corruption memoire, et + // le plantage survient loin de son origine. + // + // On journalise et on renvoie l'echec plutot que de lire n'importe + // ou. Meme garde-fou sur les autres accesseurs indexes du fichier. + // ================================================================= + if (type >= BgObjects.size()) + { + TC_LOG_ERROR("bg.battleground", "Battleground::GetBGObject: type %u hors limites (%u objets) pour le BG (carte %u, instance %u).", + type, uint32(BgObjects.size()), m_MapId, m_InstanceID); + return nullptr; + } + GameObject* obj = GetBgMap()->GetGameObject(BgObjects[type]); if (!obj) { @@ -1672,6 +1724,14 @@ GameObject* Battleground::GetBGObject(uint32 type, bool logError) Creature* Battleground::GetBGCreature(uint32 type, bool logError) { + // Garde-fou : voir GetBGObject. + if (type >= BgCreatures.size()) + { + TC_LOG_ERROR("bg.battleground", "Battleground::GetBGCreature: type %u hors limites (%u creatures) pour le BG (carte %u, instance %u).", + type, uint32(BgCreatures.size()), m_MapId, m_InstanceID); + return nullptr; + } + Creature* creature = GetBgMap()->GetCreature(BgCreatures[type]); if (!creature) { @@ -1687,6 +1747,14 @@ Creature* Battleground::GetBGCreature(uint32 type, bool logError) void Battleground::SpawnBGObject(uint32 type, uint32 respawntime) { + // Garde-fou : voir GetBGObject. + if (type >= BgObjects.size()) + { + TC_LOG_ERROR("bg.battleground", "Battleground::SpawnBGObject: type %u hors limites (%u objets) pour le BG (carte %u, instance %u).", + type, uint32(BgObjects.size()), m_MapId, m_InstanceID); + return; + } + if (Map* map = FindBgMap()) if (GameObject* obj = map->GetGameObject(BgObjects[type])) { @@ -1761,6 +1829,14 @@ Creature* Battleground::AddCreature(uint32 entry, uint32 type, Position const& p bool Battleground::DelCreature(uint32 type) { + // Garde-fou : voir GetBGObject. + if (type >= BgCreatures.size()) + { + TC_LOG_ERROR("bg.battleground", "Battleground::DelCreature: type %u hors limites (%u creatures) pour le BG (carte %u, instance %u).", + type, uint32(BgCreatures.size()), m_MapId, m_InstanceID); + return false; + } + if (!BgCreatures[type]) return true; @@ -1779,6 +1855,14 @@ bool Battleground::DelCreature(uint32 type) bool Battleground::DelObject(uint32 type) { + // Garde-fou : voir GetBGObject. + if (type >= BgObjects.size()) + { + TC_LOG_ERROR("bg.battleground", "Battleground::DelObject: type %u hors limites (%u objets) pour le BG (carte %u, instance %u).", + type, uint32(BgObjects.size()), m_MapId, m_InstanceID); + return false; + } + if (!BgObjects[type]) return true; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp index 82db023..0235c41 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp @@ -731,9 +731,16 @@ GameObject const* BattlegroundAB::GetNearGameObjectFlag(const Player* player) // cliquable si neutre, ou tenu/conteste par l equipe adverse if (!(status == 0 || teamIndex == status % 2)) continue; - // BgObjects[node*8 + status] = banniere affichee pour cet etat (0=neutre, - // 1/2=contestee A/H, 3/4=occupee A/H) - GameObject* flag = GetBgMap()->GetGameObject(BgObjects[node * 8 + status]); + // Ce coeur n'a QU'UNE banniere par noeud, aux indices 0 a 4 + // (BG_AB_OBJECT_BANNER + node) : _ChangeBanner modifie son visuel + // selon l'etat au lieu d'echanger huit objets distincts. + // + // L'indexation node*8+status ecrite ici venait de l'ancien Bassin + // d'Arathi de TrinityCore, ou chaque noeud possedait bien huit + // objets. Elle donnait 24 pour le noeud 3 et 32 pour le noeud 4, + // dans un tableau qui n'en compte que 22 : lecture hors limites, + // GUID arbitraires, et plantage selon ce qui suit le tampon. + GameObject* flag = GetBGObject(BG_AB_OBJECT_BANNER + node, false); if (!flag || !flag->isSpawned()) continue; float dist = player->GetDistance(flag); From a95670ac0a5b395d0378b1a3b2b400a6d8079f15 Mon Sep 17 00:00:00 2001 From: BlaMacfly Date: Mon, 31 Aug 2026 23:34:53 +0200 Subject: [PATCH 03/50] Rivage brise : portage de l'Assaut 7.2 (scenario 1280, carte 1666) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit La carte 1666 etait declaree mais entierement vide, et instance_template y reclamait un script fantome. Les quetes 45102 « Begin the Assault » et 46734 « Assault on Broken Shore » etaient donc infranchissables : elles relevent de ce scenario, et non de l'introduction 7.0 deja portee sur la carte 1460. PORTAGE, PAS TRANSCRIPTION. La source (dufernst/LegionCore-7.3.5, meme lignee uwow) repose sur quatre extensions que nous n'avons pas : onScenarionNextStep/getScenarionStep, CRITERIA_TYPE_SCRIPT_EVENT_2, FunctionProcessor et une surcharge de GetClosestGraveYard. La progression est donc inversee : au lieu d'etre rappele a chaque etape, le script alimente les criteres officiels et le moteur avance seul -- la meme architecture que sur la carte 1460. Les neuf criteres des huit etapes ont ete releves dans les DB2 du build 7.3.5.26972 (ScenarioStep, CriteriaTree, Criteria) et non recopies de la source ; ils confirment ses identifiants d'asset. Sept sont de type 92 (SEND_EVENT_SCENARIO), un de type 73, un de type 68. Six ecarts d'API traites, tous constates et non supposes : InstanceScript(InstanceMap*), Conversation::CreateConversation (Player n'a pas cette methode -- la source l'appelait sur une creature, cela n'aurait pas compile), UNIT_NPC_FLAGS avec SetFlag64, DamageTaken a 2 arguments, OnSpellClick a 2, MovePath a 2. NON PORTE : player_scripts_for_start_assault, qui sondait chaque joueur a chaque tick pour lui imposer la quete 46730. Un donneur en base fait le meme travail sans ce cout. SQL joint : - rattachement des 5 scripts a leurs 11 entrees, toutes verifiees exclusives a la carte 1666 ; - les 87 points des 5 chemins scriptes. Ils vivaient dans waypoint_data_script, table absente de notre schema, d'ou leur oubli lors de l'extraction du 27/08. Le 11322708 est le vol d'arrivee : l'atteinte de son point 20 declenche l'etape 0, sans lui rien ne demarrait ; - le donneur manquant de 45102, l'archimage Khadgar 116302, deja pose chez nous aux coordonnees de la reference mais jamais declare. Les 593 creatures et 59 objets de la carte etaient generes depuis le 27/08 et n'avaient jamais ete appliques ; ils le sont desormais. RESERVE : rien de tout ceci n'a ete verifie en jeu. Les credits de quete 116253 et 116279 sont en outre cables sur la fermeture des deux premiers portails par deduction -- la quete parle de « First » et « Second Legion Spire destroyed » -- et non sur une donnee. Co-Authored-By: Claude Opus 5 --- .../outils/extraire_chemins_scriptes.py | 98 +++ sql/sylvania/rivage_1666_chemins.sql | 114 +++ sql/sylvania/rivage_1666_donneur.sql | 30 + sql/sylvania/rivage_1666_scripts.sql | 39 + .../scenario_assault_broken_shore.cpp | 772 ++++++++++++++++++ .../BrokenIsles/brokenisles_script_loader.cpp | 2 + 6 files changed, 1055 insertions(+) create mode 100644 chantiers/rivage_brise/outils/extraire_chemins_scriptes.py create mode 100644 sql/sylvania/rivage_1666_chemins.sql create mode 100644 sql/sylvania/rivage_1666_donneur.sql create mode 100644 sql/sylvania/rivage_1666_scripts.sql create mode 100644 src/server/scripts/BrokenIsles/Scenario/scenario_assault_broken_shore.cpp diff --git a/chantiers/rivage_brise/outils/extraire_chemins_scriptes.py b/chantiers/rivage_brise/outils/extraire_chemins_scriptes.py new file mode 100644 index 0000000..3443126 --- /dev/null +++ b/chantiers/rivage_brise/outils/extraire_chemins_scriptes.py @@ -0,0 +1,98 @@ +# -*- coding: utf-8 -*- +"""Extrait les 5 chemins scriptes du Rivage brise (carte 1666). + +Ils vivent dans `waypoint_data_script`, une table que notre coeur n'a +pas : notre sWaypointMgr ne lit que `waypoint_data`. C'est pourquoi +l'extraction precedente, qui ne regardait que cette derniere, les avait +manques -- et pourquoi les alliés comme le corbeau restaient immobiles. + +Correspondance des colonnes, pilotee par les NOMS : + reference nous + id, point, position_x/y/z, identiques + orientation, delay, + action, action_chance + move_flag -> move_type (voir ci-dessous) + speed, entry -> ABANDONNEES, aucun equivalent + wpguid -> 0 + +move_flag vaut 1 sur la totalite des 87 points des cinq chemins. Notre +enumeration donne 0=marche, 1=course, 2=atterrissage, 3=decollage : la +valeur 1 designe la course dans les deux. Le vol du corbeau ne vient pas +du chemin mais de SetFlyMode et du vehicule. + +CONTROLE : les effectifs attendus sont ecrits en dur et verifies. Un +extracteur qui renvoie zero sans broncher est le piege deja rencontre +sur ce chantier. +""" +import io, re, sys + +DUMP = '/home/ubuntu/tmp/abs/LegionCore_world_2020_04_25.sql' +ATTENDU = {11322705: 24, 11322706: 18, 11322707: 23, 11322708: 21, 11322709: 1} + +# colonnes de waypoint_data_script, relevees dans l'entete de l'INSERT +COLS = ['id','point','position_x','position_y','position_z','orientation', + 'delay','move_flag','speed','action','action_chance','entry','wpguid'] + +motif = re.compile(r'^\((\d+),(.*)\)[,;]\s*$') +trouves = {k: [] for k in ATTENDU} + +with io.open(DUMP, encoding='utf-8', errors='surrogateescape') as f: + for ligne in f: + m = motif.match(ligne) + if not m: + continue + ident = int(m.group(1)) + if ident not in ATTENDU: + continue + champs = [ident] + [c.strip() for c in m.group(2).split(',')] + if len(champs) != len(COLS): + sys.exit('ERREUR : %d champs pour le chemin %d, %d attendus' + % (len(champs), ident, len(COLS))) + trouves[ident].append(dict(zip(COLS, champs))) + +for ident, n in sorted(ATTENDU.items()): + reel = len(trouves[ident]) + if reel != n: + sys.exit('ERREUR : chemin %d -> %d points extraits, %d attendus.' + % (ident, reel, n)) + +total = sum(len(v) for v in trouves.values()) + +L = [] +L.append('-- ' + '=' * 69) +L.append("-- Assaut du Rivage brisé (carte 1666) — les 5 chemins scriptés") +L.append('--') +L.append("-- Ces chemins vivent dans `waypoint_data_script` chez la référence,") +L.append("-- une table que notre cœur n'a pas : sWaypointMgr ne lit que") +L.append("-- `waypoint_data`. L'extraction du 27/08 ne regardait que cette") +L.append("-- dernière et les avait donc manqués — d'où des alliés immobiles et,") +L.append("-- plus grave, un corbeau arcanique qui ne décollait jamais.") +L.append('--') +L.append("-- Le 11322708 est le vol d'arrivée : c'est l'atteinte de son point 20") +L.append("-- qui déclenche l'étape 0 du scénario. Sans lui, rien ne démarre.") +L.append('--') +L.append("-- move_flag → move_type : la valeur est 1 sur les %d points." % total) +L.append("-- Notre énumération donne 0=marche, 1=course, 2=atterrissage,") +L.append("-- 3=décollage ; la course correspond. `speed` et `entry` n'ont") +L.append("-- aucun équivalent chez nous et sont abandonnées.") +L.append('--') +for ident, n in sorted(ATTENDU.items()): + L.append('-- %d : %2d points' % (ident, n)) +L.append('-- ' + '=' * 69) +L.append('') +L.append('DELETE FROM `waypoint_data` WHERE `id` BETWEEN 11322705 AND 11322709;') +L.append('') +L.append('INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,' + '`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES') + +lignes = [] +for ident in sorted(ATTENDU): + for r in sorted(trouves[ident], key=lambda x: int(x['point'])): + lignes.append('(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,0)' % ( + r['id'], r['point'], r['position_x'], r['position_y'], r['position_z'], + r['orientation'], r['delay'], r['move_flag'], r['action'], r['action_chance'])) + +L.append(',\n'.join(lignes) + ';') + +io.open('/tmp/rivage_1666_chemins.sql', 'w', encoding='utf-8').write('\n'.join(L) + '\n') +print('%d points extraits sur %d chemins, controles conformes' % (total, len(ATTENDU))) diff --git a/sql/sylvania/rivage_1666_chemins.sql b/sql/sylvania/rivage_1666_chemins.sql new file mode 100644 index 0000000..d9bf7eb --- /dev/null +++ b/sql/sylvania/rivage_1666_chemins.sql @@ -0,0 +1,114 @@ +-- ===================================================================== +-- Assaut du Rivage brisé (carte 1666) — les 5 chemins scriptés +-- +-- Ces chemins vivent dans `waypoint_data_script` chez la référence, +-- une table que notre cœur n'a pas : sWaypointMgr ne lit que +-- `waypoint_data`. L'extraction du 27/08 ne regardait que cette +-- dernière et les avait donc manqués — d'où des alliés immobiles et, +-- plus grave, un corbeau arcanique qui ne décollait jamais. +-- +-- Le 11322708 est le vol d'arrivée : c'est l'atteinte de son point 20 +-- qui déclenche l'étape 0 du scénario. Sans lui, rien ne démarre. +-- +-- move_flag → move_type : la valeur est 1 sur les 87 points. +-- Notre énumération donne 0=marche, 1=course, 2=atterrissage, +-- 3=décollage ; la course correspond. `speed` et `entry` n'ont +-- aucun équivalent chez nous et sont abandonnées. +-- +-- 11322705 : 24 points +-- 11322706 : 18 points +-- 11322707 : 23 points +-- 11322708 : 21 points +-- 11322709 : 1 points +-- ===================================================================== + +DELETE FROM `waypoint_data` WHERE `id` BETWEEN 11322705 AND 11322709; + +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(11322705,1,-1895.48,3181.44,3.94356,0,0,1,0,100,0), +(11322705,2,-1895.48,3181.44,3.94356,0,0,1,0,100,0), +(11322705,3,-1896.09,3194.66,3.0589,0,0,1,0,100,0), +(11322705,4,-1879.45,3226.71,5.81127,0,0,1,0,100,0), +(11322705,5,-1855.82,3233.47,14.6567,0,0,1,0,100,0), +(11322705,6,-1857.58,3265.25,25.8483,0,0,1,0,100,0), +(11322705,7,-1867.03,3288.59,32.05,0,0,1,0,100,0), +(11322705,8,-1852.08,3304.66,37.4348,0,0,1,0,100,0), +(11322705,9,-1839.8,3322.75,40.8837,0,0,1,0,100,0), +(11322705,10,-1839.04,3343.29,42.466,0,0,1,0,100,0), +(11322705,11,-1836.7,3363.89,45.3895,0,0,1,0,100,0), +(11322705,12,-1850.58,3384.72,46.7613,0,0,1,0,100,0), +(11322705,13,-1825.16,3371.11,48.1092,0,0,1,0,100,0), +(11322705,14,-1800.48,3368.29,52.986,0,0,1,0,100,0), +(11322705,15,-1781.35,3380.74,58.1253,0,0,1,0,100,0), +(11322705,16,-1767.17,3386.07,61.2137,0,0,1,0,100,0), +(11322705,17,-1749.35,3385.12,65.4982,0,0,1,0,100,0), +(11322705,18,-1743.22,3376.4,66.7185,0,0,1,0,100,0), +(11322705,19,-1733.85,3361.1,69.025,0,0,1,0,100,0), +(11322705,20,-1727.28,3348.62,73.3198,0,0,1,0,100,0), +(11322705,21,-1719.09,3337.02,76.6384,0,0,1,0,100,0), +(11322705,22,-1710.71,3331.34,79.6968,0,0,1,0,100,0), +(11322705,23,-1693.39,3326.75,83.6209,0,0,1,0,100,0), +(11322705,24,-1665.47,3322.98,84.213,0,0,1,0,100,0), +(11322706,1,-1661.46,3342.18,84.7206,0,0,1,0,100,0), +(11322706,2,-1661.46,3342.18,84.7206,0,0,1,0,100,0), +(11322706,3,-1643.34,3358.99,91.1839,0,0,1,0,100,0), +(11322706,4,-1614.3,3365.34,99.9272,0,0,1,0,100,0), +(11322706,5,-1590.46,3353.51,107.609,0,0,1,0,100,0), +(11322706,6,-1568.88,3331.64,108.463,0,0,1,0,100,0), +(11322706,7,-1544.19,3323.67,108.452,0,0,1,0,100,0), +(11322706,8,-1527.78,3312.48,108.452,0,0,1,0,100,0), +(11322706,9,-1516.94,3278.18,108.456,0,0,1,0,100,0), +(11322706,10,-1502.84,3232.22,108.308,0,0,1,0,100,0), +(11322706,11,-1499.05,3199.12,94.6383,0,0,1,0,100,0), +(11322706,12,-1506.8,3164.73,85.6659,0,0,1,0,100,0), +(11322706,13,-1512.61,3132.76,85.6753,0,0,1,0,100,0), +(11322706,14,-1504.42,3115.11,83.3742,0,0,1,0,100,0), +(11322706,15,-1491.75,3090.42,72.0224,0,0,1,0,100,0), +(11322706,16,-1472.63,3055.67,53.7606,0,0,1,0,100,0), +(11322706,17,-1463.55,3041.25,48.0012,0,0,1,0,100,0), +(11322706,18,-1443.16,3018.53,36.9585,0,0,1,0,100,0), +(11322707,1,-1426.19,2996.66,37.1142,0,0,1,0,100,0), +(11322707,2,-1426.19,2996.66,37.1142,0,0,1,0,100,0), +(11322707,3,-1420.86,2984.12,35.987,0,0,1,0,100,0), +(11322707,4,-1414.93,2950.44,36.6867,0,0,1,0,100,0), +(11322707,5,-1402.61,2927.92,31.2816,0,0,1,0,100,0), +(11322707,6,-1382.3,2939.2,25.4175,0,0,1,0,100,0), +(11322707,7,-1359.37,2925.01,23.9701,0,0,1,0,100,0), +(11322707,8,-1348.45,2910.15,24.3147,0,0,1,0,100,0), +(11322707,9,-1351.97,2894.62,24.8695,0,0,1,0,100,0), +(11322707,10,-1350.41,2876.29,24.9108,0,0,1,0,100,0), +(11322707,11,-1344.7,2850.11,25.1457,0,0,1,0,100,0), +(11322707,12,-1325.29,2832.26,24.2901,0,0,1,0,100,0), +(11322707,13,-1290.08,2823.92,26.1421,0,0,1,0,100,0), +(11322707,14,-1318.28,2814.4,23.9136,0,0,1,0,100,0), +(11322707,15,-1321.91,2792.99,23.499,0,0,1,0,100,0), +(11322707,16,-1316.96,2769.79,23.9586,0,0,1,0,100,0), +(11322707,17,-1316.57,2747.45,24.3456,0,0,1,0,100,0), +(11322707,18,-1333.14,2704.89,30.3677,0,0,1,0,100,0), +(11322707,19,-1256.09,2718.4,27.7485,0,0,1,0,100,0), +(11322707,20,-1276.42,2664.57,28.3643,0,0,1,0,100,0), +(11322707,21,-1291.27,2637.64,32.6723,0,0,1,0,100,0), +(11322707,22,-1227.07,2659.19,27.5531,0,0,1,0,100,0), +(11322707,23,-1199.42,2661.52,29.5922,0,0,1,0,100,0), +(11322708,1,-850.003,4176.37,751.63,0,0,1,0,100,0), +(11322708,2,-898.993,4094.4,725.061,0,0,1,0,100,0), +(11322708,3,-970.247,3975.18,686.417,0,0,1,0,100,0), +(11322708,4,-1044.75,3879.26,652.558,0,0,1,0,100,0), +(11322708,5,-1151.45,3694.79,592.72,0,0,1,0,100,0), +(11322708,6,-1195.84,3493.36,546.951,0,0,1,0,100,0), +(11322708,7,-1225.72,3286.17,564.777,0,0,1,0,100,0), +(11322708,8,-1194.84,3183.06,550.694,0,0,1,0,100,0), +(11322708,9,-1057.13,3080.14,501.312,0,0,1,0,100,0), +(11322708,10,-1007.26,2974.9,455.169,0,0,1,0,100,0), +(11322708,11,-1019.28,2874.84,399.954,0,0,1,0,100,0), +(11322708,12,-1100.81,2821.6,336.706,0,0,1,0,100,0), +(11322708,13,-1194.32,2756.01,271.367,0,0,1,0,100,0), +(11322708,14,-1242.8,2712.92,285.178,0,0,1,0,100,0), +(11322708,15,-1365.37,2573.14,261.881,0,0,1,0,100,0), +(11322708,16,-1418.23,2507.59,254.915,0,0,1,0,100,0), +(11322708,17,-1495.32,2527.83,191.514,0,0,1,0,100,0), +(11322708,18,-1589.36,2571.82,132.87,0,0,1,0,100,0), +(11322708,19,-1660.26,2642.93,75.1266,0,0,1,0,100,0), +(11322708,20,-1719.28,2723.04,41.4641,0,0,1,0,100,0), +(11322708,21,-1716.3,2809.05,4,0,0,1,0,100,0), +(11322709,1,-1338.13,2800.24,23.0393,0,0,1,0,100,0); diff --git a/sql/sylvania/rivage_1666_donneur.sql b/sql/sylvania/rivage_1666_donneur.sql new file mode 100644 index 0000000..ef1bf1a --- /dev/null +++ b/sql/sylvania/rivage_1666_donneur.sql @@ -0,0 +1,30 @@ +-- ===================================================================== +-- Assaut du Rivage brisé — le donneur manquant de « Begin the Assault » +-- +-- La quête 45102 n'avait NI donneur NI receveur en base : introuvable en +-- jeu, quoi qu'on fasse. C'était l'une des trois quêtes sans donneur +-- relevées à l'audit du 23/08. +-- +-- Le dump de référence (dufernst/LegionCore-7.3.5) donne pour elle +-- l'archimage Khadgar 116302, à la fois donneur et receveur. Ce PNJ est +-- DÉJÀ posé chez nous, sur la carte 1220 à (-1628, 3194) — exactement +-- les coordonnées de la référence — et porte déjà le drapeau de donneur +-- de quêtes (npcflag 3). Rien à faire apparaître : seule la déclaration +-- manquait. +-- +-- 46734 reçoit aussi 116302, comme dans la référence, en plus du 86563 +-- déjà déclaré chez nous. Deux points d'accès, aucun conflit. +-- +-- Rappel de la chaîne, pour mémoire : +-- 46730 « Armies of Legionfall » 86563 (déjà câblée) +-- 45102 « Begin the Assault » 116302 (posée ici) +-- 46734 « Assault on Broken Shore » 86563 + 116302 +-- ===================================================================== + +DELETE FROM `creature_queststarter` WHERE `quest` = 45102 AND `id` = 116302; +DELETE FROM `creature_questender` WHERE `quest` = 45102 AND `id` = 116302; +DELETE FROM `creature_queststarter` WHERE `quest` = 46734 AND `id` = 116302; +DELETE FROM `creature_questender` WHERE `quest` = 46734 AND `id` = 116302; + +INSERT INTO `creature_queststarter` (`id`,`quest`) VALUES (116302, 45102), (116302, 46734); +INSERT INTO `creature_questender` (`id`,`quest`) VALUES (116302, 45102), (116302, 46734); diff --git a/sql/sylvania/rivage_1666_scripts.sql b/sql/sylvania/rivage_1666_scripts.sql new file mode 100644 index 0000000..8098d59 --- /dev/null +++ b/sql/sylvania/rivage_1666_scripts.sql @@ -0,0 +1,39 @@ +-- ===================================================================== +-- Assaut du Rivage brisé (carte 1666) — rattachement des scripts +-- +-- Le C++ porté (scenario_assault_broken_shore.cpp) ne sert à rien tant +-- que ses scripts ne sont liés à aucune entrée : c'est la classe de bug +-- la plus fréquente de ce cœur, des IA complètes jamais appelées. +-- +-- PORTÉE VÉRIFIÉE : les onze entrées ci-dessous n'existent QUE sur la +-- carte 1666 — contrôlé par un GROUP BY sur (id, map). Un ScriptName +-- s'appliquant à toutes les cartes, ce contrôle n'est pas facultatif. +-- +-- NE SONT PAS RATTACHÉES, volontairement : Arganoth (118551), +-- Mephistroth (120746), Illidan (119130) et Lord Kalgorath (116291). +-- L'instance les pilote depuis OnCreatureCreate et OnCreatureKilled ; +-- leur donner un ScriptName ferait double emploi. +-- +-- CONCORDANCE RELEVÉE, pas supposée : +-- 120743 Arcane Bomb → 7 exemplaires posés, critère 57574 × 7 +-- 118558 Legion Portal → 7 exemplaires, dont 3 à fermer (critère 56778) +-- ===================================================================== + +-- Les huit alliés qui accompagnent l'assaut : rotations de sorts et +-- recherche d'adversaire à portée. +UPDATE `creature_template` SET `ScriptName` = 'npc_assaut_allie' + WHERE `entry` IN (119133, 118412, 121232, 118966, 121146, 118969, 118945, 118444); + +-- Le corbeau arcanique : véhicule d'arrivée, sa fin de trajet vaut +-- l'étape 0 du scénario. Aucun spawn en base, il est invoqué par sort. +UPDATE `creature_template` SET `ScriptName` = 'npc_assaut_corbeau_arcanique' + WHERE `entry` = 118517; + +-- Portails de la Légion et bombes arcaniques : activés au clic de sort. +UPDATE `creature_template` SET `ScriptName` = 'npc_assaut_interactif' + WHERE `entry` IN (118558, 120743); + +-- La passerelle démoniaque, objet de type 10 (goober) : notre cœur ne +-- lui offre que le point d'entrée OnGossipHello. +UPDATE `gameobject_template` SET `ScriptName` = 'go_assaut_passerelle_demoniaque' + WHERE `entry` = 267955; diff --git a/src/server/scripts/BrokenIsles/Scenario/scenario_assault_broken_shore.cpp b/src/server/scripts/BrokenIsles/Scenario/scenario_assault_broken_shore.cpp new file mode 100644 index 0000000..264451d --- /dev/null +++ b/src/server/scripts/BrokenIsles/Scenario/scenario_assault_broken_shore.cpp @@ -0,0 +1,772 @@ +/* + * Scenario : Assaut du Rivage brise (ScenarioID 1280, carte 1666) + * + * Contenu de la 7.2, a ne pas confondre avec le scenario d'INTRODUCTION + * de la 7.0 (ScenarioID 786, carte 1460, scenario_broken_shore_intro.cpp) + * ou l'on suit Varian, Vol'jin, Krosus et Gul'dan. Celui-ci est l'assaut + * mene depuis Dalaran, et c'est LUI dont dependent les quetes bloquees + * 45102 « Begin the Assault » et 46734 « Assault on Broken Shore ». + * + * PORTAGE, PAS TRANSCRIPTION + * Source : dufernst/LegionCore-7.3.5 (AssaultBrokenShore.cpp 500 lignes + + * instance_AssaultBrokenShore.cpp 308 lignes), meme lignee uwow que notre + * fork. Son architecture repose sur des extensions que nous n'avons PAS : + * + * onScenarionNextStep(step) / getScenarionStep() hook de progression + * CRITERIA_TYPE_SCRIPT_EVENT_2 type de critere + * FunctionProcessor ordonnanceur + * GetClosestGraveYard(x,y,z) surcharge d'instance + * + * Aucun de ces quatre elements n'existe ici. La progression est donc + * inversee : au lieu d'etre RAPPELE a chaque etape, le script alimente + * les criteres officiels et le moteur avance de lui-meme, exactement + * comme sur la carte 1460. + * + * CRITERES OFFICIELS, releves dans les DB2 du build 7.3.5.26972 + * (ScenarioStep / CriteriaTree / Criteria), et non recopies de la source : + * + * ordre arbre critere type asset montant intitule + * 0 56811 35285 92 56460 1 Into the Fray + * 1 56872 35328 92 56697 3 Vanguard of the Assault + * 2 56874 35329 92 56500 1 Might of the Legion + * 3 57180 35496 92 56779 200 Rifts of Chaos (barre) + * 57185 35495 73 56778 3 ... + les 3 portails + * 4 57183 35497 92 56780 1 The Doomguard's Command + * 5 57293 35551 68 267955 1 Gateway to Ruin + * 6 58303 36178 92 57574 7 Pillar of Fire + * 7 59170 36179 92 57579 1 Mephistroth + * + * type 92 = CRITERIA_TYPE_SEND_EVENT_SCENARIO -> DoSendEventScenario + * type 73 = CRITERIA_TYPE_SEND_EVENT -> UpdateCriteria + * type 68 = CRITERIA_TYPE_USE_GAMEOBJECT -> UpdateCriteria + * + * Les identifiants d'asset de la source coincident avec les officiels : + * verification faite, ils sont conserves. + * + * ECARTS D'API TRAITES, tous constates dans notre code et non supposes : + * DamageTaken(Unit*, uint32&) 2 arguments, pas 3 + * OnSpellClick(Unit*, bool&) 2 arguments, pas 1 + * EnterEvadeMode(EvadeReason) prend un motif + * GameObjectScript::OnGossipHello(Player*, GameObject*) + * MotionMaster::MovePath(id, repeatable) 2 arguments, pas 4 + * PlayerList : GetSource(), pas getSource() + * CreateConversation n'existe QUE sur Player -- la source l'appelle + * sur une creature, cela n'aurait pas compile. + * + * NON PORTE, deliberement : player_scripts_for_start_assault, qui + * sondait CHAQUE joueur a chaque tick pour lui imposer la quete 46730. + * Un donneur de quete en base fait le meme travail sans le cout. + * + * Le nom d'enregistrement « scenario_7.2_broken_shore_intro » est celui + * qu'exige deja instance_template pour la carte 1666. Il contient un + * point, donc ne peut pas passer par la macro RegisterInstanceScript : + * la classe est ecrite a la main pour ne pas avoir a toucher la base. + */ + +#include "ScriptMgr.h" +#include "InstanceScript.h" +#include "Scenario.h" +#include "InstanceScenario.h" +#include "ScriptedCreature.h" +#include "MotionMaster.h" +#include "Player.h" +#include "GameObject.h" +#include "GameObjectAI.h" +#include "TemporarySummon.h" +#include "ObjectAccessor.h" +#include "Conversation.h" + +enum AssautCreatures +{ + // hostiles nommes + NPC_KALGORATH = 116291, // etape 2 + NPC_ARGANOTH = 118551, // etape 4, invisible au depart + NPC_MEPHISTROTH = 120746, // etape 7, invisible au depart + NPC_ILLIDAN = 119130, + + // allies accompagnant l'assaut + NPC_ALLIE_MAIEV = 119133, + NPC_ALLIE_MAGE_KIRIN_TOR = 118412, + NPC_ALLIE_BLOOMER = 121232, + NPC_ALLIE_CHAMAN = 118966, + NPC_ALLIE_GRAND_PRETRE = 121146, + NPC_ALLIE_ILLIDARI = 118969, + NPC_ALLIE_HAUTE_GARDE = 118945, + NPC_ALLIE_GARDIEN_KIRIN_TOR = 118444, + + // vehicule d'arrivee + NPC_CORBEAU_ARCANIQUE = 118517, + + // interactifs + NPC_PORTAIL_LEGION = 118558, // etape 3, a fermer x3 + NPC_BOMBE_ARCANIQUE = 120743, // etape 6, a poser x7 + + NPC_INFERNAL_INTRO = 118416, +}; + +// Elites de la plage : etape 1, trois suffisent. +uint32 const ELITES_PLAGE[] = { 118654, 118453, 118886, 118456 }; + +// Pietaille comptant pour la barre de progression de l'etape 3. +uint32 const PIETAILLE_RIFTS[] = +{ + 120511, 118711, 118644, 118647, 118645, 118656, 118655, 118708, + 118658, 118563, 118659, 118646, 118650, 118648, 118652, 118653, + 118707, 118688, 118457, 118416 +}; + +enum AssautCriteres +{ + ASSET_ARRIVEE = 56460, // etape 0, x1 + ASSET_ELITE_PLAGE = 56697, // etape 1, x3 + ASSET_KALGORATH = 56500, // etape 2, x1 + ASSET_PIETAILLE = 56779, // etape 3, barre de 200 + ASSET_PORTAIL_FERME = 56778, // etape 3, x3 (type 73) + ASSET_ARGANOTH = 56780, // etape 4, x1 + ASSET_PASSERELLE = 267955,// etape 5, x1 (type 68) + ASSET_BOMBE = 57574, // etape 6, x7 + ASSET_MEPHISTROTH = 57579, // etape 7, x1 +}; + +enum AssautConversations +{ + CONV_ARRIVEE = 4828, + CONV_DEBARQUEMENT = 4829, + CONV_PLAGE_1 = 4831, + CONV_PLAGE_2 = 4832, + CONV_KALGORATH = 4887, + CONV_MEPHISTROTH = 4870, + CONV_FINALE = 4892, + CONV_ENTREE = 4526, +}; + +enum AssautSorts +{ + SPELL_ENTREE_AURA = 240155, + SPELL_ENTREE_INVOCATION = 243303, + SPELL_ENTREE_A_RETIRER = 240188, + SPELL_MONTER_CORBEAU = 52391, + SPELL_PASSERELLE = 236671, + SPELL_FINALE = 243824, + SPELL_INFERNAL_1 = 205266, + SPELL_INFERNAL_2 = 239649, + SPELL_MAGE_REACTION = 46604, + SPELL_BOMBE_VISUEL = 144373, +}; + +enum AssautChemins +{ + CHEMIN_CORBEAU = 11322708, + CHEMIN_ALLIES_PLAGE = 11322705, + CHEMIN_ALLIES_APRES_MAIEV = 11322706, + CHEMIN_ALLIES_ARGANOTH = 11322709, + CHEMIN_ALLIES_DEBUT = 11322707, +}; + +// Signaux envoyes a l'instance par les scripts de creature et d'objet. +// On passe par SetData plutot que d'appeler DoSendEventScenario depuis +// l'exterieur : l'instance reste seule maitresse de la progression. +enum AssautSignaux +{ + DATA_ARRIVEE_ACCOMPLIE = 9201, + DATA_PORTAIL_FERME = 9202, + DATA_BOMBE_POSEE = 9203, + DATA_PASSERELLE_UTILISEE = 9204, +}; + +enum AssautQuetes +{ + QUETE_ASSAUT = 46734, + CREDIT_SPIRE_1 = 116253, // « First Legion Spire destroyed » + CREDIT_SPIRE_2 = 116279, // « Second Legion Spire destroyed » + CREDIT_KHADGAR = 120215, // « Speak to Khadgar » +}; + +static bool EstDansListe(uint32 entree, uint32 const* liste, size_t taille) +{ + for (size_t i = 0; i < taille; ++i) + if (liste[i] == entree) + return true; + return false; +} + +class instance_assaut_rivage_brise : public InstanceMapScript +{ +public: + instance_assaut_rivage_brise() : InstanceMapScript("scenario_7.2_broken_shore_intro", 1666) { } + + struct instance_assaut_rivage_brise_InstanceMapScript : public InstanceScript + { + instance_assaut_rivage_brise_InstanceMapScript(InstanceMap* map) : InstanceScript(map) { } + + GuidList allies; + ObjectGuid arganothGuid; + ObjectGuid illidanGuid; + ObjectGuid mephistrothGuid; + + uint32 elitesTues = 0; + uint32 portailsFermes = 0; + uint32 bombesPosees = 0; + bool arganothRevele = false; + bool mephistrothRevele = false; + + void OnCreatureCreate(Creature* creature) override + { + switch (creature->GetEntry()) + { + case NPC_ALLIE_MAIEV: + case NPC_ALLIE_MAGE_KIRIN_TOR: + case NPC_ALLIE_BLOOMER: + case NPC_ALLIE_CHAMAN: + case NPC_ALLIE_GRAND_PRETRE: + case NPC_ALLIE_ILLIDARI: + case NPC_ALLIE_HAUTE_GARDE: + case NPC_ALLIE_GARDIEN_KIRIN_TOR: + allies.push_back(creature->GetGUID()); + break; + case NPC_ARGANOTH: + // Reste hors d'atteinte jusqu'a l'etape 4. + creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC); + creature->SetVisible(false); + arganothGuid = creature->GetGUID(); + break; + case NPC_ILLIDAN: + illidanGuid = creature->GetGUID(); + break; + case NPC_MEPHISTROTH: + creature->SetVisible(false); + mephistrothGuid = creature->GetGUID(); + break; + default: + break; + } + } + + void OnPlayerEnter(Player* player) override + { + if (!player) + return; + + player->CastSpell(player, SPELL_ENTREE_AURA, true); + + player->AddDelayedEvent(5000, [player]() -> void + { + player->CastSpell(player, SPELL_ENTREE_INVOCATION, true); + + std::list escorte; + GetCreatureListWithEntryInGrid(escorte, player, NPC_ALLIE_MAGE_KIRIN_TOR, 50.0f); + for (Creature* c : escorte) + c->CastSpell(c, SPELL_ENTREE_INVOCATION, true); + + player->AddDelayedEvent(4000, [player]() -> void + { + player->RemoveAura(SPELL_ENTREE_A_RETIRER); + Conversation::CreateConversation(CONV_ENTREE, player, player->GetPosition(), { player->GetGUID() }); + }); + }); + } + + // Diffuse une conversation a tous les joueurs de l'instance. + // La source la jouait pour le PREMIER joueur seulement (break dans + // la boucle) : correct en solo, muet pour les autres en groupe. + void ConversationPourTous(uint32 conversationId) + { + Map::PlayerList const& liste = instance->GetPlayers(); + for (Map::PlayerList::const_iterator i = liste.begin(); i != liste.end(); ++i) + if (Player* player = i->GetSource()) + Conversation::CreateConversation(conversationId, player, player->GetPosition(), { player->GetGUID() }); + } + + void CritereJoueurs(CriteriaTypes type, uint32 asset) + { + Map::PlayerList const& liste = instance->GetPlayers(); + for (Map::PlayerList::const_iterator i = liste.begin(); i != liste.end(); ++i) + if (Player* player = i->GetSource()) + player->UpdateCriteria(type, asset); + } + + void CreditJoueurs(uint32 creditEntry) + { + Map::PlayerList const& liste = instance->GetPlayers(); + for (Map::PlayerList::const_iterator i = liste.begin(); i != liste.end(); ++i) + if (Player* player = i->GetSource()) + player->KilledMonsterCredit(creditEntry); + } + + void DeplacerAllies(uint32 cheminId) + { + for (ObjectGuid const& guid : allies) + if (Creature* allie = instance->GetCreature(guid)) + { + allie->GetMotionMaster()->Clear(); + allie->GetMotionMaster()->MovePath(cheminId, false); + } + } + + void SetData(uint32 type, uint32 /*data*/) override + { + switch (type) + { + case DATA_ARRIVEE_ACCOMPLIE: + // Etape 0 : le corbeau a depose le joueur sur la plage. + DoSendEventScenario(ASSET_ARRIVEE); + ConversationPourTous(CONV_DEBARQUEMENT); + DeplacerAllies(CHEMIN_ALLIES_PLAGE); + break; + + case DATA_PORTAIL_FERME: + // Etape 3 : critere de type 73, trois portails. + CritereJoueurs(CRITERIA_TYPE_SEND_EVENT, ASSET_PORTAIL_FERME); + ++portailsFermes; + + // Les deux premiers portails valent aussi les credits + // de la quete 45102, qui parle de « First » et + // « Second Legion Spire destroyed ». + if (portailsFermes == 1) + CreditJoueurs(CREDIT_SPIRE_1); + else if (portailsFermes == 2) + CreditJoueurs(CREDIT_SPIRE_2); + break; + + case DATA_BOMBE_POSEE: + // Etape 6 : sept bombes. + ++bombesPosees; + DoSendEventScenario(ASSET_BOMBE); + break; + + case DATA_PASSERELLE_UTILISEE: + // Etape 5 : critere de type 68. + CritereJoueurs(CRITERIA_TYPE_USE_GAMEOBJECT, ASSET_PASSERELLE); + break; + + default: + break; + } + } + + void OnCreatureKilled(Creature* creature, Player* /*killer*/) override + { + if (!creature) + return; + + uint32 const entree = creature->GetEntry(); + + if (entree == NPC_KALGORATH) + { + // Etape 2. Le credit de quete porte la meme entree : la + // mort suffit, aucun credit supplementaire a accorder. + DoSendEventScenario(ASSET_KALGORATH); + ConversationPourTous(CONV_KALGORATH); + DeplacerAllies(CHEMIN_ALLIES_APRES_MAIEV); + return; + } + + if (entree == NPC_ARGANOTH) + { + // Etape 4. + DoSendEventScenario(ASSET_ARGANOTH); + RevelerMephistroth(); + return; + } + + if (entree == NPC_MEPHISTROTH) + { + // Etape 7, fin du scenario. + DoSendEventScenario(ASSET_MEPHISTROTH); + Finale(); + return; + } + + if (EstDansListe(entree, ELITES_PLAGE, std::extent::value)) + { + // Etape 1 : trois elites. + ++elitesTues; + DoSendEventScenario(ASSET_ELITE_PLAGE); + + if (elitesTues == 1) + ConversationPourTous(CONV_PLAGE_1); + else if (elitesTues == 2) + ConversationPourTous(CONV_PLAGE_2); + else if (elitesTues >= 3) + RevelerArganoth(); + return; + } + + if (EstDansListe(entree, PIETAILLE_RIFTS, std::extent::value)) + { + // Etape 3 : barre de progression de 200. La source + // envoyait 2 a 3 unites par mort ; on conserve ce rythme, + // faute de source officielle sur la valeur exacte. + uint32 const pas = urand(2, 3); + for (uint32 i = 0; i < pas; ++i) + DoSendEventScenario(ASSET_PIETAILLE); + return; + } + } + + void RevelerArganoth() + { + if (arganothRevele) + return; + arganothRevele = true; + + Creature* arganoth = instance->GetCreature(arganothGuid); + if (!arganoth) + return; + + arganoth->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC); + arganoth->SetVisible(true); + arganoth->GetMotionMaster()->Clear(); + + if (Creature* illidan = instance->GetCreature(illidanGuid)) + { + arganoth->GetMotionMaster()->MovePoint(0, illidan->GetPositionX(), illidan->GetPositionY(), illidan->GetPositionZ()); + illidan->AI()->AttackStart(arganoth); + arganoth->AI()->AttackStart(illidan); + } + + DeplacerAllies(CHEMIN_ALLIES_ARGANOTH); + } + + void RevelerMephistroth() + { + if (mephistrothRevele) + return; + mephistrothRevele = true; + + if (Creature* mephistroth = instance->GetCreature(mephistrothGuid)) + mephistroth->SetVisible(true); + + // CreateConversation n'existe que sur Player dans ce coeur : + // la source l'appelait sur la creature, ce qui n'aurait pas + // compile. On la joue pour les joueurs presents. + ConversationPourTous(CONV_MEPHISTROTH); + } + + void Finale() + { + Map::PlayerList const& liste = instance->GetPlayers(); + for (Map::PlayerList::const_iterator i = liste.begin(); i != liste.end(); ++i) + { + Player* player = i->GetSource(); + if (!player) + continue; + + player->AddDelayedEvent(4000, [player]() -> void + { + Conversation::CreateConversation(CONV_FINALE, player, player->GetPosition(), { player->GetGUID() }); + player->CastSpell(player, SPELL_FINALE, true); + player->KilledMonsterCredit(CREDIT_KHADGAR); + }); + } + } + }; + + InstanceScript* GetInstanceScript(InstanceMap* map) const override + { + return new instance_assaut_rivage_brise_InstanceMapScript(map); + } +}; + +// Les allies qui accompagnent l'assaut. Chacun a sa rotation propre, +// reprise telle quelle de la source : ce sont des donnees, pas des choix. +class npc_assaut_allie : public CreatureScript +{ +public: + npc_assaut_allie() : CreatureScript("npc_assaut_allie") { } + + struct npc_assaut_allieAI : public ScriptedAI + { + npc_assaut_allieAI(Creature* creature) : ScriptedAI(creature) + { + instance = me->GetInstanceScript(); + } + + InstanceScript* instance; + EventMap events; + + void Reset() override + { + events.Reset(); + } + + void EnterCombat(Unit* /*who*/) override + { + switch (me->GetEntry()) + { + case NPC_ALLIE_MAIEV: + DoCast(225184); + events.RescheduleEvent(1, 6000); + break; + case NPC_ALLIE_MAGE_KIRIN_TOR: + events.RescheduleEvent(2, 2500); + events.RescheduleEvent(3, 18000); + break; + case NPC_ALLIE_BLOOMER: + DoCast(79833); + events.RescheduleEvent(4, 2300); + events.RescheduleEvent(5, 14000); + break; + case NPC_ALLIE_CHAMAN: + events.RescheduleEvent(6, 4000); + events.RescheduleEvent(7, 35000); + events.RescheduleEvent(8, 11000); + events.RescheduleEvent(9, 14000); + break; + case NPC_ALLIE_GRAND_PRETRE: + events.RescheduleEvent(10, 3000); + events.RescheduleEvent(11, 13000); + events.RescheduleEvent(12, 15000); + break; + case NPC_ALLIE_ILLIDARI: + events.RescheduleEvent(13, 7000); + events.RescheduleEvent(14, 27000); + events.RescheduleEvent(15, 21000); + events.RescheduleEvent(16, 31000); + break; + case NPC_ALLIE_HAUTE_GARDE: + events.RescheduleEvent(17, 4000); + events.RescheduleEvent(18, 9000); + events.RescheduleEvent(19, 39000); + events.RescheduleEvent(20, 31000); + break; + case NPC_ALLIE_GARDIEN_KIRIN_TOR: + events.RescheduleEvent(21, 3000); + events.RescheduleEvent(22, 20000); + break; + default: + break; + } + } + + // Les allies doivent tenir jusqu'au bout de l'assaut : les degats + // recus sont divises d'autant plus fort qu'ils sont bas en vie. + // Formule reprise de la source ; le diviseur vaut au minimum 1, + // donc pas de division par zero. + void DamageTaken(Unit* /*attacker*/, uint32& damage) override + { + uint32 const diviseur = 11 - uint32(me->GetHealthPct() / 10.0f); + damage /= std::max(1, diviseur); + } + + void MovementInform(uint32 type, uint32 /*id*/) override + { + me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation()); + + if (type == WAYPOINT_MOTION_TYPE) + ChercherUnAdversaire(); + } + + // Cherche un hostile a portee et l'engage. + bool ChercherUnAdversaire() + { + std::list hostiles; + for (uint32 entree : PIETAILLE_RIFTS) + GetCreatureListWithEntryInGrid(hostiles, me, entree, 40.0f); + for (uint32 entree : ELITES_PLAGE) + GetCreatureListWithEntryInGrid(hostiles, me, entree, 40.0f); + + for (Creature* cible : hostiles) + if (cible->IsAlive()) + { + AttackStart(cible); + return true; + } + + return false; + } + + void UpdateAI(uint32 diff) override + { + if (me->HasUnitState(UNIT_STATE_STUNNED)) + return; + + if (!UpdateVictim()) + return; + + events.Update(diff); + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + if (uint32 eventId = events.ExecuteEvent()) + { + struct Rotation { uint32 evenement; uint32 sort; uint32 rappel; }; + static Rotation const rotations[] = + { + { 1, 226063, 6000 }, + { 2, 183108, 2500 }, { 3, 183075, 18000 }, + { 4, 182856, 2300 }, { 5, 182854, 14000 }, + { 6, 190330, 4000 }, { 7, 189804, 35000 }, + { 8, 190332, 11000 }, { 9, 190331, 14000 }, + { 10, 183555, 3000 }, { 11, 183553, 13000 }, { 12, 183549, 15000 }, + { 13, 222971, 7000 }, { 14, 223061, 27000 }, { 15, 223109, 21000 }, { 16, 223903, 31000 }, + { 17, 183894, 4000 }, { 18, 183897, 9000 }, { 19, 183898, 39000 }, { 20, 190010, 31000 }, + { 21, 183108, 3000 }, { 22, 13730, 20000 }, + }; + + for (Rotation const& r : rotations) + if (r.evenement == eventId) + { + DoCast(r.sort); + events.RescheduleEvent(r.evenement, r.rappel); + break; + } + } + + DoMeleeAttackIfReady(); + } + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return new npc_assaut_allieAI(creature); + } +}; + +// 118517 : le corbeau arcanique qui depose le joueur sur la plage. +// Sa fin de trajet vaut l'etape 0 du scenario. +class npc_assaut_corbeau_arcanique : public CreatureScript +{ +public: + npc_assaut_corbeau_arcanique() : CreatureScript("npc_assaut_corbeau_arcanique") { } + + struct npc_assaut_corbeau_arcaniqueAI : public ScriptedAI + { + npc_assaut_corbeau_arcaniqueAI(Creature* creature) : ScriptedAI(creature) { } + + void IsSummonedBy(Unit* summoner) override + { + SetFlyMode(true); + if (summoner) + summoner->CastSpell(me, SPELL_MONTER_CORBEAU, true); + } + + void PassengerBoarded(Unit* /*passager*/, int8 /*seatId*/, bool /*apply*/) override + { + Creature* moi = me; + me->AddDelayedEvent(4000, [moi]() -> void + { + moi->GetMotionMaster()->MovePath(CHEMIN_CORBEAU, false); + }); + } + + void MovementInform(uint32 moveType, uint32 pointId) override + { + if (moveType != WAYPOINT_MOTION_TYPE || pointId != 20) + return; + + Unit* proprietaire = me->GetAnyOwner(); + if (proprietaire && proprietaire->IsPlayer()) + { + Conversation::CreateConversation(CONV_ARRIVEE, proprietaire, proprietaire->GetPosition(), { proprietaire->GetGUID() }); + + if (InstanceScript* instance = me->GetInstanceScript()) + instance->SetData(DATA_ARRIVEE_ACCOMPLIE, 1); + + // Un infernal s'ecrase a l'arrivee, et un mage du Kirin Tor + // y reagit : mise en scene reprise de la source. + if (Creature* infernal = me->SummonCreature(NPC_INFERNAL_INTRO, me->GetPositionX() + 5.0f, me->GetPositionY() + 5.0f, me->GetPositionZ())) + { + infernal->CastSpell(infernal, SPELL_INFERNAL_1, true); + infernal->CastSpell(infernal, SPELL_INFERNAL_2, true); + + if (Creature* mage = infernal->FindNearestCreature(NPC_ALLIE_MAGE_KIRIN_TOR, 30.0f, true)) + { + mage->CastSpell(mage, SPELL_MAGE_REACTION, true); + mage->AI()->Talk(0); + } + } + } + + me->DespawnOrUnsummon(500); + } + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return new npc_assaut_corbeau_arcaniqueAI(creature); + } +}; + +// 118558 : portail de la Legion a fermer (etape 3, trois fois). +// 120743 : bombe arcanique a poser (etape 6, sept fois). +// Les deux s'activent au clic de sort. +class npc_assaut_interactif : public CreatureScript +{ +public: + npc_assaut_interactif() : CreatureScript("npc_assaut_interactif") { } + + struct npc_assaut_interactifAI : public ScriptedAI + { + npc_assaut_interactifAI(Creature* creature) : ScriptedAI(creature) + { + me->SetReactState(REACT_PASSIVE); + me->SetFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); + } + + void MoveInLineOfSight(Unit* /*who*/) override { } + void UpdateAI(uint32 /*diff*/) override { } + + void OnSpellClick(Unit* clicker, bool& /*result*/) override + { + if (!clicker || !clicker->IsPlayer()) + return; + + // Un seul usage : on retire le drapeau avant tout traitement. + me->RemoveFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); + + InstanceScript* instance = me->GetInstanceScript(); + if (!instance) + return; + + if (me->GetEntry() == NPC_PORTAIL_LEGION) + instance->SetData(DATA_PORTAIL_FERME, 1); + else if (me->GetEntry() == NPC_BOMBE_ARCANIQUE) + { + instance->SetData(DATA_BOMBE_POSEE, 1); + me->RemoveAura(SPELL_BOMBE_VISUEL); + } + } + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return new npc_assaut_interactifAI(creature); + } +}; + +// 267955 : la passerelle demoniaque menant au vaisseau amiral (etape 5). +class go_assaut_passerelle_demoniaque : public GameObjectScript +{ +public: + go_assaut_passerelle_demoniaque() : GameObjectScript("go_assaut_passerelle_demoniaque") { } + + bool OnGossipHello(Player* player, GameObject* go) override + { + if (!player || !go) + return false; + + InstanceScript* instance = go->GetInstanceScript(); + if (!instance) + return false; + + // Tout le groupe franchit la passerelle ensemble. + Map::PlayerList const& liste = go->GetMap()->GetPlayers(); + for (Map::PlayerList::const_iterator i = liste.begin(); i != liste.end(); ++i) + if (Player* p = i->GetSource()) + p->CastSpell(p, SPELL_PASSERELLE, true); + + instance->SetData(DATA_PASSERELLE_UTILISEE, 1); + return true; + } +}; + +void AddSC_scenario_assaut_rivage_brise() +{ + new instance_assaut_rivage_brise(); + new npc_assaut_allie(); + new npc_assaut_corbeau_arcanique(); + new npc_assaut_interactif(); + new go_assaut_passerelle_demoniaque(); +} diff --git a/src/server/scripts/BrokenIsles/brokenisles_script_loader.cpp b/src/server/scripts/BrokenIsles/brokenisles_script_loader.cpp index 60142be..c4b22db 100644 --- a/src/server/scripts/BrokenIsles/brokenisles_script_loader.cpp +++ b/src/server/scripts/BrokenIsles/brokenisles_script_loader.cpp @@ -220,6 +220,7 @@ void AddSC_scenario_the_violet_hold_dh(); void AddSC_scenario_mage_art(); void AddSC_scenario_monk_serenitys_end(); void AddSC_scenario_broken_shore_intro(); +void AddSC_scenario_assaut_rivage_brise(); void AddSC_scenario_artifact_runner(); // The name of this function should match: @@ -422,5 +423,6 @@ void AddBrokenIslesScripts() AddSC_scenario_mage_art(); AddSC_scenario_monk_serenitys_end(); AddSC_scenario_broken_shore_intro(); + AddSC_scenario_assaut_rivage_brise(); AddSC_scenario_artifact_runner(); } From 5c4c4b6d7abcb6934c73fe2262d3f540a69cbc16 Mon Sep 17 00:00:00 2001 From: BlaMacfly Date: Mon, 31 Aug 2026 23:35:27 +0200 Subject: [PATCH 04/50] Chantier Rivage brise : carnet remis a jour apres le portage Le carnet decrivait un etat du 27/08 ou rien n etait applique. Il note desormais ce qui est deploye, ce qui reste a verifier en jeu, et la raison pour laquelle les 5 chemins scriptes avaient ete manques : ils vivent dans waypoint_data_script, table absente de notre schema. Co-Authored-By: Claude Opus 5 --- chantiers/rivage_brise/README.md | 59 +++++++++++++++++++++++++++----- 1 file changed, 50 insertions(+), 9 deletions(-) diff --git a/chantiers/rivage_brise/README.md b/chantiers/rivage_brise/README.md index cc494da..2c636d1 100644 --- a/chantiers/rivage_brise/README.md +++ b/chantiers/rivage_brise/README.md @@ -1,6 +1,7 @@ # Chantier — Assaut du Rivage brisé (carte 1666) -État au 27/08/2026. **Rien n'est appliqué au serveur à ce stade.** +État au 31/08/2026. **Tout est appliqué et déployé.** Rien n'est vérifié +en jeu : c'est la seule chose qui manque. ## Le blocage d'origine @@ -70,12 +71,52 @@ C'est un contrôle de cohérence — vérifier que le parseur trouvait bien des lignes sur des cartes connues — qui a révélé le bug. **Toujours valider un extracteur sur un cas positif connu avant de croire un résultat négatif.** -## Reste à faire +## Ce qui a été fait le 31/08 -1. Extraire et transposer les 593 + 59 placements. -2. Extraire les chemins des 180 créatures mobiles. -3. Transposer la déclaration du scénario. -4. Porter les 808 lignes de C++ et les adapter à notre API, qui a divergé - (`MoveJump`, `SetFacingTo`, `GetEffect` diffèrent déjà — constaté ailleurs). -5. Raccorder le nom de script. -6. Refaire autrement le comportement des 12 créatures à `AiID`. +1. **593 créatures, 59 objets, 1495 points** appliqués sur la carte 1666. + Le fichier était généré depuis le 27/08 et dormait sans être exécuté. +2. **808 lignes de C++ portées** dans + `src/server/scripts/BrokenIsles/Scenario/scenario_assault_broken_shore.cpp`, + enregistré sous `scenario_7.2_broken_shore_intro` — le nom que + `instance_template` réclamait déjà, donc aucune modification de base. + Ce nom contient un point : la classe est écrite à la main, la macro + `RegisterInstanceScript` ne l'accepterait pas. +3. **Les 5 scripts rattachés** à leurs 11 entrées, toutes vérifiées + exclusives à la carte 1666. +4. **87 points des 5 chemins scriptés** extraits et posés. +5. **Le donneur de la quête 45102** raccordé : Khadgar 116302. + +## Le piège de l'extraction, deuxième épisode + +Les cinq chemins scriptés (11322705 à 11322709) ne sont **pas** dans +`waypoint_data` mais dans **`waypoint_data_script`**, une table que notre +schéma n'a pas — notre `sWaypointMgr` ne lit que la première. L'extraction +du 27/08 ne regardait que celle-là et les a donc silencieusement manqués. + +Conséquence si on ne l'avait pas vu : le corbeau arcanique n'aurait jamais +décollé, et comme c'est l'atteinte du point 20 de son vol qui déclenche +l'étape 0, **le scénario n'aurait jamais démarré** — sans la moindre +erreur dans le journal. + +C'est la même leçon qu'en août, sous une autre forme : ce n'est pas +l'extracteur qui a menti, c'est la table qu'on n'a pas pensé à ouvrir. + +## Ce qui reste + +1. **Tout vérifier en jeu.** Rien n'a été joué. Prendre 45102 auprès de + Khadgar 116302 en Îles brisées et dérouler le scénario. +2. **Les crédits 116253 et 116279** sont câblés sur la fermeture des deux + premiers portails **par déduction** : la quête parle de « First » et + « Second Legion Spire destroyed », et les portails sont les seuls + objets destructibles de l'étape 3. À confirmer ou corriger. +3. **Les 12 créatures à `AiID = 7424`** (119422 ×9, 119425 ×2, 119412 ×1) + gardent un comportement de mêlée ordinaire. Vérifié : le dump ne + contient **aucune** table définissant les `AiID` — ce comportement + n'est pas récupérable depuis cette source. Ne pas rouvrir ce point + sans une autre référence. +4. **Khadgar 120215** n'est posé nulle part chez nous. La référence le + place deux fois sur la carte 1220, en phases 7312 et 7313. Le crédit + « Speak to Khadgar » est pour l'instant accordé par le script à la fin + du scénario ; c'est un raccourci assumé, à arbitrer. +5. **Concordance rassurante** relevée au passage : 7 bombes arcaniques + posées sur la carte, pour un critère qui en exige exactement 7. From ac40810f2524655f7d61a6545d0a7a5e81bc099e Mon Sep 17 00:00:00 2001 From: BlaMacfly Date: Tue, 1 Sep 2026 08:08:00 +0200 Subject: [PATCH 05/50] Champs de bataille : le vrai appelant hors limites, et un opcode client diffuse Suite du signalement Discord. Le garde-fou pose dans GetBGObject a tenu -- plus de lecture hors limites -- mais les appels avec 24 et 32 persistaient : le correctif precedent visait BattlegroundAB.cpp alors que l'appelant fautif est le module BotFill. CommandAB.cpp indexait les bannieres en abNode * 8, disposition de l'ancien Bassin d'Arathi de TrinityCore ou chaque noeud possedait huit objets. Le notre n'en a qu'UN par noeud, aux indices 0 a 4. Le calcul etait donc faux pour TOUS les noeuds : noeud 0 -> 0 banniere juste, par hasard noeud 1 -> 8 REGENBUFF_STABLES noeud 2 -> 16 SPEEDBUFF_LUMBER_MILL noeud 3 -> 24 hors limites noeud 4 -> 32 hors limites Les bots visaient des objets de bonus au lieu des bannieres et ne voyaient tout simplement pas la scierie ni la mine d'or. Les deux sites etant proteges contre le pointeur nul, cela echouait en silence : seul le garde-fou a fini par le rendre visible. Le controle de borne manquant sur abNode est ajoute. Verifie au passage : Gilneas a REELLEMENT huit objets par noeud (BG_BFG_OBJECT_MAX = 37), son node * 8 + 5 est correct. Rien a y changer. Second defaut, sans lien avec le premier : deux fonctions de l'IA des bots construisaient un paquet portant l'opcode CLIENT CMSG_MOVE_FALL_LAND et le diffusaient. WorldSession le refuse toujours et journalise une ERREUR a chaque tentative -- des milliers de lignes par match dans le journal du rapporteur. BotBGAIMovement::SyncPosition n'avait meme aucun autre effet : elle ne deplacait pas le bot cote serveur. Les envois sont retires ; aucun comportement de remplacement n'a ete invente, le defaut n'etant pas reproductible chez nous. RESERVE IMPORTANTE : rien de ceci n'explique le PLANTAGE signale. Les deux sites fautifs testaient deja le pointeur nul, et le journal fourni ne contient aucune trace d'arret. Une pile d'appels est necessaire. Co-Authored-By: Claude Opus 5 --- src/server/game/AI/PlayerAI/BotAITool.cpp | 25 +++++++----- .../game/AI/PlayerAI/BotBGAIMovement.cpp | 35 ++++++++++------- .../Battlegrounds/CommandBG/CommandAB.cpp | 38 ++++++++++++++++++- 3 files changed, 73 insertions(+), 25 deletions(-) diff --git a/src/server/game/AI/PlayerAI/BotAITool.cpp b/src/server/game/AI/PlayerAI/BotAITool.cpp index 7a8c591..1803e30 100644 --- a/src/server/game/AI/PlayerAI/BotAITool.cpp +++ b/src/server/game/AI/PlayerAI/BotAITool.cpp @@ -1031,16 +1031,21 @@ void BotAITeleport::Update(uint32 diff, BotBGAIMovement* pMovement) } else if (m_TeleportStep == 3) { - WorldSession* pSession = me->GetSession(); - MovementInfo movementInfo; - movementInfo.pos = m_TeleportPositon; - movementInfo.time = getMSTime(); - movementInfo.guid = me->GetGUID(); - movementInfo.flags = 0; - movementInfo.flags2 = 0; - WorldPacket data(CMSG_MOVE_FALL_LAND);// MSG_MOVE_STOP); - data << movementInfo; - me->SendMessageToSet(&data, me); + // ===================================================== + // SylvaniaCore : envoi mort retire. + // + // Le bloc supprime ici diffusait un paquet portant + // l'opcode CLIENT CMSG_MOVE_FALL_LAND. WorldSession le + // REFUSE systematiquement -- « Prevented sending of + // opcode 14841 with non existing handler » -- et ecrit + // une ligne d'ERREUR a chaque tentative. Signale par un + // utilisateur de SylvaniaCore : des milliers de lignes + // par match de champ de bataille. + // + // Il n'accomplissait donc rien. La reconstruction de + // l'objet ci-dessous, ajoutee precedemment pour pallier + // son inefficacite, reste seule en charge du travail. + // ===================================================== me->CombatStop(true); me->SetSelection(ObjectGuid::Empty); // SylvaniaCore : le paquet diffuse ci-dessus porte un opcode CLIENT diff --git a/src/server/game/AI/PlayerAI/BotBGAIMovement.cpp b/src/server/game/AI/PlayerAI/BotBGAIMovement.cpp index 8194d5a..e8a42a6 100644 --- a/src/server/game/AI/PlayerAI/BotBGAIMovement.cpp +++ b/src/server/game/AI/PlayerAI/BotBGAIMovement.cpp @@ -674,19 +674,28 @@ void BotBGAIMovement::SyncPosition(Position& pos, bool immed) if (m_Player->IsFlying()) return; - Position targetPos(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), m_Player->GetOrientation()); - targetPos.m_positionZ = 0.01f + m_Player->GetMap()->GetHeight(m_Player->GetPhaseShift(), targetPos.GetPositionX(), targetPos.GetPositionY(), targetPos.m_positionZ); - WorldSession* pSession = m_Player->GetSession(); - MovementInfo movementInfo; - movementInfo.pos = targetPos; - movementInfo.time = getMSTime(); - movementInfo.guid = m_Player->GetGUID(); - movementInfo.flags = 0; - movementInfo.flags2 = 0; - - WorldPacket data(CMSG_MOVE_FALL_LAND);// MSG_MOVE_STOP); - data << movementInfo; - m_Player->SendMessageToSet(&data, m_Player); + // ================================================================= + // SylvaniaCore : cette fonction etait entierement inerte. + // + // Elle calculait une position au sol puis diffusait un paquet + // portant l'opcode CLIENT CMSG_MOVE_FALL_LAND. WorldSession le + // REFUSE toujours -- « Prevented sending of opcode 14841 with non + // existing handler » -- et journalise une ERREUR a chaque fois. + // Signale par un utilisateur de SylvaniaCore : des milliers de + // lignes par match, avec des bots en champ de bataille. + // + // Elle ne deplacait meme pas le bot cote serveur : aucun appel a + // UpdatePosition. Son seul effet observable etait donc le journal. + // + // L'envoi est retire. La fonction ne fait desormais plus que sa + // temporisation, ce qui est exactement ce qu'elle accomplissait + // avant -- en silence cette fois. + // + // A REPRENDRE : si une desynchronisation des bots est constatee en + // jeu, c'est ICI qu'il faut la corriger, par un UpdatePosition en + // bonne et due forme. Rien n'a ete ajoute a l'aveugle : le defaut + // signale ne pouvait pas etre reproduit sur notre serveur. + // ================================================================= } bool BotBGAIMovement::IsNearToPosition(float x, float y, float z, float range) diff --git a/src/server/game/Battlegrounds/CommandBG/CommandAB.cpp b/src/server/game/Battlegrounds/CommandBG/CommandAB.cpp index 29f4de8..869e639 100644 --- a/src/server/game/Battlegrounds/CommandBG/CommandAB.cpp +++ b/src/server/game/Battlegrounds/CommandBG/CommandAB.cpp @@ -181,7 +181,39 @@ void CommandAB::ProcessABNodeRequirement(uint32 abNode, AIWaypoint* waypoint, Pl { if (!waypoint) return; - GameObject* pBGNode = m_pBattleground->GetBGObject(abNode * 8); + // ================================================================= + // SylvaniaCore : les bannieres d'Arathi sont aux indices 0 a 4. + // + // SIGNALE PAR UN UTILISATEUR DE SYLVANIACORE, journal a l'appui : + // GetBGObject: type 24 hors limites (22 objets) carte 529 + // GetBGObject: type 32 hors limites (22 objets) carte 529 + // + // abNode * 8 vient de l'ancien Bassin d'Arathi de TrinityCore, ou + // chaque noeud possedait huit objets. Le notre n'en a qu'UN par + // noeud : BG_AB_OBJECT_BANNER + node, soit 0 a 4. _ChangeBanner + // modifie le visuel de cette banniere unique selon l'etat. + // + // Le calcul etait donc faux pour TOUS les noeuds, pas seulement + // pour ceux qui debordaient : + // noeud 0 -> 0 banniere juste, par hasard + // noeud 1 -> 8 REGENBUFF_STABLES + // noeud 2 -> 16 SPEEDBUFF_LUMBER_MILL + // noeud 3 -> 24 hors limites + // noeud 4 -> 32 hors limites + // + // Les bots visaient des objets de bonus au lieu des bannieres, et + // ne voyaient tout simplement pas la scierie ni la mine d'or. Les + // deux appels etant proteges contre le pointeur nul, cela echouait + // en silence -- seul le garde-fou pose dans GetBGObject a fini par + // le rendre visible. + // + // Le controle de borne sur abNode manquait ici alors qu'il existe + // dans GetABFlagRangePlayerByTeam : ajoute. + // ================================================================= + if (abNode >= BG_AB_BattlegroundNodes::BG_AB_DYNAMIC_NODES_COUNT) + return; + + GameObject* pBGNode = m_pBattleground->GetBGObject(BG_AB_ObjectType::BG_AB_OBJECT_BANNER + abNode); if (!pBGNode) return; PlayerGUIDs nodeNearPlayers = GetABFlagRangePlayerByTeam(abNode, m_TeamID); @@ -264,7 +296,9 @@ PlayerGUIDs CommandAB::GetABFlagRangePlayerByTeam(uint32 abNode, TeamId team) PlayerGUIDs existPlayers; if (!m_pBattleground || abNode >= BG_AB_BattlegroundNodes::BG_AB_DYNAMIC_NODES_COUNT) return existPlayers; - GameObject* pBGNode = m_pBattleground->GetBGObject(abNode * 8); + // Meme correction que dans ProcessABNodeRequirement : une banniere + // par noeud, aux indices 0 a 4. + GameObject* pBGNode = m_pBattleground->GetBGObject(BG_AB_ObjectType::BG_AB_OBJECT_BANNER + abNode); if (!pBGNode) return existPlayers; NearPlayerList playersNearby; From 04b6dd20f50417c1b535afbcbb489bd0cbb25381 Mon Sep 17 00:00:00 2001 From: Sylvania Date: Tue, 1 Sep 2026 22:27:43 +0200 Subject: [PATCH 06/50] Playerbots : opcodes manquants sur les paquets de sortie de champ de bataille ProcessLeaveBG et ProcessLeaveAA construisaient BattlefieldLeave a partir dun WorldPacket() par defaut (opcode 65535), et ProcessInAAQueue passait CMSG_BATTLEMASTER_JOIN_SKIRMISH a BattlemasterJoinArena. Le constructeur de ClientPacket asserte GetOpcode() == expectedOpcode : le thread monde mourait des quun bot devait quitter un champ de bataille (fin de match ou depart dun vrai joueur), laissant le processus fige et les joueurs bloques a lecran de chargement. Signale sur le Discord avec une pile gdb par un utilisateur du core. Co-Authored-By: Claude Opus 5 --- src/server/game/Server/PlayerBotSession.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/server/game/Server/PlayerBotSession.cpp b/src/server/game/Server/PlayerBotSession.cpp index 01c21af..581cbd9 100644 --- a/src/server/game/Server/PlayerBotSession.cpp +++ b/src/server/game/Server/PlayerBotSession.cpp @@ -545,7 +545,8 @@ bool PlayerBotSession::ProcessLeaveBG(BotGlobleSchedule& schedule) PlayerBotMgr::SwitchPlayerBotAI(player, PlayerBotAIType::PBAIT_FIELD, true); - WorldPackets::Battleground::BattlefieldLeave leave(std::move(WorldPacket())); + WorldPacket opcode(CMSG_BATTLEFIELD_LEAVE); + WorldPackets::Battleground::BattlefieldLeave leave(std::move(opcode)); HandleBattlefieldLeaveOpcode(leave); //HandleWorldPortAck(); return false; @@ -571,7 +572,7 @@ bool PlayerBotSession::ProcessInAAQueue(BotGlobleSchedule& schedule) return false; } - WorldPacket packet(CMSG_BATTLEMASTER_JOIN_SKIRMISH); + WorldPacket packet(CMSG_BATTLEMASTER_JOIN_ARENA); WorldPackets::Battleground::BattlemasterJoinArena cmd(std::move(packet)); //cmd.RolesMask = schedule.parameter1; //cmd.Bracket = schedule.parameter2; @@ -688,7 +689,8 @@ bool PlayerBotSession::ProcessLeaveAA(BotGlobleSchedule& schedule) //opcode << un16; //HandleBattlefieldLeaveOpcode(opcode); //HandleMoveWorldportAckOpcode(); - WorldPackets::Battleground::BattlefieldLeave leave(std::move(WorldPacket())); + WorldPacket opcode(CMSG_BATTLEFIELD_LEAVE); + WorldPackets::Battleground::BattlefieldLeave leave(std::move(opcode)); HandleBattlefieldLeaveOpcode(leave); //HandleWorldPortAck(); return false; From 0b2a042175f92d3d73ed7e8139a6895613cee91b Mon Sep 17 00:00:00 2001 From: Sylvania Date: Tue, 1 Sep 2026 22:43:06 +0200 Subject: [PATCH 07/50] Arenes cotees : bracket 14 code en dur, hors plage et introuvable BattlegroundMgr::Update forcait la mise a jour des files cotees avec BattlegroundBracketId(14) -- la boucle sur les brackets avait ete commentee en amont. Deux consequences : - m_QueuedGroups ne compte que MAX_BATTLEGROUND_BRACKETS (12) entrees : chaque passage lisait au-dela du tableau, toutes les 5 secondes. - aucune entree PVPDifficulty ne correspond au couple (carte du template BATTLEGROUND_AA, bracket 14), donc la fonction sortait aussitot en journalisant une erreur : 585 000 lignes dans dc-world.log, soit la moitie du fichier, et le force-update des arenes cotees ne servait a rien depuis toujours. On parcourt desormais les brackets reellement declares pour la carte, et BattlegroundQueueUpdate refuse un bracket hors plage au lieu de lire a cote. Co-Authored-By: Claude Opus 5 --- .../game/Battlegrounds/BattlegroundMgr.cpp | 23 +++++++++++++++---- .../game/Battlegrounds/BattlegroundQueue.cpp | 9 ++++++++ 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp index fee4116..05aac48 100644 --- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp +++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp @@ -155,12 +155,25 @@ void BattlegroundMgr::Update(uint32 diff) { // forced update for rated arenas (scan all, but skipped non rated) TC_LOG_TRACE("bg.arena", "BattlegroundMgr: UPDATING ARENA QUEUES"); - for (int qtype = BATTLEGROUND_QUEUE_2v2; qtype <= BATTLEGROUND_QUEUE_5v5; ++qtype) + // SylvaniaCore : l amont avait commente la boucle sur les brackets et fige + // le bracket a 14, qui n existe pas dans PVPDifficulty pour la carte du + // template BATTLEGROUND_AA. Resultat : aucune file cotee n etait reellement + // mise a jour, et BattlegroundQueueUpdate journalisait une erreur toutes les + // 5 secondes. On parcourt les brackets reellement declares pour cette carte. + if (Battleground* arenaTemplate = GetBattlegroundTemplate(BATTLEGROUND_AA)) { - //for (int bracket = BG_BRACKET_ID_FIRST; bracket < MAX_BATTLEGROUND_BRACKETS; ++bracket) - m_BattlegroundQueues[qtype].BattlegroundQueueUpdate(diff, - BATTLEGROUND_AA, BattlegroundBracketId(14),//bracket - BattlegroundMgr::BGArenaType(BattlegroundQueueTypeId(qtype)), true, 0); + for (int qtype = BATTLEGROUND_QUEUE_2v2; qtype <= BATTLEGROUND_QUEUE_5v5; ++qtype) + { + for (uint8 bracket = BG_BRACKET_ID_FIRST; bracket < MAX_BATTLEGROUND_BRACKETS; ++bracket) + { + if (!DB2Manager::GetBattlegroundBracketById(arenaTemplate->GetMapId(), BattlegroundBracketId(bracket))) + continue; + + m_BattlegroundQueues[qtype].BattlegroundQueueUpdate(diff, + BATTLEGROUND_AA, BattlegroundBracketId(bracket), + BattlegroundMgr::BGArenaType(BattlegroundQueueTypeId(qtype)), true, 0); + } + } } m_NextRatedArenaUpdate = sWorld->getIntConfig(CONFIG_ARENA_RATED_UPDATE_TIMER); diff --git a/src/server/game/Battlegrounds/BattlegroundQueue.cpp b/src/server/game/Battlegrounds/BattlegroundQueue.cpp index 1c604cc..8c3afdb 100644 --- a/src/server/game/Battlegrounds/BattlegroundQueue.cpp +++ b/src/server/game/Battlegrounds/BattlegroundQueue.cpp @@ -938,6 +938,15 @@ should be called from Battleground::RemovePlayer function in some cases */ void BattlegroundQueue::BattlegroundQueueUpdate(uint32 /*diff*/, BattlegroundTypeId bgTypeId, BattlegroundBracketId bracket_id, uint8 arenaType, bool isRated, uint32 arenaRating) { + // SylvaniaCore : garde-fou. m_QueuedGroups n a que MAX_BATTLEGROUND_BRACKETS + // entrees ; un appelant qui fabrique un bracket hors plage lisait au-dela du + // tableau (comportement indefini) des la premiere ligne de la fonction. + if (bracket_id >= MAX_BATTLEGROUND_BRACKETS) + { + TC_LOG_ERROR("bg.battleground", "Battleground: Update: bracket id %u hors plage pour le bg %u", uint32(bracket_id), uint32(bgTypeId)); + return; + } + //if no players in queue - do nothing if (m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_ALLIANCE].empty() && m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_HORDE].empty() && From e0b2fcf3e0b0d298be21cf0bc3ac9cd80f17626c Mon Sep 17 00:00:00 2001 From: SylvaniaCore deploy Date: Wed, 2 Sep 2026 08:43:25 +0200 Subject: [PATCH 08/50] Creatures volantes : aucun chemin vers une cible hors du maillage, evade et butin perdu _setTargetLocation ne passait pas CanFly() en forceDest a CalculatePath. Une creature volante dont la cible se tient sur un relief non navigable obtenait PATHFIND_NOPATH, se marquait injoignable, puis evadait au bout de cinq secondes (CREATURE_NOPATH_EVADE_TIME). Chaque evade passe par CreatureAI::_EnterEvadeMode, qui lache le proprietaire de butin et reinitialise m_PlayerDamageReq. A la mort, Unit::Kill force alors SetLootRecipient(NULL) : le corps est vide et ne rapporte aucune experience. Le symptome remonte comme un bug de table de butin alors que la table est saine. Signale sur le Proto-drake perdu dans le temps (32491) aux Pics Foudroyes, qui lachait l aggro tant que le joueur n etait pas sur une plateforme reliee au maillage, puis n a rien donne une fois tue. 3709 creatures volantes du monde etaient concernees. Aligne sur TrinityCore amont, identique en 3.3.5 et master : bool success = _path->CalculatePath(x, y, z, owner->CanFly()); Co-Authored-By: Claude Opus 5 --- .../MovementGenerators/TargetedMovementGenerator.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index dc1c0dc..944f35b 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -105,6 +105,13 @@ void TargetedMovementGeneratorMedium::_setTargetLocation(T* owner, bool up bool forceDest = (owner->GetTypeId() == TYPEID_UNIT && owner->ToCreature()->IsPet() && owner->HasUnitState(UNIT_STATE_FOLLOW)); + // Une creature volante n est pas tenue par le maillage de navigation. Sans + // ce raccourci elle ne trouve aucun chemin vers une cible posee sur un + // relief non navigable, se marque injoignable, puis evade au bout de + // CREATURE_NOPATH_EVADE_TIME en lachant son proprietaire de butin. + if (!forceDest && owner->GetTypeId() == TYPEID_UNIT && owner->ToCreature()->CanFly()) + forceDest = true; + if (!forceDest && owner->GetTypeId() == TYPEID_UNIT && !owner->IsPlayerBot() && !i_target->IsPlayerBot()) { //TC_LOG_ERROR("misc", "SPMOVE1 "); From b047cb7a02135d28b53f64ff7c53563688d113e1 Mon Sep 17 00:00:00 2001 From: BlaMacfly Date: Wed, 2 Sep 2026 23:16:46 +0200 Subject: [PATCH 09/50] Reference Legion : premiere section, la campagne du Front-de-Legion Croisement entre les sources officielles et notre base, pas une fiche encyclopedique. Les quinze quetes de la campagne existent chez nous avec donneur et receveur : elle n etait pas cassee, seuls ses deux points d entree l etaient. Consigne le piege des DEUX scenarios du Rivage brise (1460 intro 7.0 et 1666 assaut 7.2), les trois Khadgar a ne pas confondre, les huit etapes du scenario 1280 relevees dans les DB2, et deux anomalies : la quete 46832 sans objectif, et un doublon de titre sur 48641. Co-Authored-By: Claude Opus 5 --- chantiers/reference_legion/README.md | 164 +++++++++++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 chantiers/reference_legion/README.md diff --git a/chantiers/reference_legion/README.md b/chantiers/reference_legion/README.md new file mode 100644 index 0000000..9e45365 --- /dev/null +++ b/chantiers/reference_legion/README.md @@ -0,0 +1,164 @@ +# Legion — référence de travail + +Ce document n'est pas une fiche encyclopédique. C'est un **croisement** : ce que +le jeu officiel contient d'un côté, ce que notre base contient de l'autre. Un +fait non vérifié contre nos données ne sert à rien pour réparer. + +Chaque section suit la même règle : la source officielle est citée, puis la +requête qui l'a confrontée à `dc_world`, puis l'écart s'il y en a un. + +--- + +## L'ossature de l'extension + +| Correctif | Contenu | Ce qui nous concerne | +|---|---|---| +| **7.0** Legion | Invasion, les quatre zones, les Sanctums de classe, l'arme prodigieuse | Scénario d'introduction du Rivage brisé | +| **7.1** Retour à Karazhan | Suramar, Karazhan | — | +| **7.2** Tombe de Sargeras | **Campagne du Front-de-Légion**, le Rivage brisé jouable, montures de classe | Notre chantier actuel | +| **7.3** Ombres d'Argus | Argus, l'Insurgé | — | + +--- + +## Le piège du Rivage brisé : DEUX scénarios + +C'est l'erreur qui m'a coûté le plus de temps, et elle est facile à refaire. + +| | Introduction | Assaut | +|---|---|---| +| Correctif | 7.0 | 7.2 | +| Carte | **1460** | **1666** | +| Scénario | 786 | 1280 | +| Récit | La bataille perdue. Varian, Vol'jin, Tirion, Krosus, Gul'dan qui ouvre la Tombe | Le retour offensif depuis Dalaran | +| Entrées de créatures | 90xxx | 116xxx–122xxx | +| Script | `scenario_broken_shore_intro` | `scenario_7.2_broken_shore_intro` | +| Quêtes liées | 42740 (Alliance) / 44543 (Horde) | **45102**, **46734** | + +Les deux portent le même nom en jeu. Quand une quête du Rivage brisé ne se +débloque pas, **la première question est : laquelle des deux cartes ?** + +Les objectifs de 45102 parlent de « flèches de la Légion » (*Legion Spires*) et +de Lord Kalgorath — tous en 116xxx, donc 7.2, donc carte 1666. Rien de tout +cela n'est atteignable sur la 1460. + +--- + +## Campagne du Front-de-Légion (7.2) + +Source : [Breaching the Tomb](https://warcraft.wiki.gg/wiki/Breaching_the_Tomb), +qui liste les quinze quêtes de l'exploit du même nom. En jeu officiel elles +étaient **échelonnées par semaines**, du 28 mars au 6 juin 2017 — d'où le +sentiment de campagne décousue. + +### État chez nous, au 01/09/2026 + +Les quinze quêtes existent, **toutes avec donneur et receveur**. La campagne +n'était donc pas cassée : seuls ses deux points d'entrée l'étaient. + +| ID | Quête | Donneur | Objectifs | +|---|---|---|---| +| 46730 | Armies of Legionfall | Khadgar **86563** (Dalaran) | 1 | +| 46734 | Assault on Broken Shore | Khadgar 86563 + **116302** | 2 | +| 45102 | Begin the Assault | Khadgar **116302** | 3 | +| 46245 | Begin Construction | Commander Chambers 120183 | 1 | +| 46845 | Vengeance Point | Heidirk the Scalekeeper 120118 | 3 | +| 47137 | Champions of Legionfall | Maiev Shadowsong 116576 | 1 | +| 47139 | Mark of the Sentinax | Illidan Stormrage 117873 | 1 | +| 46252 | Intolerable Infestation | Maiev 116576 | 1 | +| 46250 | Take Out the Head... | Maiev 116576 | 1 | +| 46246 | Strike Them Down | Maiev 116576 | 1 | +| 46832 | Aalgen Point | Commander Chambers 120183 | **0** ⚠ | +| 46247 | Defending Broken Isles | Maiev 116576 | 1 | +| 46251 | Shard Times | Khadgar 116302 | 1 | +| 46248 | Self-Fulfilling Prophecy | Prophet Velen 120372 | 1 | +| 46769 | Relieved of Their Valuables | Khadgar 116302 | 1 | +| 46249 | Championing Our Cause | Khadgar 116302 | 1 | + +**Les deux Khadgar.** Ne pas les confondre, ils portent le même nom : + +- **86563** — Anneau de Krasus, Dalaran, carte 1220 en `(-841, 4258, 746)`. + L'altitude 746 est celle de la cité flottante. C'est lui qui ouvre la + campagne et qui lance le scénario d'assaut. +- **116302** — Pointe de la Délivrance, sur le Rivage brisé, carte 1220 en + `(-1628, 3194, 130)`. Il donne le reste. +- **120215** — un troisième, posé nulle part chez nous. La référence le place + à l'Anneau de Krasus en phases 7312/7313. C'est la cible du crédit + « Speak to Khadgar » de la quête 46734. + +### Deux anomalies relevées + +**46832 « Aalgen Point » n'a aucun objectif.** Elle a pourtant donneur et +receveur, et aucune ligne dans `quest_template_addon` — donc pas de +`SpecialFlags = 2` qui justifierait une validation par script. À examiner. + +**48641 porte aussi le titre « Armies of Legionfall »**, sans aucun donneur, +avec `QuestSortID 7543` (la zone du Rivage brisé) là où 46730 porte `-428`. +Probablement une variante de suivi. Ne pas la confondre avec la vraie. + +--- + +## Entrer dans le scénario d'assaut + +Le déroulement officiel, décrit par les joueurs +([Warcraft Wiki](https://warcraft.wiki.gg/wiki/Assault_on_Broken_Shore_(quest)), +[Icy Veins](https://www.icy-veins.com/forums/topic/28263-patch-72-assault-on-the-broken-shore-scenario/)) : + +> On prend la quête auprès de l'archimage à l'Anneau de Krasus, on choisit +> « I am ready to launch the assault », une cinématique se joue, puis +> *you will be flown* jusqu'au scénario. + +Trois conséquences pour nous : + +1. L'entrée est une **option de dialogue**, pas un portail. Elle n'existait ni + dans notre base ni dans le dump de référence — donnée de capture jamais + importée. Recréée dans `npc_archmage_khadgar_86563`. +2. Le sort **240603** porte la destination officielle dans + `spell_target_position` : carte 1666, `(-1111.6, 2969.71, 186.02)`. +3. « Emporté par la voie des airs », c'est le **corbeau arcanique 118517**, + invoqué par le sort **243303** (effet 28 SUMMON, valeur 118517 — vérifié + dans `SpellEffect.db2` du build 7.3.5.26972). Son chemin de vol 11322708 + part de l'altitude de Dalaran (751) et descend au niveau de la mer (4). + +--- + +## Les huit étapes du scénario 1280 + +Relevées dans `ScenarioStep`, `CriteriaTree` et `Criteria` du build +7.3.5.26972 — pas recopiées d'un autre cœur. + +| Ordre | Arbre | Type | Asset | Montant | Étape | +|---|---|---|---|---|---| +| 0 | 56811 | 92 | 56460 | 1 | Into the Fray | +| 1 | 56872 | 92 | 56697 | 3 | Vanguard of the Assault | +| 2 | 56874 | 92 | 56500 | 1 | Might of the Legion (Kalgorath) | +| 3 | 57180 | 92 | 56779 | barre de 200 | Rifts of Chaos | +| 3 | 57185 | **73** | 56778 | 3 | ... les trois portails | +| 4 | 57183 | 92 | 56780 | 1 | The Doomguard's Command (Arganoth) | +| 5 | 57293 | **68** | 267955 | 1 | Gateway to Ruin | +| 6 | 58303 | 92 | 57574 | 7 | Pillar of Fire (7 bombes) | +| 7 | 59170 | 92 | 57579 | 1 | Mephistroth | + +Types : **92** `SEND_EVENT_SCENARIO` (alimenté par `DoSendEventScenario`), +**73** `SEND_EVENT`, **68** `USE_GAMEOBJECT` (les deux par `UpdateCriteria`). + +Concordance rassurante : la carte porte exactement **7 bombes arcaniques** +(120743) pour un critère qui en exige 7, et 7 portails (118558) dont 3 à +fermer. + +--- + +## Comment étendre ce document + +La méthode, pas le contenu, est ce qui compte : + +1. Partir d'une source officielle — les wikis Warcraft sont fiables sur les + chaînes de quêtes ; Wowhead ment quand on le lit par `curl`, ses tables + sont en JavaScript. +2. Pour tout ce qui est chiffré — critères, sorts, scénarios — passer par + `wago.tools`, qui sert les DB2 du build **7.3.5.26972**, le nôtre. + Format : `/db2//csv?build=7.3.5.26972&filter[Colonne]=valeur`. + Sans le filtre, les grosses tables font expirer la requête. +3. **Toujours confronter à `dc_world`** avant d'écrire quoi que ce soit ici. + Une ligne qui n'a pas été vérifiée contre notre base n'a pas sa place. +4. Noter les écarts, pas les conformités. Ce qui marche n'a pas besoin d'être + documenté. From 6d98d5cbbd5e3e1b24d63d9e1c4436d88baf51a6 Mon Sep 17 00:00:00 2001 From: BlaMacfly Date: Wed, 2 Sep 2026 23:17:16 +0200 Subject: [PATCH 10/50] Rivage brise : l entree du scenario d assaut n existait nulle part La carte 1666 etait peuplee et scriptee depuis hier, mais aucun chemin n y menait : le joueur restait plante devant Khadgar. Les quetes 45102 et 46734 restaient donc infranchissables malgre le portage. Le deroulement officiel, decrit par les joueurs : on prend la quete a l Anneau de Krasus, on choisit une option de dialogue, et l on est emporte par la voie des airs. Cette option n existe ni dans notre base ni dans le dump de reference -- donnee de capture jamais importee. Elle est donc recreee sur Khadgar 86563, qui est bien celui de l Anneau de Krasus : pose en (-841, 4258, 746), l altitude de Dalaran, et deja donneur d Assault on Broken Shore. Rien d invente sur la destination : le sort 240603 porte deja les coordonnees officielles dans spell_target_position. OnGossipHello reconstruit le menu complet avant d ajouter l option, sans quoi Khadgar perdrait les seize quetes qu il propose : le coeur saute PrepareGossipMenu des qu un script repond au dialogue. Verifie en jeu : le joueur arrive bien sur la carte 1666 aux coordonnees attendues. Co-Authored-By: Claude Opus 5 --- .../Zones/zone_legion_dalaran_legion.cpp | 57 ++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/src/server/scripts/BrokenIsles/Zones/zone_legion_dalaran_legion.cpp b/src/server/scripts/BrokenIsles/Zones/zone_legion_dalaran_legion.cpp index 73be79b..d57f683 100644 --- a/src/server/scripts/BrokenIsles/Zones/zone_legion_dalaran_legion.cpp +++ b/src/server/scripts/BrokenIsles/Zones/zone_legion_dalaran_legion.cpp @@ -592,10 +592,65 @@ public: QUEST_DOWN_TO_AZSUNA = 41220, SPELL_TAXI_DALARAN_AZSUNA_ALLIANCE = 205098, SPELL_TAXI_DALARAN_AZSUNA_HORDE = 205203, + + // ============================================================= + // SylvaniaCore : l'entree du scenario d'assaut du Rivage brise. + // + // La carte 1666 etait peuplee et scriptee, mais AUCUN chemin + // n'y menait : le joueur restait plante devant Khadgar. + // + // Le deroulement officiel, tel que le decrivent les joueurs : + // on prend la quete aupres de l'archimage a l'Anneau de Krasus, + // puis on choisit « I am ready to launch the assault », une + // cinematique se joue et l'on est EMPORTE PAR LA VOIE DES AIRS + // jusqu'au scenario. C'est notre corbeau arcanique. + // + // Cette option de dialogue n'existe ni dans notre base ni dans + // le dump de reference : c'est de la donnee de capture jamais + // importee. Elle est donc recreee ici, faute de source. + // + // Le sort 240603 porte la destination officielle dans + // spell_target_position : carte 1666, (-1111.6, 2969.71, 186). + // C'est celui-la qu'on lance, pas une teleportation inventee. + // + // 86563 est bien le Khadgar de l'Anneau de Krasus : il est pose + // en (-841, 4258, 746), l'altitude de Dalaran, et il donne deja + // « Assault on Broken Shore ». + // ============================================================= + QUEST_ASSAUT_RIVAGE = 46734, + QUEST_LANCER_ASSAUT = 45102, + SPELL_ENTREE_ASSAUT = 240603, + ACTION_LANCER_ASSAUT = GOSSIP_ACTION_INFO_DEF + 90, }; - bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 /*action*/) override + bool OnGossipHello(Player* player, Creature* creature) override { + // On reconstruit d'abord le menu normal -- quetes comprises. + // Sans cela Khadgar perdrait les seize quetes qu'il propose : + // le coeur saute PrepareGossipMenu des qu'un script repond au + // dialogue. + player->PrepareGossipMenu(creature, creature->GetCreatureTemplate()->GossipMenuId, true); + + bool const assautEnCours = + player->GetQuestStatus(QUEST_ASSAUT_RIVAGE) == QUEST_STATUS_INCOMPLETE || + player->GetQuestStatus(QUEST_LANCER_ASSAUT) == QUEST_STATUS_INCOMPLETE; + + if (assautEnCours) + AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Je suis pret a lancer l'assaut.", GOSSIP_SENDER_MAIN, ACTION_LANCER_ASSAUT); + + player->SendPreparedGossip(creature); + return true; + } + + bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override + { + if (action == ACTION_LANCER_ASSAUT) + { + CloseGossipMenuFor(player); + player->CastSpell(player, SPELL_ENTREE_ASSAUT, true); + return true; + } + if (player->HasQuest(QUEST_DOWN_TO_AZSUNA) || player->GetQuestStatus(QUEST_DOWN_TO_AZSUNA) == QUEST_STATUS_INCOMPLETE) player->CastSpell(player, player->IsInAlliance() ? SPELL_TAXI_DALARAN_AZSUNA_ALLIANCE : SPELL_TAXI_DALARAN_AZSUNA_HORDE, true); // KillCredit & SendTaxi From 5205a9b5f0967b5889ab94d5fe2efcb5294dede0 Mon Sep 17 00:00:00 2001 From: Sylvania Date: Thu, 3 Sep 2026 10:19:57 +0200 Subject: [PATCH 11/50] Dompteurs de mascottes : return manquant, le journal de quetes lu hors limites Cliquer sur un dompteur de mascottes (88 PNJ, dont Julia Stevens 64330) tuait le worldserver. Player::QuestObjectiveActiveInPlayerByObject n avait aucun return sur le chemin de sortie de boucle. GCC en deduit que la boucle ne peut pas se terminer normalement -- sinon comportement indefini -- et supprime le test q < MAX_QUEST_LOG_SIZE. Le numero de slot grimpait donc au-dela de 25 jusqu a sortir du tableau de valeurs du joueur : ASSERT dans GetUInt32Value (index 4636, slot 275 dans la pile signalee). Le compilateur le disait deja : "control reaches end of non-void function" dans nos logs de build. C etait le seul cas du core, il n y en a plus. Au passage, PetBattleTrainer.cpp gardait ObjectId et isTrainer comme membres du CreatureScript, or celui-ci est un singleton partage par les 88 PNJ et par tous les joueurs : le dernier interlocuteur decidait de ce que pouvait faire le suivant. La verification se fait desormais sur le joueur et le PNJ courants. Signale sur le Discord avec une pile gdb par un utilisateur du core. Co-Authored-By: Claude Opus 5 --- src/server/game/Entities/Player/Player.cpp | 11 ++++++----- src/server/scripts/World/PetBattleTrainer.cpp | 15 ++++----------- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 1c73567..a57f0ca 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -20227,14 +20227,15 @@ bool Player::QuestObjectiveActiveInPlayerByObject(uint32 objectId) continue; for (QuestObjective const& obj : quest->GetObjectives()) - { if ((uint32)obj.ObjectID == objectId) - { return true; - break; - } - } } + + // SylvaniaCore : sans ce return, sortir de la boucle etait un comportement + // indefini -- GCC en deduisait que la boucle ne pouvait pas se terminer et + // supprimait le test q < MAX_QUEST_LOG_SIZE. Le slot grimpait au-dela de 25 + // jusqu a sortir du tableau de valeurs du joueur (ASSERT dans GetUInt32Value). + return false; } PlayerPetData* Player::GetPlayerPetDataById(uint32 petId) diff --git a/src/server/scripts/World/PetBattleTrainer.cpp b/src/server/scripts/World/PetBattleTrainer.cpp index 372657c..632d1d7 100644 --- a/src/server/scripts/World/PetBattleTrainer.cpp +++ b/src/server/scripts/World/PetBattleTrainer.cpp @@ -38,24 +38,17 @@ class npc_TrainerBattlePet : public CreatureScript public: npc_TrainerBattlePet() : CreatureScript("npc_TrainerBattlePet") { } - uint32 ObjectId = 0; - bool isTrainer = false; + // SylvaniaCore : un CreatureScript est un singleton partage par tous les + // joueurs et tous les PNJ qui portent le script -- l etat du dernier + // interlocuteur ne doit pas conditionner ce que fait le suivant. bool OnGossipHello(Player* player, Creature* creature) override { if (sBattlePetDataStore->GetPetBattleTrainerTeam(creature->GetEntry()).empty()) return false; - ObjectId = creature->GetEntry(); - if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); - if (player->QuestObjectiveActiveInPlayerByObject(ObjectId)) - { - isTrainer = true; - - } - AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Let`s Go", GOSSIP_SENDER_MAIN, 0); SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID()); @@ -66,7 +59,7 @@ public: { player->PlayerTalkClass->ClearMenus(); - if (isTrainer) + if (player->QuestObjectiveActiveInPlayerByObject(creature->GetEntry())) { if (uiAction == 0) { From 37796803c74d971b8001746265a95ce56831f0de Mon Sep 17 00:00:00 2001 From: Sylvania Date: Thu, 3 Sep 2026 12:59:16 +0200 Subject: [PATCH 12/50] Passe de warnings sur tout le core : 12 bugs reels corriges Scan de -fsyntax-only avec les vrais flags sur les 1767 fichiers du serveur (compile_commands.json), warnings de logique actives. 3277 warnings, tries a la main. Le bruit (Wreorder, Wswitch) est ecarte ; voici ce qui etait un vrai defaut. Memoire morte et comportement indefini : - ObjectMgr::GetGarrssionMissionReward rendait l adresse d un vecteur local ; Garrison melangeait puis parcourait cet objet detruit. - BattlePayDataStoreMgr::GetProduct faisait "return{}" sur une fonction qui rend une reference : huit appelants lisaient un temporaire mort. - Garrison::RewardMission reaffectait une initializer_list, ce qui ne prolonge pas la duree de vie du tableau sous-jacent. - WorldSession avait un destructeur non virtuel alors que PlayerBotSession en derive : chaque delete d une session de bot ne detruisait que la moitie de l objet. Idem FieldActing. - boss_levantus lisait Waypointspawn[6] dans un tableau de 6 entrees, a chaque declenchement de l evenement. - boss_hyrja_tov modifiait expelLightSwitch deux fois sans point de sequence, et replanifiait son evenement toutes les 20 ms au lieu de 20 secondes (IN_MILLISECONDS manquant). Code jamais appele : - cinq hooks OnRemoveTarget d areatrigger (Klaxxi, Blackfuse, Siege d Orgrimmar, Ordos) : le hook du core s appelle OnUnitExit, ces methodes n etaient rattachees a rien et les auras restaient sur le joueur apres sa sortie de zone. Trois d entre elles n avaient meme pas de return. - boss_admiral_svirax declarait un membre bool du meme nom que SetDungeonEncounterID, qui masquait la methode de BossAI ; l appel avait ete "repare" par une virgule et ne faisait donc rien. - WorldSession::HasSocket comparait l adresse d un tableau a NULL, donc rendait toujours true. Conditions toujours vraies : - zone_vault_of_wardens : "== QUEST_STOP_GULDAN_H || QUEST_STOP_GULDAN_A" jouait la scene de Gul dan pour n importe quelle quete acceptee. - boss_vizaduum : "type == POINT_MOTION_TYPE || WAYPOINT_MOTION_TYPE". - boss_council_of_elders : parenthese fermee au mauvais endroit, "HasAura(SPELL_DISCHARGE || HasAura(SPELL_OVERLOAD))". Valeurs tronquees : - InstanceScript::m_ScenarioStep etait un uint8 alors qu il recoit des ID de ScenarioStep (3195, 3207...), tronques a 135 ou 136. - PetBattleTrainer passait 3000000000000000 a SetRespawnTime(uint32). Nettoyage sans effet de bord : memcpy sur PetBattleRequest remplace par une copie, et suppression d un getThreatList()/empty() sans effet dans boss_wise_mari. Co-Authored-By: Claude Opus 5 --- src/server/game/Entities/Player/Player.cpp | 3 +- src/server/game/Garrison/Garrison.cpp | 19 ++++--- src/server/game/Globals/BattlePayData.cpp | 6 ++- src/server/game/Globals/ObjectMgr.cpp | 10 ++-- src/server/game/Globals/ObjectMgr.h | 2 +- src/server/game/Instances/InstanceScript.h | 2 +- src/server/game/Mercenary/MercenaryMgr.cpp | 50 +++++++++++++------ src/server/game/PlayerBot/FieldBotMgr.h | 2 +- src/server/game/Server/WorldSession.h | 12 ++++- .../boss_admiral_svirax.cpp | 3 +- .../zone_vault_of_wardens.cpp | 2 +- .../boss_vizaduum_karazhan_legion.cpp | 2 +- .../scenario_assault_broken_shore.cpp | 32 +++++++++++- .../TrialOfValor/boss_hyrja_tov.cpp | 7 ++- .../Zones/WorldBosses/boss_levantus.cpp | 4 +- .../boss_paragons_of_the_klaxxi.cpp | 10 +++- .../boss_siegecrafter_blackfuse.cpp | 6 ++- .../siege_of_orgrimmar_part_1.cpp | 6 ++- .../TempleJadeSerpent/boss_wise_mari.cpp | 2 - .../boss_council_of_elders.cpp | 2 +- .../Pandaria/Zones/WorldBosses/boss_ordos.cpp | 7 +-- src/server/scripts/World/PetBattleTrainer.cpp | 2 +- 22 files changed, 134 insertions(+), 57 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index a57f0ca..f578fa6 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2092,8 +2092,7 @@ void Player::ProcessDelayedOperations() { uint8 teamID = battle->Teams[PETBATTLE_TEAM_1]->OwnerGuid == GetGUID() ? PETBATTLE_TEAM_1 : PETBATTLE_TEAM_2; - PetBattleRequest request; - memcpy(&request, &battle->PvPMatchMakingRequest, sizeof(PetBattleRequest)); //@TODO check that + PetBattleRequest request = battle->PvPMatchMakingRequest; auto& matchMakingRequest = battle->PvPMatchMakingRequest; diff --git a/src/server/game/Garrison/Garrison.cpp b/src/server/game/Garrison/Garrison.cpp index 01e8215..d5e2588 100644 --- a/src/server/game/Garrison/Garrison.cpp +++ b/src/server/game/Garrison/Garrison.cpp @@ -642,11 +642,11 @@ void Garrison::AddMission(uint32 garrMissionId) reward.FollowerXP = 0; reward.BonusAbilityID = 0; reward.Unknown = 1118739; - std::vector* fRewards = sObjectMgr->GetGarrssionMissionReward(garrMissionId); - if (fRewards) + std::vector fRewards = sObjectMgr->GetGarrssionMissionReward(garrMissionId); + if (!fRewards.empty()) { - Trinity::Containers::RandomShuffle(*fRewards); - for (auto _reward : *fRewards) + Trinity::Containers::RandomShuffle(fRewards); + for (auto _reward : fRewards) { // if (_reward.RewardType == GarrisonMission::MissionRewardType::Item) { @@ -1086,13 +1086,16 @@ void Garrison::CalculateMissonBonusRoll(uint32 garrMissionId) void Garrison::RewardMission(Mission* mission, bool withOvermaxReward) { - auto rewardLists = { mission->Rewards }; + // SylvaniaCore : reaffecter une initializer_list ne prolonge pas la duree de + // vie du tableau sous-jacent -- la boucle parcourait un temporaire detruit. + std::vectorRewards)> rewardLists; + rewardLists.push_back(&mission->Rewards); if (withOvermaxReward) - rewardLists = { mission->Rewards, mission->BonusRewards }; + rewardLists.push_back(&mission->BonusRewards); - for (auto rewards : rewardLists) + for (auto const* rewards : rewardLists) { - for (WorldPackets::Garrison::GarrisonMissionReward reward : rewards) + for (WorldPackets::Garrison::GarrisonMissionReward reward : *rewards) { if (reward.ItemID) GetOwner()->AddItem(reward.ItemID, reward.ItemQuantity); diff --git a/src/server/game/Globals/BattlePayData.cpp b/src/server/game/Globals/BattlePayData.cpp index 195f3b6..4d3017a 100644 --- a/src/server/game/Globals/BattlePayData.cpp +++ b/src/server/game/Globals/BattlePayData.cpp @@ -319,7 +319,11 @@ Battlepay::Product const& BattlePayDataStoreMgr::GetProduct(uint32 productID) co { if (ProductExist(productID)) return _products.at(productID); - return{}; + + // SylvaniaCore : "return{}" rendait une reference sur un temporaire detruit + // des le retour ; les huit appelants lisaient de la memoire morte. + static Battlepay::Product const emptyProduct{}; + return emptyProduct; } Battlepay::DisplayInfo const* BattlePayDataStoreMgr::GetDisplayInfo(uint32 id) const diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 945d6f9..8eefc8f 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -3307,7 +3307,10 @@ void ObjectMgr::LoadGarrssionMissionReward() TC_LOG_INFO("server.loading", ">> Loaded garrssion_mission_reward in %u ms", GetMSTimeDiffToNow(oldMSTime)); } -std::vector* ObjectMgr::GetGarrssionMissionReward(uint32 id) +// SylvaniaCore : cette fonction rendait l adresse d un vecteur local. L appelant +// (Garrison::...) melangeait puis parcourait un objet deja detruit -- ecriture et +// lecture dans une pile liberee. On rend desormais le vecteur par valeur. +std::vector ObjectMgr::GetGarrssionMissionReward(uint32 id) { std::vector _reward; for (auto& __reward : GarrssionMissionRewardMap) @@ -3315,10 +3318,7 @@ std::vector* ObjectMgr::GetGarrssionMissionReward(uint32 if (__reward.MissionId == id) _reward.push_back(__reward); } - if (_reward.size() > 0) - return &_reward; - else - return nullptr; + return _reward; } void ObjectMgr::LoadVehicleTemplateAccessories() diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 62fae83..91c034c 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -999,7 +999,7 @@ class TC_GAME_API ObjectMgr ItemTemplateContainer const* GetItemTemplateStore() const { return &_itemTemplateStore; } void LoadGarrssionMissionReward(); - std::vector* GetGarrssionMissionReward(uint32 id); + std::vector GetGarrssionMissionReward(uint32 id); std::vector GarrssionMissionRewardMap; ScriptParams const& GetScriptParam(ObjectGuid::LowType lowGuid) { return _scriptParamContainer[lowGuid]; } diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h index 5ede120..cfd6266 100644 --- a/src/server/game/Instances/InstanceScript.h +++ b/src/server/game/Instances/InstanceScript.h @@ -570,7 +570,7 @@ class TC_GAME_API InstanceScript : public ZoneScript uint64 m_InstanceGuid; uint32 m_BeginningTime; uint32 m_ScenarioID; - uint8 m_ScenarioStep; + uint32 m_ScenarioStep; // SylvaniaCore : ID de ScenarioStep, un uint8 tronquait la valeur uint32 m_LastResetTime; uint8 m_ChallengeLevel; uint8 m_DeathCount; diff --git a/src/server/game/Mercenary/MercenaryMgr.cpp b/src/server/game/Mercenary/MercenaryMgr.cpp index 50e9647..33df800 100644 --- a/src/server/game/Mercenary/MercenaryMgr.cpp +++ b/src/server/game/Mercenary/MercenaryMgr.cpp @@ -36,6 +36,24 @@ #include "World.h" #include "WorldSession.h" +namespace +{ + // Quelques pas devant la structure, angle tire au hasard pour que les + // recrues ne s empilent pas, face au portail, hauteur recalee au sol. + Position BuildPortalExit(Position const& portal, Player* bot) + { + float const angle = portal.GetOrientation() + frand(-1.0f, 1.0f); + float const distance = frand(1.5f, 3.0f); + float x = portal.GetPositionX() + distance * std::cos(angle); + float y = portal.GetPositionY() + distance * std::sin(angle); + float z = portal.GetPositionZ(); + if (bot) + if (Map* map = bot->GetMap()) + map->GetHeight(bot->GetPhaseShift(), x, y, z); + return Position(x, y, z, angle + float(M_PI)); + } +} + MercenaryMgr::MercenaryMgr() : m_enabled(false), m_cost(100 * MERCENARY_COPPER_PER_GOLD), m_maxPerPlayer(MERCENARY_HARD_CAP), m_minLevel(10), m_updateTimer(0), m_releasing(false) @@ -640,23 +658,10 @@ void MercenaryMgr::Update(uint32 diff) { if (BotGroupAI* groupAI = dynamic_cast(bot->GetAI())) { + // Repli : sans portail connu, ou si l armement immediat a + // echoue, le mercenaire rejoint simplement son employeur. if (it->hasPortal) - { - // Il franchit le seuil : quelques pas devant la structure, - // l angle varie pour que quatre mercenaires ne se marchent - // pas dessus, et la hauteur est recalee sur le terrain. - float const angle = it->portalPos.GetOrientation() + frand(-1.0f, 1.0f); - float const distance = frand(1.5f, 3.0f); - float x = it->portalPos.GetPositionX() + distance * std::cos(angle); - float y = it->portalPos.GetPositionY() + distance * std::sin(angle); - float z = it->portalPos.GetPositionZ(); - if (Map* map = bot->GetMap()) - map->GetHeight(bot->GetPhaseShift(), x, y, z); - - // Il fait face au portail dont il sort. - Position spot(x, y, z, angle + float(M_PI)); - groupAI->TeleportToPoint(it->portalMap, spot); - } + groupAI->TeleportToPoint(it->portalMap, BuildPortalExit(it->portalPos, bot)); else groupAI->ProcessBotCommand(owner, "!summon"); it->summonPending = false; @@ -733,6 +738,19 @@ void MercenaryMgr::Update(uint32 diff) PlayerBotMgr::SwitchPlayerBotAI(bot, PlayerBotAIType::PBAIT_GROUP, true); + // Des maintenant, pas au tick suivant : l IA de groupe, en decouvrant + // un maitre lointain, armerait le sien vers l employeur, et SetTeleport + // refuse d ecraser un teleport en cours. Notre ordre serait perdu et le + // mercenaire apparaitrait sur le joueur plutot que sur le portail. + if (it->hasPortal) + { + if (BotGroupAI* groupAI = dynamic_cast(bot->GetAI())) + { + groupAI->TeleportToPoint(it->portalMap, BuildPortalExit(it->portalPos, bot)); + it->summonPending = false; + } + } + ChatHandler(owner->GetSession()).PSendSysMessage( "|cff00ff00[Portail]|r %s, %s mercenaire, répond à votre appel.", bot->GetName().c_str(), GetRoleName(it->role)); diff --git a/src/server/game/PlayerBot/FieldBotMgr.h b/src/server/game/PlayerBot/FieldBotMgr.h index dbe3af4..014dc83 100644 --- a/src/server/game/PlayerBot/FieldBotMgr.h +++ b/src/server/game/PlayerBot/FieldBotMgr.h @@ -58,7 +58,7 @@ class TC_GAME_API FieldActing { public: FieldActing(ACTING_TYPE aType) : m_ActingType(aType) {} - ~FieldActing() {} + virtual ~FieldActing() {} // SylvaniaCore : classe polymorphe detruite par pointeur de base bool MatchActingType(ACTING_TYPE aType) { return m_ActingType == aType; } virtual void Update() {} diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 8a00464..45a8dad 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -1038,7 +1038,7 @@ class TC_GAME_API WorldSession WorldSession(uint32 id, std::string&& name, uint32 battlenetAccountId, std::shared_ptr sock, AccountTypes sec, uint8 expansion, time_t mute_time, std::string os, LocaleConstant locale, uint32 recruiter, bool isARecruiter, std::string&& battlenetAccountName); - ~WorldSession(); + virtual ~WorldSession(); // SylvaniaCore : PlayerBotSession en derive, un delete sur WorldSession* ne detruisait que la moitie de l objet void SetAddress(std::string mybot) { @@ -1597,7 +1597,15 @@ class TC_GAME_API WorldSession void HandleMissileTrajectoryCollision(WorldPackets::Spells::MissileTrajectoryCollision& packet); void HandleUpdateMissileTrajectory(WorldPackets::Spells::UpdateMissileTrajectory& packet); - bool HasSocket() { return m_Socket != NULL; } + // SylvaniaCore : m_Socket est un tableau -- le comparer a NULL testait son + // adresse, donc renvoyait toujours true (y compris pour un playerbot). + bool HasSocket() const + { + for (std::shared_ptr const& socket : m_Socket) + if (socket) + return true; + return false; + } virtual bool IsBotSession() { return false; } virtual bool HasSchedules() { return false; } virtual bool HasBGSchedule() { return false; } diff --git a/src/server/scripts/Argus/AntorusTheBurningThrone/boss_admiral_svirax.cpp b/src/server/scripts/Argus/AntorusTheBurningThrone/boss_admiral_svirax.cpp index 09a21bf..3d4266d 100644 --- a/src/server/scripts/Argus/AntorusTheBurningThrone/boss_admiral_svirax.cpp +++ b/src/server/scripts/Argus/AntorusTheBurningThrone/boss_admiral_svirax.cpp @@ -89,7 +89,7 @@ struct boss_admiral_svirax : public BossAI void Initialize() { - SetDungeonEncounterID,(2070); + SetDungeonEncounterID(2070); } void DamageTaken(Unit* done_by, uint32 &damage) override @@ -244,7 +244,6 @@ struct boss_admiral_svirax : public BossAI uint8 PHASE_01; uint8 PHASE_02; uint8 PHASE_03; - bool SetDungeonEncounterID; bool IsLock; }; diff --git a/src/server/scripts/BrokenIsles/DemonHunterZones/zone_vault_of_wardens.cpp b/src/server/scripts/BrokenIsles/DemonHunterZones/zone_vault_of_wardens.cpp index 20deff6..cff7ad5 100644 --- a/src/server/scripts/BrokenIsles/DemonHunterZones/zone_vault_of_wardens.cpp +++ b/src/server/scripts/BrokenIsles/DemonHunterZones/zone_vault_of_wardens.cpp @@ -1540,7 +1540,7 @@ public: }; bool OnQuestAccept(Player* player, Creature* /*creature*/, Quest const* quest) override { - if (quest->GetQuestId() == QUEST_STOP_GULDAN_H || QUEST_STOP_GULDAN_A) + if (quest->GetQuestId() == QUEST_STOP_GULDAN_H || quest->GetQuestId() == QUEST_STOP_GULDAN_A) player->GetSceneMgr().PlayScene(SCENE_GULDAN_STEAL_ILLIDAN_ID); return true; } diff --git a/src/server/scripts/BrokenIsles/KarazhanLegion/boss_vizaduum_karazhan_legion.cpp b/src/server/scripts/BrokenIsles/KarazhanLegion/boss_vizaduum_karazhan_legion.cpp index 6e4b4d9..eb8005b 100644 --- a/src/server/scripts/BrokenIsles/KarazhanLegion/boss_vizaduum_karazhan_legion.cpp +++ b/src/server/scripts/BrokenIsles/KarazhanLegion/boss_vizaduum_karazhan_legion.cpp @@ -253,7 +253,7 @@ class boss_new_vizaduum : public CreatureScript if (!_isFlying) return; - if (type == POINT_MOTION_TYPE || WAYPOINT_MOTION_TYPE) + if (type == POINT_MOTION_TYPE || type == WAYPOINT_MOTION_TYPE) { switch (id) { diff --git a/src/server/scripts/BrokenIsles/Scenario/scenario_assault_broken_shore.cpp b/src/server/scripts/BrokenIsles/Scenario/scenario_assault_broken_shore.cpp index 264451d..65e5943 100644 --- a/src/server/scripts/BrokenIsles/Scenario/scenario_assault_broken_shore.cpp +++ b/src/server/scripts/BrokenIsles/Scenario/scenario_assault_broken_shore.cpp @@ -244,13 +244,34 @@ public: void OnPlayerEnter(Player* player) override { + // SONDE TEMPORAIRE RIVAGEDBG + TC_LOG_ERROR("misc", "RIVAGEDBG OnPlayerEnter : %s en (%.0f, %.0f, %.0f)", + player ? player->GetName().c_str() : "aucun", + player ? player->GetPositionX() : 0.f, + player ? player->GetPositionY() : 0.f, + player ? player->GetPositionZ() : 0.f); + if (!player) return; player->CastSpell(player, SPELL_ENTREE_AURA, true); + // FILET DE SECURITE, temporaire. + // L'etape 0 n'est creditee que par l'arrivee du corbeau. Si + // celui-ci ne vole pas, le scenario reste bloque des la + // premiere etape et le reste devient intestable. On credite + // donc l'arrivee au bout de 20 s si elle ne l'a pas ete. + // A RETIRER une fois le vol repare. + InstanceScript* moi = this; + player->AddDelayedEvent(20000, [moi]() -> void + { + moi->SetData(DATA_ARRIVEE_ACCOMPLIE, 1); + }); + player->AddDelayedEvent(5000, [player]() -> void { + // SONDE TEMPORAIRE RIVAGEDBG + TC_LOG_ERROR("misc", "RIVAGEDBG invocation du corbeau (sort %u)", uint32(SPELL_ENTREE_INVOCATION)); player->CastSpell(player, SPELL_ENTREE_INVOCATION, true); std::list escorte; @@ -637,13 +658,22 @@ public: void IsSummonedBy(Unit* summoner) override { + // SONDE TEMPORAIRE RIVAGEDBG + TC_LOG_ERROR("misc", "RIVAGEDBG corbeau invoque par %s en (%.0f, %.0f, %.0f)", + summoner ? summoner->GetName().c_str() : "personne", + me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()); + SetFlyMode(true); if (summoner) summoner->CastSpell(me, SPELL_MONTER_CORBEAU, true); } - void PassengerBoarded(Unit* /*passager*/, int8 /*seatId*/, bool /*apply*/) override + void PassengerBoarded(Unit* passager, int8 /*seatId*/, bool apply) override { + // SONDE TEMPORAIRE RIVAGEDBG + TC_LOG_ERROR("misc", "RIVAGEDBG passager %s %s le corbeau", + passager ? passager->GetName().c_str() : "inconnu", apply ? "monte sur" : "descend de"); + Creature* moi = me; me->AddDelayedEvent(4000, [moi]() -> void { diff --git a/src/server/scripts/BrokenIsles/TrialOfValor/boss_hyrja_tov.cpp b/src/server/scripts/BrokenIsles/TrialOfValor/boss_hyrja_tov.cpp index ca31f3f..ace7d1f 100644 --- a/src/server/scripts/BrokenIsles/TrialOfValor/boss_hyrja_tov.cpp +++ b/src/server/scripts/BrokenIsles/TrialOfValor/boss_hyrja_tov.cpp @@ -126,8 +126,11 @@ public: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0, true)) me->CastSpell(target, SPELL_EXPEL_LIGHT_MARKER, false); - events.ScheduleEvent(EVENT_EXPEL_LIGHT, (expelLightSwitch <= 1) ? 20 : 75 * IN_MILLISECONDS); - expelLightSwitch = (expelLightSwitch <= 1) ? ++expelLightSwitch : 0; + // SylvaniaCore : le 20 n etait pas multiplie par IN_MILLISECONDS + // (relance toutes les 20 ms), et l ancienne affectation modifiait + // expelLightSwitch deux fois sans point de sequence. + events.ScheduleEvent(EVENT_EXPEL_LIGHT, (expelLightSwitch <= 1) ? 20 * IN_MILLISECONDS : 75 * IN_MILLISECONDS); + expelLightSwitch = (expelLightSwitch <= 1) ? expelLightSwitch + 1 : 0; break; case EVENT_SHIELD_OF_LIGHT: diff --git a/src/server/scripts/BrokenIsles/Zones/WorldBosses/boss_levantus.cpp b/src/server/scripts/BrokenIsles/Zones/WorldBosses/boss_levantus.cpp index a42ad97..b360760 100644 --- a/src/server/scripts/BrokenIsles/Zones/WorldBosses/boss_levantus.cpp +++ b/src/server/scripts/BrokenIsles/Zones/WorldBosses/boss_levantus.cpp @@ -102,7 +102,9 @@ public: { case 1: { - for (uint32 i = 1; i < 7; i++) // +1 + // SylvaniaCore : Waypointspawn n a que 6 entrees (0 a 5) ; la boucle + // d origine lisait l index 6, hors du tableau, a chaque declenchement. + for (uint32 i = 0; i < 6; i++) { me->CastSpell(Waypointspawn[i].GetPositionX() + urand(0, 25), Waypointspawn[i].GetPositionY() + urand(0, 25), Waypointspawn[i].GetPositionZ(), 217212, true); } diff --git a/src/server/scripts/Pandaria/SiegeOfOrgrimmar/boss_paragons_of_the_klaxxi.cpp b/src/server/scripts/Pandaria/SiegeOfOrgrimmar/boss_paragons_of_the_klaxxi.cpp index 00f63f7..5d06884 100644 --- a/src/server/scripts/Pandaria/SiegeOfOrgrimmar/boss_paragons_of_the_klaxxi.cpp +++ b/src/server/scripts/Pandaria/SiegeOfOrgrimmar/boss_paragons_of_the_klaxxi.cpp @@ -5091,7 +5091,10 @@ struct spell_area_paragons_of_the_klaxxi_reaction_yellow : AreaTriggerAI caster->AddAura(SPELL_NOXIOUS_VAPORS, target); } - bool OnRemoveTarget(Unit* target, bool /*byExpire*/) + // SylvaniaCore : le hook du core est OnUnitExit -- OnRemoveTarget n existe + // nulle part dans AreaTriggerAI, la methode n etait donc jamais appelee et + // l aura restait sur le joueur apres sa sortie de la zone. + void OnUnitExit(Unit* target) override { target->RemoveAura(SPELL_NOXIOUS_VAPORS); } @@ -5139,7 +5142,10 @@ struct spell_area_paragons_of_the_klaxxi_sonic_projection : AreaTriggerAI caster->AddAura(SPELL_SONIC_PROJECTION_DMG, target); } - bool OnRemoveTarget(Unit* target, bool /*byExpire*/) + // SylvaniaCore : le hook du core est OnUnitExit -- OnRemoveTarget n existe + // nulle part dans AreaTriggerAI, la methode n etait donc jamais appelee et + // l aura restait sur le joueur apres sa sortie de la zone. + void OnUnitExit(Unit* target) override { target->RemoveAura(SPELL_SONIC_PROJECTION_DMG); } diff --git a/src/server/scripts/Pandaria/SiegeOfOrgrimmar/boss_siegecrafter_blackfuse.cpp b/src/server/scripts/Pandaria/SiegeOfOrgrimmar/boss_siegecrafter_blackfuse.cpp index 613b9d7..9fbf2db 100644 --- a/src/server/scripts/Pandaria/SiegeOfOrgrimmar/boss_siegecrafter_blackfuse.cpp +++ b/src/server/scripts/Pandaria/SiegeOfOrgrimmar/boss_siegecrafter_blackfuse.cpp @@ -3348,8 +3348,12 @@ struct spell_area_siegecrafter_blackfuse_laser_ground_effect : AreaTriggerAI caster->AddAura(SPELL_SUPERHEATED_AURA, p_Target); } - bool OnRemoveTarget(Unit* target, bool /*byExpire*/) + // SylvaniaCore : le hook du core est OnUnitExit -- OnRemoveTarget n existe + // nulle part dans AreaTriggerAI, la methode n etait donc jamais appelee et + // l aura restait sur le joueur apres sa sortie de la zone. + void OnUnitExit(Unit* target) override { + target->RemoveAura(SPELL_SUPERHEATED_AURA); } }; diff --git a/src/server/scripts/Pandaria/SiegeOfOrgrimmar/siege_of_orgrimmar_part_1.cpp b/src/server/scripts/Pandaria/SiegeOfOrgrimmar/siege_of_orgrimmar_part_1.cpp index 60869cd..21909ef 100644 --- a/src/server/scripts/Pandaria/SiegeOfOrgrimmar/siege_of_orgrimmar_part_1.cpp +++ b/src/server/scripts/Pandaria/SiegeOfOrgrimmar/siege_of_orgrimmar_part_1.cpp @@ -1054,10 +1054,12 @@ struct spell_area_pressure_plate : AreaTriggerAI unit->AddAura(eSpells::PressurePlateButton, unit); } - bool OnRemoveTarget(Unit* p_Target, bool /*p_ByExpire*/) + // SylvaniaCore : le hook du core est OnUnitExit -- OnRemoveTarget n existe + // nulle part dans AreaTriggerAI, la methode n etait donc jamais appelee et + // l aura restait sur le joueur apres sa sortie de la zone. + void OnUnitExit(Unit* p_Target) override { p_Target->RemoveAura(eSpells::PressurePlateButton); - return true; } }; diff --git a/src/server/scripts/Pandaria/TempleJadeSerpent/boss_wise_mari.cpp b/src/server/scripts/Pandaria/TempleJadeSerpent/boss_wise_mari.cpp index 54ca14a..75a9309 100644 --- a/src/server/scripts/Pandaria/TempleJadeSerpent/boss_wise_mari.cpp +++ b/src/server/scripts/Pandaria/TempleJadeSerpent/boss_wise_mari.cpp @@ -351,8 +351,6 @@ class boss_wase_mari : public CreatureScript break; Talk(TEXT_PHASE_SWITCH); - ThreatContainer::StorageType const& threatlist = me->getThreatManager().getThreatList(); - threatlist.empty(); me->GetMotionMaster()->MovePoint(1, me->GetHomePosition()); me->RemoveAurasDueToSpell(SPELL_WATER_BUBBLE); diff --git a/src/server/scripts/Pandaria/ThroneOfThunder/boss_council_of_elders.cpp b/src/server/scripts/Pandaria/ThroneOfThunder/boss_council_of_elders.cpp index db1fa95..9d8240c 100644 --- a/src/server/scripts/Pandaria/ThroneOfThunder/boss_council_of_elders.cpp +++ b/src/server/scripts/Pandaria/ThroneOfThunder/boss_council_of_elders.cpp @@ -928,7 +928,7 @@ public: break; case EVENT_RECKLESS_CAHRGE_INITIALIZE: { - if (me->HasAura(SPELL_DISCHARGE || me->HasAura(SPELL_OVERLOAD))) + if (me->HasAura(SPELL_DISCHARGE) || me->HasAura(SPELL_OVERLOAD)) { events.CancelEvent(EVENT_RECKLESS_CAHRGE_INITIALIZE); events.ScheduleEvent(EVENT_RECKLESS_CAHRGE_INITIALIZE, 10 * IN_MILLISECONDS); diff --git a/src/server/scripts/Pandaria/Zones/WorldBosses/boss_ordos.cpp b/src/server/scripts/Pandaria/Zones/WorldBosses/boss_ordos.cpp index 73489fd..c4873cf 100644 --- a/src/server/scripts/Pandaria/Zones/WorldBosses/boss_ordos.cpp +++ b/src/server/scripts/Pandaria/Zones/WorldBosses/boss_ordos.cpp @@ -292,11 +292,12 @@ public: return true; } - bool OnRemoveTarget(AreaTrigger* trigger, Unit* target) + // SylvaniaCore : le hook du core est OnUnitExit -- OnRemoveTarget n existe + // nulle part dans AreaTriggerAI, la methode n etait donc jamais appelee et + // l aura restait sur le joueur apres sa sortie de la zone. + void OnUnitExit(Unit* target) override { target->RemoveAura(144693); - - return true; } };*/ diff --git a/src/server/scripts/World/PetBattleTrainer.cpp b/src/server/scripts/World/PetBattleTrainer.cpp index 632d1d7..3805cab 100644 --- a/src/server/scripts/World/PetBattleTrainer.cpp +++ b/src/server/scripts/World/PetBattleTrainer.cpp @@ -206,7 +206,7 @@ public: player->GetMotionMaster()->MovePointWithRot(PETBATTLE_ENTER_MOVE_SPLINE_ID, playerPosition.m_positionX, playerPosition.m_positionY, playerPosition.m_positionZ, playerPosition.m_orientation); creature->ForcedDespawn(1); - creature->SetRespawnTime(3000000000000000); + creature->SetRespawnTime(std::numeric_limits::max()); // SylvaniaCore : la constante d origine debordait de uint32 } else CloseGossipMenuFor(player); From 5c8b82338e9735fa55f35c4eff18ca61c2332650 Mon Sep 17 00:00:00 2001 From: BlaMacfly Date: Thu, 3 Sep 2026 23:14:10 +0200 Subject: [PATCH 13/50] Coeur de Pierre : l'Eclat sismique d'Azil faisait tomber le serveur MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signale en jeu avec une reproduction exacte : « si on attend la phase deux sans le frapper, le serveur plante ». Deux vidages memoire l'ont confirmee, pile en main : #0 spell_seismic_shard::HandleScript(SpellEffIndex) #1 Spell::HandleEffects #2 Spell::DoSpellHitOnUnit ... #13 InstanceMap::Update GetDynObject renvoie un pointeur NUL quand l'objet de visee n'existe pas -- pas encore cree, ou deja expire. La ligne suivante le dereferencait sans le moindre test : DynamicObject* dynamicObject = GetCaster()->GetDynObject(...); target->CastSpell(dynamicObject->GetPositionX(), ...); Le plantage a lieu dans le fil de mise a jour de la carte, donc il emporte le processus entier, pas seulement la session fautive. GetCaster() et GetHitUnit() sont verifies au passage : rien ne garantit leur presence au moment ou l'effet est traite, un lanceur mort entre le lancement et l'impact suffit. Meme prudence sur le ExitVehicle du script de changement de siege, juste au-dessus. RESTE OUVERT, signale par le meme joueur et non traite ici : le deuxieme boss du donjon se reinitialise des qu'on le deplace, et le bouclier du dernier boss serait purement visuel, sans absorption. Co-Authored-By: Claude Opus 5 --- sql/sylvania/rivage_1460_etats.sql | 34 +++++++++++++++++ .../Stonecore/boss_high_priestess_azil.cpp | 37 +++++++++++++++++-- 2 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 sql/sylvania/rivage_1460_etats.sql diff --git a/sql/sylvania/rivage_1460_etats.sql b/sql/sylvania/rivage_1460_etats.sql new file mode 100644 index 0000000..8bd6ad1 --- /dev/null +++ b/sql/sylvania/rivage_1460_etats.sql @@ -0,0 +1,34 @@ +-- ===================================================================== +-- Rivage brisé (carte 1460) — objets affichés comme déjà utilisés +-- +-- SIGNALÉ EN JEU : « le gameobject de la flèche n'est physiquement pas +-- visible ni cliquable, à la place il y a un minuscule skin de chien ». +-- +-- Les six Flèches de malheur (240194) étaient enregistrées en +-- `state = 2`, soit GO_STATE_ACTIVE_ALTERNATIVE. Le commentaire de notre +-- propre énumération le décrit sans ambiguïté : +-- « show in world as used in alt way and not reset » +-- L'objet est donc affiché dans sa forme CONSOMMÉE dès l'apparition, +-- avec le modèle de remplacement correspondant — et il n'est plus +-- utilisable, puisqu'il se présente comme déjà employé. +-- +-- Ce n'était ni le modèle ni l'orientation : `displayId` 37460 existe +-- bien dans GameObjectDisplayInfo du build 7.3.5.26972, avec une boîte +-- englobante de 44 × 44 × 71 unités, et la rotation (0,0,0,1) est +-- l'identité, la même que celle des Cages de la Légion qui s'affichent +-- correctement. +-- +-- État attendu : GO_STATE_READY (1), celui de 79 des 101 objets de la +-- carte, dont toutes les cages, les fleurs et les navires. +-- +-- PORTÉE : les six flèches uniquement. Les Canons de siège (240214) et +-- deux Portails de la Légion partagent le même défaut apparent, mais +-- rien ne prouve encore que leur état soit fautif — un canon peut +-- légitimement s'afficher chargé. À vérifier en jeu avant d'y toucher. +-- ===================================================================== + +UPDATE `gameobject` + SET `state` = 1 + WHERE `id` = 240194 + AND `map` = 1460 + AND `state` = 2; diff --git a/src/server/scripts/Maelstrom/Stonecore/boss_high_priestess_azil.cpp b/src/server/scripts/Maelstrom/Stonecore/boss_high_priestess_azil.cpp index b4ad21a..e9fa512 100644 --- a/src/server/scripts/Maelstrom/Stonecore/boss_high_priestess_azil.cpp +++ b/src/server/scripts/Maelstrom/Stonecore/boss_high_priestess_azil.cpp @@ -665,7 +665,9 @@ public: void ExitVehicle() { - GetCaster()->ExitVehicle(); + // Meme prudence : rien ne garantit la presence du lanceur. + if (Unit* caster = GetCaster()) + caster->ExitVehicle(); } void Register() override @@ -692,12 +694,41 @@ public: void HandleScript(SpellEffIndex /*effIndex*/) { - Creature* target = GetHitUnit()->ToCreature(); + // ============================================================= + // SylvaniaCore : objet de visee jamais verifie -> SIGSEGV. + // + // SIGNALE EN JEU : « si on attend la phase deux sans le + // frapper, le serveur plante ». Reproduction fidele, et deux + // vidages memoire l'ont confirmee, pile en main : + // #0 spell_seismic_shard::HandleScript + // #1 Spell::HandleEffects + // ... + // #13 InstanceMap::Update + // + // GetDynObject renvoie un pointeur NUL quand l'objet de visee + // n'existe pas -- pas encore cree, ou deja expire. La ligne + // suivante le dereferencait sans le moindre test, ce qui + // emporte le processus entier : le plantage a lieu dans le + // fil de mise a jour de la carte, pas dans une session. + // + // GetCaster() et GetHitUnit() sont verifies au passage : rien + // ne garantit leur presence au moment ou l'effet est traite, + // et un lanceur mort entre le lancement et l'impact suffit. + // ============================================================= + Unit* caster = GetCaster(); + Unit* hit = GetHitUnit(); + if (!caster || !hit) + return; + + Creature* target = hit->ToCreature(); if (!target) return; + DynamicObject* dynamicObject = caster->GetDynObject(SPELL_SEISMIC_SHARD_TARGETING); + if (!dynamicObject) + return; + target->ExitVehicle(); - DynamicObject* dynamicObject = GetCaster()->GetDynObject(SPELL_SEISMIC_SHARD_TARGETING); target->CastSpell(dynamicObject->GetPositionX(), dynamicObject->GetPositionY(), dynamicObject->GetPositionZ(), SPELL_SEISMIC_SHARD_MISSLE, true); } From 70fdf200751f61897839d5b99d7472b169604017 Mon Sep 17 00:00:00 2001 From: BlaMacfly Date: Fri, 4 Sep 2026 11:15:50 +0200 Subject: [PATCH 14/50] Rivage brise 1460 : les vrais criteres, et le deroule de reference MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SIGNALE EN JEU : « j ai passe ma phase 2 et ca m a switche jusqu a la 5 sans rien faire », puis « je suis en phase 4, juste a cote de Varian, et rien ne se valide ». Deux causes distinctes. La plage validait son etape DEUX fois : une fois par les criteres officiels que le moteur reconnait, une seconde par le CompleteStep() ajoute par-dessus. Le moteur avancait donc de deux crans. Le forcage est retire, les criteres suffisent. L etape « Trouver Varian » guettait une copie invoquee sur la plage, alors que la carte porte DEJA le vrai Varian en (1120, 2484) parmi les 757 creatures transposees -- comme Vol jin, Sylvanas et Jaina. Le joueur se tenait devant le bon personnage pendant que le script surveillait un sosie. On retient desormais celui de la base, distingue par son spawnId, et on ne le teleporte plus : l etape s appelle « Trouver ». L etape du portail comptait deux « ancres dimensionnelles » (90637) que le script fabriquait lui-meme. La video de la bataille affiche « 0/4 Ancres blindees detruites », et le wiki confirme : quatre 101667, dont la carte porte quinze exemplaires deja poses. Les criteres officiels 45131, 45228 et 45288 sont desormais alimentes. Le deroule de reference joint croise la video, les DB2 du build et le wiki. Il revele trois ecarts NON corriges : le commandant Horde est Azgalor et non Arganoth, l etape 4 Horde vise Sylvanas ET Baine, et l etape 9 Horde consiste a tenir la crete. Il etablit aussi que nos dialogues sont inventes -- BroadcastTextId a zero -- et que la replique de Jaina parlant d ancres « dimensionnelles » est ce qui a produit l erreur de code de l etape 5. Co-Authored-By: Claude Opus 5 --- .../reference_legion/rivage_1460_deroule.md | 114 ++++++++++++++++++ .../Scenario/scenario_broken_shore_intro.cpp | 100 +++++++++++++-- 2 files changed, 201 insertions(+), 13 deletions(-) create mode 100644 chantiers/reference_legion/rivage_1460_deroule.md diff --git a/chantiers/reference_legion/rivage_1460_deroule.md b/chantiers/reference_legion/rivage_1460_deroule.md new file mode 100644 index 0000000..a18a02e --- /dev/null +++ b/chantiers/reference_legion/rivage_1460_deroule.md @@ -0,0 +1,114 @@ +# La bataille du Rivage brisé — déroulé de référence (carte 1460, scénario 786) + +Ce document croise trois sources, et dit toujours laquelle parle : + +- **la vidéo** fournie par l'exploitant (40 min, écran partagé Alliance/Horde), + qui donne l'ordre réel des événements, le minutage et les compteurs affichés ; +- **les DB2 du build 7.3.5.26972** (`ScenarioStep`, `CriteriaTree`, `Criteria`), + qui donnent les critères chiffrés ; +- **[Warcraft Wiki](https://warcraft.wiki.gg/wiki/The_Battle_for_Broken_Shore_(quest))**, + qui donne les intitulés et les répliques. + +Ce que **notre base** contient est indiqué en regard, avec l'écart quand il y en a. + +--- + +## Les neuf étapes + +| # | Alliance | Horde | Critère officiel | +|---|---|---|---| +| 1 | The Broken Shore | idem | arbre 42768 — asset 44060 ×1 | +| 2 | Storm The Beach | idem | 44095 ×**33**, 52643 ×**3**, 44077 ×**3** | +| 3 | Defeat the Commander — **Arganoth** | Defeat the Commander — **Azgalor** | arbre 43554 — asset 45131 ×1 | +| 4 | **Find Varian** | **Find The Others** (Sylvanas *et* Baine) | arbre 43589 — asset 45228 ×1 | +| 5 | Destroy the Portal — **4 ancres blindées** | idem | arbre 43415 — asset 45288 ×**4** | +| 6 | Raze the Black City — barre 0→100 % | idem | arbre 42770 — 44384 ×1, 53062 ×2, 53063 ×5, 53064 ×10 | +| 7 | The Highlord — atteindre Tirion | idem | arbre 42772 | +| 8 | Krosus | idem | arbre 43765 | +| 9 | **Stop Gul'dan** | **Hold the Ridge** | arbre 47225 | + +--- + +## Trois erreurs que ce croisement a révélées + +**L'étape 5 comptait la mauvaise créature.** Notre script invoquait deux +« ancres dimensionnelles » (90637) de sa fabrication. Le jeu demande la +destruction de **quatre ancres blindées** (`101667`), dont la carte porte déjà +quinze exemplaires autour de `(1107, 2061)`. Corrigé. + +**L'étape 3 n'a pas le même adversaire selon la faction.** Alliance : *Dread +Commander Arganoth*. Horde : *Fel Commander Azgalor*. Notre script ne connaît +qu'Arganoth et l'invoque pour les deux camps. **Non corrigé.** + +**L'étape 4 non plus.** Alliance : trouver Varian. Horde : trouver **Sylvanas +et Baine**, deux personnages, pas Vol'jin. Notre script cherche Vol'jin côté +Horde. **Non corrigé.** + +Et l'étape 9 diverge aussi : l'Alliance arrête Gul'dan, la Horde tient la +crête pendant ce temps. + +--- + +## Nos dialogues sont inventés + +Toutes les répliques de `creature_text` pour ce scénario ont un +`BroadcastTextId` à **zéro** : elles ont été écrites à la main, elles ne +viennent pas du jeu. Elles sont plausibles mais fausses, et l'une d'elles a +directement produit un bug. + +| Entrée | Notre texte | Le jeu | +|---|---|---| +| 90714 Jaina | « Détruisez les ancres **dimensionnelles** » | *Those crystals appear to be anchoring the structures to our dimension. Take them out!* | +| 90713 Varian | « Soldats de l'Alliance ! La Légion s'abat… » | *Genn, Jaina, it's good to see you safe.* | +| 90717 Genn | — | *Just in time. We haven't been able to break their line. Now we may have a chance.* | +| 90708 Vol'jin | « Fils et filles de la Horde ! … » | *Dere's only one way offa dis beach, and it be t'rough alla dose demons ahead of us.* | +| 90413 Gul'dan | « Vous arrivez trop tard ! … » | *I have seen the end of your pitiful world, Wrynn. … The legion is ENDLESS.* | + +C'est la réplique de Jaina qui a fabriqué l'erreur de l'étape 5 : le script a +été écrit d'après elle. **La donnée fausse produit du code faux.** + +--- + +## Déroulé relevé sur la vidéo + +Minutage de la vidéo, pas du scénario — les premières minutes sont à Dalaran. + +| Temps | Événement | +|---|---| +| 06:02 | Jaina : « Attention, des infernaux ! » — début du combat de plage | +| 06:04 | Le commandant de l'effroi Arganoth parle | +| 06:54 | Genn Grisetête : « Celui-là est à moi ! » | +| 07:00 | Jaina : « Est-ce que tout le monde va bien ? » | +| 07:26 | Genn : « Les troupes de Varian ont dû arriver de l'autre côté de… » | +| 07:48 | Jaina : « Je n'avais jamais vu des démons progresser… » | +| 08:18 | Genn : « Quelque chose a changé. La Légion n'est… » | +| 08:38 | Jaina : « Oh, non… » | +| 08:46 | Varian : « Tenez bon, soldats de l'Alliance ! » | +| 09:12 | Varian : « Genn, Jaina, je suis heureux de voir que vous allez bien. » | +| 09:18 | Varian : « En formation, protecteurs de l'Alliance ! Repoussons-les ! » | +| 17:28 | Varian : « Vous avez une autre occasion de l'abattre, Sylvanas » | +| 17:32 | Sylvanas : « C'est comme si c'était fait, Wrynn. » | +| 17:54 | Varian : « Tout le monde, de l'autre côté du gouffre ! » | +| 18:08 | Sylvanas : « Nous allons prendre la crête et couvrir votre… » | +| 18:44 | Gul'dan : « M'échapper ? C'est plutôt vous qui n'échapperez pas à mon… » | +| ~08:20 vidéo | phase 5 : compteur **0/4 → 2/4 → 3/4 Ancres blindées détruites** | +| ~09:00 vidéo | phase 6 : barre **0 % → 2 % → 13 % → 37 % → 63 %** | + +Le texte ci-dessus vient de la reconnaissance optique sur une vidéo 720p en +écran partagé : **les fins de phrase sont tronquées** par la largeur de la +fenêtre de discussion, et certains caractères sont incertains. Il donne +l'ordre et l'orateur de façon fiable ; il ne fait pas autorité sur la +formulation exacte. Pour celle-ci, se référer au wiki. + +--- + +## Ce qui reste à faire + +1. **Le commandant Horde** : invoquer Azgalor et non Arganoth. +2. **L'étape 4 Horde** : deux cibles, Sylvanas et Baine. +3. **L'étape 9 Horde** : tenir la crête, pas arrêter Gul'dan. +4. **Les étapes 6 à 9** avancent encore par forçage, sans leurs critères. La + barre de 300 points de l'étape 6 est alimentée par quatre événements de + poids différents (1, 2, 5, 10) dont le sens reste à établir. +5. **Remplacer les dialogues inventés** par les vrais. Ils n'existent qu'en + anglais dans nos sources : traduire, ou assumer l'anglais. diff --git a/src/server/scripts/BrokenIsles/Scenario/scenario_broken_shore_intro.cpp b/src/server/scripts/BrokenIsles/Scenario/scenario_broken_shore_intro.cpp index f82e105..7db2f4a 100644 --- a/src/server/scripts/BrokenIsles/Scenario/scenario_broken_shore_intro.cpp +++ b/src/server/scripts/BrokenIsles/Scenario/scenario_broken_shore_intro.cpp @@ -105,9 +105,29 @@ enum BrokenShoreMisc GO_SPIRE_OF_WOE = 240194, DATA_SPIRE_USED = 9001, // signal envoye par le script d'objet + // ============================================================== + // Criteres officiels des etapes 2 a 4, releves dans ScenarioStep, + // CriteriaTree et Criteria du build 7.3.5.26972 : + // etape 2 arbre 43554 critere 30883 type 92 asset 45131 x1 + // etape 3 arbre 43589 critere 28017 type 92 asset 45228 x1 + // etape 4 arbre 43415 critere 27940 type 92 asset 45288 x4 + // + // L'ancre du portail a ete identifiee sur la VIDEO de la bataille + // fournie par l'exploitant, et non deduite : l'objectif y affiche + // « 0/4 Ancres blindees detruites », puis 2/4, puis 3/4. Il s'agit + // donc de 101667 « Shielded Anchor », dont la carte porte QUINZE + // exemplaires deja poses autour de (1107, 2061) -- et non des deux + // ancres dimensionnelles 90637 que le script invoquait lui-meme. + // ============================================================== + NPC_SHIELDED_ANCHOR = 101667, + + EVENT_COMMANDER_SLAIN = 45131, + EVENT_LEADER_FOUND = 45228, + EVENT_ANCHOR_DESTROYED = 45288, + KILLS_CITY = 10, KILLS_FINALE = 8, - ANCHORS_PORTAL = 2, + ANCHORS_PORTAL = 4, // etait 2, valeur inventee }; struct FactionAnchors @@ -213,6 +233,45 @@ struct scenario_broken_shore_intro : public InstanceScript scheduler.Update(diff); } + // ================================================================= + // SylvaniaCore : retenir le chef POSE SUR LA CARTE. + // + // SIGNALE EN JEU : « je suis en phase 4, je suis juste a cote de + // Varian et rien ne se valide ». + // + // La carte 1460 porte deja les vrais protagonistes -- Varian en + // (1120, 2484), Vol'jin en (568, 1887), Sylvanas et Jaina -- parmi + // les 757 creatures transposees. Or le script en invoquait une + // SECONDE copie sur la plage et ne surveillait que celle-la. Le + // joueur se tenait donc devant le vrai Varian pendant que l'etape + // guettait un sosie ailleurs, ou deja disparu. + // + // Le spawnId distingue les deux sans ambiguite : une creature issue + // de la base en porte un, une invocation non. + // ================================================================= + void OnCreatureCreate(Creature* creature) override + { + InstanceScript::OnCreatureCreate(creature); + + if (!creature || !creature->GetSpawnId()) + return; + + if (creature->GetEntry() == NPC_KING_VARIAN) + placedVarianGUID = creature->GetGUID(); + else if (creature->GetEntry() == NPC_VOLJIN) + placedVoljinGUID = creature->GetGUID(); + } + + // Le chef a rejoindre : celui de la carte s'il existe, sinon la + // copie invoquee par le script. + Creature* FindLeader() const + { + ObjectGuid const pose = (team == TEAM_HORDE) ? placedVoljinGUID : placedVarianGUID; + if (Creature* leader = instance->GetCreature(pose)) + return leader; + return instance->GetCreature(leaderGUID); + } + void CompleteStep() { if (Scenario* scenario = instance->GetInstanceScenario()) @@ -340,16 +399,21 @@ struct scenario_broken_shore_intro : public InstanceScript if (stage == STAGE_COMMANDER) { creature->AI()->Talk(1); + DoSendEventScenario(EVENT_COMMANDER_SLAIN); stage = STAGE_FIND_LEADER; - CompleteStep(); StartFindLeader(); } break; - case NPC_DIMENSIONAL_ANCHOR: - if (stage == STAGE_PORTAL && ++anchorsDown >= ANCHORS_PORTAL) + case NPC_SHIELDED_ANCHOR: + if (stage != STAGE_PORTAL) + break; + + // Une activation par ancre : le critere en exige quatre. + DoSendEventScenario(EVENT_ANCHOR_DESTROYED); + + if (++anchorsDown >= ANCHORS_PORTAL) { stage = STAGE_RAZE_CITY; - CompleteStep(); SummonWave(Anchors().city, 5); SummonWave(Anchors().city, 5); } @@ -411,8 +475,12 @@ struct scenario_broken_shore_intro : public InstanceScript if (beachKills < KILLS_BEACH || felLordKills < FEL_LORDS_BEACH || spiresDown < SPIRES_BEACH) return; + // Les trois criteres officiels ont ete alimentes a chaque mort : + // le moteur acheve l'etape de lui-meme. Un CompleteStep() ici + // ferait avancer une SECONDE fois -- c'est la cause du saut + // d'etapes signale en jeu (« j'ai passe ma phase 2 et ca m'a + // switche jusqu'a la 5 sans rien faire »). stage = STAGE_COMMANDER; - CompleteStep(); if (Creature* arganoth = Summon(NPC_ARGANOTH, Anchors().commander)) { @@ -451,9 +519,11 @@ struct scenario_broken_shore_intro : public InstanceScript { FactionAnchors const& a = Anchors(); - // le chef et son etat-major se replacent au point de ralliement (la Cite noire) - if (Creature* leader = instance->GetCreature(leaderGUID)) - leader->NearTeleportTo(a.city.GetPositionX(), a.city.GetPositionY(), a.city.GetPositionZ(), a.city.GetOrientation()); + // On ne DEPLACE plus le chef. L'etape s'intitule « Trouver + // Varian » : le joueur doit aller a lui, la ou la carte le pose. + // Le teleporter au point de ralliement revenait a le mettre + // sous les pieds du joueur, et la detection de proximite se + // declenchait alors dans la seconde. SummonAt(NPC_KHADGAR, a.city, 4.0f, 3.0f); for (uint8 i = 0; i < 3; ++i) SummonAt(TroopEntry(), a.city, -6.0f + i * 6.0f, -5.0f); @@ -464,7 +534,7 @@ struct scenario_broken_shore_intro : public InstanceScript if (stage != STAGE_FIND_LEADER) return; bool found = false; - Creature* leader = instance->GetCreature(leaderGUID); + Creature* leader = FindLeader(); if (leader) { DoOnPlayers([&found, leader](Player* player) @@ -475,8 +545,8 @@ struct scenario_broken_shore_intro : public InstanceScript } if (found) { + DoSendEventScenario(EVENT_LEADER_FOUND); stage = STAGE_PORTAL; - CompleteStep(); if (Creature* second = instance->GetCreature(team == TEAM_HORDE ? sylvanasGUID : jainaGUID)) second->AI()->Talk(0); StartPortal(); @@ -489,8 +559,10 @@ struct scenario_broken_shore_intro : public InstanceScript void StartPortal() { FactionAnchors const& a = Anchors(); - SummonAt(NPC_DIMENSIONAL_ANCHOR, a.portal, -8.0f, 0.0f); - SummonAt(NPC_DIMENSIONAL_ANCHOR, a.portal, 8.0f, 0.0f); + // Les ancres blindees (101667) sont DEJA posees sur la carte, + // quinze exemplaires autour de (1107, 2061). Rien a invoquer : + // le script en fabriquait deux fausses, d'une autre entree, que + // le critere officiel ne reconnaissait pas. SummonAt(NPC_EREDAR_SUMMONER, a.portal, 0.0f, 6.0f); SummonAt(NPC_CHAOS_MINION, a.portal, -5.0f, 8.0f); SummonAt(NPC_CHAOS_MINION, a.portal, 5.0f, 8.0f); @@ -578,6 +650,8 @@ private: ObjectGuid leaderGUID; ObjectGuid jainaGUID; ObjectGuid sylvanasGUID; + ObjectGuid placedVarianGUID; + ObjectGuid placedVoljinGUID; ObjectGuid guldanGUID; TaskScheduler scheduler; }; From 191422c0384a174477a142a340d92bed440dd0f5 Mon Sep 17 00:00:00 2001 From: BlaMacfly Date: Fri, 4 Sep 2026 22:47:28 +0200 Subject: [PATCH 15/50] Rivage brise : rendre la VOIX aux personnages du scenario MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SIGNALE EN JEU : « tous les PNJ de la zone sont totalement inexpressifs, ca n a pas d ame », et « tout est muet meme s il y a du textuel ». Nos repliques portaient un BroadcastTextId a ZERO. Le serveur envoyait donc du texte brut, que le client affiche sans rien avoir a resoudre -- donc sans version localisee et SANS BANDE SON. Le client possede pourtant les deux : c est pour cela que la video montre du francais alors que notre base n en contient aucune traduction. Il ne lui manquait que l identifiant. 34 repliques recuperees du creature_text de dufernst/LegionCore-7.3.5, qui a conserve les Sound et BroadcastTextID d origine, pour dix personnages : Varian, Voljin, Jaina, Sylvanas, Genn, Thrall, Baine, Mekkatorque et Krosus. Le texte y est en russe, sans importance -- l identifiant prime. Celui porte ici est l anglais officiel tire de notre propre broadcast_text, en repli et repere de lecture. GROUPES DECALES DE +10 : nos repliques existantes aux groupes 0 et 1 sont conservees, le script les appelle par Talk(0) et Talk(1). Les ecraser ferait dire a Varian « Pour l Alliance ! » au moment de mourir. RESTE A FAIRE : le script n appelle encore aucune de ces lignes. Il faut des cris de combat -- « Celui-la est a moi ! », « A la gorge ! » -- et une IA pour que les allies engagent les demons. Aucune des 156 entrees de cette carte n a le moindre AIName ni ScriptName. Co-Authored-By: Claude Opus 5 --- sql/sylvania/rivage_1460_voix.sql | 65 +++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 sql/sylvania/rivage_1460_voix.sql diff --git a/sql/sylvania/rivage_1460_voix.sql b/sql/sylvania/rivage_1460_voix.sql new file mode 100644 index 0000000..a93dc11 --- /dev/null +++ b/sql/sylvania/rivage_1460_voix.sql @@ -0,0 +1,65 @@ +-- ===================================================================== +-- Rivage brisé (1460) — la parole et la VOIX rendues aux personnages +-- +-- SIGNALÉ EN JEU : « tous les PNJ de la zone sont totalement +-- inexpressifs, ça n'a pas d'âme », « tout est muet même s'il y a du +-- textuel ». +-- +-- CAUSE : nos répliques portent un BroadcastTextId à ZÉRO. Le serveur +-- envoie alors du texte brut, que le client affiche sans rien avoir à +-- résoudre — donc sans la version localisée et SANS LA BANDE SON. Le +-- client possède pourtant les deux : c'est pour cela que la vidéo +-- montre du français alors que notre base n'en contient aucune +-- traduction. Il ne lui manquait que l'identifiant. +-- +-- SOURCE : creature_text du dump dufernst/LegionCore-7.3.5, qui a +-- conservé les Sound et BroadcastTextID d'origine. Son texte est en +-- russe, sans importance : l'identifiant prime, et le client rendra sa +-- propre version. Le texte porté ici est l'anglais officiel, tiré de +-- notre broadcast_text — il ne sert que de repli et de repère. +-- +-- GROUPES DÉCALÉS DE +10. Nos répliques existantes, aux groupes 0 et 1, +-- sont CONSERVÉES : le script les appelle par Talk(0) et Talk(1), et +-- les écraser ferait dire à Varian « Pour l'Alliance ! » au moment de +-- mourir. Le recâblage du script est un travail distinct. +-- +-- 34 répliques, toutes avec son et identifiant de diffusion. +-- ===================================================================== + +DELETE FROM `creature_text` WHERE `GroupID` >= 10 AND `CreatureID` IN (90544,90708,90709,90710,90711,90713,90714,90716,90717); + +INSERT INTO `creature_text` (`CreatureID`,`GroupID`,`ID`,`Text`,`Type`,`Language`,`Probability`,`Emote`,`Duration`,`Sound`,`BroadcastTextId`,`TextRange`,`comment`) VALUES +(90544,10,0,'You will know fear.',14,0,100,0,0,53463,99248,0,'voix officielle -- son 53463'), +(90708,10,0,'Listen up! Dere''s only one way offa dis beach, and it be t''rough alla dose demons ahead of us. But dey don''t know who dey be dealin'' wit. Let''s show dem what it means ta be Horde!',14,0,100,0,0,53528,99315,0,'voix officielle -- son 53528'), +(90708,11,0,'Die.',14,0,100,0,0,53536,99323,0,'voix officielle -- son 53536'), +(90708,13,0,'',14,0,100,0,0,53590,143151,0,'voix officielle -- son 53590'), +(90708,15,0,'Dis one''s mine.',14,0,100,0,0,53537,99324,0,'voix officielle -- son 53537'), +(90709,10,0,'',14,0,100,0,0,53590,99375,0,'voix officielle -- son 53590'), +(90709,11,0,'',14,0,100,0,0,53587,99374,0,'voix officielle -- son 53587'), +(90709,12,0,'',14,0,100,0,0,53465,99250,0,'voix officielle -- son 53465'), +(90709,13,0,'',14,0,100,0,0,53585,99372,0,'voix officielle -- son 53585'), +(90709,14,0,'',12,0,100,0,0,53610,99397,0,'voix officielle -- son 53610'), +(90709,15,0,'',12,0,100,0,0,53612,99399,0,'voix officielle -- son 53612'), +(90710,14,0,'By the Earthmother!',14,0,100,0,0,53591,109421,0,'voix officielle -- son 53591'), +(90711,10,0,'The elements will destroy you!',14,0,100,0,0,53534,99321,0,'voix officielle -- son 53534'), +(90711,11,0,'Back to the Nether!',14,0,100,0,0,53533,99320,0,'voix officielle -- son 53533'), +(90711,12,0,'Spirits of earth, aid me!',12,0,100,0,0,53611,99398,0,'voix officielle -- son 53611'), +(90713,10,0,'Brace yourselves, Alliance, it''s coming this way!',14,0,100,0,0,53464,99249,0,'voix officielle -- son 53464'), +(90713,11,0,'',14,0,100,0,0,53407,146212,0,'voix officielle -- son 53407'), +(90713,14,0,'We''re pushing them back! Don''t let up!',14,0,100,0,0,53405,99189,0,'voix officielle -- son 53405'), +(90713,15,0,'There is nowhere to run, Gul''dan. Give up now, and I will grant you a swift death.',14,0,100,0,0,53496,99283,0,'voix officielle -- son 53496'), +(90713,16,0,'Hold steady, we''ve broken their lines before, we will again. Charge!',14,0,100,0,0,53498,99285,0,'voix officielle -- son 53498'), +(90713,17,0,'No matter how many demons you throw at us, we will cut you down, monster.',14,0,100,0,0,53513,99300,0,'voix officielle -- son 53513'), +(90714,10,0,'',14,0,100,0,0,53345,94240,0,'voix officielle -- son 53345'), +(90714,11,0,'',14,0,100,0,0,53347,94242,0,'voix officielle -- son 53347'), +(90714,12,0,'',14,0,100,0,0,53357,94594,0,'voix officielle -- son 53357'), +(90714,13,0,'',12,0,100,0,0,53449,99234,0,'voix officielle -- son 53449'), +(90714,14,0,'',14,0,100,0,0,53358,94595,0,'voix officielle -- son 53358'), +(90716,10,0,'How are we going to get across?',12,0,100,1,0,53448,99233,0,'voix officielle -- son 53448'), +(90716,11,0,'For Gnomeregan!',14,0,100,0,0,53409,99193,0,'voix officielle -- son 53409'), +(90716,12,0,'',14,0,100,0,0,53408,127434,0,'voix officielle -- son 53408'), +(90717,10,0,'Just in time. We haven''t been able to break their line, now we may have a chance.',14,0,100,0,0,53346,94241,0,'voix officielle -- son 53346'), +(90717,11,0,'There''s only one way out of this, Alliance, and it''s through that line of demons! Cannons, lay down covering fire! All forces, CHARGE!',14,0,100,0,0,53348,94585,0,'voix officielle -- son 53348'), +(90717,12,0,'Go for the throat!',14,0,100,0,0,53354,94591,0,'voix officielle -- son 53354'), +(90717,13,0,'This one''s mine!',14,0,100,0,0,53355,117408,0,'voix officielle -- son 53355'), +(90717,14,0,'Side by side, don''t let them break through!',14,0,100,0,0,53353,94590,0,'voix officielle -- son 53353'); From 82254cf6275cc92af46897d745ce9087a7612caa Mon Sep 17 00:00:00 2001 From: BlaMacfly Date: Fri, 4 Sep 2026 23:33:12 +0200 Subject: [PATCH 16/50] Rivage brise : les neuf etapes ont enfin leurs criteres officiels MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Suite du parcours joue de bout en bout avec l'exploitant. ETAPE 6, LA BARRE RESTAIT A 0 %. Son arbre 42770 porte l'operateur 9, SUM_CHILDREN_WEIGHT : la barre vaut 300 points et chaque enfant y contribue selon son poids -- 44384 vaut 1, 53062 vaut 2, 53063 vaut 5, 53064 vaut 10. Le script n'envoyait aucun des quatre : il comptait dix morts dans son coin et forcait le passage, laissant la barre morte. Les demons ordinaires alimentent desormais le poids 2, les elites le poids 5, et des vagues affluent pour que la barre puisse se remplir -- la zone ne compte pas assez de defenseurs pour ses 300 points. LES CAGES DE LA LEGION ne comptaient pour rien : aucun critere ne les mentionne, et elles n'avaient aucun script. Signale en jeu, puis confirme par l'observation (« la barre bouge de 1 % »). Elles portent le quatrieme poids, le seul qui restait libre. Les 39 exemplaires sont rattaches a go_legion_cage. ETAPE 7, TIRION se validait par une minuterie de douze secondes, sans le joueur, et disparaissait au bout de vingt -- impossible a atteindre meme en courant. Meme defaut que « Trouver Varian ». Il faut desormais le rejoindre, il reste en place, et Krosus n'apparait qu'ensuite. ETAPES 8 ET 9 cablees dans la foulee : 44669 a la mort de Krosus, 44826 quand Gul'dan est arrete. Plus aucune etape ne se valide par forcage. DOUBLONS DE PLACEMENT : neuf creatures de la 1460 et trente-huit de la 1666 occupaient une position strictement identique a une autre, au centimetre pres. L'import n'est pas en cause -- la reference les porte deja en double, guids 294825 et 294827 pour l'entree 92564. Ecart assume avec elle, au benefice du rendu. RESERVE : la correspondance des quatre poids de l'etape 6 reste une deduction. La cite ne contient que deux categories d'ennemis la ou les poids en supposent quatre. A verifier en jeu, chiffres en main. Co-Authored-By: Claude Opus 5 --- sql/sylvania/rivage_doublons.sql | 33 ++++ .../Scenario/scenario_broken_shore_intro.cpp | 144 ++++++++++++++++-- 2 files changed, 168 insertions(+), 9 deletions(-) create mode 100644 sql/sylvania/rivage_doublons.sql diff --git a/sql/sylvania/rivage_doublons.sql b/sql/sylvania/rivage_doublons.sql new file mode 100644 index 0000000..c9c60ae --- /dev/null +++ b/sql/sylvania/rivage_doublons.sql @@ -0,0 +1,33 @@ +-- ===================================================================== +-- Rivage brisé — créatures posées deux fois au même endroit +-- +-- SIGNALÉ EN JEU : « il est spawn 2 fois au même endroit » (entrée +-- 92564, guid 290200360). +-- +-- Neuf créatures de la carte 1460 occupent une position strictement +-- identique à une autre — même entrée, mêmes coordonnées au centimètre. +-- En jeu, deux modèles se superposent exactement. +-- +-- L'IMPORT N'EST PAS EN CAUSE. La référence les porte déjà en double : +-- (294825,92564,1460,…,1254.48,2438.92,47.0961,…) +-- (294827,92564,1460,…,1254.48,2438.92,47.0961,…) +-- La transposition était fidèle ; c'est la donnée d'origine qui l'est +-- moins. Écart assumé avec la référence, au bénéfice du rendu. +-- +-- On conserve le plus petit guid de chaque paire. +-- ===================================================================== + +DELETE c FROM `creature` c + JOIN ( + SELECT `id`, ROUND(`position_x`,1) AS px, ROUND(`position_y`,1) AS py, + MIN(`guid`) AS garder + FROM `creature` + WHERE `map` IN (1460, 1666) + GROUP BY `id`, px, py + HAVING COUNT(*) > 1 + ) AS d + ON c.`id` = d.`id` + AND ROUND(c.`position_x`,1) = d.px + AND ROUND(c.`position_y`,1) = d.py + AND c.`guid` <> d.garder + WHERE c.`map` IN (1460, 1666); diff --git a/src/server/scripts/BrokenIsles/Scenario/scenario_broken_shore_intro.cpp b/src/server/scripts/BrokenIsles/Scenario/scenario_broken_shore_intro.cpp index 7db2f4a..09c224c 100644 --- a/src/server/scripts/BrokenIsles/Scenario/scenario_broken_shore_intro.cpp +++ b/src/server/scripts/BrokenIsles/Scenario/scenario_broken_shore_intro.cpp @@ -125,6 +125,52 @@ enum BrokenShoreMisc EVENT_LEADER_FOUND = 45228, EVENT_ANCHOR_DESTROYED = 45288, + // ============================================================== + // Etape 6, « Raser la cite noire ». Son arbre 42770 porte + // l'operateur 9, CRITERIA_TREE_OPERATOR_SUM_CHILDREN_WEIGHT : la + // barre vaut 300 points et chaque enfant y contribue selon SON + // poids, releve dans les DB2 du build 7.3.5.26972 : + // + // asset 44384 poids 1 -> 0,33 % par activation + // asset 53062 poids 2 -> 0,67 % + // asset 53063 poids 5 -> 1,67 % + // asset 53064 poids 10 -> 3,33 % + // + // SIGNALE EN JEU : « la phase 6 ne progresse pas en tuant, la + // progression reste a 0 % ». Le script n'envoyait aucun de ces + // quatre evenements : il comptait dix morts dans son coin et + // forcait le passage, laissant la barre morte. + // + // DEDUCTION ASSUMEE, ET NON DONNEE : rien n'indique quel ennemi + // porte quel poids. La cite ne contient que DEUX categories -- + // 94 demons ordinaires et 17 elites -- la ou les poids en + // supposent quatre. On attribue donc le poids 2 aux ordinaires et + // le poids 5 aux elites, ce qui fait progresser la barre a + // proportion de la difficulte. Les poids 1 et 10 restent + // inemployes faute de savoir ce qu'ils designent. + // ============================================================== + EVENT_CITY_TRASH = 53062, // poids 2 + EVENT_CITY_ELITE = 53063, // poids 5 + + // Etapes 7 a 9, criteres releves dans les memes DB2 : + // etape 7 arbre 42772 critere 29715 asset 50027 x1 + // etape 8 arbre 43765 critere 28055 asset 44669 x1 + // etape 9 arbre 47225 critere 29714 asset 44826 x1 + // Le quatrieme poids de la barre de l'etape 6, longtemps inemploye. + // SIGNALE EN JEU : « les gameobject Legion Cage ne comptent pas », + // puis « oui la barre bouge de 1 % » -- les cages alimentent donc + // bien la barre. Le poids 1 est le seul des quatre qui restait + // libre, et il correspond a une action mineure : 1 point sur 300, + // soit 0,33 %, ce qui s'affiche comme 1 % des la deuxieme cage. + EVENT_CITY_CAGE = 44384, + GO_LEGION_CAGE = 240535, + GO_LEGION_CAGE_2 = 248819, + DATA_CAGE_OPENED = 9002, + + EVENT_TIRION_REACHED = 50027, + EVENT_KROSUS_SLAIN = 44669, + EVENT_GULDAN_STOPPED = 44826, + KILLS_CITY = 10, KILLS_FINALE = 8, ANCHORS_PORTAL = 4, // etait 2, valeur inventee @@ -379,7 +425,7 @@ struct scenario_broken_shore_intro : public InstanceScript case NPC_FELBLADE_DESTROYER: case NPC_EREDAR_SUMMONER: case NPC_INFERNAL_DESTROYER: - OnDemonDied(); + OnDemonDied(creature); break; // Les treize Seigneurs gangrebois places sur la carte. L'etape // en exige trois ; on les enumere explicitement plutot que de @@ -421,8 +467,8 @@ struct scenario_broken_shore_intro : public InstanceScript case NPC_KROSUS: if (stage == STAGE_KROSUS) { + DoSendEventScenario(EVENT_KROSUS_SLAIN); stage = STAGE_STOP_GULDAN; - CompleteStep(); StartFinale(); } break; @@ -447,7 +493,7 @@ struct scenario_broken_shore_intro : public InstanceScript // arrivent jamais ici : ils ont leurs propres criteres. // ===================================================== if (creature->GetCreatureTemplate()->type == CREATURE_TYPE_DEMON) - OnDemonDied(); + OnDemonDied(creature); break; } } @@ -457,6 +503,14 @@ struct scenario_broken_shore_intro : public InstanceScript // d'instance ne rapporte cette utilisation. void SetData(uint32 type, uint32 /*data*/) override { + if (type == DATA_CAGE_OPENED) + { + // Une cage ne vaut que pendant l'assaut de la cite. + if (stage == STAGE_RAZE_CITY) + DoSendEventScenario(EVENT_CITY_CAGE); + return; + } + if (type != DATA_SPIRE_USED || stage != STAGE_STORM_BEACH) return; @@ -489,7 +543,7 @@ struct scenario_broken_shore_intro : public InstanceScript } } - void OnDemonDied() + void OnDemonDied(Creature* mort) { switch (stage) { @@ -499,13 +553,29 @@ struct scenario_broken_shore_intro : public InstanceScript TryFinishBeach(); break; case STAGE_RAZE_CITY: - if (++cityKills >= KILLS_CITY) + { + // La barre officielle avance selon la valeur de l'ennemi. + bool const elite = mort && mort->GetCreatureTemplate()->rank > 0; + DoSendEventScenario(elite ? EVENT_CITY_ELITE : EVENT_CITY_TRASH); + ++cityKills; + + // Des vagues continuent d'affluer tant que la cite tient : + // sans cela la barre ne pourrait pas se remplir, la zone ne + // comptant pas assez de defenseurs pour ses 300 points. + if ((cityKills % 6) == 0) + SummonWave(Anchors().city, 5); + + // FILET DE SECURITE, pas un mecanisme. Si la barre restait + // bloquee pour une raison qui nous echappe, le joueur ne + // doit pas rester prisonnier de l'etape. + if (cityKills >= 90) { stage = STAGE_HIGHLORD; CompleteStep(); StartHighlord(); } break; + } case STAGE_STOP_GULDAN: if (++finaleKills >= KILLS_FINALE) FinishScenario(); @@ -570,17 +640,55 @@ struct scenario_broken_shore_intro : public InstanceScript void StartHighlord() { + // ============================================================= + // SylvaniaCore : l'etape s'intitule « Atteindre Tirion ». + // + // SIGNALE EN JEU : « la 7 c'est Tirion, il est passe + // automatiquement et ca me passe en 8 ». + // + // La minuterie de douze secondes validait l'etape SANS LE + // JOUEUR, et Tirion disparaissait au bout de vingt secondes -- + // impossible de l'atteindre meme en courant. Meme defaut que + // « Trouver Varian » : le script decidait a la place du joueur. + // + // On attend desormais qu'un joueur le rejoigne, et on alimente + // le critere officiel 50027. Tirion reste en place : il agonise + // dans la crevasse, il n'a aucune raison de s'evaporer. + // ============================================================= FactionAnchors const& a = Anchors(); if (Creature* tirion = Summon(NPC_TIRION, a.crevasse)) { + tirionGUID = tirion->GetGUID(); tirion->AI()->Talk(0); tirion->SetStandState(UNIT_STAND_STATE_KNEEL); - tirion->DespawnOrUnsummon(20000); } - scheduler.Schedule(Seconds(12), [this](TaskContext /*context*/) + + scheduler.Schedule(Seconds(2), [this](TaskContext context) { + if (stage != STAGE_HIGHLORD) + return; + + Creature* tirion = instance->GetCreature(tirionGUID); + if (!tirion) + return; + + bool atteint = false; + DoOnPlayers([&atteint, tirion](Player* player) + { + if (player->IsWithinDist(tirion, 25.0f, false)) + atteint = true; + }); + + if (!atteint) + { + context.Repeat(Seconds(2)); + return; + } + + DoSendEventScenario(EVENT_TIRION_REACHED); stage = STAGE_KROSUS; - CompleteStep(); + tirion->DespawnOrUnsummon(20000); + if (Creature* krosus = Summon(NPC_KROSUS, Anchors().crevasse)) krosus->SetInCombatWithZone(); }); @@ -608,7 +716,7 @@ struct scenario_broken_shore_intro : public InstanceScript void FinishScenario() { stage = STAGE_DONE; - CompleteStep(); + DoSendEventScenario(EVENT_GULDAN_STOPPED); if (Scenario* scenario = instance->GetInstanceScenario()) scenario->CompleteScenario(); @@ -652,6 +760,7 @@ private: ObjectGuid sylvanasGUID; ObjectGuid placedVarianGUID; ObjectGuid placedVoljinGUID; + ObjectGuid tirionGUID; ObjectGuid guldanGUID; TaskScheduler scheduler; }; @@ -660,6 +769,22 @@ private: // appelle sScriptMgr->OnGossipHello avant tout traitement specifique, ce // qui nous donne le seul point d'accroche disponible. On renvoie false // pour laisser le comportement normal se poursuivre. +// Les cages de la Legion, disseminees dans la cite. Les liberer fait +// avancer la barre de l'etape 6. +class go_legion_cage : public GameObjectScript +{ +public: + go_legion_cage() : GameObjectScript("go_legion_cage") { } + + bool OnGossipHello(Player* /*player*/, GameObject* go) override + { + if (InstanceScript* instance = go->GetInstanceScript()) + instance->SetData(DATA_CAGE_OPENED, 1); + + return false; // on laisse le comportement normal se poursuivre + } +}; + class go_spire_of_woe : public GameObjectScript { public: @@ -678,4 +803,5 @@ void AddSC_scenario_broken_shore_intro() { RegisterInstanceScript(scenario_broken_shore_intro, 1460); new go_spire_of_woe(); + new go_legion_cage(); } From a9f2fde270e4153c2e6479665368933dd924e410 Mon Sep 17 00:00:00 2001 From: BlaMacfly Date: Fri, 4 Sep 2026 23:54:16 +0200 Subject: [PATCH 17/50] Rivage brise : la mort de Tirion, et les renforts qui tombaient sur le joueur MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SIGNALE EN JEU : « p7 c'est Krosus qui plonge Tirion dans le fiel normalement, et la pas de script de scenario ». Le script se contentait d'invoquer Krosus douze secondes apres avoir pose Tirion agenouille. La sequence officielle est relevee sur Warcraft Wiki, et ses huit repliques existent dans nos donnees avec leur BroadcastTextId ET leur Sound -- de 99237 a 99247. Elle est desormais jouee en trente-trois secondes : Tirion comprend le piege, Gul'dan lui repond depuis le tombeau, Krosus surgit de la lave, Gul'dan ordonne, Krosus souffle, Tirion sombre, le chef de faction riposte, Gul'dan raille puis lance l'assaut. Krosus n'est attaquable qu'a ce dernier signal. Gul'dan est invoque des cette scene, au sommet du tombeau, et y reste jusqu'a la fin -- c'est de la qu'il domine le champ de bataille. La finale le reutilise au lieu d'en invoquer un second. RENFORTS DE LA CITE : « en phase 6 j'ai des invocations de demon sur ma tronche ». Ils naissaient au point de ralliement, c'est-a-dire au milieu du combat. Ils arrivent desormais de la peripherie, sur un cercle de 45 a 60 metres dont l'orientation change a chaque vague, puis chargent. Ces vagues restent une addition de ma part, pas une donnee du jeu : la cite ne compte que 273 points de defenseurs pour une barre qui en demande 300. Si la correspondance des poids se revele fausse, elles n'auront plus lieu d'etre. Co-Authored-By: Claude Opus 5 --- sql/sylvania/mort_tirion.sql | 36 ++++ .../Scenario/scenario_broken_shore_intro.cpp | 161 +++++++++++++++++- 2 files changed, 191 insertions(+), 6 deletions(-) create mode 100644 sql/sylvania/mort_tirion.sql diff --git a/sql/sylvania/mort_tirion.sql b/sql/sylvania/mort_tirion.sql new file mode 100644 index 0000000..779e534 --- /dev/null +++ b/sql/sylvania/mort_tirion.sql @@ -0,0 +1,36 @@ +-- ===================================================================== +-- Rivage brisé — la mort de Tirion, mise en scène +-- +-- SIGNALÉ EN JEU : « p7 c'est Krosus qui plonge Tirion dans le fiel +-- normalement, et là pas de script de scénario ». +-- +-- Séquence officielle, relevée sur Warcraft Wiki : +-- Tirion « Stay back... it's a trap... the Light will protect me... » +-- Gul'dan « Ha, you fool! You stand before the temple of a GOD... » +-- Krosus surgit de la lave. +-- Gul'dan « Destroy him. » +-- Krosus souffle sur Tirion. +-- Tirion « The Light... will... ahh! Aahhhh!! » puis il sombre. +-- Thrall « Fordring! » +-- Gul'dan « All you have worked for... » puis « Destroy them! » +-- +-- Les huit répliques portent leur BroadcastTextId et leur Sound +-- d'origine : le client jouera la voix française et affichera son +-- propre texte. Le texte anglais porté ici n'est qu'un repère. +-- +-- Groupes 20 et au-delà, pour ne rien écraser. +-- ===================================================================== + +DELETE FROM `creature_text` WHERE `GroupID` BETWEEN 20 AND 29 + AND `CreatureID` IN (90367, 90413, 90711, 90713); + +INSERT INTO `creature_text` + (`CreatureID`,`GroupID`,`ID`,`Text`,`Type`,`Language`,`Probability`,`Emote`,`Duration`,`Sound`,`BroadcastTextId`,`TextRange`,`comment`) VALUES + (90367,20,0,'Stay back... it''s a trap... the Light will protect me...',14,0,100,0,0,53452,99237,0,'mort de Tirion 1'), + (90367,21,0,'The Light... will... ahh! Aahhhh!!',14,0,100,0,0,53455,99240,0,'mort de Tirion 5'), + (90413,20,0,'Ha, you fool! You stand before the temple of a GOD. Your pitiful Light cannot reach you here.',14,0,100,0,0,53453,99238,0,'mort de Tirion 2'), + (90413,21,0,'Destroy him.',14,0,100,0,0,53454,99239,0,'mort de Tirion 4'), + (90413,22,0,'All you have worked for, all you have sacrificed, just to see your champions fall to ash one by one.',14,0,100,0,0,53458,99243,0,'mort de Tirion 7'), + (90413,23,0,'Destroy them!',14,0,100,0,0,53462,99247,0,'mort de Tirion 8'), + (90711,20,0,'Fordring!',14,0,100,0,0,53456,99241,0,'mort de Tirion 6'), + (90713,20,0,'We will never give in to hopelessness!',14,0,100,0,0,53459,99244,0,'mort de Tirion, riposte'); diff --git a/src/server/scripts/BrokenIsles/Scenario/scenario_broken_shore_intro.cpp b/src/server/scripts/BrokenIsles/Scenario/scenario_broken_shore_intro.cpp index 09c224c..f37b910 100644 --- a/src/server/scripts/BrokenIsles/Scenario/scenario_broken_shore_intro.cpp +++ b/src/server/scripts/BrokenIsles/Scenario/scenario_broken_shore_intro.cpp @@ -562,8 +562,13 @@ struct scenario_broken_shore_intro : public InstanceScript // Des vagues continuent d'affluer tant que la cite tient : // sans cela la barre ne pourrait pas se remplir, la zone ne // comptant pas assez de defenseurs pour ses 300 points. + // + // SIGNALE EN JEU : « en phase 6 j'ai des invocations de + // demon sur ma tronche ». Elles naissaient au point de + // ralliement, c'est-a-dire au milieu du combat. Elles + // arrivent desormais de la peripherie et chargent. if ((cityKills % 6) == 0) - SummonWave(Anchors().city, 5); + SummonWaveLoin(); // FILET DE SECURITE, pas un mecanisme. Si la barre restait // bloquee pour une raison qui nous echappe, le joueur ne @@ -585,6 +590,34 @@ struct scenario_broken_shore_intro : public InstanceScript } } + // Renforts de la cite : ils surgissent en peripherie, a une + // cinquantaine de metres, sur un cercle dont l'orientation change a + // chaque vague -- puis ils chargent. Aucun demon ne se materialise + // dans le dos du joueur. + void SummonWaveLoin() + { + static uint32 const demons[5] = + { NPC_CHAOS_MINION, NPC_FELBLOOD_PACKHOUND, NPC_FELBLADE_DESTROYER, + NPC_EREDAR_SUMMONER, NPC_INFERNAL_DESTROYER }; + + FactionAnchors const& a = Anchors(); + float const depart = frand(0.0f, float(M_PI) * 2.0f); + + for (uint8 i = 0; i < 5; ++i) + { + float const angle = depart + float(i) * (float(M_PI) * 2.0f / 5.0f); + float const rayon = frand(45.0f, 60.0f); + + if (TempSummon* demon = SummonAt(demons[i], a.city, + std::cos(angle) * rayon, + std::sin(angle) * rayon)) + { + demon->SetReactState(REACT_AGGRESSIVE); + demon->SetInCombatWithZone(); + } + } + } + void StartFindLeader() { FactionAnchors const& a = Anchors(); @@ -687,22 +720,137 @@ struct scenario_broken_shore_intro : public InstanceScript DoSendEventScenario(EVENT_TIRION_REACHED); stage = STAGE_KROSUS; - tirion->DespawnOrUnsummon(20000); + SceneMortTirion(); + }); + } + // ================================================================= + // SylvaniaCore : la mort de Tirion, mise en scene. + // + // SIGNALE EN JEU : « p7 c'est Krosus qui plonge Tirion dans le fiel + // normalement, et la pas de script de scenario ». Le script se + // contentait d'invoquer Krosus douze secondes plus tard. + // + // Sequence officielle, relevee sur Warcraft Wiki : + // Tirion « Stay back... it's a trap... » + // Gul'dan « Ha, you fool! You stand before the temple of a GOD... » + // Krosus surgit de la lave. + // Gul'dan « Destroy him. » + // Krosus souffle sur Tirion, qui sombre sous la lave. + // Thrall « Fordring! » + // Gul'dan « All you have worked for... » puis « Destroy them! » + // + // Les huit repliques portent leur BroadcastTextId et leur Sound + // d'origine : le client joue la voix et affiche sa propre langue. + // + // Gul'dan est invoque des maintenant, au sommet du tombeau. Il y + // domine toute la fin du scenario -- c'est de la qu'il parle, et la + // finale le reutilise au lieu d'en invoquer un second. + // ================================================================= + void SceneMortTirion() + { + FactionAnchors const& a = Anchors(); + + if (Creature* guldan = Summon(NPC_GULDAN, a.tomb)) + { + guldanGUID = guldan->GetGUID(); + guldan->SetReactState(REACT_PASSIVE); + guldan->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC); + } + + auto dire = [this](ObjectGuid const& guid, uint8 groupe) + { + if (Creature* qui = instance->GetCreature(guid)) + qui->AI()->Talk(groupe); + }; + + // 0 s -- Tirion comprend le piege + dire(tirionGUID, 20); + + scheduler.Schedule(Seconds(5), [this, dire](TaskContext /*c*/) + { + dire(guldanGUID, 20); // « Ha, you fool!... » + }); + + scheduler.Schedule(Seconds(11), [this](TaskContext /*c*/) + { + // Krosus surgit de la lave, encore passif if (Creature* krosus = Summon(NPC_KROSUS, Anchors().crevasse)) + { + krosusGUID = krosus->GetGUID(); + krosus->SetReactState(REACT_PASSIVE); + krosus->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC); + } + }); + + scheduler.Schedule(Seconds(14), [this, dire](TaskContext /*c*/) + { + dire(guldanGUID, 21); // « Destroy him. » + }); + + scheduler.Schedule(Seconds(17), [this, dire](TaskContext /*c*/) + { + // Le souffle de Krosus emporte Tirion + Creature* krosus = instance->GetCreature(krosusGUID); + Creature* tirion = instance->GetCreature(tirionGUID); + if (krosus && tirion) + krosus->SetFacingToObject(tirion); + + dire(tirionGUID, 21); // « The Light... ahh! » + }); + + scheduler.Schedule(Seconds(20), [this](TaskContext /*c*/) + { + // Il sombre sous la lave + if (Creature* tirion = instance->GetCreature(tirionGUID)) + { + tirion->SetStandState(UNIT_STAND_STATE_DEAD); + tirion->DespawnOrUnsummon(4000); + } + }); + + scheduler.Schedule(Seconds(23), [this, dire](TaskContext /*c*/) + { + dire(leaderGUID, 20); // riposte du chef + DoOnPlayers([](Player* /*player*/) { }); + }); + + scheduler.Schedule(Seconds(27), [this, dire](TaskContext /*c*/) + { + dire(guldanGUID, 22); // « All you have worked for... » + }); + + scheduler.Schedule(Seconds(33), [this, dire](TaskContext /*c*/) + { + dire(guldanGUID, 23); // « Destroy them! » + + if (Creature* krosus = instance->GetCreature(krosusGUID)) + { + krosus->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC); + krosus->SetReactState(REACT_AGGRESSIVE); krosus->SetInCombatWithZone(); + } }); } void StartFinale() { FactionAnchors const& a = Anchors(); - if (Creature* guldan = Summon(NPC_GULDAN, a.tomb)) + + // Gul'dan est deja au sommet du tombeau depuis la mort de + // Tirion : on ne l'invoque une seconde fois que s'il a disparu. + Creature* guldan = instance->GetCreature(guldanGUID); + if (!guldan) { - guldanGUID = guldan->GetGUID(); - guldan->SetReactState(REACT_PASSIVE); - guldan->AI()->Talk(0); + guldan = Summon(NPC_GULDAN, a.tomb); + if (guldan) + { + guldanGUID = guldan->GetGUID(); + guldan->SetReactState(REACT_PASSIVE); + } } + if (guldan) + guldan->AI()->Talk(0); SummonWave(a.tomb, 4); scheduler.Schedule(Seconds(20), [this](TaskContext /*context*/) { @@ -761,6 +909,7 @@ private: ObjectGuid placedVarianGUID; ObjectGuid placedVoljinGUID; ObjectGuid tirionGUID; + ObjectGuid krosusGUID; ObjectGuid guldanGUID; TaskScheduler scheduler; }; From 5f5317dee30c4ee852b015c5aea84ebb6baf6b61 Mon Sep 17 00:00:00 2001 From: BlaMacfly Date: Sat, 5 Sep 2026 00:06:59 +0200 Subject: [PATCH 18/50] Rivage brise : employer les PNJ de la carte, couper les vagues, etendre les voix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SIGNALE EN JEU, trois points. « Tu ne les as pas implementes au Tirion et Krosus qu il y avait de base sur la map, tu en as ajoute. » Exact, et c est la meme faute que pour Varian avant-hier. Les protagonistes de la crevasse SONT poses sur la carte, mais sous d autres entrees que celles du script : 91951 Highlord Tirion Fordring (1495, 1751) 94276 Gul dan (1530, 1742) 90544 Krosus (1481, 1716) 90705 Dread Commander Arganoth ( 613, 2085) Le script invoquait des sosies aux entrees 90367 et 90413, qui ne figurent nulle part. OnCreatureCreate retient desormais les quatre, et la scene de la mort de Tirion emploie ceux de la base -- Krosus n est plus duplique, il est seulement rendu inerte le temps de la sequence. « Ces invocations de demon, il faut arreter ca, a chaque fois que je me bats ils reviennent en vague, c est affreux. » Supprimees. Elles etaient une addition de ma part pour permettre a la barre d atteindre ses 300 points -- un pansement pose sur une deduction incertaine, qui rendait le combat interminable. Si la barre plafonne, c est la correspondance des poids qu il faudra revoir, pas le nombre d ennemis. « Les voix qui marchent, Tirion Krosus et Gul dan, c est les seules. » Confirmation du mecanisme : seules ces repliques portaient un BroadcastTextId. Les autres sont nos textes inventes, avec un zero dans ce champ, donc muettes par construction. Sept repliques de mise en scene recoivent leur identifiant et leur son officiels -- le ralliement de Varian et de Vol jin, la mort de Varian, Jaina, Sylvanas, et les deux repliques finales de Gul dan. Co-Authored-By: Claude Opus 5 --- sql/sylvania/rivage_1460_voix_complet.sql | 98 +++++++++++++++++++ .../Scenario/scenario_broken_shore_intro.cpp | 60 ++++++++---- 2 files changed, 141 insertions(+), 17 deletions(-) create mode 100644 sql/sylvania/rivage_1460_voix_complet.sql diff --git a/sql/sylvania/rivage_1460_voix_complet.sql b/sql/sylvania/rivage_1460_voix_complet.sql new file mode 100644 index 0000000..bca0a07 --- /dev/null +++ b/sql/sylvania/rivage_1460_voix_complet.sql @@ -0,0 +1,98 @@ +/*M!999999\- enable the sandbox mode */ +-- MariaDB dump 10.19-11.4.7-MariaDB, for debian-linux-gnu (x86_64) +-- +-- Host: localhost Database: dc_world +-- ------------------------------------------------------ +-- Server version 11.4.7-MariaDB-0ubuntu0.25.04.1 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*M!100616 SET @OLD_NOTE_VERBOSITY=@@NOTE_VERBOSITY, NOTE_VERBOSITY=0 */; + +-- +-- Dumping data for table `creature_text` +-- +-- WHERE: CreatureID IN (90367,90413,90544,90705,90708,90709,90710,90711,90713,90714,90716,90717,91951,94276) + +LOCK TABLES `creature_text` WRITE; +/*!40000 ALTER TABLE `creature_text` DISABLE KEYS */; +INSERT INTO `creature_text` VALUES (90367,0,0,'Ne vous souciez pas de moi ! Le tombeau... Gul\'dan ouvre le tombeau ! Arrêtez-le !',14,0,100,5,0,0,0,0,'Tirion crevasse'); +INSERT INTO `creature_text` VALUES (90367,20,0,'Stay back... it\'s a trap... the Light will protect me...',14,0,100,0,0,53452,99237,0,'mort de Tirion 1'); +INSERT INTO `creature_text` VALUES (90367,21,0,'The Light... will... ahh! Aahhhh!!',14,0,100,0,0,53455,99240,0,'mort de Tirion 5'); +INSERT INTO `creature_text` VALUES (90413,0,0,'Vous arrivez trop tard ! Les ténèbres s\'éveillent sous ce tombeau !',14,0,100,25,0,0,0,0,'Guldan accueil'); +INSERT INTO `creature_text` VALUES (90413,1,0,'Sargeras... accueille leurs âmes !',14,0,100,25,0,0,0,0,'Guldan invocation'); +INSERT INTO `creature_text` VALUES (90413,2,0,'Cette victoire ne changera rien. L\'Étoile ardente approche !',14,0,100,25,0,0,0,0,'Guldan retraite'); +INSERT INTO `creature_text` VALUES (90413,20,0,'Ha, you fool! You stand before the temple of a GOD. Your pitiful Light cannot reach you here.',14,0,100,0,0,53453,99238,0,'mort de Tirion 2'); +INSERT INTO `creature_text` VALUES (90413,21,0,'Destroy him.',14,0,100,0,0,53454,99239,0,'mort de Tirion 4'); +INSERT INTO `creature_text` VALUES (90413,22,0,'All you have worked for, all you have sacrificed, just to see your champions fall to ash one by one.',14,0,100,0,0,53458,99243,0,'mort de Tirion 7'); +INSERT INTO `creature_text` VALUES (90413,23,0,'Destroy them!',14,0,100,0,0,53462,99247,0,'mort de Tirion 8'); +INSERT INTO `creature_text` VALUES (90544,10,0,'You will know fear.',14,0,100,0,0,53463,99248,0,'voix officielle -- son 53463'); +INSERT INTO `creature_text` VALUES (90705,0,0,'Vos armées ne sont que poussière. Je suis Arganoth, et cette plage sera votre tombeau !',14,0,100,15,0,0,0,0,'Arganoth spawn'); +INSERT INTO `creature_text` VALUES (90705,1,0,'La Légion... est... éternelle...',14,0,100,0,0,0,0,0,'Arganoth mort'); +INSERT INTO `creature_text` VALUES (90708,0,0,'Fils et filles de la Horde ! Montrez à la Légion c\'que vaut not\' sang ! LOK\'TAR OGAR !',14,0,100,5,0,53528,99315,0,'Voljin ralliement'); +INSERT INTO `creature_text` VALUES (90708,1,0,'Argh... la lame... empoisonnée... Sylvanas... sonne la retraite...',14,0,100,0,0,0,0,0,'Voljin blessé'); +INSERT INTO `creature_text` VALUES (90708,10,0,'Listen up! Dere\'s only one way offa dis beach, and it be t\'rough alla dose demons ahead of us. But dey don\'t know who dey be dealin\' wit. Let\'s show dem what it means ta be Horde!',14,0,100,0,0,53528,99315,0,'voix officielle -- son 53528'); +INSERT INTO `creature_text` VALUES (90708,11,0,'Die.',14,0,100,0,0,53536,99323,0,'voix officielle -- son 53536'); +INSERT INTO `creature_text` VALUES (90708,13,0,'',14,0,100,0,0,53590,143151,0,'voix officielle -- son 53590'); +INSERT INTO `creature_text` VALUES (90708,15,0,'Dis one\'s mine.',14,0,100,0,0,53537,99324,0,'voix officielle -- son 53537'); +INSERT INTO `creature_text` VALUES (90709,0,0,'La Horde ne mourra pas sur cette plage. Avancez, et que la Légion tombe !',14,0,100,25,0,53587,99374,0,'Sylvanas'); +INSERT INTO `creature_text` VALUES (90709,10,0,'',14,0,100,0,0,53590,99375,0,'voix officielle -- son 53590'); +INSERT INTO `creature_text` VALUES (90709,11,0,'',14,0,100,0,0,53587,99374,0,'voix officielle -- son 53587'); +INSERT INTO `creature_text` VALUES (90709,12,0,'',14,0,100,0,0,53465,99250,0,'voix officielle -- son 53465'); +INSERT INTO `creature_text` VALUES (90709,13,0,'',14,0,100,0,0,53585,99372,0,'voix officielle -- son 53585'); +INSERT INTO `creature_text` VALUES (90709,14,0,'',12,0,100,0,0,53610,99397,0,'voix officielle -- son 53610'); +INSERT INTO `creature_text` VALUES (90709,15,0,'',12,0,100,0,0,53612,99399,0,'voix officielle -- son 53612'); +INSERT INTO `creature_text` VALUES (90710,14,0,'By the Earthmother!',14,0,100,0,0,53591,109421,0,'voix officielle -- son 53591'); +INSERT INTO `creature_text` VALUES (90711,10,0,'The elements will destroy you!',14,0,100,0,0,53534,99321,0,'voix officielle -- son 53534'); +INSERT INTO `creature_text` VALUES (90711,11,0,'Back to the Nether!',14,0,100,0,0,53533,99320,0,'voix officielle -- son 53533'); +INSERT INTO `creature_text` VALUES (90711,12,0,'Spirits of earth, aid me!',12,0,100,0,0,53611,99398,0,'voix officielle -- son 53611'); +INSERT INTO `creature_text` VALUES (90711,20,0,'Fordring!',14,0,100,0,0,53456,99241,0,'mort de Tirion 6'); +INSERT INTO `creature_text` VALUES (90713,0,0,'Soldats de l\'Alliance ! La Légion s\'abat sur nos terres. Repoussez-la jusqu\'aux portes du tombeau de Sargeras !',14,0,100,5,0,53498,99285,0,'Varian ralliement'); +INSERT INTO `creature_text` VALUES (90713,1,0,'Partez, sauvez ce qui peut l\'être ! Dites à mon fils... que je suis mort en roi. Pour l\'Alliance !',14,0,100,5,0,53407,146212,0,'Varian sacrifice'); +INSERT INTO `creature_text` VALUES (90713,10,0,'Brace yourselves, Alliance, it\'s coming this way!',14,0,100,0,0,53464,99249,0,'voix officielle -- son 53464'); +INSERT INTO `creature_text` VALUES (90713,11,0,'',14,0,100,0,0,53407,146212,0,'voix officielle -- son 53407'); +INSERT INTO `creature_text` VALUES (90713,14,0,'We\'re pushing them back! Don\'t let up!',14,0,100,0,0,53405,99189,0,'voix officielle -- son 53405'); +INSERT INTO `creature_text` VALUES (90713,15,0,'There is nowhere to run, Gul\'dan. Give up now, and I will grant you a swift death.',14,0,100,0,0,53496,99283,0,'voix officielle -- son 53496'); +INSERT INTO `creature_text` VALUES (90713,16,0,'Hold steady, we\'ve broken their lines before, we will again. Charge!',14,0,100,0,0,53498,99285,0,'voix officielle -- son 53498'); +INSERT INTO `creature_text` VALUES (90713,17,0,'No matter how many demons you throw at us, we will cut you down, monster.',14,0,100,0,0,53513,99300,0,'voix officielle -- son 53513'); +INSERT INTO `creature_text` VALUES (90713,20,0,'We will never give in to hopelessness!',14,0,100,0,0,53459,99244,0,'mort de Tirion, riposte'); +INSERT INTO `creature_text` VALUES (90714,0,0,'Leurs portails déversent des renforts sans fin ! Détruisez les ancres dimensionnelles !',14,0,100,5,0,53345,94240,0,'Jaina portails'); +INSERT INTO `creature_text` VALUES (90714,10,0,'',14,0,100,0,0,53345,94240,0,'voix officielle -- son 53345'); +INSERT INTO `creature_text` VALUES (90714,11,0,'',14,0,100,0,0,53347,94242,0,'voix officielle -- son 53347'); +INSERT INTO `creature_text` VALUES (90714,12,0,'',14,0,100,0,0,53357,94594,0,'voix officielle -- son 53357'); +INSERT INTO `creature_text` VALUES (90714,13,0,'',12,0,100,0,0,53449,99234,0,'voix officielle -- son 53449'); +INSERT INTO `creature_text` VALUES (90714,14,0,'',14,0,100,0,0,53358,94595,0,'voix officielle -- son 53358'); +INSERT INTO `creature_text` VALUES (90716,10,0,'How are we going to get across?',12,0,100,1,0,53448,99233,0,'voix officielle -- son 53448'); +INSERT INTO `creature_text` VALUES (90716,11,0,'For Gnomeregan!',14,0,100,0,0,53409,99193,0,'voix officielle -- son 53409'); +INSERT INTO `creature_text` VALUES (90716,12,0,'',14,0,100,0,0,53408,127434,0,'voix officielle -- son 53408'); +INSERT INTO `creature_text` VALUES (90717,10,0,'Just in time. We haven\'t been able to break their line, now we may have a chance.',14,0,100,0,0,53346,94241,0,'voix officielle -- son 53346'); +INSERT INTO `creature_text` VALUES (90717,11,0,'There\'s only one way out of this, Alliance, and it\'s through that line of demons! Cannons, lay down covering fire! All forces, CHARGE!',14,0,100,0,0,53348,94585,0,'voix officielle -- son 53348'); +INSERT INTO `creature_text` VALUES (90717,12,0,'Go for the throat!',14,0,100,0,0,53354,94591,0,'voix officielle -- son 53354'); +INSERT INTO `creature_text` VALUES (90717,13,0,'This one\'s mine!',14,0,100,0,0,53355,117408,0,'voix officielle -- son 53355'); +INSERT INTO `creature_text` VALUES (90717,14,0,'Side by side, don\'t let them break through!',14,0,100,0,0,53353,94590,0,'voix officielle -- son 53353'); +INSERT INTO `creature_text` VALUES (91951,20,0,'Stay back... it\'s a trap... the Light will protect me...',14,0,100,0,0,53452,99237,0,'mort de Tirion 1'); +INSERT INTO `creature_text` VALUES (91951,21,0,'The Light... will... ahh! Aahhhh!!',14,0,100,0,0,53455,99240,0,'mort de Tirion 5'); +INSERT INTO `creature_text` VALUES (94276,0,0,'I have seen the end of your pitiful world, Wrynn. You will perish in felfire.',14,0,100,0,0,53506,99293,0,'finale Guldan 1'); +INSERT INTO `creature_text` VALUES (94276,2,0,'Destroy them!',14,0,100,0,0,53462,99247,0,'finale Guldan 2'); +INSERT INTO `creature_text` VALUES (94276,20,0,'Ha, you fool! You stand before the temple of a GOD. Your pitiful Light cannot reach you here.',14,0,100,0,0,53453,99238,0,'mort de Tirion 2'); +INSERT INTO `creature_text` VALUES (94276,21,0,'Destroy him.',14,0,100,0,0,53454,99239,0,'mort de Tirion 4'); +INSERT INTO `creature_text` VALUES (94276,22,0,'All you have worked for, all you have sacrificed, just to see your champions fall to ash one by one.',14,0,100,0,0,53458,99243,0,'mort de Tirion 7'); +INSERT INTO `creature_text` VALUES (94276,23,0,'Destroy them!',14,0,100,0,0,53462,99247,0,'mort de Tirion 8'); +/*!40000 ALTER TABLE `creature_text` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*M!100616 SET NOTE_VERBOSITY=@OLD_NOTE_VERBOSITY */; + +-- Dump completed on 2026-09-05 0:06:36 diff --git a/src/server/scripts/BrokenIsles/Scenario/scenario_broken_shore_intro.cpp b/src/server/scripts/BrokenIsles/Scenario/scenario_broken_shore_intro.cpp index f37b910..ef83cdb 100644 --- a/src/server/scripts/BrokenIsles/Scenario/scenario_broken_shore_intro.cpp +++ b/src/server/scripts/BrokenIsles/Scenario/scenario_broken_shore_intro.cpp @@ -167,6 +167,23 @@ enum BrokenShoreMisc GO_LEGION_CAGE_2 = 248819, DATA_CAGE_OPENED = 9002, + // ============================================================== + // SylvaniaCore : les protagonistes de la crevasse SONT POSES sur la + // carte, sous d'autres entrees que celles du script : + // 91951 Highlord Tirion Fordring (1495, 1751) + // 94276 Gul'dan (1530, 1742) + // 90544 Krosus (1481, 1716) + // 90705 Dread Commander Arganoth ( 613, 2085) + // + // SIGNALE EN JEU : « tu ne les as pas implementes au Tirion et + // Krosus qu'il y avait de base sur la map, tu en as ajoute ». + // Meme faute que pour Varian : le script invoquait des sosies aux + // entrees 90367 et 90413, qui ne figurent nulle part sur la carte. + // On emploie desormais ceux de la base, retenus a leur creation. + // ============================================================== + NPC_TIRION_POSE = 91951, + NPC_GULDAN_POSE = 94276, + EVENT_TIRION_REACHED = 50027, EVENT_KROSUS_SLAIN = 44669, EVENT_GULDAN_STOPPED = 44826, @@ -302,10 +319,16 @@ struct scenario_broken_shore_intro : public InstanceScript if (!creature || !creature->GetSpawnId()) return; - if (creature->GetEntry() == NPC_KING_VARIAN) - placedVarianGUID = creature->GetGUID(); - else if (creature->GetEntry() == NPC_VOLJIN) - placedVoljinGUID = creature->GetGUID(); + switch (creature->GetEntry()) + { + case NPC_KING_VARIAN: placedVarianGUID = creature->GetGUID(); break; + case NPC_VOLJIN: placedVoljinGUID = creature->GetGUID(); break; + case NPC_TIRION_POSE: tirionGUID = creature->GetGUID(); break; + case NPC_GULDAN_POSE: guldanGUID = creature->GetGUID(); break; + case NPC_KROSUS: krosusGUID = creature->GetGUID(); break; + case NPC_ARGANOTH: arganothGUID = creature->GetGUID(); break; + default: break; + } } // Le chef a rejoindre : celui de la carte s'il existe, sinon la @@ -567,8 +590,14 @@ struct scenario_broken_shore_intro : public InstanceScript // demon sur ma tronche ». Elles naissaient au point de // ralliement, c'est-a-dire au milieu du combat. Elles // arrivent desormais de la peripherie et chargent. - if ((cityKills % 6) == 0) - SummonWaveLoin(); + // VAGUES SUPPRIMEES. SIGNALE EN JEU : « ces invocations de + // demon, il faut arreter ca, a chaque fois que je me bats + // ils reviennent en vague, c'est affreux ». Elles etaient + // une addition de ma part pour permettre a la barre + // d'atteindre 300 points -- un pansement sur une deduction + // incertaine, qui rendait le combat interminable. Si la + // barre plafonne, c'est la correspondance des poids qu'il + // faudra revoir, pas le nombre d'ennemis. // FILET DE SECURITE, pas un mecanisme. Si la barre restait // bloquee pour une raison qui nous echappe, le joueur ne @@ -688,13 +717,9 @@ struct scenario_broken_shore_intro : public InstanceScript // le critere officiel 50027. Tirion reste en place : il agonise // dans la crevasse, il n'a aucune raison de s'evaporer. // ============================================================= - FactionAnchors const& a = Anchors(); - if (Creature* tirion = Summon(NPC_TIRION, a.crevasse)) - { - tirionGUID = tirion->GetGUID(); - tirion->AI()->Talk(0); + // Tirion est deja sur la carte, agonisant dans la crevasse. + if (Creature* tirion = instance->GetCreature(tirionGUID)) tirion->SetStandState(UNIT_STAND_STATE_KNEEL); - } scheduler.Schedule(Seconds(2), [this](TaskContext context) { @@ -751,9 +776,9 @@ struct scenario_broken_shore_intro : public InstanceScript { FactionAnchors const& a = Anchors(); - if (Creature* guldan = Summon(NPC_GULDAN, a.tomb)) + // Gul'dan surplombe deja la scene : rien a invoquer. + if (Creature* guldan = instance->GetCreature(guldanGUID)) { - guldanGUID = guldan->GetGUID(); guldan->SetReactState(REACT_PASSIVE); guldan->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC); } @@ -774,10 +799,10 @@ struct scenario_broken_shore_intro : public InstanceScript scheduler.Schedule(Seconds(11), [this](TaskContext /*c*/) { - // Krosus surgit de la lave, encore passif - if (Creature* krosus = Summon(NPC_KROSUS, Anchors().crevasse)) + // Krosus est deja dans la lave : on le rend seulement inerte + // le temps de la scene. + if (Creature* krosus = instance->GetCreature(krosusGUID)) { - krosusGUID = krosus->GetGUID(); krosus->SetReactState(REACT_PASSIVE); krosus->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC); } @@ -910,6 +935,7 @@ private: ObjectGuid placedVoljinGUID; ObjectGuid tirionGUID; ObjectGuid krosusGUID; + ObjectGuid arganothGUID; ObjectGuid guldanGUID; TaskScheduler scheduler; }; From 0032c28f216739a231f9bd9c830d02da6083c1e3 Mon Sep 17 00:00:00 2001 From: BlaMacfly Date: Sat, 5 Sep 2026 00:25:31 +0200 Subject: [PATCH 19/50] Rivage brise : plus aucune vague, Krosus attaquable, Tirion atteignable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Trois signalements en jeu, une cause commune pour deux d'entre eux. « Il y a toujours ces vagues de demons qui m'attaquent, RETIRE-LES. » Le script a ete ecrit quand la carte etait VIDE : il fabriquait ses propres ennemis a la plage, chez le commandant, dans la cite et au tombeau. Elle porte aujourd'hui 748 creatures posees, et toutes ces invocations faisaient double emploi. Supprimees aux quatre endroits. « La p9 vaincre Gul'dan se valide toute seule. » Meme origine : elle s'achevait apres huit morts de demons, or le script en invoquait lui-meme quatre au tombeau puis quatre autres vingt secondes plus tard. Il declenchait sa propre condition de fin. L'etape se conclut desormais au terme de la sequence de Gul'dan, une fois ses repliques prononcees. « Le Krosus du lac de lave en p8 est inattaquable. » Il portait la faction 2878 -- exactement le defaut resolu en aout pour les autres demons de cette carte, ou 2780 et 1768 les rendaient inattaquables et avaient toutes ete basculees en 16. La 2878 n'etait pas dans le lot, personne n'etant jamais alle aussi loin dans le scenario. L'entree 90544 n'existe QUE sur la carte 1460, un seul exemplaire. « Le scenario ne se declenche que si on saute dans la lave. » Tirion agonise au bord du bassin a z=40, Krosus etant a z=35 : avec un rayon de 25 metres, le seul point qui satisfaisait la condition etait la lave elle-meme. Porte a 50. Les poids de la barre de l'etape 6 montent d'un cran -- 5 pour les demons ordinaires, 10 pour les elites -- la progression ayant ete jugee trop lente en jeu. Avec 2 et 5, la cite plafonnait a 273 points sur 300, ce qui expliquait aussi les vagues que j'avais ajoutees pour compenser puis retirees. Co-Authored-By: Claude Opus 5 --- sql/sylvania/krosus_faction.sql | 18 ++++++ .../Scenario/scenario_broken_shore_intro.cpp | 56 +++++++++++++++---- 2 files changed, 62 insertions(+), 12 deletions(-) create mode 100644 sql/sylvania/krosus_faction.sql diff --git a/sql/sylvania/krosus_faction.sql b/sql/sylvania/krosus_faction.sql new file mode 100644 index 0000000..25f390f --- /dev/null +++ b/sql/sylvania/krosus_faction.sql @@ -0,0 +1,18 @@ +-- ===================================================================== +-- Rivage brisé — Krosus était inattaquable +-- +-- SIGNALÉ EN JEU : « le Krosus du lac de lave en p8 est inattaquable ». +-- +-- Il portait la faction 2878. C'est exactement le défaut résolu en août +-- pour les autres démons de cette carte : les factions 2780 et 1768 les +-- rendaient inattaquables — le refus vient du client, aucune sonde +-- serveur ne peut l'observer — et on les avait toutes basculées en 16, +-- la seule dont le fonctionnement soit démontré ici. La 2878 n'était +-- pas dans le lot, personne n'étant jamais allé aussi loin dans le +-- scénario. +-- +-- PORTÉE VÉRIFIÉE : l'entrée 90544 n'existe QUE sur la carte 1460, un +-- seul exemplaire. Aucun autre contenu n'est touché. +-- ===================================================================== + +UPDATE `creature_template` SET `faction` = 16 WHERE `entry` = 90544; diff --git a/src/server/scripts/BrokenIsles/Scenario/scenario_broken_shore_intro.cpp b/src/server/scripts/BrokenIsles/Scenario/scenario_broken_shore_intro.cpp index ef83cdb..05d6990 100644 --- a/src/server/scripts/BrokenIsles/Scenario/scenario_broken_shore_intro.cpp +++ b/src/server/scripts/BrokenIsles/Scenario/scenario_broken_shore_intro.cpp @@ -149,8 +149,14 @@ enum BrokenShoreMisc // proportion de la difficulte. Les poids 1 et 10 restent // inemployes faute de savoir ce qu'ils designent. // ============================================================== - EVENT_CITY_TRASH = 53062, // poids 2 - EVENT_CITY_ELITE = 53063, // poids 5 + // AJUSTE SUR OBSERVATION EN JEU : « la progression de p6 est trop + // lente ». Avec les poids 2 et 5, les 94 demons ordinaires et 17 + // elites de la cite plafonnaient a 273 points sur 300 -- d'ou la + // lenteur, et d'ou les vagues de renfort que j'avais ajoutees pour + // compenser, puis retirees. On monte d'un cran : une soixantaine + // d'ennemis suffit desormais, sans renfort artificiel. + EVENT_CITY_TRASH = 53063, // poids 5 + EVENT_CITY_ELITE = 53064, // poids 10 // Etapes 7 a 9, criteres releves dans les memes DB2 : // etape 7 arbre 42772 critere 29715 asset 50027 x1 @@ -428,10 +434,16 @@ struct scenario_broken_shore_intro : public InstanceScript // etape 0 « The Broken Shore » : courte mise en scene puis assaut scheduler.Schedule(Seconds(12), [this](TaskContext /*context*/) { + // PLUS AUCUNE VAGUE. Le script a ete ecrit quand la carte + // etait VIDE : il fabriquait ses propres ennemis partout. + // Elle porte desormais 748 creatures posees, et ces + // invocations faisaient double emploi. + // + // SIGNALE EN JEU : « il y a toujours ces vagues de demons + // qui m'attaquent, RETIRE-LES ». Elles rendaient le combat + // interminable et repoussaient sans fin. stage = STAGE_STORM_BEACH; CompleteStep(); - SummonWave(Anchors().beach, 6); - SummonWave(Anchors().commander, 6); }); } @@ -482,9 +494,8 @@ struct scenario_broken_shore_intro : public InstanceScript if (++anchorsDown >= ANCHORS_PORTAL) { + // La cite est deja peuplee : rien a invoquer. stage = STAGE_RAZE_CITY; - SummonWave(Anchors().city, 5); - SummonWave(Anchors().city, 5); } break; case NPC_KROSUS: @@ -611,8 +622,9 @@ struct scenario_broken_shore_intro : public InstanceScript break; } case STAGE_STOP_GULDAN: - if (++finaleKills >= KILLS_FINALE) - FinishScenario(); + // On compte encore, pour memoire, mais la fin est + // desormais reglee par la sequence de Gul'dan. + ++finaleKills; break; default: break; @@ -733,7 +745,12 @@ struct scenario_broken_shore_intro : public InstanceScript bool atteint = false; DoOnPlayers([&atteint, tirion](Player* player) { - if (player->IsWithinDist(tirion, 25.0f, false)) + // SIGNALE EN JEU : « le scenario ne se declenche que si + // on saute dans la lave, le perimetre de detection est + // trop serre ». Tirion agonise au bord du bassin, a + // z=40, Krosus etant a z=35 : a 25 metres, le seul point + // qui satisfaisait la condition etait la lave elle-meme. + if (player->IsWithinDist(tirion, 50.0f, false)) atteint = true; }); @@ -876,14 +893,29 @@ struct scenario_broken_shore_intro : public InstanceScript } if (guldan) guldan->AI()->Talk(0); - SummonWave(a.tomb, 4); + + // ============================================================= + // SIGNALE EN JEU : « la p9 vaincre Gul'dan se valide toute + // seule ». Elle s'achevait apres huit morts de demons -- or le + // script en invoquait lui-meme quatre au tombeau, puis quatre + // autres vingt secondes plus tard. Il declenchait donc sa + // propre condition de fin sans que le joueur y soit pour rien. + // + // L'etape se conclut desormais au terme de la sequence de + // Gul'dan, une fois ses trois repliques prononcees. Le compte + // de morts ne la declenche plus. + // ============================================================= scheduler.Schedule(Seconds(20), [this](TaskContext /*context*/) { - if (stage == STAGE_STOP_GULDAN && finaleKills < KILLS_FINALE) - SummonWave(Anchors().tomb, 4); if (Creature* guldan = instance->GetCreature(guldanGUID)) guldan->AI()->Talk(1); }); + + scheduler.Schedule(Seconds(38), [this](TaskContext /*context*/) + { + if (stage == STAGE_STOP_GULDAN) + FinishScenario(); + }); } void FinishScenario() From 346bd9c2005f724e94e028ae4e4bd9a25f81db6c Mon Sep 17 00:00:00 2001 From: BlaMacfly Date: Sat, 5 Sep 2026 00:44:26 +0200 Subject: [PATCH 20/50] Rivage brise : Tirion introuvable, allies desarmes, intro inaudible MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SIGNALE EN JEU : « p7 Tirion reste muet, le script ne se lance plus, mais Krosus est bien combattable ». Un seul defaut, deux symptomes. La verification de proximite sortait SANS SE REPLANIFIER quand Tirion n'etait pas encore charge -- sa zone se trouve a l'autre bout de la carte, et la grille ne se peuple qu'a l'approche du joueur. Au premier passage, deux secondes apres la fin de l'etape 6, il n'existait pas : la tache mourait la, definitivement. D'ou Tirion muet, et d'ou Krosus combattable, puisque c'est cette meme scene qui devait le figer. Le meme Repeat existait deja dans la detection de Varian ; je ne l'avais pas reporte ici. « Varian a un dialogue audio au lancement de la campagne, il ne se declenche pas. » StartIntro etait appele DANS OnPlayerEnter, pendant l'ajout du joueur a la carte : le cri partait quand le client chargeait encore la zone. Decale de quatre secondes. Corrige au passage le demarrage direct en phase 2, meme cause -- les douze secondes de la premiere phase s'ecoulaient avant l'arrivee effective. « Tous les PNJ allies doivent porter leurs armes. » L'etat de fourreau ne suffisait pas : il n'y avait rien a degainer. Sur les 51 entrees alliees de la carte, seules QUATRE avaient un equipement defini. Trente equipements recuperes du creature_equip_template de la reference : 131 spawns sont desormais armes, contre 11. Les 263 allies passent aussi en arme degainee, sans emote d'etat -- l'emote 27 demandee est celle du combat A MAINS NUES et aurait range leurs armes. Sans emote forcee, le client joue l'attitude propre a l'arme reellement portee, hache a deux mains comme epee courte. Co-Authored-By: Claude Opus 5 --- sql/sylvania/rivage_armes.sql | 53 +++++++++++++++++++ sql/sylvania/rivage_posture.sql | 30 +++++++++++ .../Scenario/scenario_broken_shore_intro.cpp | 25 ++++++++- 3 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 sql/sylvania/rivage_armes.sql create mode 100644 sql/sylvania/rivage_posture.sql diff --git a/sql/sylvania/rivage_armes.sql b/sql/sylvania/rivage_armes.sql new file mode 100644 index 0000000..6f2eddb --- /dev/null +++ b/sql/sylvania/rivage_armes.sql @@ -0,0 +1,53 @@ +-- ===================================================================== +-- Rivage brisé — armer les alliés +-- +-- SIGNALÉ EN JEU : « les PNJ ne portent encore aucune arme ». +-- +-- L'état de fourreau ne suffisait pas : il n'y avait rien à +-- dégainer. Sur les 51 entrées alliées de la carte, seules QUATRE +-- avaient un équipement défini — les 47 autres n'ont jamais eu +-- d'arme, ni en base ni sur leur modèle. +-- +-- Source : creature_equip_template du dump de référence +-- dufernst/LegionCore-7.3.5, qui les renseigne. 30 équipements +-- pour autant d'entrées. +-- +-- Les spawns de la carte qui n'en portaient aucun se voient +-- attribuer le jeu numéro 1 de leur entrée, quand il existe. +-- ===================================================================== + +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (90708,1,140776,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (90709,1,2179,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (90710,1,58367,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (90711,1,140777,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (90712,1,140546,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (90713,1,45899,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (90714,1,139131,0,12869) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (90716,1,53096,0,11587) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (90717,1,139132,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (91353,1,45726,0,45727) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (91949,1,0,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (91951,1,13262,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (92074,1,73008,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (92122,1,0,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (92586,1,0,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (93704,1,13631,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (94209,1,1899,0,117413) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (94223,1,40595,0,40596) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (97496,1,45726,0,45727) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (97502,1,40595,0,40596) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (97503,1,1899,0,117413) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (97521,1,140546,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (97525,1,12754,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (97526,1,5286,0,5286) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (97527,1,2176,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (97528,1,2176,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (110941,1,40595,0,40596) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (112879,1,73008,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (112920,1,0,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); +INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES (112921,1,0,0,0) ON DUPLICATE KEY UPDATE `ItemID1`=VALUES(`ItemID1`), `ItemID2`=VALUES(`ItemID2`), `ItemID3`=VALUES(`ItemID3`); + +UPDATE `creature` c + JOIN `creature_equip_template` e ON e.`CreatureID` = c.`id` AND e.`ID` = 1 + SET c.`equipment_id` = 1 + WHERE c.`map` = 1460 AND c.`equipment_id` = 0; diff --git a/sql/sylvania/rivage_posture.sql b/sql/sylvania/rivage_posture.sql new file mode 100644 index 0000000..c2036b1 --- /dev/null +++ b/sql/sylvania/rivage_posture.sql @@ -0,0 +1,30 @@ +-- ===================================================================== +-- Rivage brisé — les alliés en position de combat +-- +-- DEMANDÉ EN JEU : « tous les PNJ alliés doivent être en +-- .npc playemote 27 ». +-- +-- L'emote 27 est EMOTE_STATE_READY_UNARMED, une posture d'état — donc +-- permanente, contrairement aux emotes ponctuelles. Des soldats plantés +-- au repos au milieu d'une bataille, c'était l'essentiel du « ça n'a +-- pas d'âme » signalé plus tôt. +-- +-- Elle se pose dans `creature_addon`, table qui ne contenait AUCUNE +-- ligne pour cette carte — d'où l'absence totale de posture, d'aura et +-- d'emote sur les 748 créatures. +-- +-- PORTÉE : les 263 créatures alliées de la carte 1460, reconnues à leur +-- faction — 2879 Alliance, 2876 Horde, 35 amical à tous, 1819. Les +-- démons en faction 16 sont écartés : ils ont leur propre animation de +-- combat, et une posture d'état la figerait. +-- ===================================================================== + +INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, + `emote`, `aiAnimKit`, `movementAnimKit`, + `meleeAnimKit`, `visibilityDistanceType`, `auras`) +SELECT c.`guid`, 0, 0, 0, 1, 0, 0, 0, 0, 0, '' + FROM `creature` c + JOIN `creature_template` ct ON ct.`entry` = c.`id` + WHERE c.`map` = 1460 + AND ct.`faction` IN (2879, 2876, 35, 1819) +ON DUPLICATE KEY UPDATE `emote` = 0; diff --git a/src/server/scripts/BrokenIsles/Scenario/scenario_broken_shore_intro.cpp b/src/server/scripts/BrokenIsles/Scenario/scenario_broken_shore_intro.cpp index 05d6990..5c74620 100644 --- a/src/server/scripts/BrokenIsles/Scenario/scenario_broken_shore_intro.cpp +++ b/src/server/scripts/BrokenIsles/Scenario/scenario_broken_shore_intro.cpp @@ -292,7 +292,21 @@ struct scenario_broken_shore_intro : public InstanceScript { introDone = true; team = player->GetTeamId(); - StartIntro(); + + // ===================================================== + // SIGNALE EN JEU : « Varian a un dialogue audio au + // lancement de la campagne, il ne se declenche pas ». + // + // StartIntro etait appele DANS OnPlayerEnter, c'est-a-dire + // pendant l'ajout du joueur a la carte. Le cri partait + // alors que le client chargeait encore la zone : il ne le + // recevait jamais. On laisse quatre secondes au client pour + // se poser avant d'ouvrir la scene. + // ===================================================== + scheduler.Schedule(Seconds(4), [this](TaskContext /*c*/) + { + StartIntro(); + }); } } @@ -738,9 +752,18 @@ struct scenario_broken_shore_intro : public InstanceScript if (stage != STAGE_HIGHLORD) return; + // SIGNALE EN JEU : « p7 Tirion reste muet, le script ne se + // lance plus ». La tache sortait SANS SE REPLANIFIER quand + // Tirion n'etait pas encore charge -- sa zone se trouve a + // l'autre bout de la carte, la grille n'est peuplee qu'a + // l'approche du joueur. Elle mourait donc au premier + // passage, et la scene n'avait plus aucune chance de partir. Creature* tirion = instance->GetCreature(tirionGUID); if (!tirion) + { + context.Repeat(Seconds(2)); return; + } bool atteint = false; DoOnPlayers([&atteint, tirion](Player* player) From bd22c626311893e1fd84d2b37fd20dcf5ff1887b Mon Sep 17 00:00:00 2001 From: BlaMacfly Date: Sat, 5 Sep 2026 09:42:29 +0200 Subject: [PATCH 21/50] Rivage brise : embarquement sur le navire, escorte de mercenaires, factions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit L'exploitant a fourni une seconde video, en 1080p et sans ecran partage, qui montre le vrai depart cote Alliance. Elle a permis quatre corrections. L'EMBARQUEMENT. Le script d'Angelica deposait le joueur en (443.8, 2076.1, 1.2), le point d'ancrage de la plage -- une coordonnee inventee. Le sort officiel 199358 porte (441.2, 2023.75, 4.44) dans spell_target_position, marque VerifiedBuild 27843 : le pont de l'Alliance Battleship. On y teleporte desormais. La premiere etape s'intitule « Rendez-vous au rivage Brise » et ne s'acheve qu'une fois le joueur debarque, au lieu d'une minuterie de douze secondes qui s'ecoulait pendant le chargement du client. Sa condition exigeait par ailleurs que la quete 42740 soit EN COURS : deja rendue ou pas encore prise, l'option restait muette. Elle accepte maintenant les trois etats et explique le refus au lieu de ne rien faire. LES FACTIONS, et la resolution du paradoxe d'aout. On avait bascule les demons de cette carte en faction 16 parce que la 2780 les rendait inattaquables, sans comprendre pourquoi. Le prix etait invisible : la faction 16 porte EnemyGroup = 1, elle n'est hostile QU'AUX JOUEURS. Nos allies, eux, ont EnemyGroup = 0 et une liste d'ennemis qui designe la faction 1786. Les deux camps ne se reconnaissaient pas -- d'ou les soldats qui s'engagent puis n'ont personne a frapper, releve par la sonde d'evasion : onze fois pour la garde royale gilneenne, dix pour Jaina, dix pour Varian. On avait repare le joueur en supprimant la bataille. Les 102 entrees exclusives a la carte passent en 2898, qui porte la meme faction 1786 mais avec EnemyGroup = 15, hostile a tous. Verifie en jeu : attaquable. L'ESCORTE. Le scenario officiel se joue en groupe constitue par la file d'attente, que nous n'avons pas. A l'entree, une escorte est desormais offerte : un protecteur, un guerisseur et deux combattants, via le module des mercenaires. Un mode gratuit y est ajoute -- le contrat reste identique, rupture au premier depart du groupe, mais sans prelevement. Les invocations sont espacees d'une seconde et demie, faute de quoi elles se superposaient au meme point. LES DOUBLONS DE DISTRIBUTION. Quatrieme et cinquieme occurrences du meme defaut : le script invoquait Genn, Jaina, Mekkatorque, l'escorte et Arganoth alors que la carte les porte tous. Toutes les invocations de l'introduction sont supprimees ; c'est Genn qui ouvre la scene cote Alliance, Varian n'etant pas encore la -- ce qui est tout l'objet de l'etape « Trouver Varian ». Corrige aussi : Gul'dan Talk(1) n'existait pas, le script l'appelait dans la finale et rien ne se jouait. 263 allies passent en arme degainee, 131 recoivent un equipement recupere de la reference et la posture EMOTE_STATE_READY1H. Co-Authored-By: Claude Opus 5 --- sql/sylvania/rivage_faction_2898.sql | 39 +++ sql/sylvania/rivage_posture.sql | 297 ++++++++++++++++-- src/server/game/Mercenary/MercenaryMgr.cpp | 9 +- src/server/game/Mercenary/MercenaryMgr.h | 7 +- src/server/game/Server/WorldSession.cpp | 25 +- .../Scenario/scenario_broken_shore_intro.cpp | 149 +++++++-- .../zone_eastern_kingdoms_stormwind_city.cpp | 53 +++- 7 files changed, 519 insertions(+), 60 deletions(-) create mode 100644 sql/sylvania/rivage_faction_2898.sql diff --git a/sql/sylvania/rivage_faction_2898.sql b/sql/sylvania/rivage_faction_2898.sql new file mode 100644 index 0000000..055ff30 --- /dev/null +++ b/sql/sylvania/rivage_faction_2898.sql @@ -0,0 +1,39 @@ +-- ===================================================================== +-- Rivage brisé — les démons passent en faction 2898 +-- +-- ÉTABLI PAR TEST EN JEU, et il résout le paradoxe d'août. +-- +-- En août on avait basculé tous les démons de cette carte en faction 16 +-- parce que la 2780 les rendait inattaquables — sans comprendre +-- pourquoi, la théorie disant l'inverse. La 16 fonctionnait, on l'a +-- prise. +-- +-- Ce qu'on ignorait, c'est le prix : la faction 16 porte +-- `EnemyGroup = 1`, elle n'est hostile QU'AUX JOUEURS. Nos alliés, eux, +-- ont `EnemyGroup = 0` et une liste d'ennemis qui désigne la faction +-- 1786. Alliés et démons ne se reconnaissaient donc pas — d'où les +-- soldats qui entrent en combat puis n'ont personne à frapper, relevé +-- par la sonde : « liste de menace vide », onze fois pour la garde +-- royale gilnéenne, dix fois pour Jaina, dix fois pour Varian. +-- +-- On avait réparé le joueur en supprimant la bataille. +-- +-- La 2898 porte la faction 1786 comme la 2780, mais avec +-- `EnemyGroup = 15` — hostile à tous les groupes, joueurs compris. +-- Vérifié en jeu sur le Molosse de l'effroi gangrené : attaquable. +-- +-- PORTÉE : uniquement les entrées exclusives à la carte 1460, comme en +-- août. Celles partagées avec d'autres cartes sont écartées. +-- +-- Retour arrière : rebasculer les mêmes entrées en 16. +-- ===================================================================== + +UPDATE `creature_template` ct + JOIN (SELECT DISTINCT c.`id` + FROM `creature` c + JOIN `creature_template` t ON t.`entry` = c.`id` + WHERE c.`map` = 1460 + AND t.`faction` = 16 + AND c.`id` NOT IN (SELECT DISTINCT `id` FROM `creature` WHERE `map` <> 1460)) AS cible + ON cible.`id` = ct.`entry` + SET ct.`faction` = 2898; diff --git a/sql/sylvania/rivage_posture.sql b/sql/sylvania/rivage_posture.sql index c2036b1..3005b8b 100644 --- a/sql/sylvania/rivage_posture.sql +++ b/sql/sylvania/rivage_posture.sql @@ -1,30 +1,279 @@ -- ===================================================================== --- Rivage brisé — les alliés en position de combat +-- Rivage brisé — posture et armement des alliés -- --- DEMANDÉ EN JEU : « tous les PNJ alliés doivent être en --- .npc playemote 27 ». +-- SIGNALÉ EN JEU : « les PNJ ont bien leurs armes mais pas de posture +-- de combat actif ». -- --- L'emote 27 est EMOTE_STATE_READY_UNARMED, une posture d'état — donc --- permanente, contrairement aux emotes ponctuelles. Des soldats plantés --- au repos au milieu d'une bataille, c'était l'essentiel du « ça n'a --- pas d'âme » signalé plus tôt. +-- 131 alliés armés passent en EMOTE_STATE_READY1H (333), arme au +-- clair. Les 132 sans équipement gardent une posture neutre : leur +-- donner une attitude armée les ferait mimer une arme absente. -- --- Elle se pose dans `creature_addon`, table qui ne contenait AUCUNE --- ligne pour cette carte — d'où l'absence totale de posture, d'aura et --- d'emote sur les 748 créatures. --- --- PORTÉE : les 263 créatures alliées de la carte 1460, reconnues à leur --- faction — 2879 Alliance, 2876 Horde, 35 amical à tous, 1819. Les --- démons en faction 16 sont écartés : ils ont leur propre animation de --- combat, et une posture d'état la figerait. +-- La table creature_addon ne contenait AUCUNE ligne pour cette carte +-- avant aujourd hui, d où l absence totale de posture. -- ===================================================================== -INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, - `emote`, `aiAnimKit`, `movementAnimKit`, - `meleeAnimKit`, `visibilityDistanceType`, `auras`) -SELECT c.`guid`, 0, 0, 0, 1, 0, 0, 0, 0, 0, '' - FROM `creature` c - JOIN `creature_template` ct ON ct.`entry` = c.`id` - WHERE c.`map` = 1460 - AND ct.`faction` IN (2879, 2876, 35, 1819) -ON DUPLICATE KEY UPDATE `emote` = 0; +DELETE a FROM `creature_addon` a JOIN `creature` c ON c.`guid` = a.`guid` WHERE c.`map` = 1460; + +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200017,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200022,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200023,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200026,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200027,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200032,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200035,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200037,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200038,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200041,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200042,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200043,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200044,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200045,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200046,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200047,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200048,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200049,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200050,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200051,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200052,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200053,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200054,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200055,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200058,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200059,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200060,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200061,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200062,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200063,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200064,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200065,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200067,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200069,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200071,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200072,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200073,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200075,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200077,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200078,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200083,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200085,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200086,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200087,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200088,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200090,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200091,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200094,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200095,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200109,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200115,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200117,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200119,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200120,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200121,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200122,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200123,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200124,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200125,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200126,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200127,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200128,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200129,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200130,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200131,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200132,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200133,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200134,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200135,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200136,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200137,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200138,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200139,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200145,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200156,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200164,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200167,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200168,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200169,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200186,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200223,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200224,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200225,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200226,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200227,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200228,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200229,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200230,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200231,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200232,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200233,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200234,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200235,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200236,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200237,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200238,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200239,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200240,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200241,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200242,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200243,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200244,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200245,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200246,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200247,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200248,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200249,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200295,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200322,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200323,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200324,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200325,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200326,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200327,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200328,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200330,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200331,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200332,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200333,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200334,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200335,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200336,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200337,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200338,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200339,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200340,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200341,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200342,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200343,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200344,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200345,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200346,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200347,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200348,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200349,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200350,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200351,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200352,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200353,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200354,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200355,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200356,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200357,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200359,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200363,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200364,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200365,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200366,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200367,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200368,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200369,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200370,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200371,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200372,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200373,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200374,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200375,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200376,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200377,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200378,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200379,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200380,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200381,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200382,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200383,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200402,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200403,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200404,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200405,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200406,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200407,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200408,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200409,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200410,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200411,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200412,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200413,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200414,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200415,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200416,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200417,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200418,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200420,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200421,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200422,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200423,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200424,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200425,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200426,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200427,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200428,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200429,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200430,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200433,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200434,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200435,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200436,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200443,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200444,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200526,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200527,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200528,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200573,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200599,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200632,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200642,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200644,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200645,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200646,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200647,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200648,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200649,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200650,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200651,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200652,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200653,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200654,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200655,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200656,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200657,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200658,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200664,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200665,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200666,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200667,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200668,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200669,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200670,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200671,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200672,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200673,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200674,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200675,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200677,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200678,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200679,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200680,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200681,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200682,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200683,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200685,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200690,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200714,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200716,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200717,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200718,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200720,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200722,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200725,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200731,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200733,0,0,0,1,0,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200734,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200742,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200743,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200744,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200745,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200746,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200747,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200748,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200749,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200750,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200751,0,0,0,1,333,0,0,0,0,""); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`aiAnimKit`,`movementAnimKit`,`meleeAnimKit`,`visibilityDistanceType`,`auras`) VALUES (290200752,0,0,0,1,333,0,0,0,0,""); diff --git a/src/server/game/Mercenary/MercenaryMgr.cpp b/src/server/game/Mercenary/MercenaryMgr.cpp index 33df800..c0be794 100644 --- a/src/server/game/Mercenary/MercenaryMgr.cpp +++ b/src/server/game/Mercenary/MercenaryMgr.cpp @@ -361,7 +361,7 @@ bool MercenaryMgr::FindCandidate(Player* owner, uint8 role, uint32& accountId, u return false; } -MercenaryResult MercenaryMgr::Summon(Player* owner, uint8 role, Creature* portal) +MercenaryResult MercenaryMgr::Summon(Player* owner, uint8 role, Creature* portal, bool freeOfCharge) { if (!m_enabled) return MERC_ERR_DISABLED; @@ -396,7 +396,7 @@ MercenaryResult MercenaryMgr::Summon(Player* owner, uint8 role, Creature* portal return MERC_ERR_GROUP_FULL; } - if (!owner->HasEnoughMoney(uint64(m_cost))) + if (!freeOfCharge && !owner->HasEnoughMoney(uint64(m_cost))) return MERC_ERR_NO_MONEY; uint32 accountId = 0; @@ -410,8 +410,9 @@ MercenaryResult MercenaryMgr::Summon(Player* owner, uint8 role, Creature* portal if (!session) return MERC_ERR_NO_BOT; - // Le mercenaire existe : on encaisse. - owner->ModifyMoney(-int64(m_cost)); + // Le mercenaire existe : on encaisse, sauf recrutement offert. + if (!freeOfCharge) + owner->ModifyMoney(-int64(m_cost)); uint32 const level = PlayerBotSetting::CheckMaxLevel(owner->getLevel()); diff --git a/src/server/game/Mercenary/MercenaryMgr.h b/src/server/game/Mercenary/MercenaryMgr.h index 6de7600..e33b3a2 100644 --- a/src/server/game/Mercenary/MercenaryMgr.h +++ b/src/server/game/Mercenary/MercenaryMgr.h @@ -110,7 +110,12 @@ class TC_GAME_API MercenaryMgr // Verifie, encaisse et lance l invocation. Le prelevement n a lieu que // si un mercenaire du role demande a effectivement ete reserve. // "portal" est la structure invoquante : le mercenaire en sortira. - MercenaryResult Summon(Player* owner, uint8 role, Creature* portal = nullptr); + // « freeOfCharge » saute la verification et le prelevement : il sert + // aux recrutements que le jeu offre, comme l escorte fournie a + // l entree d un scenario. Le contrat reste identique par ailleurs, + // rupture au premier depart du groupe comprise. + MercenaryResult Summon(Player* owner, uint8 role, Creature* portal = nullptr, + bool freeOfCharge = false); void Update(uint32 diff); diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index f64fabc..3edc131 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -180,7 +180,30 @@ WorldSession::~WorldSession() while (_recvQueue.next(packet)) delete packet; - LoginDatabase.PExecute("UPDATE account SET online = 0 WHERE id = %u;", GetAccountId()); // One-time query + // ================================================================= + // SylvaniaCore : ne plus ecrire en base une fois l'arret engage. + // + // Chaque arret du serveur produisait un vidage memoire de 120 Mo : + // #4 World::~World() + // #3 PlayerBotSession::~PlayerBotSession() + // #2 WorldSession::~WorldSession() + // #1 DatabaseWorkerPool::Execute() + // #5 __run_exit_handlers + // Le monde est detruit par les gestionnaires de sortie, donc APRES + // le demontage du reservoir de connexions : la requete ci-dessous + // ecrivait dans un objet deja liberé. + // + // Ces faux plantages noient les vrais -- on a passe du temps cette + // semaine a trier des vidages qui n'etaient que des arrets propres. + // + // Sauter la requete est sans consequence : Main.cpp remet DEJA tous + // les comptes et personnages du royaume hors ligne au demarrage. + // + // IsStopped() est statique et lit un booleen statique : il reste + // consultable pendant la destruction, contrairement a sWorld. + // ================================================================= + if (!World::IsStopped()) + LoginDatabase.PExecute("UPDATE account SET online = 0 WHERE id = %u;", GetAccountId()); } bool WorldSession::PlayerDisconnected() const diff --git a/src/server/scripts/BrokenIsles/Scenario/scenario_broken_shore_intro.cpp b/src/server/scripts/BrokenIsles/Scenario/scenario_broken_shore_intro.cpp index 5c74620..68a245a 100644 --- a/src/server/scripts/BrokenIsles/Scenario/scenario_broken_shore_intro.cpp +++ b/src/server/scripts/BrokenIsles/Scenario/scenario_broken_shore_intro.cpp @@ -17,6 +17,9 @@ #include "GameObject.h" #include "ObjectMgr.h" #include "TaskScheduler.h" +#include "MercenaryMgr.h" +#include "Chat.h" +#include "Group.h" enum BrokenShoreData { @@ -288,6 +291,54 @@ struct scenario_broken_shore_intro : public InstanceScript // objectif « embarquement » (Alliance) : credite aussi ici au cas ou player->KilledMonsterCredit(NPC_CREDIT_SHIP); + // ============================================================= + // ESCORTE_MERCENAIRE + // + // DEMANDE : « cree le systeme de groupe avec playerbot pour le + // scenario, avec un groupe complet heal tank dps », en reprenant + // le principe des mercenaires mais declenche a l entree. + // + // Le scenario officiel se joue en groupe, constitue par la file + // d attente. Faute de ce systeme, on offre une escorte : un + // protecteur, un guerisseur et deux combattants, gratuitement. + // + // Le contrat reste celui des mercenaires -- rupture au premier + // depart du groupe -- mais sans prelevement : le jeu la fournit, + // le joueur ne l a pas louee. + // + // On ne complete que ce qui manque : un joueur deja accompagne + // garde ses compagnons. + // ============================================================= + if (sMercenaryMgr->IsEnabled()) + { + uint32 place = MERCENARY_GROUP_SIZE - 1; + if (Group* groupe = player->GetGroup()) + place = (groupe->GetMembersCount() < MERCENARY_GROUP_SIZE) + ? MERCENARY_GROUP_SIZE - groupe->GetMembersCount() : 0; + + static uint8 const composition[] = { ROLE_TANK, ROLE_HEALER, ROLE_DAMAGE, ROLE_DAMAGE }; + + // SIGNALE EN JEU : « une se superpose a la meme position ». + // On espace les arrivees d'une seconde et demie : le module + // pose chaque mercenaire aupres de son employeur, et deux + // invocations simultanees se retrouvent au meme point. + uint8 recrutes = 0; + for (uint8 i = 0; i < 4 && recrutes < place; ++i) + { + uint8 const role = composition[i]; + Player* employeur = player; + scheduler.Schedule(Milliseconds(1500 * (i + 1)), [employeur, role](TaskContext) + { + sMercenaryMgr->Summon(employeur, role, nullptr, true); + }); + ++recrutes; + } + + if (recrutes) + ChatHandler(player->GetSession()).PSendSysMessage( + "Une escorte de %u combattants se joint a vous pour l'assaut.", recrutes); + } + if (!introDone) { introDone = true; @@ -343,6 +394,10 @@ struct scenario_broken_shore_intro : public InstanceScript { case NPC_KING_VARIAN: placedVarianGUID = creature->GetGUID(); break; case NPC_VOLJIN: placedVoljinGUID = creature->GetGUID(); break; + case NPC_JAINA: jainaGUID = creature->GetGUID(); break; + case NPC_SYLVANAS: sylvanasGUID = creature->GetGUID(); break; + case NPC_GENN: gennGUID = creature->GetGUID(); break; + case NPC_THRALL: thrallGUID = creature->GetGUID(); break; case NPC_TIRION_POSE: tirionGUID = creature->GetGUID(); break; case NPC_GULDAN_POSE: guldanGUID = creature->GetGUID(); break; case NPC_KROSUS: krosusGUID = creature->GetGUID(); break; @@ -420,34 +475,71 @@ struct scenario_broken_shore_intro : public InstanceScript void StartIntro() { - FactionAnchors const& a = Anchors(); + // ============================================================= + // CAST DEJA POSE SUR LA CARTE : plus aucune invocation. + // + // SIGNALE EN JEU : « je n'avais pas remarque mais a cette + // position il y a un 2e Genn Grisetete et une 2e Jaina ». + // + // Troisieme fois que ce defaut se manifeste -- apres Varian, + // puis Tirion et Krosus. La carte porte TOUTE la distribution, + // a l'endroit qui lui revient : + // Genn Grisetete (487, 2052) a 49 m du debarquement + // Jaina (491, 2047) a 56 m + // Vol'jin, Thrall (568-572, 1882-1887) plage Horde + // Baine, Sylvanas (992-1000, 1874-1881) + // Mekkatorque, Varian (1117-1120, 2471-2484) + // + // Le script en fabriquait des copies au point d'ancrage, d'ou + // les doublons. On retient les vraies dans OnCreatureCreate et + // on ne convoque plus personne. + // + // Le chef de faction n'ouvre plus la scene : sur la plage, ce + // sont Genn et Jaina cote Alliance, Vol'jin cote Horde. Varian + // est ailleurs -- c'est tout l'objet de l'etape « Trouver + // Varian » d'aller le chercher. + // ============================================================= + leaderGUID = (team == TEAM_HORDE) ? placedVoljinGUID : placedVarianGUID; - // debarquement : chef de faction + escorte - if (Creature* leader = Summon(LeaderEntry(), a.beach)) - { - leaderGUID = leader->GetGUID(); - leader->AI()->Talk(0); - } - if (team == TEAM_HORDE) - { - if (Creature* sylvanas = SummonAt(NPC_SYLVANAS, a.beach, 4.0f, 4.0f)) - sylvanasGUID = sylvanas->GetGUID(); - SummonAt(NPC_BAINE, a.beach, -4.0f, 4.0f); - SummonAt(NPC_THRALL, a.beach, 4.0f, -4.0f); - } - else - { - if (Creature* jaina = SummonAt(NPC_JAINA, a.beach, 4.0f, 4.0f)) - jainaGUID = jaina->GetGUID(); - SummonAt(NPC_GENN, a.beach, -4.0f, 4.0f); - SummonAt(NPC_MEKKATORQUE, a.beach, 4.0f, -4.0f); - } - for (uint8 i = 0; i < 4; ++i) - SummonAt(TroopEntry(), a.beach, -8.0f + i * 5.0f, -8.0f); + if (Creature* orateur = instance->GetCreature(team == TEAM_HORDE ? placedVoljinGUID : gennGUID)) + orateur->AI()->Talk(0); - // etape 0 « The Broken Shore » : courte mise en scene puis assaut - scheduler.Schedule(Seconds(12), [this](TaskContext /*context*/) + // ============================================================= + // ATTEINDRE_LA_PLAGE + // + // L'etape 1 s'intitule « Rendez-vous au rivage Brise » : elle se + // joue depuis le pont du navire, et ne s'acheve qu'une fois le + // joueur debarque. Une minuterie de douze secondes la validait + // sans lui -- et comme le client mettait ce temps a charger la + // zone, il se retrouvait deja en phase 2 a son arrivee. + // + // On attend desormais qu'il pose le pied sur le sable, a moins + // de 40 metres du point de debarquement. + // ============================================================= + scheduler.Schedule(Seconds(3), [this](TaskContext context) { + if (stage != STAGE_INTRO) + return; + + // SIGNALE EN JEU : « je reste bloque en p1 ». Le pont du + // navire est a 52 metres du point de debarquement, donc hors + // du cercle de 40 que j'exigeais : selon l'endroit ou le + // joueur descendait, il n'y entrait jamais. Porte a 90, ce + // qui couvre toute la greve devant le navire. + bool debarque = false; + Position const& plage = Anchors().beach; + DoOnPlayers([&debarque, &plage](Player* player) + { + if (player->GetExactDist2d(plage.GetPositionX(), plage.GetPositionY()) < 90.0f) + debarque = true; + }); + + if (!debarque) + { + context.Repeat(Seconds(3)); + return; + } + // PLUS AUCUNE VAGUE. Le script a ete ecrit quand la carte // etait VIDE : il fabriquait ses propres ennemis partout. // Elle porte desormais 748 creatures posees, et ces @@ -584,7 +676,10 @@ struct scenario_broken_shore_intro : public InstanceScript // switche jusqu'a la 5 sans rien faire »). stage = STAGE_COMMANDER; - if (Creature* arganoth = Summon(NPC_ARGANOTH, Anchors().commander)) + // Arganoth est POSE sur la carte en (613, 2085) : quatrieme + // occurrence du meme defaut, apres Varian, Tirion, Krosus et la + // distribution de la plage. On emploie celui de la base. + if (Creature* arganoth = instance->GetCreature(arganothGUID)) { arganoth->AI()->Talk(0); arganoth->SetInCombatWithZone(); @@ -991,6 +1086,8 @@ private: ObjectGuid tirionGUID; ObjectGuid krosusGUID; ObjectGuid arganothGUID; + ObjectGuid gennGUID; + ObjectGuid thrallGUID; ObjectGuid guldanGUID; TaskScheduler scheduler; }; diff --git a/src/server/scripts/EasternKingdoms/Zones/zone_eastern_kingdoms_stormwind_city.cpp b/src/server/scripts/EasternKingdoms/Zones/zone_eastern_kingdoms_stormwind_city.cpp index 35a14f6..88c4920 100644 --- a/src/server/scripts/EasternKingdoms/Zones/zone_eastern_kingdoms_stormwind_city.cpp +++ b/src/server/scripts/EasternKingdoms/Zones/zone_eastern_kingdoms_stormwind_city.cpp @@ -15,6 +15,7 @@ * with this program. If not, see . */ +#include "Chat.h" #include "LFGMgr.h" #include "LFGQueue.h" #include "LFGPackets.h" @@ -340,12 +341,56 @@ public: player->PlayerTalkClass->ClearMenus(); player->PlayerTalkClass->SendCloseGossip(); - // Embarquement pour la Rive Brisee : credit du bateau puis entree dans le scenario 786 (map 1460) - if (player->GetQuestStatus(42740) == QUEST_STATUS_INCOMPLETE) + + // ============================================================= + // SylvaniaCore : on embarque, on n'atterrit pas sur le sable. + // + // SIGNALE EN JEU : « quand on rejoint le Rivage brise on spawn + // sur un bateau en mouvement qui se dirige vers la plage, on + // n'est pas teleporte directement sur la plage ». Confirme par + // la video : la premiere phase s'intitule « Rendez-vous au + // rivage Brise » et se joue depuis le pont d'un navire. + // + // Ce script deposait le joueur en (443.8, 2076.1, 1.2), le + // point d'ancrage de la plage -- une coordonnee inventee. + // + // Le sort 199358 porte la destination OFFICIELLE dans + // spell_target_position : (441.2, 2023.75, 4.44), c'est-a-dire + // le pont de l'Alliance Battleship, pose en (440, 2025). La + // ligne est marquee VerifiedBuild 27843 : c'est de la donnee + // Blizzard, pas une deduction. + // ============================================================= + // SIGNALE EN JEU : « le gossip d'Angelica ne declenche plus + // rien ». Deux causes, corrigees ensemble. + // + // Le lancement du sort 199358 n'aboutissait pas -- rien dans le + // journal, donc il n'etait meme pas tente. On teleporte + // directement aux coordonnees que ce sort porte dans + // spell_target_position, ce qui revient au meme sans dependre + // de la presence du sort cote serveur. + // + // Et la condition exigeait que la quete 42740 soit EN COURS : + // deja rendue ou pas encore prise, l'option restait muette. + // On accepte desormais aussi la quete achevee mais non rendue, + // et on laisse repasser ceux qui l'ont terminee -- refaire le + // scenario ne doit pas etre interdit. + float const PONT_DU_NAVIRE_X = 441.2f; + float const PONT_DU_NAVIRE_Y = 2023.75f; + float const PONT_DU_NAVIRE_Z = 4.44f; + + QuestStatus const etat = player->GetQuestStatus(42740); + if (etat == QUEST_STATUS_INCOMPLETE || etat == QUEST_STATUS_COMPLETE || + etat == QUEST_STATUS_REWARDED) { - player->KilledMonsterCredit(creature->GetEntry()); - player->TeleportTo(1460, 443.8f, 2076.1f, 1.2f, 0.4f); + if (etat == QUEST_STATUS_INCOMPLETE) + player->KilledMonsterCredit(creature->GetEntry()); + + player->TeleportTo(1460, PONT_DU_NAVIRE_X, PONT_DU_NAVIRE_Y, + PONT_DU_NAVIRE_Z, 0.4f); } + else + ChatHandler(player->GetSession()).PSendSysMessage( + "Prenez d'abord la quete La bataille du rivage Brise."); return true; }; From ba0caeece2ede21cef745ab3027c2109f8ddc5e4 Mon Sep 17 00:00:00 2001 From: BlaMacfly Date: Sat, 5 Sep 2026 09:51:54 +0200 Subject: [PATCH 22/50] Playerbots : la formation de groupe n'a jamais fonctionne MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SIGNALE EN JEU : « les bots restent les uns sur les autres, il n existe pas des commandes de strategie de placement ? ». Le systeme existait bien -- il etait casse. GetPositionFromGroup calcule correctement une place propre a chaque membre : un angle reparti sur le cercle, a quatre metres du meneur. Mais son resultat n etait jamais renvoye : Position resultPos(distX, distY, distZ, ...); // calculee Position pos; // vide pCenterPlayer->GetFirstCollisionPosition(...); // resultat jete return pos; // (0,0,0) GetFirstCollisionPosition REND une Position ; son retour etait ignore et l on renvoyait une variable jamais renseignee. La fonction rendait donc l origine du monde a tous ses appelants -- BotGroupAI comme BotAITool. Par-dessus, les deux MoveFollow de BotGroupAI employaient la meme distance et le meme angle pour tout le monde : un metre devant le meneur, a son orientation. Meme reparee, la formation aurait ete ecrasee deux lignes plus loin. Chaque bot y prend desormais l angle de son rang dans le groupe, a trois ou quatre metres selon l effectif. Le defaut ne touchait pas que le scenario : il vaut pour tous les playerbots du serveur, champs de bataille et donjons compris. Co-Authored-By: Claude Opus 5 --- src/server/game/AI/PlayerAI/BotAITool.cpp | 25 ++++++++++++++-- .../AI/PlayerAI/BotGroupAI/BotGroupAI.cpp | 30 +++++++++++++++++-- 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/src/server/game/AI/PlayerAI/BotAITool.cpp b/src/server/game/AI/PlayerAI/BotAITool.cpp index 1803e30..aeb0c5b 100644 --- a/src/server/game/AI/PlayerAI/BotAITool.cpp +++ b/src/server/game/AI/PlayerAI/BotAITool.cpp @@ -502,9 +502,30 @@ Position BotUtility::GetPositionFromGroup(Player* pCenterPlayer, ObjectGuid self float distZ = centerPos.GetPositionZ(); if (!pCenterPlayer->IsFlying()) distZ = pCenterPlayer->GetMap()->GetHeight(pCenterPlayer->GetPhaseShift(), distX, distY, distZ); + // ================================================================= + // SylvaniaCore : la position calculee etait JETEE. + // + // SIGNALE EN JEU : « les bots restent les uns sur les autres ». + // + // Tout le calcul ci-dessus est juste -- un angle propre a chaque + // membre, reparti sur le cercle, a quatre metres du meneur. Mais le + // resultat n'etait jamais renvoye : + // + // Position resultPos(distX, distY, distZ, ...); // calculee + // Position pos; // vide + // pCenterPlayer->GetFirstCollisionPosition(...); // jete + // return pos; // (0,0,0) + // + // GetFirstCollisionPosition REND une Position ; son resultat etait + // ignore, et l'on renvoyait une variable jamais renseignee. La + // fonction rendait donc l'origine du monde a tous les appelants, et + // la formation n'a jamais fonctionne -- nulle part, pas seulement + // dans ce scenario. + // ================================================================= Position resultPos(distX, distY, distZ, pCenterPlayer->GetOrientation()); - Position pos; - pCenterPlayer->GetFirstCollisionPosition(pCenterPlayer->GetDistance(resultPos), pCenterPlayer->GetRelativeAngle(&resultPos)); + Position pos = pCenterPlayer->GetFirstCollisionPosition( + pCenterPlayer->GetDistance(resultPos), pCenterPlayer->GetRelativeAngle(&resultPos)); + pos.SetOrientation(pCenterPlayer->GetOrientation()); return pos; } diff --git a/src/server/game/AI/PlayerAI/BotGroupAI/BotGroupAI.cpp b/src/server/game/AI/PlayerAI/BotGroupAI/BotGroupAI.cpp index d17dd04..6315f53 100644 --- a/src/server/game/AI/PlayerAI/BotGroupAI/BotGroupAI.cpp +++ b/src/server/game/AI/PlayerAI/BotGroupAI/BotGroupAI.cpp @@ -1528,18 +1528,44 @@ void BotGroupAI::ProcessFollowToMaster() } Position targetPos = BotUtility::GetPositionFromGroup(m_MasterPlayer, me->GetGUID(), me->GetGroup()); m_Movement->MovementTo(targetPos.GetPositionX(), targetPos.GetPositionY(), targetPos.GetPositionZ(), 0); + // ================================================================= + // ANGLE PROPRE A CHAQUE MEMBRE. + // + // Les deux MoveFollow ci-dessous employaient la MEME distance et le + // MEME angle pour tout le monde -- un metre devant le meneur, a son + // orientation. Tous les bots convergeaient donc vers un point unique + // et se superposaient, quand bien meme GetPositionFromGroup leur + // avait calcule une place distincte deux lignes plus haut. + // + // On reprend l'angle de cette formation : chacun garde son secteur. + float suiviAngle = 0.0f; + float suiviDistance = 3.0f; + { + uint32 index = 0; + uint32 count = 0; + ObjectGuid monGuid = me->GetGUID(); + if (me->GetGroup() && me->GetGroup()->GiveAtGroupPos(monGuid, index, count)) + { + if (count > 1) + --count; + if (count) + suiviAngle = (float(M_PI) * 2.0f / float(count)) * float(index); + suiviDistance = (count > 3) ? 4.0f : 3.0f; + } + } + float distance = me->GetDistance(m_MasterPlayer->GetPosition()); if (distance <= NEEDFLEE_CHECKRANGE && distance > 0.1f) { me->GetMotionMaster()->Clear(); - me->GetMotionMaster()->MoveFollow(m_MasterPlayer, 1.0f, m_MasterPlayer->GetOrientation()); + me->GetMotionMaster()->MoveFollow(m_MasterPlayer, suiviDistance, suiviAngle); return; } if (me->IsWithinLOSInMap(m_MasterPlayer)) { me->GetMotionMaster()->Clear(); - me->GetMotionMaster()->MoveFollow(m_MasterPlayer, 1.0f, m_MasterPlayer->GetOrientation()); + me->GetMotionMaster()->MoveFollow(m_MasterPlayer, suiviDistance, suiviAngle); } else m_Movement->MovementTo(m_MasterPlayer->GetPositionX(), m_MasterPlayer->GetPositionY(), m_MasterPlayer->GetPositionZ(), 1); From 24a07008538a2e469a435c8e34d328996ff82671 Mon Sep 17 00:00:00 2001 From: BlaMacfly Date: Sat, 5 Sep 2026 10:03:49 +0200 Subject: [PATCH 23/50] Playerbots : les ordres n'atteignaient jamais leur destinataire MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SIGNALE EN JEU : « !summon repond "You can't teleport yourself to yourself", et !follow repond "There is no such command" ». ChatHandler::ParseCommands traite le point d'exclamation comme un prefixe de commande au meme titre que le point : if (text[0] != '!' && text[0] != '.') return false; Il intercepte donc tout ordre ligne 202 de HandleChat, bien avant que le message n'atteigne le canal de groupe ou Group::ProcessGroupBotCommand l'attend, ligne 405. « !summon » partait vers la commande de maitre de jeu du meme nom, « !follow » vers une commande inexistante. Le systeme d'ordres aux playerbots -- summon, attack, follow, flee, stop, equipement, talents -- etait donc inaccessible depuis toujours. Comme la formation de groupe corrigee juste avant, il etait ecrit, complet, et jamais atteint. Les messages en « ! » passent desormais aux compagnons lorsque le joueur en commande effectivement. Un maitre de jeu sans bot garde ses commandes en « ! » ; celui qui en a passe par le point, qui reste le prefixe principal. Corrige aussi : le journal des mercenaires annoncait « a paye 100 po » pour les recrutements offerts. Rien n'etait preleve -- le garde-fou est bien en place -- mais un journal qui raconte le contraire de ce qui s'est passe fait perdre du temps au diagnostic suivant. Co-Authored-By: Claude Opus 5 --- src/server/game/Handlers/ChatHandler.cpp | 31 +++++++++++++++++++++- src/server/game/Mercenary/MercenaryMgr.cpp | 2 +- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp index 96ecc5e..0a5b929 100644 --- a/src/server/game/Handlers/ChatHandler.cpp +++ b/src/server/game/Handlers/ChatHandler.cpp @@ -199,7 +199,36 @@ void WorldSession::HandleChatMessage(ChatMsg type, uint32 lang, std::string msg, if (msg.empty()) return; - if (ChatHandler(this).ParseCommands(msg.c_str())) + // ================================================================= + // ORDRE_AUX_COMPAGNONS + // + // SIGNALE EN JEU : « !summon repond "You can't teleport yourself to + // yourself", et !follow repond "There is no such command" ». + // + // ChatHandler::ParseCommands traite le point d'exclamation comme un + // prefixe de commande au meme titre que le point : + // if (text[0] != '!' && text[0] != '.') return false; + // Il intercepte donc tout ordre avant qu'il n'atteigne le canal de + // groupe, ou Group::ProcessGroupBotCommand l'attend. Le systeme + // d'ordres aux playerbots etait inaccessible depuis toujours -- + // « !summon » partait vers la commande de maitre de jeu du meme nom. + // + // On laisse passer les messages en « ! » lorsque le joueur commande + // effectivement des bots. Un maitre de jeu sans compagnon garde ses + // commandes en « ! » ; celui qui en a passe par le point, qui reste + // le prefixe principal. + bool ordreAuxCompagnons = false; + if (!msg.empty() && msg[0] == '!') + if (Group* groupe = GetPlayer()->GetGroup()) + for (GroupReference* itr = groupe->GetFirstMember(); itr != nullptr; itr = itr->next()) + if (Player* membre = itr->GetSource()) + if (membre->IsPlayerBot()) + { + ordreAuxCompagnons = true; + break; + } + + if (!ordreAuxCompagnons && ChatHandler(this).ParseCommands(msg.c_str())) return; // Strip invisible characters for non-addon messages diff --git a/src/server/game/Mercenary/MercenaryMgr.cpp b/src/server/game/Mercenary/MercenaryMgr.cpp index c0be794..63c616a 100644 --- a/src/server/game/Mercenary/MercenaryMgr.cpp +++ b/src/server/game/Mercenary/MercenaryMgr.cpp @@ -460,7 +460,7 @@ MercenaryResult MercenaryMgr::Summon(Player* owner, uint8 role, Creature* portal } m_contracts.push_back(contract); - TC_LOG_INFO("server.worldserver", "Mercenaires: %s a paye %u po pour un %s (compte bot %u).", + TC_LOG_INFO("server.worldserver", freeOfCharge ? "Mercenaires: %s recoit gratuitement un %3 (compte bot %4), cout %2 po non preleve." : "Mercenaires: %s a paye %u po pour un %s (compte bot %u).", owner->GetName().c_str(), GetCostGold(), GetRoleName(role), accountId); return MERC_OK; From 35c52bd8064ddc6740a6a6028288dbb687ffa80b Mon Sep 17 00:00:00 2001 From: BlaMacfly Date: Sat, 5 Sep 2026 10:38:15 +0200 Subject: [PATCH 24/50] Scenarios : un evenement etait compte une fois par joueur present MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SIGNALE EN JEU : « un petit groupe de demons m a valide les 33/33 et les 3/3 gangreseigneurs d un coup ». L exploitant a refuse mon explication -- « je ne vois pas en quoi c est une bonne nouvelle » -- et il avait raison. InstanceScript::DoSendEventScenario passait par DoUpdateCriteria, qui diffuse a CHAQUE joueur de l instance. Or Player::UpdateCriteria transmet ensuite au scenario : if (Scenario* scenario = GetScenario()) scenario->UpdateCriteria(type, ...); et ce compteur est PARTAGE par toute l instance. Chaque mort etait donc comptee autant de fois qu il y avait de joueurs presents. Avec une escorte de quatre mercenaires, sept demons suffisaient a remplir un objectif qui en demande trente-trois. Le defaut restait invisible tant qu on jouait seul : un joueur, un credit. L escorte l a mis au jour. Il touche tous les scenarios du serveur, pas seulement le Rivage brise. L evenement credite desormais le scenario une seule fois, avec un joueur de reference pour les conditions qui en dependent. HAUT FAIT JCJ HORS SUJET. « J ai attaque un petit groupe de demons et j ai recu le haut fait Courroux de l Alliance », qui demande de tuer cinq joueurs de la Horde dans chaque grande ville. KillRewarder::Reward creditait CRITERIA_TYPE_SPECIAL_PVP_KILL a chaque membre du groupe pour n importe quelle mort, creatures comprises. Meme mecanisme d apparition : ce bloc n est parcouru qu en groupe. TrinityCore ne fait pas cette mise a jour du tout, ni en 3.3.5 ni en master -- c est un ajout local, pose sans le garde-fou _isPvP que ce fichier emploie partout ailleurs. Il est ajoute. Co-Authored-By: Claude Opus 5 --- .../game/Entities/Player/KillRewarder.cpp | 25 ++++++++++++- src/server/game/Instances/InstanceScript.cpp | 35 ++++++++++++++++++- 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/src/server/game/Entities/Player/KillRewarder.cpp b/src/server/game/Entities/Player/KillRewarder.cpp index 203b15e..c31b159 100644 --- a/src/server/game/Entities/Player/KillRewarder.cpp +++ b/src/server/game/Entities/Player/KillRewarder.cpp @@ -243,7 +243,30 @@ void KillRewarder::_RewardGroup() if (member->IsAtGroupRewardDistance(_victim)) { _RewardPlayer(member, isDungeon); - member->UpdateCriteria(CRITERIA_TYPE_SPECIAL_PVP_KILL, 1, 0, 0, _victim); + + // ============================================= + // SylvaniaCore : ce credit est JcJ. + // + // SIGNALE EN JEU : « j ai attaque un petit groupe + // de demons et j ai recu le haut fait Courroux + // de l Alliance, totalement hors sujet ». Ce + // haut fait demande de tuer cinq joueurs de la + // Horde dans chaque grande ville. + // + // La ligne suivante creditait un meurtre JcJ a + // chaque membre du groupe pour N IMPORTE QUELLE + // mort, creatures comprises. Elle ne se voyait + // pas tant qu on jouait seul : ce bloc n est + // parcouru qu en groupe. L escorte de + // mercenaires l a mise au jour. + // + // TrinityCore ne fait pas cette mise a jour du + // tout, ni en 3.3.5 ni en master : c est un + // ajout local, pose sans le garde-fou _isPvP + // que ce fichier emploie partout ailleurs. + // ============================================= + if (_isPvP) + member->UpdateCriteria(CRITERIA_TYPE_SPECIAL_PVP_KILL, 1, 0, 0, _victim); } } } diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp index b0d611f..c60f8e8 100644 --- a/src/server/game/Instances/InstanceScript.cpp +++ b/src/server/game/Instances/InstanceScript.cpp @@ -714,7 +714,40 @@ void InstanceScript::DoUpdateCriteria(CriteriaTypes type, uint32 miscValue1 /*= void InstanceScript::DoSendEventScenario(uint32 eventId /*= 0*/) { - DoUpdateCriteria(CRITERIA_TYPE_SEND_EVENT_SCENARIO, eventId, 0, nullptr); + // ================================================================= + // SylvaniaCore : un evenement de scenario ne compte QU UNE FOIS. + // + // SIGNALE EN JEU : « un petit groupe de demons m a valide les 33/33 + // et les 3/3 gangreseigneurs d un coup ». + // + // DoUpdateCriteria diffuse a CHAQUE joueur de l instance, et + // Player::UpdateCriteria transmet ensuite au scenario : + // if (Scenario* scenario = GetScenario()) + // scenario->UpdateCriteria(...); + // Or ce compteur est PARTAGE par toute l instance. Chaque mort etait + // donc comptee autant de fois qu il y avait de joueurs presents -- + // cinq, avec une escorte de mercenaires. Sept demons suffisaient a + // remplir un objectif qui en demande trente-trois. + // + // Le defaut restait invisible tant qu on jouait seul : un joueur, + // un credit. L escorte l a mis au jour. + // + // On credite desormais le scenario une seule fois, en lui passant + // un joueur de reference pour les conditions qui en dependent. + // ================================================================= + Scenario* scenario = instance->GetInstanceScenario(); + if (!scenario) + return; + + Map::PlayerList const& liste = instance->GetPlayers(); + for (Map::PlayerList::const_iterator i = liste.begin(); i != liste.end(); ++i) + { + if (Player* reference = i->GetSource()) + { + scenario->UpdateCriteria(CRITERIA_TYPE_SEND_EVENT_SCENARIO, eventId, 0, 0, nullptr, reference); + return; + } + } } // Start timed achievement for all players in instance From 05af3e02f2f8a62ffe229c1b41fe89bc5b2da817 Mon Sep 17 00:00:00 2001 From: Sylvania Date: Sat, 5 Sep 2026 16:22:27 +0200 Subject: [PATCH 25/50] Coup d oeil dans le portail : la version Horde n avait aucun spawn Scout Pazaztick (85249) et son telescope (234619) ne sont spawnes nulle part. Les joueurs Horde tombaient donc sur la paire Alliance : telescope inutilisable (il ne valide que la quete 36379) et Scout Pazerp, en faction 84, les agresse. Faute de phasing sur la map 1190, le telescope existant sert desormais aux deux factions, les deux eclaireuses passent en faction 35 et Pazaztick est spawnee. --- ...9_05_00_world_quete_coup_doeil_portail.sql | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 sql/updates/world/2026_09_05_00_world_quete_coup_doeil_portail.sql diff --git a/sql/updates/world/2026_09_05_00_world_quete_coup_doeil_portail.sql b/sql/updates/world/2026_09_05_00_world_quete_coup_doeil_portail.sql new file mode 100644 index 0000000..3329722 --- /dev/null +++ b/sql/updates/world/2026_09_05_00_world_quete_coup_doeil_portail.sql @@ -0,0 +1,25 @@ +-- Quete 36382 "Coup d'oeil dans le portail" (Horde) : tout le cote Horde manquait. +-- +-- Signalement joueur : impossible d'utiliser le telescope, et l'eclaireuse a cote attaque. +-- Cause : Scout Pazaztick (85249) et le telescope Horde (234619) n'ont AUCUN spawn en base. +-- Seule la paire Alliance existe (Scout Pazerp 85212 + telescope 234576, map 1190 area 6963). +-- Un joueur Horde qui prend la quete chez Rokhan arrive donc sur la paire Alliance : +-- - le telescope 234576 ne valide que l'objectif de la quete 36379 (Alliance) ; +-- - Scout Pazerp est en faction 84 (Hurlevent), donc hostile a la Horde et elle agresse. +-- Sur les royaumes officiels les deux paires cohabitent au meme endroit, separees par phasing. +-- La zone (map 1190) n'a aucun phasing chez nous : on partage donc le telescope existant. + +-- 1) Les deux eclaireuses deviennent neutres. Ce sont des PNJ decoratifs (npcflag 0, +-- aucun gossip, aucun role de combat) : leur faction ne sert qu'a les faire agresser. +UPDATE `creature_template` SET `faction` = 35 WHERE `entry` IN (85212, 85249); + +-- 2) Le telescope deja spawne sert aux deux factions. +-- Data1 = quete requise pour valider le goober : a 36379 il bloquait tout joueur Horde. +UPDATE `gameobject_template` SET `Data1` = 0 WHERE `entry` = 234576; +UPDATE `quest_objectives` SET `ObjectID` = 234576 WHERE `ID` = 274669 AND `QuestID` = 36382; + +-- 3) Scout Pazaztick est spawnee a cote de Scout Pazerp (le journal de quete demande de la +-- trouver ; elle ne porte aucun objectif, c'est le telescope qui valide). +DELETE FROM `creature` WHERE `guid` = 290200757; +INSERT INTO `creature` (`guid`,`id`,`map`,`zoneId`,`areaId`,`spawnDifficulties`,`phaseUseFlags`,`PhaseId`,`PhaseGroup`,`terrainSwapMap`,`modelid`,`equipment_id`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`currentwaypoint`,`curhealth`,`curmana`,`MovementType`,`npcflag`,`unit_flags`,`unit_flags2`,`unit_flags3`,`dynamicflags`,`ScriptName`,`movementmode`,`VerifiedBuild`) VALUES +(290200757, 85249, 1190, 4, 6963, '0', 0, 0, 0, -1, 0, 0, -11474.94, -3450.80, 32.7659, 2.03782, 120, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, '', 0, 0); From 44fad5a04191a1e696533efb391341c0aa1bf0e5 Mon Sep 17 00:00:00 2001 From: Sylvania Date: Sat, 5 Sep 2026 18:29:43 +0200 Subject: [PATCH 26/50] Tanaan : deux scenes WoD cassaient la fin de l intro Signalements joueur du 05/09. Scenes 953 / 986 (bateau) : rendre "La derniere ligne droite" faisait planter le client. La scene est ecrite pour se jouer sur un transport en mouvement, alors que PlaySceneByPackageId l envoie ancree sur la position du joueur, TransportGUID vide et SceneID nul. On fait desormais directement le teleport et le succes que son declencheur "Teleport" produisait. Scenes 961 / 962 (marques de Tanaan) : cliquer une des deux pierres de la quete 34392 envoyait le joueur sous la map. Rien d autre sur ce chemin ne deplace le joueur (le sort du goober est un simple KILL_CREDIT, aucun hook de scene mal filtre, les marques sont au niveau du sol), et l ecart entre ancrer sur l objet ou sur le joueur est de deux metres : c est la scene elle-meme. Elle est decorative, le credit de quete est donne avant. --- .../Draenor/TanaanIntro/tanaan_intro_finale.cpp | 16 ++++++++++++++-- .../Draenor/TanaanIntro/tanaan_intro_portal.cpp | 6 ++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/server/scripts/Draenor/TanaanIntro/tanaan_intro_finale.cpp b/src/server/scripts/Draenor/TanaanIntro/tanaan_intro_finale.cpp index babafcf..5b52150 100644 --- a/src/server/scripts/Draenor/TanaanIntro/tanaan_intro_finale.cpp +++ b/src/server/scripts/Draenor/TanaanIntro/tanaan_intro_finale.cpp @@ -108,10 +108,22 @@ public: { player->GetSceneMgr().CancelSceneByPackageId(TanaanSceneObjects::SceneFinaleIronBastion); + /// Les scenes du bateau (986 / 953) font planter le client : elles sont ecrites pour + /// se jouer sur un transport en mouvement, alors que PlaySceneByPackageId les envoie + /// ancrees sur la position du joueur, avec un TransportGUID vide et un SceneID nul. + /// On fait donc directement ce que leur declencheur "Teleport" faisait, cf. + /// playerScript_tanaan_scene_boat plus bas (ses hooks restent en place au cas ou la + /// scene serait rejouee a la main). if (player->GetTeamId() == TEAM_ALLIANCE) - player->GetSceneMgr().PlaySceneByPackageId(TanaanSceneObjects::SceneAllianceBoat); + { + player->TeleportTo(TanaanZones::MapDraenor, 2308.9621f, 454.9409f, 6.0f, player->GetOrientation()); + player->CompletedAchievement(TanaanAchievements::AchievementWelcomeToDreanorA); + } else - player->GetSceneMgr().PlaySceneByPackageId(TanaanSceneObjects::SceneHordeBoat); + { + player->TeleportTo(TanaanZones::MapDraenor, 5538.213379f, 5015.2690f, 13.0f, player->GetOrientation()); + player->CompletedAchievement(TanaanAchievements::AchievementWelcomeToDreanorH); + } } } diff --git a/src/server/scripts/Draenor/TanaanIntro/tanaan_intro_portal.cpp b/src/server/scripts/Draenor/TanaanIntro/tanaan_intro_portal.cpp index 993109f..6337130 100644 --- a/src/server/scripts/Draenor/TanaanIntro/tanaan_intro_portal.cpp +++ b/src/server/scripts/Draenor/TanaanIntro/tanaan_intro_portal.cpp @@ -317,7 +317,9 @@ public: return true; player->KilledMonsterCredit(TanaanKillCredits::CreditNorthernSpireDisabled); - player->GetSceneMgr().PlaySceneByPackageId(TanaanSceneObjects::SceneChoGallsFreedom); + /// Scenes 961 / 962 desactivees : jouees par PlaySceneByPackageId (SceneID nul, + /// ancrees sur la position du joueur), elles envoient le joueur sous la map. + /// Purement decoratif : le credit de quete est deja donne juste au-dessus. } /// Bleeding Hollow Gob (Teron'Gor) else if (gameObject->GetEntry() == TanaanGameObjects::GobMarkOfBleedingHollow) @@ -328,7 +330,7 @@ public: return true; player->KilledMonsterCredit(TanaanKillCredits::CreditSouthernSpireDisabled); - player->GetSceneMgr().PlaySceneByPackageId(TanaanSceneObjects::SceneTeronGorsFreedom); + /// Scene 962 desactivee, cf. le commentaire sur la marque des Ombrelune. } } return true; From c74de0d601af634bb8238f331662df071c8c967d Mon Sep 17 00:00:00 2001 From: Sylvania Date: Sat, 5 Sep 2026 19:55:54 +0200 Subject: [PATCH 27/50] Fief WoD : le film d etablissement figeait le client Signalement joueur du 05/09 : la cinematique du fief bloque le jeu, il faut se reconnecter pour continuer. Le film (189 Horde / 192 Alliance au niveau 1) etait envoye par SendMovieStart, et le teleport dans le fief etait accroche a CMSG_COMPLETE_MOVIE. Un client qui ne joue pas le film ne renvoie jamais ce paquet : le joueur restait bloque ET n arrivait jamais dans son fief. On teleporte donc directement. Meme demarche que pour les scenes 953 / 986 et 961 / 962 : la cause du gel cote client reste inconnue, on supprime le declencheur pour ne plus bloquer la progression. Le commentaire indique quoi remettre le jour ou on saura. --- .../game/Garrison/WodGarrison/WodGarrison.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/server/game/Garrison/WodGarrison/WodGarrison.cpp b/src/server/game/Garrison/WodGarrison/WodGarrison.cpp index cbacd9e..fc347a2 100644 --- a/src/server/game/Garrison/WodGarrison/WodGarrison.cpp +++ b/src/server/game/Garrison/WodGarrison/WodGarrison.cpp @@ -192,12 +192,13 @@ void WodGarrison::TeleportOwnerAndPlayMovie() const } }; - _owner->AddMovieDelayedAction(_siteLevel->UpgradeMovieID, [this, WodGarrisonEntrancePositions] - { - _owner->TeleportTo(_siteLevel->MapID, WodGarrisonEntrancePositions[GetFaction()][_siteLevel->GarrLevel - 1]); - }); - - _owner->SendMovieStart(_siteLevel->UpgradeMovieID); + /// Le film d'etablissement du fief (189 Horde / 192 Alliance, et 190/191/193/194 + /// aux niveaux suivants) fige le client : le joueur doit se reconnecter. Comme il + /// n'envoie alors jamais CMSG_COMPLETE_MOVIE, l'action differee ne partait pas et + /// il n'etait jamais teleporte dans son fief. On teleporte donc directement. + /// Remettre AddMovieDelayedAction + SendMovieStart(_siteLevel->UpgradeMovieID) le + /// jour ou la cause du gel cote client sera connue. + _owner->TeleportTo(_siteLevel->MapID, WodGarrisonEntrancePositions[GetFaction()][_siteLevel->GarrLevel - 1]); } void WodGarrison::Delete() From d681f73f54652a7f0b2c1acbe68f78f93bcda811 Mon Sep 17 00:00:00 2001 From: Sylvania Date: Mon, 7 Sep 2026 10:34:22 +0200 Subject: [PATCH 28/50] Fief WoD : aucun moyen de rentrer dans un fief deja fonde Les deux points d entree ne se declenchent que si le joueur n a PAS encore de fief : l objet Master Surveyor (233664, Horde) et Baros Alexston (79243, Alliance). Une fois le fief fonde, plus rien n y ramenait. Les trois joueurs du royaume qui en possedent un ne sont jamais alles dessus : aucun personnage n a jamais ete sur les cartes 1152, 1153, 1158, 1159, 1330 ni 1331. Gazlowe (78466) et Baros proposent desormais "Emmenez-moi a mon fief" aux proprietaires. L option est masquee quand on est deja sur une carte de fief, Gazlowe y etant aussi spawne. Le declencheur de proximite cote Horde n est pas touche : il aurait teleporte tout passant. TeleportOwnerAndPlayMovie renomme TeleportOwnerToGarrison, l ancien nom mentait depuis le retrait du film. --- .../2026_09_07_00_world_retour_au_fief.sql | 13 ++++++ .../game/Garrison/WodGarrison/WodGarrison.cpp | 4 +- .../game/Garrison/WodGarrison/WodGarrison.h | 2 +- .../Zones/zone_draenor_frostfire_ridge.cpp | 42 ++++++++++++++++++- .../Zones/zone_draenor_shadowmoon_dreanor.cpp | 13 +++++- 5 files changed, 68 insertions(+), 6 deletions(-) create mode 100644 sql/updates/world/2026_09_07_00_world_retour_au_fief.sql diff --git a/sql/updates/world/2026_09_07_00_world_retour_au_fief.sql b/sql/updates/world/2026_09_07_00_world_retour_au_fief.sql new file mode 100644 index 0000000..112be10 --- /dev/null +++ b/sql/updates/world/2026_09_07_00_world_retour_au_fief.sql @@ -0,0 +1,13 @@ +-- Retour dans un fief deja fonde. +-- +-- Les deux points d'entree du fief WoD ne se declenchent que si le joueur n'a +-- PAS encore de fief : l'objet Master Surveyor (233664, Horde) et Baros +-- Alexston (79243, Alliance). Une fois le fief fonde, plus rien ne permettait +-- d'y entrer. Les trois joueurs du royaume qui possedent un fief ne sont +-- jamais alles dessus (aucun personnage n'a jamais ete sur les cartes 1152, +-- 1153, 1158, 1159, 1330 ni 1331). +-- +-- Gazlowe (78466) recoit donc un script qui propose "Emmenez-moi a mon fief" +-- aux proprietaires. Il est aussi spawne DANS les fiefs (cartes 1152, 1153, +-- 1330) : le script n'y propose rien, il teste Map::IsGarrison(). +UPDATE `creature_template` SET `ScriptName` = 'npc_gazlowe_garrison' WHERE `entry` = 78466; diff --git a/src/server/game/Garrison/WodGarrison/WodGarrison.cpp b/src/server/game/Garrison/WodGarrison/WodGarrison.cpp index fc347a2..a6a31e4 100644 --- a/src/server/game/Garrison/WodGarrison/WodGarrison.cpp +++ b/src/server/game/Garrison/WodGarrison/WodGarrison.cpp @@ -169,12 +169,12 @@ bool WodGarrison::Upgrade() _owner->SendGarrisonRemoteInfo(); PhasingHandler::OnConditionChange(_owner); - TeleportOwnerAndPlayMovie(); + TeleportOwnerToGarrison(); return true; } -void WodGarrison::TeleportOwnerAndPlayMovie() const +void WodGarrison::TeleportOwnerToGarrison() const { Position WodGarrisonEntrancePositions[2][3] = { diff --git a/src/server/game/Garrison/WodGarrison/WodGarrison.h b/src/server/game/Garrison/WodGarrison/WodGarrison.h index 10f0d38..c2fab6c 100644 --- a/src/server/game/Garrison/WodGarrison/WodGarrison.h +++ b/src/server/game/Garrison/WodGarrison/WodGarrison.h @@ -84,7 +84,7 @@ public: bool Create(uint32 garrSiteId) override; bool CanUpgrade(bool checkCost = true); bool Upgrade(); - void TeleportOwnerAndPlayMovie() const; + void TeleportOwnerToGarrison() const; void Delete() override; void Enter() override; diff --git a/src/server/scripts/Draenor/Zones/zone_draenor_frostfire_ridge.cpp b/src/server/scripts/Draenor/Zones/zone_draenor_frostfire_ridge.cpp index 22a59df..43b666c 100644 --- a/src/server/scripts/Draenor/Zones/zone_draenor_frostfire_ridge.cpp +++ b/src/server/scripts/Draenor/Zones/zone_draenor_frostfire_ridge.cpp @@ -252,7 +252,7 @@ public: if (Garrison* garr = player->GetGarrison(GARRISON_TYPE_GARRISON)) { - garr->ToWodGarrison()->TeleportOwnerAndPlayMovie(); + garr->ToWodGarrison()->TeleportOwnerToGarrison(); player->KilledMonsterCredit(NPC_ESTABLISH_YOUR_GARRISON_KILL_CREDIT); } } @@ -366,6 +366,45 @@ class spell_groog_rampage : public SpellScriptLoader } }; +/// 78466 - Gazlowe : retour dans un fief deja fonde. +/// Les deux points d'entree existants (l'objet Master Surveyor cote Horde, +/// Baros Alexston cote Alliance) ne se declenchent que si le joueur n'a PAS +/// encore de fief. Une fois celui-ci fonde, plus rien ne permettait d'y entrer. +class npc_gazlowe_garrison : public CreatureScript +{ +public: + npc_gazlowe_garrison() : CreatureScript("npc_gazlowe_garrison") { } + + enum + { + GOSSIP_ACTION_ENTER_GARRISON = 1000 + }; + + bool OnGossipHello(Player* player, Creature* creature) override + { + if (creature->IsQuestGiver()) + player->PrepareQuestMenu(creature->GetGUID()); + + /// Gazlowe est aussi spawne a l'interieur des fiefs : on n'y propose rien. + if (player->GetGarrison(GARRISON_TYPE_GARRISON) && !player->GetMap()->IsGarrison()) + AddGossipItemFor(player, 0, "Emmenez-moi à mon fief.", 0, GOSSIP_ACTION_ENTER_GARRISON); + + SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID()); + return true; + } + + bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override + { + CloseGossipMenuFor(player); + + if (action == GOSSIP_ACTION_ENTER_GARRISON) + if (Garrison* garrison = player->GetGarrison(GARRISON_TYPE_GARRISON)) + garrison->ToWodGarrison()->TeleportOwnerToGarrison(); + + return true; + } +}; + void AddSC_frostfire_ridge() { /* BEGIN */ @@ -376,6 +415,7 @@ void AddSC_frostfire_ridge() new npc_durotan_frostridge_begin(); new go_frostridge_master_surveyor(); + new npc_gazlowe_garrison(); new spell_frostridge_claiming(); diff --git a/src/server/scripts/Draenor/Zones/zone_draenor_shadowmoon_dreanor.cpp b/src/server/scripts/Draenor/Zones/zone_draenor_shadowmoon_dreanor.cpp index 3ccd5f0..380c5f3 100644 --- a/src/server/scripts/Draenor/Zones/zone_draenor_shadowmoon_dreanor.cpp +++ b/src/server/scripts/Draenor/Zones/zone_draenor_shadowmoon_dreanor.cpp @@ -180,20 +180,29 @@ public: if (player->GetQuestStatus(QUEST_ESTABLISH_YOUR_GARRISON) == QUEST_STATUS_INCOMPLETE) AddGossipItemFor(player, 60002, 1, 0, 0); + /// Retour dans un fief deja fonde : sans cela plus rien n'y ramene. + if (player->GetGarrison(GARRISON_TYPE_GARRISON) && !player->GetMap()->IsGarrison()) + AddGossipItemFor(player, 0, "Emmenez-moi à mon fief.", 0, 1000); + SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID()); return true; } - bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 /*action*/) override + bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override { Garrison* garrison = player->GetGarrison(GARRISON_TYPE_GARRISON); if (!garrison) { CloseGossipMenuFor(player); player->CreateGarrison(player->IsInAlliance() ? GARRISON_SITE_WOD_ALLIANCE : GARRISON_SITE_WOD_HORDE); - player->GetGarrison(GARRISON_TYPE_GARRISON)->ToWodGarrison()->TeleportOwnerAndPlayMovie(); + player->GetGarrison(GARRISON_TYPE_GARRISON)->ToWodGarrison()->TeleportOwnerToGarrison(); player->KilledMonsterCredit(NPC_ESTABLISH_YOUR_GARRISON_KILL_CREDIT); } + else if (action == 1000) + { + CloseGossipMenuFor(player); + garrison->ToWodGarrison()->TeleportOwnerToGarrison(); + } return true; } From 95ba4466e148cb44b759c279d5615086ff0f75b4 Mon Sep 17 00:00:00 2001 From: Sylvania Date: Mon, 7 Sep 2026 11:07:47 +0200 Subject: [PATCH 29/50] Butin : 17 mobs des quetes d acces a Draenor ne lachaient rien Signalement joueur du 05/09. 26 especes hostiles des Terres foudroyees 6.0 et de Tanaan avaient lootid = 0, alors que leurs voisines immediates avaient leur table. Taux releves un par un sur Wowhead. 9 des 26 n ont legitimement aucun butin la-bas non plus et ne sont pas touchees : ame tourmentee, demolisseur, Keli dan, Ankova... Les objets post-Legion listes par Wowhead (ids 235xxx et 236xxx) sont ecartes. Profil dominant de la Marche-de-Fer : 112463 a 75-99 pour cent, 112684 a 29-41, 118675 a 0,2-0,4. --- ...026_09_07_01_world_butin_acces_draenor.sql | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 sql/updates/world/2026_09_07_01_world_butin_acces_draenor.sql diff --git a/sql/updates/world/2026_09_07_01_world_butin_acces_draenor.sql b/sql/updates/world/2026_09_07_01_world_butin_acces_draenor.sql new file mode 100644 index 0000000..d27b7ad --- /dev/null +++ b/sql/updates/world/2026_09_07_01_world_butin_acces_draenor.sql @@ -0,0 +1,76 @@ +-- Butin manquant : mobs des quetes d'acces a Draenor (Terres foudroyees 6.0 + Tanaan). +-- +-- Signalement joueur du 05/09/2026 : "les mobs lachent rien comme loot". +-- 26 especes hostiles de ces deux zones avaient lootid = 0, soit aucun butin du tout, +-- alors que leurs voisines immediates (Fourrageur, Legionnaire, Pillard...) ont la leur. +-- +-- Taux releves un par un sur Wowhead (page rendue puis donnees Listview, methode validee +-- en recoupant deux PNJ dont les chiffres avaient d'abord ete lus a l'ecran). +-- Les objets post-Legion listes par Wowhead (Besaces et Potions mysterieuses, ids 235xxx +-- et 236xxx) sont volontairement ecartes : ils n'existent pas dans notre version. +-- +-- 9 des 26 especes n'ont legitimement aucun butin sur Wowhead non plus et ne sont pas +-- touchees : Ame tourmentee (82647), Loup du Vide (82373), Demolisseur de fer (82298), +-- Gronnling de fer (82484), Lieutenant Asalra (76448), Keli'dan le Briseur (79702), +-- Ankova la Dechue (79593), Bagarreur de la Main brisee (82057), et le Sauvage Ombresanglante +-- (78820), dont le seul objet liste (110444) n'est rattache a aucune quete chez nous. + +DELETE FROM `creature_loot_template` WHERE `Entry` IN (76556,76886,78345,78489,78674,78348,78670,77653,82774,77767,76651,78488,77790,77771,77845,78696,82451); +INSERT INTO `creature_loot_template` + (`Entry`,`Item`,`Reference`,`Chance`,`QuestRequired`,`LootMode`,`GroupId`,`MinCount`,`MaxCount`,`Comment`) VALUES +(76556,112463,0,76.6200,0,1,0,1,1,'Ironmarch Grunt'), +(76556,112684,0,31.1900,0,1,0,1,1,'Ironmarch Grunt'), +(76556,118675,0,0.4100,0,1,0,1,1,'Ironmarch Grunt'), +(76886,112463,0,76.8200,0,1,0,1,1,'Ironmarch Scout'), +(76886,112684,0,30.5500,0,1,0,1,1,'Ironmarch Scout'), +(76886,118675,0,0.3100,0,1,0,1,1,'Ironmarch Scout'), +(78345,112463,0,77.6600,0,1,0,1,1,'Dreadmaul Crusher'), +(78345,112684,0,29.1100,0,1,0,1,1,'Dreadmaul Crusher'), +(78345,81194,0,0.7700,0,1,0,1,1,'Dreadmaul Crusher'), +(78345,118675,0,0.2300,0,1,0,1,1,'Dreadmaul Crusher'), +(78345,81212,0,0.0200,0,1,0,1,1,'Dreadmaul Crusher'), +(78489,81194,0,94.0100,0,1,0,1,1,'Snickerfang Pup'), +(78489,81212,0,6.0000,0,1,0,1,1,'Snickerfang Pup'), +(78489,112463,0,0.2000,0,1,0,1,1,'Snickerfang Pup'), +(78674,112463,0,99.7200,0,1,0,1,1,'Ironmarch Scorcher'), +(78674,112684,0,37.2400,0,1,0,1,1,'Ironmarch Scorcher'), +(78674,44754,0,0.0300,0,1,0,1,1,'Ironmarch Scorcher'), +(78674,118675,0,0.0200,0,1,0,1,1,'Ironmarch Scorcher'), +(78348,112463,0,76.2600,0,1,0,1,1,'Dreadmaul Flamebelcher'), +(78348,112684,0,32.1200,0,1,0,1,1,'Dreadmaul Flamebelcher'), +(78348,118675,0,0.1700,0,1,0,1,1,'Dreadmaul Flamebelcher'), +(78348,81212,0,0.0600,0,1,0,1,1,'Dreadmaul Flamebelcher'), +(78670,112463,0,99.7500,0,1,0,1,1,'Ironmarch Warcaster'), +(78670,112684,0,38.0700,0,1,0,1,1,'Ironmarch Warcaster'), +(78670,118675,0,0.2300,0,1,0,1,1,'Ironmarch Warcaster'), +(77653,112463,0,75.1500,0,1,0,1,1,'Ironmarch Warsmith'), +(77653,112684,0,31.4200,0,1,0,1,1,'Ironmarch Warsmith'), +(77653,118675,0,0.2600,0,1,0,1,1,'Ironmarch Warsmith'), +(82774,112463,0,76.6000,0,1,0,1,1,'Ironmarch Executioner'), +(82774,112684,0,31.0100,0,1,0,1,1,'Ironmarch Executioner'), +(82774,118675,0,0.2400,0,1,0,1,1,'Ironmarch Executioner'), +(82774,2295,0,0.0400,0,1,0,1,1,'Ironmarch Executioner'), +(82774,10593,0,0.0100,0,1,0,1,1,'Ironmarch Executioner'), +(77767,112463,0,77.9300,0,1,0,1,1,'Ironmarch Shaman'), +(77767,112684,0,29.9700,0,1,0,1,1,'Ironmarch Shaman'), +(77767,118675,0,0.2200,0,1,0,1,1,'Ironmarch Shaman'), +(76651,112463,0,78.8100,0,1,0,1,1,'Ironmarch Leadspitter'), +(76651,112684,0,28.9600,0,1,0,1,1,'Ironmarch Leadspitter'), +(78488,112463,0,74.4000,0,1,0,1,1,'Dreadmaul Packmaster'), +(78488,112684,0,30.9600,0,1,0,1,1,'Dreadmaul Packmaster'), +(78488,81194,0,3.9900,0,1,0,1,1,'Dreadmaul Packmaster'), +(78488,81212,0,1.8800,0,1,0,1,1,'Dreadmaul Packmaster'), +(78488,118675,0,0.2200,0,1,0,1,1,'Dreadmaul Packmaster'), +(77790,112463,0,77.4700,0,1,0,1,1,'Ironmarch Raider'), +(77790,112684,0,31.6200,0,1,0,1,1,'Ironmarch Raider'), +(77771,112463,0,77.4700,0,1,0,1,1,'Dreadmaul Destroyer'), +(77771,112684,0,28.6900,0,1,0,1,1,'Dreadmaul Destroyer'), +(77845,106870,0,88.0300,0,1,0,1,1,'Ironmarch War Wolf'), +(77845,106889,0,9.7600,0,1,0,1,1,'Ironmarch War Wolf'), +(77845,106873,0,2.0200,0,1,0,1,1,'Ironmarch War Wolf'), +(78696,112463,0,99.4700,0,1,0,1,1,'Ironmarch Champion'), +(78696,112684,0,41.2500,0,1,0,1,1,'Ironmarch Champion'), +(82451,112463,0,99.6100,0,1,0,1,1,'Toothsmash the Annihilator'), +(82451,112684,0,38.3200,0,1,0,1,1,'Toothsmash the Annihilator'); + +UPDATE `creature_template` SET `lootid` = `entry` WHERE `entry` IN (76556,76886,78345,78489,78674,78348,78670,77653,82774,77767,76651,78488,77790,77771,77845,78696,82451); From 7ade5297a5ece32bdd2cfe8f340522086fa2e319 Mon Sep 17 00:00:00 2001 From: Sylvania Date: Mon, 7 Sep 2026 11:33:31 +0200 Subject: [PATCH 30/50] Butin : suite du Draenor, 15 especes sur les 245 annoncees Les 245 especes hostiles a lootid = 0 de la carte 1116 relevees une par une sur Wowhead. 222 n ont effectivement aucun butin sur les royaumes officiels non plus : decors, critters, PNJ scenarises, envahisseurs de fief. 8 autres n ont que des objets post-Legion, absents de notre Item.db2. Restent 15 especes, 65 lignes. Le chiffre de 21 pour cent de mobs hostiles sans butin annonce plus tot etait trompeur : le filtre laissait passer des objets de decor classes humanoides ou betes en base (Renfort de fer, 294 spawns, Champignon gorge...). Le releve controle desormais le statut HTTP 200 et le marqueur g_npcs : sans ca une page de refus 403 se lit exactement comme un PNJ sans butin. 8 refus rencontres et rattrapes sur cette passe. --- ...026_09_07_02_world_butin_draenor_suite.sql | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 sql/updates/world/2026_09_07_02_world_butin_draenor_suite.sql diff --git a/sql/updates/world/2026_09_07_02_world_butin_draenor_suite.sql b/sql/updates/world/2026_09_07_02_world_butin_draenor_suite.sql new file mode 100644 index 0000000..c6407a8 --- /dev/null +++ b/sql/updates/world/2026_09_07_02_world_butin_draenor_suite.sql @@ -0,0 +1,83 @@ +-- Butin manquant : suite du Draenor (carte 1116), apres les zones d'acces. +-- +-- 245 especes hostiles avaient lootid = 0. Relevees une par une sur Wowhead avec +-- controle du statut HTTP 200 et du marqueur g_npcs de la fiche : sans ce controle, +-- une page de refus 403 se lit exactement comme un PNJ sans butin (8 refus rencontres). +-- +-- Resultat : 222 des 245 n'ont effectivement aucun butin sur les royaumes officiels +-- non plus (decors, critters, PNJ scenarises, envahisseurs de fief). 8 autres n'ont +-- que des objets post-Legion, absents de notre Item.db2. Restent 15 especes. +-- +-- Les materiaux type Fourrure somptueuse (111557) sont bien du butin de cadavre ici : +-- ils apparaissent 196 fois dans creature_loot_template et jamais dans skinning_loot_template. + +DELETE FROM `creature_loot_template` WHERE `Entry` IN (73227,73805,74414,76663,76686,77091,77522,78458,78662,78665,78700,80192,82515,82728,86443); +INSERT INTO `creature_loot_template` + (`Entry`,`Item`,`Reference`,`Chance`,`QuestRequired`,`LootMode`,`GroupId`,`MinCount`,`MaxCount`,`Comment`) VALUES +(73227,106870,0,3.1100,0,1,0,1,1,'Wastes Rockworm'), +(73227,106875,0,0.1400,0,1,0,1,1,'Wastes Rockworm'), +(73227,106877,0,0.0900,0,1,0,1,1,'Wastes Rockworm'), +(73227,109131,0,0.7000,0,1,0,1,1,'Wastes Rockworm'), +(73227,111557,0,1.1200,0,1,0,1,1,'Wastes Rockworm'), +(73805,107528,0,1.6200,0,1,0,1,1,'Corrupted Toad'), +(73805,108906,0,0.8400,0,1,0,1,1,'Corrupted Toad'), +(73805,111557,0,0.1700,0,1,0,1,1,'Corrupted Toad'), +(73805,116703,0,0.8400,0,1,0,1,1,'Corrupted Toad'), +(74414,106297,0,0.5200,0,1,0,1,1,'Juvenile Bonestripper'), +(74414,106317,0,1.2200,0,1,0,1,1,'Juvenile Bonestripper'), +(74414,107603,0,3.6700,0,1,0,1,1,'Juvenile Bonestripper'), +(76663,113000,0,4.6200,0,1,0,1,1,'Shadow Infiltrator'), +(76663,113006,0,33.8500,0,1,0,1,1,'Shadow Infiltrator'), +(76663,113007,0,9.2300,0,1,0,1,1,'Shadow Infiltrator'), +(76686,112995,0,6.5200,0,1,0,1,1,'Shadow Pillager'), +(76686,113004,0,13.0400,0,1,0,1,1,'Shadow Pillager'), +(76686,113007,0,6.5200,0,1,0,1,1,'Shadow Pillager'), +(77091,106825,0,15.3800,0,1,0,1,1,'Wild Rylak'), +(77091,107528,0,76.9200,0,1,0,1,1,'Wild Rylak'), +(77091,109133,0,46.1500,0,1,0,1,1,'Wild Rylak'), +(77091,111557,0,38.4600,0,1,0,1,1,'Wild Rylak'), +(77522,106291,0,1.9500,0,1,0,1,1,'Gul''var Peon'), +(77522,106298,0,0.3500,0,1,0,1,1,'Gul''var Peon'), +(77522,106301,0,0.8900,0,1,0,1,1,'Gul''var Peon'), +(77522,106302,0,0.1800,0,1,0,1,1,'Gul''var Peon'), +(77522,106312,0,1.9500,0,1,0,1,1,'Gul''var Peon'), +(77522,106322,0,0.8900,0,1,0,1,1,'Gul''var Peon'), +(77522,106323,0,0.1800,0,1,0,1,1,'Gul''var Peon'), +(77522,106324,0,1.0600,0,1,0,1,1,'Gul''var Peon'), +(77522,106489,0,0.8900,0,1,0,1,1,'Gul''var Peon'), +(77522,106540,0,0.1800,0,1,0,1,1,'Gul''var Peon'), +(77522,106556,0,0.1800,0,1,0,1,1,'Gul''var Peon'), +(77522,106574,0,0.4100,0,1,0,1,1,'Gul''var Peon'), +(77522,106581,0,0.1800,0,1,0,1,1,'Gul''var Peon'), +(77522,106583,0,0.3500,0,1,0,1,1,'Gul''var Peon'), +(77522,106870,0,1.6500,0,1,0,1,1,'Gul''var Peon'), +(77522,111364,0,1.1200,0,1,0,1,1,'Gul''var Peon'), +(77522,111387,0,0.4100,0,1,0,1,1,'Gul''var Peon'), +(77522,111557,0,0.3500,0,1,0,1,1,'Gul''var Peon'), +(77522,113295,0,0.3500,0,1,0,1,1,'Gul''var Peon'), +(77522,113478,0,1.1200,0,1,0,1,1,'Gul''var Peon'), +(77522,116709,0,0.3500,0,1,0,1,1,'Gul''var Peon'), +(78458,106867,0,8.4500,0,1,0,1,1,'Abyssal Invader'), +(78458,116122,0,16.4300,0,1,0,1,1,'Abyssal Invader'), +(78662,106459,0,22.7300,0,1,0,1,1,'Thunderlord Cutter'), +(78662,107603,0,4.5500,0,1,0,1,1,'Thunderlord Cutter'), +(78665,106304,0,1.9600,0,1,0,1,1,'Thunderlord Shaman'), +(78665,106472,0,1.9600,0,1,0,1,1,'Thunderlord Shaman'), +(78665,106876,0,5.8800,0,1,0,1,1,'Thunderlord Shaman'), +(78665,113381,0,4.5800,0,1,0,1,1,'Thunderlord Shaman'), +(78700,106295,0,2.1300,0,1,0,1,1,'Thunderlord Provisioner'), +(78700,106464,0,23.4000,0,1,0,1,1,'Thunderlord Provisioner'), +(80192,111953,0,4.5000,0,1,0,1,1,'Icecave Bat'), +(82515,106824,0,27.7400,0,1,0,1,1,'Darktalon Hatchling'), +(82515,106825,0,18.0600,0,1,0,1,1,'Darktalon Hatchling'), +(82728,106870,0,33.2800,0,1,0,1,1,'Agitated Piglet'), +(82728,107517,0,13.5500,0,1,0,1,1,'Agitated Piglet'), +(82728,108977,0,18.1800,0,1,0,1,1,'Agitated Piglet'), +(82728,109136,0,19.7300,0,1,0,1,1,'Agitated Piglet'), +(82728,111557,0,13.8900,0,1,0,1,1,'Agitated Piglet'), +(82728,118200,0,3.6000,0,1,0,1,1,'Agitated Piglet'), +(82728,118281,0,1.0300,0,1,0,1,1,'Agitated Piglet'), +(86443,106315,0,2.1300,0,1,0,1,1,'Ogron Pitfighter'), +(86443,106735,0,6.3800,0,1,0,1,1,'Ogron Pitfighter'); + +UPDATE `creature_template` SET `lootid` = `entry` WHERE `entry` IN (73227,73805,74414,76663,76686,77091,77522,78458,78662,78665,78700,80192,82515,82728,86443); From 65365ce3312c26fdc3fca5cfb1678fc7a1e5983a Mon Sep 17 00:00:00 2001 From: Sylvania Date: Mon, 7 Sep 2026 11:44:12 +0200 Subject: [PATCH 31/50] Butin : 35 especes des Iles Brisees ne lachaient rien Filtre affine par HealthModifier >= 1, qui ecarte decors et critters. 102 especes hostiles a lootid = 0 relevees sur Wowhead, statut HTTP et marqueur g_npcs controles. Wowhead agrege le jeu moderne : 3727 lignes brutes, 235 retenues apres trois filtres. Ecartes : objets absents de notre Item.db2, taux sous 1 pour cent, et objets jamais utilises comme butin de cadavre chez nous. Ce dernier ecarte les materiaux a dominante depecage (124113 Cuir de rochepeau : 19 usages en butin contre 284 en depecage) et les objets de quete qui exigeraient QuestRequired. Objet dominant : 124437 Soie shal dorei a environ 50 pour cent sur les humanoides, equivalent Legion des Fragments d armure abimes du Draenor. --- ...2026_09_07_03_world_butin_iles_brisees.sql | 260 ++++++++++++++++++ 1 file changed, 260 insertions(+) create mode 100644 sql/updates/world/2026_09_07_03_world_butin_iles_brisees.sql diff --git a/sql/updates/world/2026_09_07_03_world_butin_iles_brisees.sql b/sql/updates/world/2026_09_07_03_world_butin_iles_brisees.sql new file mode 100644 index 0000000..f91090b --- /dev/null +++ b/sql/updates/world/2026_09_07_03_world_butin_iles_brisees.sql @@ -0,0 +1,260 @@ +-- Butin manquant : Iles Brisees (carte 1220). +-- +-- 102 especes hostiles avaient lootid = 0 (filtre affine : HealthModifier >= 1, qui +-- ecarte les decors et critters ; sans lui le comptage brut donnait 124 especes). +-- Relevees sur Wowhead avec controle du statut HTTP 200 et du marqueur g_npcs. +-- +-- Wowhead agrege le jeu MODERNE : ces PNJ existent toujours et lachent des objets +-- d extensions posterieures. Sur 3727 lignes brutes relevees, seules 235 survivent +-- a trois filtres : objet present dans notre Item.db2, taux >= 1 pour cent, et objet +-- deja utilise comme butin de cadavre ailleurs dans nos tables. +-- +-- Ce dernier filtre ecarte deux categories a risque : les materiaux a dominante +-- depecage (124113 Cuir de rochepeau, 124115, 129888, 129903, 134808) qui relevent +-- de skinning_loot_template, et les objets de quete jamais utilises chez nous +-- (147356 Balise de Sentinax brisee, 146684, 133995, 144362, 147396, 142079...) qui +-- exigeraient QuestRequired = 1 et une quete correspondante. +-- +-- Objet dominant cote humanoides : 124437 Soie shal'dorei, a environ 50 pour cent. +-- C'est l'equivalent Legion des Fragments d'armure abimes du Draenor. + +DELETE FROM `creature_loot_template` WHERE `Entry` IN (98805,102106,106798,109702,110346,111454,111463,111632,111638,111674,111821,111823,113388,115054,115431,115434,115601,115646,115648,116427,116466,116468,116469,116470,116472,118264,118294,118657,118660,118679,118680,118683,118943,119139,120342); +INSERT INTO `creature_loot_template` + (`Entry`,`Item`,`Reference`,`Chance`,`QuestRequired`,`LootMode`,`GroupId`,`MinCount`,`MaxCount`,`Comment`) VALUES +(98805,124437,0,48.1200,0,1,0,1,1,'Vilewing Hexer'), +(98805,121075,0,2.5100,0,1,0,1,1,'Vilewing Hexer'), +(98805,121336,0,1.6700,0,1,0,1,1,'Vilewing Hexer'), +(98805,121344,0,1.6700,0,1,0,1,1,'Vilewing Hexer'), +(98805,121340,0,1.2600,0,1,0,1,1,'Vilewing Hexer'), +(98805,138781,0,1.2600,0,1,0,1,1,'Vilewing Hexer'), +(102106,132184,0,72.1500,0,1,0,1,1,'Starving Basilisk'), +(102106,132183,0,21.8700,0,1,0,1,1,'Starving Basilisk'), +(102106,124439,0,5.5700,0,1,0,1,1,'Starving Basilisk'), +(102106,132190,0,3.8300,0,1,0,1,1,'Starving Basilisk'), +(102106,124438,0,2.1300,0,1,0,1,1,'Starving Basilisk'), +(106798,140220,0,10.4200,0,1,0,1,1,'Nora Blackfire'), +(106798,138781,0,5.2100,0,1,0,1,1,'Nora Blackfire'), +(106798,141031,0,2.0800,0,1,0,1,1,'Nora Blackfire'), +(106798,147430,0,1.0400,0,1,0,1,1,'Nora Blackfire'), +(109702,132183,0,60.7700,0,1,0,1,1,'Deepclaw'), +(109702,132190,0,23.8900,0,1,0,1,1,'Deepclaw'), +(109702,138839,0,17.5800,0,1,0,1,1,'Deepclaw'), +(109702,132184,0,14.3600,0,1,0,1,1,'Deepclaw'), +(109702,121054,0,3.1100,0,1,0,1,1,'Deepclaw'), +(110346,138839,0,17.6200,0,1,0,1,1,'Aodh Witherpetal'), +(110346,121215,0,4.3400,0,1,0,1,1,'Aodh Witherpetal'), +(110346,121355,0,3.3300,0,1,0,1,1,'Aodh Witherpetal'), +(110346,121347,0,1.3900,0,1,0,1,1,'Aodh Witherpetal'), +(110346,121168,0,1.0900,0,1,0,1,1,'Aodh Witherpetal'), +(110346,121335,0,1.0800,0,1,0,1,1,'Aodh Witherpetal'), +(110346,121173,0,1.0600,0,1,0,1,1,'Aodh Witherpetal'), +(111454,132183,0,63.7400,0,1,0,1,1,'Bestrix'), +(111454,138839,0,20.4200,0,1,0,1,1,'Bestrix'), +(111454,132190,0,18.8900,0,1,0,1,1,'Bestrix'), +(111454,132184,0,12.4300,0,1,0,1,1,'Bestrix'), +(111463,68055,0,100.0000,0,1,0,1,1,'Bulvinkel'), +(111632,121006,0,19.9100,0,1,0,1,1,'Hatecoil Crusher'), +(111632,124437,0,13.4200,0,1,0,1,1,'Hatecoil Crusher'), +(111632,121040,0,6.0400,0,1,0,1,1,'Hatecoil Crusher'), +(111632,121339,0,3.8000,0,1,0,1,1,'Hatecoil Crusher'), +(111632,141284,0,3.5800,0,1,0,1,1,'Hatecoil Crusher'), +(111632,121003,0,3.3600,0,1,0,1,1,'Hatecoil Crusher'), +(111632,121360,0,2.6800,0,1,0,1,1,'Hatecoil Crusher'), +(111632,121365,0,2.6800,0,1,0,1,1,'Hatecoil Crusher'), +(111632,121333,0,2.2400,0,1,0,1,1,'Hatecoil Crusher'), +(111632,121372,0,2.2400,0,1,0,1,1,'Hatecoil Crusher'), +(111632,121373,0,2.2400,0,1,0,1,1,'Hatecoil Crusher'), +(111632,121028,0,2.0100,0,1,0,1,1,'Hatecoil Crusher'), +(111632,121354,0,2.0100,0,1,0,1,1,'Hatecoil Crusher'), +(111632,121362,0,1.7900,0,1,0,1,1,'Hatecoil Crusher'), +(111632,121371,0,1.7900,0,1,0,1,1,'Hatecoil Crusher'), +(111632,121020,0,1.5700,0,1,0,1,1,'Hatecoil Crusher'), +(111632,121045,0,1.5700,0,1,0,1,1,'Hatecoil Crusher'), +(111632,121336,0,1.5700,0,1,0,1,1,'Hatecoil Crusher'), +(111632,121340,0,1.5700,0,1,0,1,1,'Hatecoil Crusher'), +(111632,121353,0,1.5700,0,1,0,1,1,'Hatecoil Crusher'), +(111632,121404,0,1.5700,0,1,0,1,1,'Hatecoil Crusher'), +(111632,139520,0,1.5700,0,1,0,1,1,'Hatecoil Crusher'), +(111632,121052,0,1.3400,0,1,0,1,1,'Hatecoil Crusher'), +(111632,121331,0,1.3400,0,1,0,1,1,'Hatecoil Crusher'), +(111632,121338,0,1.3400,0,1,0,1,1,'Hatecoil Crusher'), +(111632,121351,0,1.3400,0,1,0,1,1,'Hatecoil Crusher'), +(111632,121368,0,1.3400,0,1,0,1,1,'Hatecoil Crusher'), +(111632,141285,0,1.3400,0,1,0,1,1,'Hatecoil Crusher'), +(111632,121008,0,1.1200,0,1,0,1,1,'Hatecoil Crusher'), +(111632,121019,0,1.1200,0,1,0,1,1,'Hatecoil Crusher'), +(111632,121055,0,1.1200,0,1,0,1,1,'Hatecoil Crusher'), +(111632,121347,0,1.1200,0,1,0,1,1,'Hatecoil Crusher'), +(111632,121366,0,1.1200,0,1,0,1,1,'Hatecoil Crusher'), +(111638,124437,0,52.2500,0,1,0,1,1,'Hatecoil Stormweaver'), +(111638,141284,0,9.7500,0,1,0,1,1,'Hatecoil Stormweaver'), +(111638,121001,0,4.4700,0,1,0,1,1,'Hatecoil Stormweaver'), +(111638,121347,0,4.4600,0,1,0,1,1,'Hatecoil Stormweaver'), +(111638,141285,0,2.4300,0,1,0,1,1,'Hatecoil Stormweaver'), +(111638,121016,0,2.3900,0,1,0,1,1,'Hatecoil Stormweaver'), +(111638,121022,0,2.2200,0,1,0,1,1,'Hatecoil Stormweaver'), +(111638,132183,0,2.2000,0,1,0,1,1,'Hatecoil Stormweaver'), +(111638,138781,0,1.7300,0,1,0,1,1,'Hatecoil Stormweaver'), +(111638,121335,0,1.4200,0,1,0,1,1,'Hatecoil Stormweaver'), +(111638,121360,0,1.3600,0,1,0,1,1,'Hatecoil Stormweaver'), +(111638,121334,0,1.0200,0,1,0,1,1,'Hatecoil Stormweaver'), +(111674,132231,0,36.3100,0,1,0,1,1,'Cinderwing'), +(111674,132199,0,31.7900,0,1,0,1,1,'Cinderwing'), +(111674,132197,0,31.4100,0,1,0,1,1,'Cinderwing'), +(111674,138839,0,22.1700,0,1,0,1,1,'Cinderwing'), +(111674,121331,0,2.8700,0,1,0,1,1,'Cinderwing'), +(111821,124437,0,37.3900,0,1,0,1,1,'Felsworn Adept'), +(111821,140227,0,5.9100,0,1,0,1,1,'Felsworn Adept'), +(111821,121351,0,5.7000,0,1,0,1,1,'Felsworn Adept'), +(111821,121344,0,2.9200,0,1,0,1,1,'Felsworn Adept'), +(111821,121347,0,2.7100,0,1,0,1,1,'Felsworn Adept'), +(111821,121371,0,2.7100,0,1,0,1,1,'Felsworn Adept'), +(111821,121336,0,1.7400,0,1,0,1,1,'Felsworn Adept'), +(111821,121350,0,1.6700,0,1,0,1,1,'Felsworn Adept'), +(111821,121340,0,1.6000,0,1,0,1,1,'Felsworn Adept'), +(111821,121337,0,1.5300,0,1,0,1,1,'Felsworn Adept'), +(111821,121352,0,1.4600,0,1,0,1,1,'Felsworn Adept'), +(111821,132199,0,1.4600,0,1,0,1,1,'Felsworn Adept'), +(111821,121005,0,1.3900,0,1,0,1,1,'Felsworn Adept'), +(111821,121338,0,1.3900,0,1,0,1,1,'Felsworn Adept'), +(111821,121050,0,1.1800,0,1,0,1,1,'Felsworn Adept'), +(111821,121364,0,1.0400,0,1,0,1,1,'Felsworn Adept'), +(111823,124437,0,66.1700,0,1,0,1,1,'Felsworn Betrayer'), +(111823,121027,0,4.3300,0,1,0,1,1,'Felsworn Betrayer'), +(111823,121352,0,3.0100,0,1,0,1,1,'Felsworn Betrayer'), +(111823,138781,0,2.3800,0,1,0,1,1,'Felsworn Betrayer'), +(111823,121332,0,2.2700,0,1,0,1,1,'Felsworn Betrayer'), +(111823,121346,0,1.8300,0,1,0,1,1,'Felsworn Betrayer'), +(111823,121040,0,1.8000,0,1,0,1,1,'Felsworn Betrayer'), +(111823,121022,0,1.3600,0,1,0,1,1,'Felsworn Betrayer'), +(111823,121369,0,1.3600,0,1,0,1,1,'Felsworn Betrayer'), +(111823,121349,0,1.3200,0,1,0,1,1,'Felsworn Betrayer'), +(111823,121004,0,1.2800,0,1,0,1,1,'Felsworn Betrayer'), +(111823,121047,0,1.2800,0,1,0,1,1,'Felsworn Betrayer'), +(111823,121368,0,1.2800,0,1,0,1,1,'Felsworn Betrayer'), +(111823,121358,0,1.2500,0,1,0,1,1,'Felsworn Betrayer'), +(111823,140222,0,1.2500,0,1,0,1,1,'Felsworn Betrayer'), +(113388,124437,0,42.7900,0,1,0,1,1,'Squigglefin Crablord'), +(113388,138781,0,29.1800,0,1,0,1,1,'Squigglefin Crablord'), +(113388,121349,0,4.7400,0,1,0,1,1,'Squigglefin Crablord'), +(113388,121345,0,2.0700,0,1,0,1,1,'Squigglefin Crablord'), +(113388,121358,0,1.5600,0,1,0,1,1,'Squigglefin Crablord'), +(113388,121028,0,1.5400,0,1,0,1,1,'Squigglefin Crablord'), +(113388,121373,0,1.5400,0,1,0,1,1,'Squigglefin Crablord'), +(113388,140221,0,1.5100,0,1,0,1,1,'Squigglefin Crablord'), +(113388,121343,0,1.4400,0,1,0,1,1,'Squigglefin Crablord'), +(113388,121021,0,1.3900,0,1,0,1,1,'Squigglefin Crablord'), +(113388,121008,0,1.3700,0,1,0,1,1,'Squigglefin Crablord'), +(113388,121040,0,1.3700,0,1,0,1,1,'Squigglefin Crablord'), +(113388,121347,0,1.3700,0,1,0,1,1,'Squigglefin Crablord'), +(113388,121342,0,1.2600,0,1,0,1,1,'Squigglefin Crablord'), +(115054,132204,0,74.1600,0,1,0,1,1,'Wyrmtongue Scavenger'), +(115054,132199,0,21.5200,0,1,0,1,1,'Wyrmtongue Scavenger'), +(115054,124437,0,10.7300,0,1,0,1,1,'Wyrmtongue Scavenger'), +(115054,132200,0,3.6800,0,1,0,1,1,'Wyrmtongue Scavenger'), +(115431,132184,0,79.3300,0,1,0,1,1,'Savage Great White'), +(115431,132183,0,18.1800,0,1,0,1,1,'Savage Great White'), +(115431,124439,0,6.8400,0,1,0,1,1,'Savage Great White'), +(115431,132182,0,2.4900,0,1,0,1,1,'Savage Great White'), +(115434,132184,0,74.6600,0,1,0,1,1,'Isle Hammerhead'), +(115434,132183,0,13.4900,0,1,0,1,1,'Isle Hammerhead'), +(115434,132182,0,11.7600,0,1,0,1,1,'Isle Hammerhead'), +(115434,124439,0,6.0300,0,1,0,1,1,'Isle Hammerhead'), +(115601,132231,0,78.3300,0,1,0,1,1,'Infernal Hound'), +(115601,132199,0,16.5500,0,1,0,1,1,'Infernal Hound'), +(115601,132197,0,5.0300,0,1,0,1,1,'Infernal Hound'), +(115646,132204,0,73.2000,0,1,0,1,1,'Felfire Tormentor'), +(115646,132199,0,21.0900,0,1,0,1,1,'Felfire Tormentor'), +(115646,124437,0,8.7900,0,1,0,1,1,'Felfire Tormentor'), +(115646,132200,0,5.6200,0,1,0,1,1,'Felfire Tormentor'), +(115646,138781,0,1.1300,0,1,0,1,1,'Felfire Tormentor'), +(115648,132204,0,75.9500,0,1,0,1,1,'Azrok the Torturer'), +(115648,132199,0,21.6800,0,1,0,1,1,'Azrok the Torturer'), +(115648,124437,0,9.9300,0,1,0,1,1,'Azrok the Torturer'), +(115648,132200,0,2.3400,0,1,0,1,1,'Azrok the Torturer'), +(116427,124437,0,50.6500,0,1,0,1,1,'Felbound Spirit'), +(116427,121358,0,2.9200,0,1,0,1,1,'Felbound Spirit'), +(116466,124437,0,49.3400,0,1,0,1,1,'Felbound Spirit'), +(116466,121343,0,2.7400,0,1,0,1,1,'Felbound Spirit'), +(116466,121367,0,2.3400,0,1,0,1,1,'Felbound Spirit'), +(116466,121335,0,2.0000,0,1,0,1,1,'Felbound Spirit'), +(116466,121354,0,1.9100,0,1,0,1,1,'Felbound Spirit'), +(116466,121370,0,1.3200,0,1,0,1,1,'Felbound Spirit'), +(116466,121356,0,1.1000,0,1,0,1,1,'Felbound Spirit'), +(116466,138781,0,1.0500,0,1,0,1,1,'Felbound Spirit'), +(116468,124437,0,59.8700,0,1,0,1,1,'Felbound Spirit'), +(116468,140227,0,1.8200,0,1,0,1,1,'Felbound Spirit'), +(116468,121358,0,1.7800,0,1,0,1,1,'Felbound Spirit'), +(116468,138781,0,1.4800,0,1,0,1,1,'Felbound Spirit'), +(116468,121344,0,1.3600,0,1,0,1,1,'Felbound Spirit'), +(116468,121339,0,1.3200,0,1,0,1,1,'Felbound Spirit'), +(116469,124437,0,54.5000,0,1,0,1,1,'Felbound Spirit'), +(116469,121341,0,6.1700,0,1,0,1,1,'Felbound Spirit'), +(116469,121367,0,3.0400,0,1,0,1,1,'Felbound Spirit'), +(116469,121335,0,2.7900,0,1,0,1,1,'Felbound Spirit'), +(116469,121360,0,2.0700,0,1,0,1,1,'Felbound Spirit'), +(116469,144345,0,1.5500,0,1,0,1,1,'Felbound Spirit'), +(116469,121355,0,1.4000,0,1,0,1,1,'Felbound Spirit'), +(116469,140227,0,1.2500,0,1,0,1,1,'Felbound Spirit'), +(116469,138781,0,1.2300,0,1,0,1,1,'Felbound Spirit'), +(116470,124437,0,51.8200,0,1,0,1,1,'Felbound Spirit'), +(116470,121341,0,2.5900,0,1,0,1,1,'Felbound Spirit'), +(116470,121369,0,2.4200,0,1,0,1,1,'Felbound Spirit'), +(116470,121370,0,2.3800,0,1,0,1,1,'Felbound Spirit'), +(116470,121346,0,1.7800,0,1,0,1,1,'Felbound Spirit'), +(116470,121411,0,1.3700,0,1,0,1,1,'Felbound Spirit'), +(116470,138781,0,1.2900,0,1,0,1,1,'Felbound Spirit'), +(116472,124437,0,55.5900,0,1,0,1,1,'Felbound Spirit'), +(116472,140227,0,2.1500,0,1,0,1,1,'Felbound Spirit'), +(116472,121365,0,1.8200,0,1,0,1,1,'Felbound Spirit'), +(116472,121331,0,1.2900,0,1,0,1,1,'Felbound Spirit'), +(116472,138781,0,1.2500,0,1,0,1,1,'Felbound Spirit'), +(116472,121342,0,1.1900,0,1,0,1,1,'Felbound Spirit'), +(116472,121360,0,1.1300,0,1,0,1,1,'Felbound Spirit'), +(116472,140222,0,1.1100,0,1,0,1,1,'Felbound Spirit'), +(116472,121344,0,1.0000,0,1,0,1,1,'Felbound Spirit'), +(118264,124437,0,46.5100,0,1,0,1,1,'Felbound Spirit'), +(118264,121352,0,3.3800,0,1,0,1,1,'Felbound Spirit'), +(118264,121333,0,2.4900,0,1,0,1,1,'Felbound Spirit'), +(118264,140225,0,1.9900,0,1,0,1,1,'Felbound Spirit'), +(118264,121340,0,1.8300,0,1,0,1,1,'Felbound Spirit'), +(118264,121356,0,1.6400,0,1,0,1,1,'Felbound Spirit'), +(118264,121337,0,1.0700,0,1,0,1,1,'Felbound Spirit'), +(118264,121345,0,1.0000,0,1,0,1,1,'Felbound Spirit'), +(118294,124437,0,53.4200,0,1,0,1,1,'Felbound Spirit'), +(118294,147729,0,4.4700,0,1,0,1,1,'Felbound Spirit'), +(118294,121350,0,2.4100,0,1,0,1,1,'Felbound Spirit'), +(118294,121357,0,2.0900,0,1,0,1,1,'Felbound Spirit'), +(118294,121333,0,1.5000,0,1,0,1,1,'Felbound Spirit'), +(118657,132233,0,74.1100,0,1,0,1,1,'Tormented Wailer'), +(118657,132234,0,21.7300,0,1,0,1,1,'Tormented Wailer'), +(118657,132232,0,4.0600,0,1,0,1,1,'Tormented Wailer'), +(118660,132233,0,74.1900,0,1,0,1,1,'Broken Soul'), +(118660,132234,0,20.0700,0,1,0,1,1,'Broken Soul'), +(118660,124437,0,10.2100,0,1,0,1,1,'Broken Soul'), +(118660,132232,0,5.4100,0,1,0,1,1,'Broken Soul'), +(118679,124437,0,50.8200,0,1,0,1,1,'Deepsurge Tidesinger'), +(118679,138781,0,1.4000,0,1,0,1,1,'Deepsurge Tidesinger'), +(118679,121370,0,1.3800,0,1,0,1,1,'Deepsurge Tidesinger'), +(118679,121344,0,1.2900,0,1,0,1,1,'Deepsurge Tidesinger'), +(118679,121361,0,1.1800,0,1,0,1,1,'Deepsurge Tidesinger'), +(118680,124437,0,48.0000,0,1,0,1,1,'Deepsurge Punisher'), +(118680,121335,0,5.1500,0,1,0,1,1,'Deepsurge Punisher'), +(118680,121362,0,1.8200,0,1,0,1,1,'Deepsurge Punisher'), +(118680,138781,0,1.5600,0,1,0,1,1,'Deepsurge Punisher'), +(118680,121366,0,1.5000,0,1,0,1,1,'Deepsurge Punisher'), +(118683,124437,0,49.6300,0,1,0,1,1,'Deepsurge Defender'), +(118683,138781,0,1.2800,0,1,0,1,1,'Deepsurge Defender'), +(118683,121361,0,1.2400,0,1,0,1,1,'Deepsurge Defender'), +(118683,140227,0,1.1600,0,1,0,1,1,'Deepsurge Defender'), +(118943,124437,0,20.1000,0,1,0,1,1,'Felborne Abjurer'), +(119139,132184,0,72.2300,0,1,0,1,1,'Stoneblood Basilisk'), +(119139,132183,0,23.4300,0,1,0,1,1,'Stoneblood Basilisk'), +(119139,124439,0,7.5800,0,1,0,1,1,'Stoneblood Basilisk'), +(119139,132190,0,3.1100,0,1,0,1,1,'Stoneblood Basilisk'), +(120342,132204,0,69.9000,0,1,0,1,1,'Dread Felbat'), +(120342,132199,0,26.0400,0,1,0,1,1,'Dread Felbat'), +(120342,124437,0,11.1500,0,1,0,1,1,'Dread Felbat'), +(120342,132200,0,3.4500,0,1,0,1,1,'Dread Felbat'); + +UPDATE `creature_template` SET `lootid` = `entry` WHERE `entry` IN (98805,102106,106798,109702,110346,111454,111463,111632,111638,111674,111821,111823,113388,115054,115431,115434,115601,115646,115648,116427,116466,116468,116469,116470,116472,118264,118294,118657,118660,118679,118680,118683,118943,119139,120342); From d863aca69a35de6e8b9ab3aff859894070dfdab6 Mon Sep 17 00:00:00 2001 From: Sylvania Date: Mon, 7 Sep 2026 12:41:49 +0200 Subject: [PATCH 32/50] Butin : objets de quete manquants des Iles Brisees Trois objectifs de quete (quest_objectives Type 1) n existaient dans aucune table de butin du serveur : 142079, 144362, 147396. Poses avec QuestRequired = 1. Taux repris de la fiche PNJ de Wowhead et non de la fiche objet : les deux divergent (Gemme pulsatile a 19,66 pour cent cote objet contre 82 cote PNJ), et c est la fiche PNJ qui est juste, verifiee a l ecran. Les trois quetes sont des quetes MONDIALES (QuestType 3, QuestInfoID 109) : sans donneur par construction, leur disponibilite depend du systeme de quetes mondiales. 41039 Un savoir vole non traitee : seule quete classique du lot, donc la seule reellement bloquee, mais son objet 133995 n existe pas dans ItemSparse. Le serveur rejette la ligne au chargement. Demande un DB2 custom par hotfix. --- ..._07_04_world_objets_quete_iles_brisees.sql | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 sql/updates/world/2026_09_07_04_world_objets_quete_iles_brisees.sql diff --git a/sql/updates/world/2026_09_07_04_world_objets_quete_iles_brisees.sql b/sql/updates/world/2026_09_07_04_world_objets_quete_iles_brisees.sql new file mode 100644 index 0000000..25c9636 --- /dev/null +++ b/sql/updates/world/2026_09_07_04_world_objets_quete_iles_brisees.sql @@ -0,0 +1,36 @@ +-- Objets de quete manquants : Iles Brisees. +-- +-- Trois objets sont des objectifs de quete reels chez nous (quest_objectives Type 1) +-- et n'existaient dans AUCUNE table de butin du serveur. +-- +-- QuestRequired = 1 : le core ne fait tomber l'objet que pour un joueur ayant la quete. +-- +-- Taux repris de la fiche PNJ de Wowhead, PAS de la fiche objet : les deux divergent +-- (Gemme pulsatile donnee a 19,66 % cote objet contre 82 % cote PNJ). C'est la fiche +-- PNJ qui est juste, verifiee a l'ecran : 879 421 sur 1 074 500 kills. +-- +-- 44748, 46198 et 46236 sont des quetes MONDIALES (QuestType 3, QuestInfoID 109, +-- zone 7543 Rivage brise). Elles n'ont ni donneur ni rendeur par construction : leur +-- butin est desormais correct, mais leur disponibilite depend du systeme de quetes +-- mondiales, qui n'est pas verifie ici. +-- +-- 41039 "Un savoir vole" NON TRAITEE. C'est pourtant la seule quete classique du lot, +-- avec donneur et rendeur presents, donc la seule reellement jouable et bloquee. Mais +-- son objet 133995 "Recette de biere de tempete" n'existe pas dans nos donnees : le +-- serveur rejette la ligne au chargement, avec +-- Table 'creature_loot_template' Entry 102852 Item 133995: item entry not listed +-- in `item_template` - skipped +-- L'objet figure dans Item.db2 mais pas dans ItemSparse.db2, et c'est ItemSparse qui +-- compte pour le serveur. Debloquer cette quete demande un enregistrement DB2 custom +-- par hotfix, pas une ligne de butin. +-- +-- Non traite egalement : 147430, objectif de la quete 46765. Wowhead le donne sur +-- environ 200 PNJ de tout le jeu, de 0,01 a 100 pour cent : c'est un butin mondial, +-- qui releve d'une table de reference et non d'une ligne par creature. + +DELETE FROM `creature_loot_template` WHERE (`Entry`,`Item`) IN ((115054,142079),(118943,144362),(119139,147396)); +INSERT INTO `creature_loot_template` + (`Entry`,`Item`,`Reference`,`Chance`,`QuestRequired`,`LootMode`,`GroupId`,`MinCount`,`MaxCount`,`Comment`) VALUES +(115054,142079,0,24.8100,1,1,0,1,1,'Wyrmtongue Scavenger - Ravitaillement naufrage (quete mondiale 44748)'), +(118943,144362,0,81.8600,1,1,0,1,1,'Felborne Abjurer - Gemme pulsatile (quete mondiale 46198)'), +(119139,147396,0,61.9000,1,1,0,1,1,'Stoneblood Basilisk - Oeil de basilic (quete mondiale 46236)'); From 5427805396a81c926a75e857c8a6bb25f7d5130b Mon Sep 17 00:00:00 2001 From: Sylvania Date: Mon, 7 Sep 2026 22:45:03 +0200 Subject: [PATCH 33/50] Butin : quetes 41039 et 46765, plus reliquat des Iles Brisees Quete 41039 : son objet 133995 Recette du breuvage des tempetes existe dans Item.db2 mais pas dans ItemSparse.db2, or le core exige les deux. Verifie par le serveur lui-meme : 104 011 ItemTemplate charges pour 103 967 enregistrements ItemSparse, donc le fichier est lu en entier. Cree par hotfix DB2 (table miroir + hotfix_data, TableHash 0x919BE54E) et HotfixCacheVersion passe de 1 a 2. Quete 46765 : objet 147430 absent de toute table de butin. 199 lacheurs listes par Wowhead, 58 spawnes chez nous, 49 lachent effectivement l objet. Taux releves sur les fiches PNJ, QuestRequired = 1. Reliquat des 67 especes : 53 n ont aucune donnee Wowhead, 11 n ont que des objets post-Legion. Restaient 3 cas reels, tous traites : 102852 par le hotfix, 100231 par la Meteorite gangrenee, 113198 par une table de depecage. --- ..._00_hotfixes_recette_breuvage_tempetes.sql | 27 +++++++ .../2026_09_07_05_world_butin_morjirn.sql | 9 +++ ...09_07_06_world_quete_46765_et_reliquat.sql | 75 +++++++++++++++++++ .../2026_09_07_07_world_depecage_113198.sql | 16 ++++ 4 files changed, 127 insertions(+) create mode 100644 sql/updates/hotfixes/2026_09_07_00_hotfixes_recette_breuvage_tempetes.sql create mode 100644 sql/updates/world/2026_09_07_05_world_butin_morjirn.sql create mode 100644 sql/updates/world/2026_09_07_06_world_quete_46765_et_reliquat.sql create mode 100644 sql/updates/world/2026_09_07_07_world_depecage_113198.sql diff --git a/sql/updates/hotfixes/2026_09_07_00_hotfixes_recette_breuvage_tempetes.sql b/sql/updates/hotfixes/2026_09_07_00_hotfixes_recette_breuvage_tempetes.sql new file mode 100644 index 0000000..68aa46d --- /dev/null +++ b/sql/updates/hotfixes/2026_09_07_00_hotfixes_recette_breuvage_tempetes.sql @@ -0,0 +1,27 @@ +-- Objet 133995 "Recette du breuvage des tempetes" : enregistrement DB2 custom. +-- +-- La quete 41039 "Un savoir vole" (Suramar) exige cet objet, lache par Morjirn (102852). +-- L'objet existe dans Item.db2 mais PAS dans ItemSparse.db2 : le core ne construit un +-- ItemTemplate que si les deux sont presents (ObjectMgr::LoadItemTemplates), donc le +-- serveur l'ignorait et rejetait toute ligne de butin le referencant : +-- Table 'creature_loot_template' Entry 102852 Item 133995: item entry not listed +-- in `item_template` - skipped +-- Verifie : 104 011 ItemTemplate charges pour 103 967 enregistrements ItemSparse, donc +-- le fichier est bien lu en entier et l'objet en est reellement absent. +-- +-- Methode : ligne dans la table miroir + ligne hotfix_data (sans quoi l'enregistrement +-- n'existerait que cote serveur) + bump de HotfixCacheVersion pour invalider le cache +-- ADB des clients. TableHash d'ItemSparse.db2 = 0x919BE54E, lu a l'offset 20 de l'en-tete WDC1. +-- +-- Nom en francais dans la colonne de base : le serveur ne sert que la locale enUS +-- (DBC.Locale = 0), donc item_sparse_locale ne serait jamais consulte. Le libelle reprend +-- celui de l'objectif de quete traduit : "Recette du breuvage des tempetes". + +DELETE FROM `item_sparse` WHERE `ID` = 133995; +INSERT INTO `item_sparse` + (`ID`,`AllowableRace`,`AllowableClass`,`Display`,`OverallQualityID`,`ItemLevel`,`Stackable`,`MaxCount`,`Bonding`,`ExpansionID`,`VerifiedBuild`) +VALUES + (133995, -1, -1, 'Recette du breuvage des tempêtes', 1, 1, 1, 1, 4, 6, 0); + +DELETE FROM `hotfix_data` WHERE `TableHash` = 2442913102 AND `RecordId` = 133995; +INSERT INTO `hotfix_data` (`Id`,`TableHash`,`RecordId`,`Deleted`) VALUES (391, 2442913102, 133995, 0); diff --git a/sql/updates/world/2026_09_07_05_world_butin_morjirn.sql b/sql/updates/world/2026_09_07_05_world_butin_morjirn.sql new file mode 100644 index 0000000..e710182 --- /dev/null +++ b/sql/updates/world/2026_09_07_05_world_butin_morjirn.sql @@ -0,0 +1,9 @@ +-- Butin de Morjirn (102852) : Recette du breuvage des tempetes, objectif de la quete +-- 41039 "Un savoir vole". Ne peut fonctionner qu'apres le hotfix DB2 creant l'objet +-- 133995 (voir sql/updates/hotfixes/2026_09_07_00) : sans lui le core rejette la ligne. +-- Taux 99,95 % releve sur la fiche PNJ de Wowhead, QuestRequired = 1. +DELETE FROM `creature_loot_template` WHERE `Entry` = 102852 AND `Item` = 133995; +INSERT INTO `creature_loot_template` + (`Entry`,`Item`,`Reference`,`Chance`,`QuestRequired`,`LootMode`,`GroupId`,`MinCount`,`MaxCount`,`Comment`) VALUES +(102852,133995,0,99.9500,1,1,0,1,1,'Morjirn - Recette du breuvage des tempetes (quete 41039)'); +UPDATE `creature_template` SET `lootid` = `entry` WHERE `entry` = 102852; diff --git a/sql/updates/world/2026_09_07_06_world_quete_46765_et_reliquat.sql b/sql/updates/world/2026_09_07_06_world_quete_46765_et_reliquat.sql new file mode 100644 index 0000000..95e1aaf --- /dev/null +++ b/sql/updates/world/2026_09_07_06_world_quete_46765_et_reliquat.sql @@ -0,0 +1,75 @@ +-- Quete 46765 "Le rivage Brise : enquete sur la Legion" : objet 147430 introuvable. +-- +-- Quete classique (QuestType 2, donneur present), donc reellement jouable, mais son +-- objectif n'existait dans aucune table de butin. Wowhead liste 199 lacheurs sur tout +-- le jeu : 199 existent dans notre creature_template, mais seulement 58 sont spawnes +-- chez nous. Sur ces 58, 49 lachent effectivement l'objet. +-- +-- Taux releves une par une sur les fiches PNJ (pas la fiche objet), avec controle du +-- statut HTTP 200 et du marqueur g_npcs. Ils vont de 0,03 a 100 pour cent : les taux +-- tres bas sont conformes au releve, et l'abondance de sources compense. +-- QuestRequired = 1 : l'objet ne tombe que pour un joueur ayant la quete. + +DELETE FROM `creature_loot_template` WHERE `Item` = 147430; +INSERT INTO `creature_loot_template` + (`Entry`,`Item`,`Reference`,`Chance`,`QuestRequired`,`LootMode`,`GroupId`,`MinCount`,`MaxCount`,`Comment`) VALUES +(91535,147430,0,7.6900,1,1,0,1,1,'Quartermaster Ricard'), +(91590,147430,0,100.0000,1,1,0,1,1,'Apothecary Withers'), +(91693,147430,0,12.5000,1,1,0,1,1,'Black Rose Apothecary'), +(92333,147430,0,25.0000,1,1,0,1,1,'Grue cendrecime'), +(92792,147430,0,33.3300,1,1,0,1,1,'Nightmare Rider'), +(95958,147430,0,20.0000,1,1,0,1,1,'Floating Treasure'), +(98112,147430,0,16.6700,1,1,0,1,1,'Steward Dayton'), +(100054,147430,0,10.0000,1,1,0,1,1,'Feltotem Warmonger'), +(100055,147430,0,9.0900,1,1,0,1,1,'Feltotem Bloodsinger'), +(101390,147430,0,1.2700,1,1,0,1,1,'Arch-Desecrator Malithar'), +(102660,147430,0,11.1100,1,1,0,1,1,'Jandvik Metalsmith'), +(102741,147430,0,1.2200,1,1,0,1,1,'Highcliff Gull'), +(104845,147430,0,1.1900,1,1,0,1,1,'Caged Macaw'), +(105645,147430,0,2.5600,1,1,0,1,1,'Penned Turtle'), +(105646,147430,0,8.3300,1,1,0,1,1,'Captive Basilisk'), +(105650,147430,0,2.5600,1,1,0,1,1,'Confined Raptor'), +(105687,147430,0,100.0000,1,1,0,1,1,'Valkyra Shieldmaiden'), +(106798,147430,0,1.0400,1,1,0,1,1,'Nora Blackfire'), +(108027,147430,0,1.1100,1,1,0,1,1,'Webmistress Shinaris'), +(108033,147430,0,2.3800,1,1,0,1,1,'Fal''dorei Web Walker'), +(108034,147430,0,2.3800,1,1,0,1,1,'Fal''dorei Reaver'), +(110354,147430,0,0.8400,1,1,0,1,1,'Coryn'), +(110839,147430,0,1.1600,1,1,0,1,1,'Stormwing Drake'), +(111643,147430,0,6.2500,1,1,0,1,1,'Cove Seagull'), +(112090,147430,0,16.6700,1,1,0,1,1,'Shoalfin Warrior'), +(115054,147430,0,0.1900,1,1,0,1,1,'Wyrmtongue Scavenger'), +(115056,147430,0,0.1300,1,1,0,1,1,'Felwing Devourer'), +(117088,147430,0,0.0500,1,1,0,1,1,'Arachniarch Bybee'), +(117093,147430,0,0.9000,1,1,0,1,1,'Felbringer Xar''thok'), +(117094,147430,0,1.0800,1,1,0,1,1,'Malorus the Soulkeeper'), +(117096,147430,0,1.2300,1,1,0,1,1,'Potionmaster Gloop'), +(117136,147430,0,1.4200,1,1,0,1,1,'Doombringer Zar''thoz'), +(117289,147430,0,0.0300,1,1,0,1,1,'Felblade Sentry'), +(117559,147430,0,0.5400,1,1,0,1,1,'Wrathguard Dreadblade'), +(118322,147430,0,0.2800,1,1,0,1,1,'Felborne Punisher'), +(118390,147430,0,0.3200,1,1,0,1,1,'Toiling Collector'), +(118971,147430,0,0.8300,1,1,0,1,1,'Felfin Terrorscale'), +(119139,147430,0,0.2100,1,1,0,1,1,'Stoneblood Basilisk'), +(119634,147430,0,0.0600,1,1,0,1,1,'Restless Remains'), +(119788,147430,0,0.1500,1,1,0,1,1,'Ravenous Carrionstalker'), +(120323,147430,0,0.1600,1,1,0,1,1,'Weary Lion Seal'), +(120342,147430,0,0.5900,1,1,0,1,1,'Dread Felbat'), +(120386,147430,0,5.8200,1,1,0,1,1,'Scavenging Crow'), +(120820,147430,0,0.1100,1,1,0,1,1,'Fixated Corruptor'), +(120896,147430,0,0.0500,1,1,0,1,1,'Dark Tormentor'), +(121034,147430,0,0.1100,1,1,0,1,1,'Ravenous Felstalker'), +(121035,147430,0,0.0600,1,1,0,1,1,'Felblade Sentry'), +(121058,147430,0,0.0700,1,1,0,1,1,'Wrathguard Soulflayer'), +(121346,147430,0,0.3000,1,1,0,1,1,'Dreadwing Terror'); + +-- Les lacheurs qui n'avaient encore aucune table doivent pointer sur elle. +UPDATE `creature_template` SET `lootid` = `entry` WHERE `entry` IN (91535,91590,91693,92333,92792,95958,98112,100054,100055,101390,102660,102741,104845,105645,105646,105650,105687,106798,108027,108033,108034,110354,110839,111643,112090,115054,115056,117088,117093,117094,117096,117136,117289,117559,118322,118390,118971,119139,119634,119788,120323,120342,120386,120820,120896,121034,121035,121058,121346) AND `lootid` = 0; + +-- 100231 : seul objet valide de son releve, Meteorite gangrenee (147869), objet de +-- pacotille. Il etait ecarte par mon filtre "deja utilise ailleurs", trop prudent ici. +DELETE FROM `creature_loot_template` WHERE `Entry` = 100231 AND `Item` = 147869; +INSERT INTO `creature_loot_template` + (`Entry`,`Item`,`Reference`,`Chance`,`QuestRequired`,`LootMode`,`GroupId`,`MinCount`,`MaxCount`,`Comment`) VALUES +(100231,147869,0,5.8800,0,1,0,1,1,'Meteorite gangrenee'); +UPDATE `creature_template` SET `lootid` = `entry` WHERE `entry` = 100231 AND `lootid` = 0; diff --git a/sql/updates/world/2026_09_07_07_world_depecage_113198.sql b/sql/updates/world/2026_09_07_07_world_depecage_113198.sql new file mode 100644 index 0000000..f7c5d8b --- /dev/null +++ b/sql/updates/world/2026_09_07_07_world_depecage_113198.sql @@ -0,0 +1,16 @@ +-- 113198 "Trapped Thicket Hunter" : bete des Iles Brisees sans table de depecage. +-- +-- Son releve Wowhead ne donnait que des materiaux de depecage (124113 Cuir de rochepeau +-- a 100 %, plus trois objets a 12,5 %). Ces objets relevent de skinning_loot_template, +-- pas de creature_loot_template : chez nous 124113 apparait 284 fois en depecage contre +-- 19 fois en butin de cadavre. +-- +-- Les 12,5 % correspondent a 1 observation sur 8 : statistiquement sans valeur, ecartes. +-- Le taux retenu pour le Cuir de rochepeau est celui d'une bete Legion comparable deja +-- configuree chez nous (90134 Llothien Grizzly, 99,6779 %, 1 a 2 unites) plutot qu'un +-- 100 % tire d'un echantillon de huit. +DELETE FROM `skinning_loot_template` WHERE `Entry` = 113198; +INSERT INTO `skinning_loot_template` + (`Entry`,`Item`,`Reference`,`Chance`,`QuestRequired`,`LootMode`,`GroupId`,`MinCount`,`MaxCount`,`Comment`) VALUES +(113198,124113,0,99.6779,0,1,0,1,2,'Trapped Thicket Hunter - Cuir de rochepeau'); +UPDATE `creature_template` SET `skinloot` = `entry` WHERE `entry` = 113198; From a55cc4fd644456257ee97289ef7ca0e5aabb7e52 Mon Sep 17 00:00:00 2001 From: Sylvania Date: Mon, 7 Sep 2026 22:59:24 +0200 Subject: [PATCH 34/50] Butin : reparation des 142 lignes rejetees au chargement Reparation et non suppression : ces lignes portaient du butin reel, rendu inoperant par deux defauts d import distincts. 62 lignes a chance negative sur 35 creatures : signe inverse a l import. Les memes objets figurent ailleurs dans la table avec la meme valeur en positif (69815 entre 50 et 100, 71141 entre 75 et 100). Valeur absolue retablie. 80 lignes a chance nulle sans GroupId sur 6 boss de points d invasion majeurs d Argus : encodage classique d un groupe equiprobable dont le GroupId manquait, donc tout etait rejete et ces boss ne lachaient rien. Verifie sur Wowhead, Mistress Alluradel liste exactement les 14 memes objets que nous. Resultat : 932 578 lignes chargees sur 932 578 en base, plus aucun rejet. 41 creatures retrouvent leur butin. --- ..._07_08_world_reparation_butin_invalide.sql | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 sql/updates/world/2026_09_07_08_world_reparation_butin_invalide.sql diff --git a/sql/updates/world/2026_09_07_08_world_reparation_butin_invalide.sql b/sql/updates/world/2026_09_07_08_world_reparation_butin_invalide.sql new file mode 100644 index 0000000..a596b2f --- /dev/null +++ b/sql/updates/world/2026_09_07_08_world_reparation_butin_invalide.sql @@ -0,0 +1,24 @@ +-- 142 lignes de butin rejetees a chaque chargement : REPARATION, pas suppression. +-- +-- Les supprimer aurait ete destructeur : ce ne sont pas des lignes vides mais du butin +-- reel rendu inoperant par deux defauts d'import distincts. +-- +-- 1) 62 lignes a chance NEGATIVE, sur 35 creatures. Signe inverse a l'import : les memes +-- objets existent ailleurs dans la table avec la meme valeur en positif (69815 entre +-- 50 et 100 %, 71141 entre 75 et 100 %). On remet la valeur absolue. +-- +-- 2) 80 lignes a chance nulle sans GroupId, sur 6 boss de points d'invasion majeurs +-- d'Argus (Sotanathor, Inquisitor Meto, Mistress Alluradel, Pit Lord Vilemus, +-- Matron Folnuna, Occularus), 12 a 14 objets chacun. C'est l'encodage classique d'un +-- groupe equiprobable dont le GroupId a ete perdu : sans lui le core rejette tout et +-- ces boss ne lachent rien. Verifie sur Wowhead : Mistress Alluradel liste exactement +-- les 14 memes objets que nous. GroupId = 1 les fait tirer un objet parmi le lot. +-- +-- Effet : 41 creatures retrouvent leur butin, dont 6 boss d'Argus qui n'en avaient aucun. + +UPDATE `creature_loot_template` SET `Chance` = ABS(`Chance`) + WHERE `Reference` = 0 AND `Chance` <> 0 AND `Chance` < 0.000001; + +UPDATE `creature_loot_template` SET `GroupId` = 1 + WHERE `Reference` = 0 AND `Chance` = 0 AND `GroupId` = 0 + AND `Entry` IN (124492,124514,124555,124592,124625,124719); From f6ad8117c660370833aae114c76f996cb21a49db Mon Sep 17 00:00:00 2001 From: Sylvania Date: Mon, 7 Sep 2026 23:08:07 +0200 Subject: [PATCH 35/50] Depecage : 14 betes des Iles Brisees n en avaient aucun MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 81 betes spawnees avaient skinloot = 0. Relevees sur l onglet skinning de Wowhead, distinct de celui des butins, avec controle du statut HTTP et du marqueur g_npcs. Aucun refus rencontre. 67 n ont aucun onglet depecage sur Wowhead : oiseaux, insectes, gasteropodes, araignees. Verifie a la main sur cinq d entre elles, l absence est reelle. Elles ne sont pas touchees. Restent 14 betes, 66 lignes. Methode validee AVANT collecte sur un temoin dont la table existait deja (90134 Llothien Grizzly) : memes objets, memes intervalles de pile, ecarts de taux sous le bruit. Sans ce temoin le relevé aurait rendu zero partout : l onglet skinning n est pas du JSON strict comme celui des butins, ses cles sont non quotees et une espace precede outof. Controle : 11 479 lignes chargees pour 11 479 en base, aucun rejet. Co-Authored-By: Claude Opus 5 --- ...6_09_07_09_world_depecage_iles_brisees.sql | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 sql/updates/world/2026_09_07_09_world_depecage_iles_brisees.sql diff --git a/sql/updates/world/2026_09_07_09_world_depecage_iles_brisees.sql b/sql/updates/world/2026_09_07_09_world_depecage_iles_brisees.sql new file mode 100644 index 0000000..8b61538 --- /dev/null +++ b/sql/updates/world/2026_09_07_09_world_depecage_iles_brisees.sql @@ -0,0 +1,90 @@ +-- Depecage manquant : betes des Iles Brisees (carte 1220). +-- +-- 81 betes spawnees avaient skinloot = 0. Relevees sur Wowhead (onglet 'skinning', +-- distinct de l'onglet des butins), avec controle du statut HTTP 200 et du marqueur +-- g_npcs. Aucun refus rencontre. +-- +-- 67 n'ont AUCUN onglet depecage sur Wowhead : oiseaux, insectes, gasteropodes, +-- araignees, tortues en cage. Verifie a la main sur cinq d'entre elles (Suramar +-- Skyhunter, Gritslime Snail, Ruins Recluse, Cove Seagull, Penned Turtle) : l'onglet +-- est reellement absent, ce n'est pas un defaut d'extraction. Elles ne sont pas touchees. +-- +-- Methode validee avant collecte sur un temoin dont la table existe deja chez nous +-- (90134 Llothien Grizzly) : les 8 memes objets, memes intervalles de pile, ecarts de +-- taux sous le bruit statistique. Nos donnees existantes viennent de la meme source. +-- +-- Attention, l'onglet 'skinning' de Wowhead n'est PAS du JSON strict comme celui des +-- butins : les cles y sont non quotees (count:148807,stack:[1,2]) et il y a une espace +-- avant outof. JSON.parse echoue, et un motif trop strict renvoie zero partout. + +DELETE FROM `skinning_loot_template` WHERE `Entry` IN (89013,89014,89016,89385,89386,89391,89652,89653,89696,89891,97928,98356,111380,113408); +INSERT INTO `skinning_loot_template` + (`Entry`,`Item`,`Reference`,`Chance`,`QuestRequired`,`LootMode`,`GroupId`,`MinCount`,`MaxCount`,`Comment`) VALUES +(89013,124113,0,99.5800,0,1,0,1,2,'Azsuna Lion Seal'), +(89013,124124,0,1.6500,0,1,0,1,1,'Azsuna Lion Seal'), +(89013,124439,0,13.0700,0,1,0,2,8,'Azsuna Lion Seal'), +(89013,129746,0,1.7000,0,1,0,1,1,'Azsuna Lion Seal'), +(89013,129888,0,1.7800,0,1,0,1,1,'Azsuna Lion Seal'), +(89013,129906,0,17.8800,0,1,0,1,1,'Azsuna Lion Seal'), +(89013,134807,0,15.8800,0,1,0,1,1,'Azsuna Lion Seal'), +(89014,124113,0,99.9400,0,1,0,1,2,'Grassland Heron'), +(89014,124438,0,17.3400,0,1,0,3,8,'Grassland Heron'), +(89014,129888,0,35.5800,0,1,0,1,1,'Grassland Heron'), +(89014,139894,0,2.1800,0,1,0,1,1,'Grassland Heron'), +(89016,124113,0,99.4900,0,1,0,1,2,'Ravyn-Drath'), +(89016,124439,0,16.4600,0,1,0,2,8,'Ravyn-Drath'), +(89016,129860,0,2.7000,0,1,0,1,1,'Ravyn-Drath'), +(89016,129888,0,2.8300,0,1,0,1,1,'Ravyn-Drath'), +(89016,129906,0,15.9400,0,1,0,1,1,'Ravyn-Drath'), +(89385,124113,0,100.0000,0,1,0,1,2,'Azsuna Fox'), +(89385,124124,0,0.8100,0,1,0,1,1,'Azsuna Fox'), +(89385,124438,0,13.4100,0,1,0,3,8,'Azsuna Fox'), +(89385,124439,0,12.2400,0,1,0,3,8,'Azsuna Fox'), +(89385,129746,0,1.1800,0,1,0,1,1,'Azsuna Fox'), +(89385,129888,0,8.0600,0,1,0,1,1,'Azsuna Fox'), +(89386,124115,0,99.2400,0,1,0,1,3,'Cliffwing Hippogryph'), +(89386,124124,0,1.3500,0,1,0,1,1,'Cliffwing Hippogryph'), +(89386,124438,0,16.6800,0,1,0,3,8,'Cliffwing Hippogryph'), +(89386,129746,0,1.5200,0,1,0,1,1,'Cliffwing Hippogryph'), +(89386,129894,0,4.0300,0,1,0,1,1,'Cliffwing Hippogryph'), +(89386,129908,0,55.0500,0,1,0,1,1,'Cliffwing Hippogryph'), +(89386,134806,0,19.0100,0,1,0,1,1,'Cliffwing Hippogryph'), +(89391,124113,0,100.0000,0,1,0,1,1,'Cursefeather Owl'), +(89391,124438,0,4.5900,0,1,0,3,8,'Cursefeather Owl'), +(89391,129888,0,8.1800,0,1,0,1,1,'Cursefeather Owl'), +(89652,124113,0,100.0000,0,1,0,1,2,'Shallows Heron'), +(89652,124438,0,6.5600,0,1,0,3,8,'Shallows Heron'), +(89652,129860,0,1.5900,0,1,0,1,1,'Shallows Heron'), +(89652,129888,0,18.0300,0,1,0,1,1,'Shallows Heron'), +(89652,139894,0,0.7300,0,1,0,1,1,'Shallows Heron'), +(89653,124115,0,99.9900,0,1,0,1,3,'Gangamesh'), +(89653,124438,0,10.3400,0,1,0,2,8,'Gangamesh'), +(89653,124439,0,7.0700,0,1,0,1,8,'Gangamesh'), +(89653,129862,0,8.3100,0,1,0,1,1,'Gangamesh'), +(89653,129894,0,12.6400,0,1,0,1,1,'Gangamesh'), +(89696,124115,0,99.9700,0,1,0,1,3,'Horned Leatherback'), +(89696,124438,0,13.1400,0,1,0,1,8,'Horned Leatherback'), +(89696,129862,0,1.0100,0,1,0,1,1,'Horned Leatherback'), +(89696,129894,0,25.9800,0,1,0,1,1,'Horned Leatherback'), +(89891,124115,0,99.9800,0,1,0,1,3,'Dragon Turtle'), +(89891,124438,0,9.8200,0,1,0,3,8,'Dragon Turtle'), +(89891,129746,0,1.3500,0,1,0,1,1,'Dragon Turtle'), +(89891,129862,0,2.3200,0,1,0,1,1,'Dragon Turtle'), +(89891,129865,0,5.2200,0,1,0,1,1,'Dragon Turtle'), +(89891,129894,0,4.5600,0,1,0,1,1,'Dragon Turtle'), +(89891,139894,0,0.7700,0,1,0,1,1,'Dragon Turtle'), +(97928,124115,0,99.9500,0,1,0,1,1,'Tamed Coralback'), +(97928,124438,0,13.2100,0,1,0,3,8,'Tamed Coralback'), +(97928,129862,0,3.5900,0,1,0,1,1,'Tamed Coralback'), +(97928,129894,0,15.6200,0,1,0,1,1,'Tamed Coralback'), +(98356,124113,0,100.0000,0,1,0,1,1,'Corrupted Great Eagle'), +(98356,124438,0,4.5500,0,1,0,5,7,'Corrupted Great Eagle'), +(98356,129746,0,2.2700,0,1,0,1,1,'Corrupted Great Eagle'), +(98356,129888,0,2.2700,0,1,0,1,1,'Corrupted Great Eagle'), +(111380,124115,0,100.0000,0,1,0,1,1,'Killer Orca'), +(111380,124439,0,72.5500,0,1,0,3,6,'Killer Orca'), +(111380,129862,0,45.1000,0,1,0,1,1,'Killer Orca'), +(111380,129894,0,1.9600,0,1,0,1,1,'Killer Orca'), +(113408,124113,0,100.0000,0,1,0,1,1,'Salty'); + +UPDATE `creature_template` SET `skinloot` = `entry` WHERE `entry` IN (89013,89014,89016,89385,89386,89391,89652,89653,89696,89891,97928,98356,111380,113408); From fb959731ceef9fbdde309fab31c900d4c2e1dcdc Mon Sep 17 00:00:00 2001 From: BlaMacfly <165155133+BlaMacfly@users.noreply.github.com> Date: Mon, 7 Sep 2026 23:27:16 +0200 Subject: [PATCH 36/50] Khadgar etait hostile a l Alliance a Crete-de-Gel Signalement : un personnage Alliance debarquant a Crete-de-Gel se fait attaquer par trois PNJ. Deux sont conformes, Thrall et Farseer Drek Thar sont des chefs de la Horde et Wowhead les donne hostiles a l Alliance. Le troisieme non. Khadgar est neutre dans tout Draenor, il sert les deux factions. Wowhead donne cette entree amicale envers les deux camps, et notre propre base le confirme : sur 150 entrees Archmage Khadgar, 100 sont en faction 35 et 78288 etait la seule en faction 83. Deux spawns concernes, tous deux en zone 6720. Co-Authored-By: Claude Opus 5 --- .../world/2026_09_07_10_world_khadgar_neutre.sql | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 sql/updates/world/2026_09_07_10_world_khadgar_neutre.sql diff --git a/sql/updates/world/2026_09_07_10_world_khadgar_neutre.sql b/sql/updates/world/2026_09_07_10_world_khadgar_neutre.sql new file mode 100644 index 0000000..2029ef3 --- /dev/null +++ b/sql/updates/world/2026_09_07_10_world_khadgar_neutre.sql @@ -0,0 +1,15 @@ +-- Archmage Khadgar (78288) : faction hostile a l'Alliance, a tort. +-- +-- Signalement : un personnage Alliance debarque a Crete-de-Gel et se fait attaquer par +-- trois PNJ. Deux sont conformes : Thrall (70859) et Farseer Drek'Thar (76411) sont des +-- chefs de la Horde, hostiles a l'Alliance sur les royaumes officiels comme chez nous. +-- +-- Le troisieme non. Khadgar est neutre dans tout Draenor : il sert les deux factions. +-- Wowhead le confirme pour cette entree precise (react Alliance = amical, Horde = amical), +-- et notre propre base aussi : sur les 150 entrees "Archmage Khadgar", 100 sont en +-- faction 35, et 78288 est la SEULE en faction 83 (Orgrimmar). +-- +-- Il est spawne deux fois, toutes deux en zone 6720 : au point de debarquement (7257) +-- et pres du fief (7004). Un joueur Alliance qui passe par la se fait donc agresser par +-- un PNJ cense etre neutre. +UPDATE `creature_template` SET `faction` = 35 WHERE `entry` = 78288; From 77fa13a92997e5701052b7ce27fee5af46dc6ca7 Mon Sep 17 00:00:00 2001 From: BlaMacfly <165155133+BlaMacfly@users.noreply.github.com> Date: Mon, 7 Sep 2026 23:31:10 +0200 Subject: [PATCH 37/50] Ken-Ken etait hostile a tout le monde Faction 14 alors qu il porte le drapeau de dialogue : aucun joueur ne pouvait lui parler. Meme classe d erreur que Khadgar 78288, trouvee par le meme signal d incoherence interne : sur les 8 entrees Ken-Ken de la base, six sont en faction 35 et celle-ci etait la seule en 14. Wowhead le donne amical envers l Alliance et la Horde. Deux spawns concernes, foret de Jade. Co-Authored-By: Claude Opus 5 --- sql/updates/world/2026_09_07_11_world_kenken_neutre.sql | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 sql/updates/world/2026_09_07_11_world_kenken_neutre.sql diff --git a/sql/updates/world/2026_09_07_11_world_kenken_neutre.sql b/sql/updates/world/2026_09_07_11_world_kenken_neutre.sql new file mode 100644 index 0000000..58e25bc --- /dev/null +++ b/sql/updates/world/2026_09_07_11_world_kenken_neutre.sql @@ -0,0 +1,9 @@ +-- Ken-Ken (60979) : faction 14, donc hostile a TOUT LE MONDE, alors qu'il porte le +-- drapeau de dialogue (npcflag 1). Personne ne pouvait lui parler. +-- +-- Meme classe d'erreur que Khadgar 78288, trouvee par le meme signal : sur les 8 entrees +-- "Ken-Ken" de la base, six sont en faction 35 et celle-ci est la seule en 14. +-- Wowhead le donne amical envers l'Alliance ET la Horde. +-- +-- Deux spawns concernes, foret de Jade (carte 870, zone 5841). +UPDATE `creature_template` SET `faction` = 35 WHERE `entry` = 60979; From 81400d719541d9a238c8e79bee326730f4a3e917 Mon Sep 17 00:00:00 2001 From: BlaMacfly <165155133+BlaMacfly@users.noreply.github.com> Date: Mon, 7 Sep 2026 23:35:32 +0200 Subject: [PATCH 38/50] Tanaan : retablissement des scenes 961 et 962 sur les marques Retirees a tort le 07/09/2026. Je les avais supposees responsables du joueur qui passe sous la map en cliquant les pierres de la quete 34392. Verifie en jeu depuis : jouer 961 seule ne produit que la replique de Cho gall, texte et audio, sans deplacement ni cinematique. Elles etaient inoffensives, et leur retrait supprimait la replique qui indique au joueur d aller chercher Gul dan. A ne pas confondre avec les scenes du bateau 953 et 986, elles bel et bien relocalisantes : jouer 953 deplace le joueur et declenche son teleport vers Draenor. Leur retrait dans tanaan_intro_finale.cpp reste justifie. La cause du passage sous la map sur les marques reste inconnue. Seul candidat restant : le retrait de la phase 175 par RemoveAurasDueToSpell. Co-Authored-By: Claude Opus 5 --- .../Draenor/TanaanIntro/tanaan_intro_portal.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/server/scripts/Draenor/TanaanIntro/tanaan_intro_portal.cpp b/src/server/scripts/Draenor/TanaanIntro/tanaan_intro_portal.cpp index 6337130..5ced537 100644 --- a/src/server/scripts/Draenor/TanaanIntro/tanaan_intro_portal.cpp +++ b/src/server/scripts/Draenor/TanaanIntro/tanaan_intro_portal.cpp @@ -317,9 +317,13 @@ public: return true; player->KilledMonsterCredit(TanaanKillCredits::CreditNorthernSpireDisabled); - /// Scenes 961 / 962 desactivees : jouees par PlaySceneByPackageId (SceneID nul, - /// ancrees sur la position du joueur), elles envoient le joueur sous la map. - /// Purement decoratif : le credit de quete est deja donne juste au-dessus. + /// Ces scenes ne sont PAS la cause du joueur qui passe sous la map, contrairement + /// a ce qui avait ete suppose le 07/09/2026. Verifie en jeu : jouer 961 seule ne + /// produit que la replique de Cho'gall, texte et audio, sans deplacement ni + /// cinematique. Elles avaient ete retirees a tort et sont ici retablies. + /// A ne pas confondre avec les scenes du bateau 953 / 986, elles bel et bien + /// relocalisantes, retirees dans tanaan_intro_finale.cpp pour cette raison. + player->GetSceneMgr().PlaySceneByPackageId(TanaanSceneObjects::SceneChoGallsFreedom); } /// Bleeding Hollow Gob (Teron'Gor) else if (gameObject->GetEntry() == TanaanGameObjects::GobMarkOfBleedingHollow) @@ -330,7 +334,7 @@ public: return true; player->KilledMonsterCredit(TanaanKillCredits::CreditSouthernSpireDisabled); - /// Scene 962 desactivee, cf. le commentaire sur la marque des Ombrelune. + player->GetSceneMgr().PlaySceneByPackageId(TanaanSceneObjects::SceneTeronGorsFreedom); } } return true; From ef14de98ea0c870f3a4ab349144e1bd836ac535f Mon Sep 17 00:00:00 2001 From: BlaMacfly <165155133+BlaMacfly@users.noreply.github.com> Date: Mon, 7 Sep 2026 23:48:18 +0200 Subject: [PATCH 39/50] Mercenaires : verifier l arrivee du mercenaire, et insister Signale en jeu : sur une escorte de quatre, un compagnon restait a l autre bout de la carte pour toute la duree du contrat. L ordre de rappel -- ProcessBotCommand("!summon"), ou TeleportToPoint quand un portail est connu -- partait une seule fois, et le contrat le tenait aussitot pour honore : summonPending passait a false sans que rien ne verifie que le mercenaire avait bouge. Un ordre perdu, et le bot restait a la position ou il s etait connecte. Le contrat retient maintenant ses tentatives et verifie l arrivee au point de rendez-vous -- le portail s il y en a un, l employeur sinon. Tant que le mercenaire n y est pas, l ordre est renouvele, jusqu a quatre fois, avec trois secondes entre deux verifications : un teleport de bot se joue en trois echanges et conclure au tick suivant reviendrait a le declarer perdu alors qu il est en route. Passe ce delai, on cesse d insister et on le dit au joueur, plutot que de le laisser croire son groupe au complet. Repare aussi le message de journal du recrutement offert, dont le format avait ete abime lors de sa pose. Co-Authored-By: Claude Opus 5 --- src/server/game/Mercenary/MercenaryMgr.cpp | 44 +++++++++++++++++++--- src/server/game/Mercenary/MercenaryMgr.h | 21 ++++++++++- 2 files changed, 59 insertions(+), 6 deletions(-) diff --git a/src/server/game/Mercenary/MercenaryMgr.cpp b/src/server/game/Mercenary/MercenaryMgr.cpp index 63c616a..5075e4f 100644 --- a/src/server/game/Mercenary/MercenaryMgr.cpp +++ b/src/server/game/Mercenary/MercenaryMgr.cpp @@ -460,8 +460,9 @@ MercenaryResult MercenaryMgr::Summon(Player* owner, uint8 role, Creature* portal } m_contracts.push_back(contract); - TC_LOG_INFO("server.worldserver", freeOfCharge ? "Mercenaires: %s recoit gratuitement un %3 (compte bot %4), cout %2 po non preleve." : "Mercenaires: %s a paye %u po pour un %s (compte bot %u).", - owner->GetName().c_str(), GetCostGold(), GetRoleName(role), accountId); + TC_LOG_INFO("server.worldserver", "Mercenaires: %s engage un %s (compte bot %u) -- %s.", + owner->GetName().c_str(), GetRoleName(role), accountId, + freeOfCharge ? "recrutement offert" : "100 po preleves"); return MERC_OK; } @@ -657,7 +658,34 @@ void MercenaryMgr::Update(uint32 diff) // le mercenaire a son ancienne place aux yeux de tout le monde. if (it->summonPending) { - if (BotGroupAI* groupAI = dynamic_cast(bot->GetAI())) + // Est-il arrive ? Le point de rendez-vous est le portail quand + // il y en a un, l employeur sinon. + bool arrive = false; + if (it->hasPortal) + arrive = bot->GetMapId() == it->portalMap + && bot->GetExactDist2d(it->portalPos.GetPositionX(), + it->portalPos.GetPositionY()) < MERCENARY_ARRIVAL_RANGE; + else + arrive = bot->GetMapId() == owner->GetMapId() + && bot->GetExactDist2d(owner) < MERCENARY_ARRIVAL_RANGE; + + if (arrive) + it->summonPending = false; + else if (it->summonCheckTimer > 0) + --it->summonCheckTimer; + else if (it->summonAttempts >= MERCENARY_SUMMON_RETRIES) + { + // On cesse d insister : mieux vaut un mercenaire annonce + // perdu qu un mercenaire qu on croit present. + it->summonPending = false; + ChatHandler(owner->GetSession()).PSendSysMessage( + "|cffff4444[Portail]|r %s n'a pas pu vous rejoindre.", bot->GetName().c_str()); + TC_LOG_ERROR("server.worldserver", + "Mercenaires: %s n'a pas rejoint %s apres %u rappels (carte %u).", + bot->GetName().c_str(), owner->GetName().c_str(), + uint32(it->summonAttempts), bot->GetMapId()); + } + else if (BotGroupAI* groupAI = dynamic_cast(bot->GetAI())) { // Repli : sans portail connu, ou si l armement immediat a // echoue, le mercenaire rejoint simplement son employeur. @@ -665,7 +693,9 @@ void MercenaryMgr::Update(uint32 diff) groupAI->TeleportToPoint(it->portalMap, BuildPortalExit(it->portalPos, bot)); else groupAI->ProcessBotCommand(owner, "!summon"); - it->summonPending = false; + + ++it->summonAttempts; + it->summonCheckTimer = MERCENARY_SUMMON_RECHECK; } } @@ -748,7 +778,11 @@ void MercenaryMgr::Update(uint32 diff) if (BotGroupAI* groupAI = dynamic_cast(bot->GetAI())) { groupAI->TeleportToPoint(it->portalMap, BuildPortalExit(it->portalPos, bot)); - it->summonPending = false; + // L ordre est parti, mais rien ne dit encore qu il aboutira : + // on le compte comme une premiere tentative et la verification + // d arrivee prend le relais au tick suivant. + it->summonAttempts = 1; + it->summonCheckTimer = MERCENARY_SUMMON_RECHECK; } } diff --git a/src/server/game/Mercenary/MercenaryMgr.h b/src/server/game/Mercenary/MercenaryMgr.h index e33b3a2..e942517 100644 --- a/src/server/game/Mercenary/MercenaryMgr.h +++ b/src/server/game/Mercenary/MercenaryMgr.h @@ -40,6 +40,18 @@ class Player; #define MERCENARY_GROUP_SIZE 5 #define MERCENARY_HARD_CAP (MERCENARY_GROUP_SIZE - 1) #define MERCENARY_SUMMON_TIMEOUT 60 // secondes avant abandon + remboursement + +// SIGNALE EN JEU : « Semid n est meme pas vers moi, elle est a l autre bout de +// la map ». L ordre de rappel partait une seule fois et le contrat le tenait +// aussitot pour honore. Quand il se perdait -- IA pas encore prete, teleport +// deja en cours, changement de carte -- le mercenaire restait a sa derniere +// position enregistree pour toute la duree du contrat. +// +// On verifie desormais l arrivee, et on renouvelle l ordre tant qu elle ne +// vient pas. +#define MERCENARY_ARRIVAL_RANGE 80.0f // distance au-dela de laquelle il n est pas arrive +#define MERCENARY_SUMMON_RETRIES 4 // ordres de rappel au maximum +#define MERCENARY_SUMMON_RECHECK 3 // secondes entre deux verifications #define MERCENARY_COPPER_PER_GOLD 10000 enum MercenaryStage @@ -66,7 +78,8 @@ enum MercenaryResult struct MercenaryContract { MercenaryContract() : accountId(0), role(0), stage(MERC_STAGE_SUMMONING), waitSeconds(0), - pendingRelease(false), summonPending(false), hasPortal(false), portalMap(0) { } + pendingRelease(false), summonPending(false), summonAttempts(0), + summonCheckTimer(0), hasPortal(false), portalMap(0) { } uint32 accountId; // compte bot reserve ObjectGuid ownerGuid; // joueur qui a paye @@ -84,6 +97,12 @@ struct MercenaryContract // groupe aura reconnu son maitre. bool summonPending; + // Ordres de rappel deja emis, et delai avant de reverifier l arrivee. Un + // teleport de bot se joue en trois echanges : reverifier au tick suivant + // conclurait a un echec alors qu il est simplement en cours de route. + uint8 summonAttempts; + uint32 summonCheckTimer; + // Le portail d ou part l invocation : le mercenaire doit en sortir, pas // se materialiser aux pieds de son employeur reste en retrait. bool hasPortal; From c901bc17657abf738bba8e956e87799ebe3549cb Mon Sep 17 00:00:00 2001 From: BlaMacfly <165155133+BlaMacfly@users.noreply.github.com> Date: Tue, 8 Sep 2026 23:33:27 +0200 Subject: [PATCH 40/50] Solocraft : ne pas compter les mercenaires comme des joueurs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signale en jeu : « quatre mercenaires contre un gangreseigneur elite, ils meurent tous, alors que seul j y arrive ». Solocraft divise la difficulte brute par le nombre de membres presents, pour compenser l absence de joueurs. CountPlayersInInstance comptait les playerbots comme des joueurs entiers : un employeur accompagne de quatre mercenaires passait de x5 a x1, c est-a-dire d un bonus de 400 % a aucun bonus du tout. Or un mercenaire ne remplace pas un joueur. Sa couche de combat est restee en identifiants de sorts WotLK -- mesure faite sur trois classes, entre cinq et six sorts reellement lancables sur une quarantaine cites par l IA. Il ne compensait donc rien de ce qu il faisait perdre, et l escorte etait strictement perdante : un piege pour le joueur plutot qu un arbitrage tactique. Les playerbots sont desormais ignores dans le compte. Un groupe entierement compose de bots retombe sur 1 et recoit le meme bonus qu un joueur seul, ce qui reste coherent : personne de reel n est la pour porter le contenu. Supprime au passage une oscillation du buff -- chaque mercenaire qui debarquait faisait recalculer et fondre le bonus d un cran, d ou les cycles de retrait/reapplication visibles dans le journal. Co-Authored-By: Claude Opus 5 --- src/server/scripts/Custom/solocraft.cpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/server/scripts/Custom/solocraft.cpp b/src/server/scripts/Custom/solocraft.cpp index 772589e..dfc1b5f 100644 --- a/src/server/scripts/Custom/solocraft.cpp +++ b/src/server/scripts/Custom/solocraft.cpp @@ -102,14 +102,32 @@ namespace { if (!group) return 1; + // Les playerbots ne comptent pas. + // + // SIGNALE EN JEU : « quatre mercenaires contre un gangreseigneur elite, + // ils meurent tous, alors que seul j y arrive ». + // + // Solocraft existe pour compenser l absence de joueurs. Un mercenaire + // n en remplace pas un : sa couche de combat est restee en identifiants + // de sorts WotLK et il ne lance qu une poignee de ses capacites. Le + // compter comme un joueur entier divisait le bonus de l employeur par + // cinq sans rien apporter en face -- l escorte etait strictement + // perdante, un piege plutot qu un arbitrage. + // + // Cela supprime aussi une oscillation : chaque mercenaire qui debarquait + // faisait recalculer et fondre le buff d un cran, d ou les cycles de + // retrait/reapplication visibles dans le journal. uint32 count = 0; for (GroupReference* itr = group->GetFirstMember(); itr != nullptr; itr = itr->next()) { Player* member = itr->GetSource(); - if (member && member->IsInWorld() && member->GetMap() == map) + if (member && !member->IsPlayerBot() && member->IsInWorld() && member->GetMap() == map) ++count; } + // Un groupe entierement compose de bots retombe sur 1 : ils recoivent + // alors le meme bonus qu un joueur seul, ce qui est coherent avec le + // principe -- personne de reel n est la pour porter le contenu. return std::max(count, 1); } From 19c0cf034533b522cd98f3894ba44df86c043632 Mon Sep 17 00:00:00 2001 From: BlaMacfly <165155133+BlaMacfly@users.noreply.github.com> Date: Wed, 9 Sep 2026 22:52:35 +0200 Subject: [PATCH 41/50] Mercenaires : re-resoudre les sorts une fois l IA de groupe creee MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signale en jeu : les mercenaires n utilisent presque aucune de leurs capacites. Chaque IA de classe resout ses poignees de sorts UNE seule fois, a sa construction, par FindMaxRankSpellByExist. Ce qui n est pas connu du personnage a cet instant renvoie zero et reste eteint pour toute la vie du bot, chaque usage etant garde par un « if (poignee) ». Mesure a la sonde, le 09/09/2026, sur une escorte de quatre mercenaires tous montes au niveau 110 : l IA avait resolu ses sorts au niveau 1 pour l un d eux, au niveau 100 pour deux autres. Le quatrieme, re-resolu par hasard a 110 parce qu il avait gagne un niveau pendant que son IA existait deja, n avait plus que quatre capacites indisponibles -- et toutes les quatre appartenaient a une autre specialisation, donc parfaitement normales. Les tables de sorts ne sont donc pas en cause, contrairement a ce que laissait croire un premier releve : c est un probleme d ordre. Le core prevoyait la reparation. Quand la mise en place s acheve, PlayerBotSetting pousse un BGSType_DelayLevelup qui reapprend les sorts et rappelle InitializeSpells. Mais OnLevelupToBotAI() commence par un dynamic_cast et ne fait rien tant que l IA de groupe n existe pas -- or le module ne la cree qu ensuite. La tache partait avant sa cible et tombait dans le vide. On en repousse donc une juste apres SwitchPlayerBotAI, quand l IA existe. Elle attend que le bot soit hors combat avant d agir, le rehabillage complet faisant partie du meme passage. Co-Authored-By: Claude Opus 5 --- src/server/game/Mercenary/MercenaryMgr.cpp | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/server/game/Mercenary/MercenaryMgr.cpp b/src/server/game/Mercenary/MercenaryMgr.cpp index 5075e4f..7d3044d 100644 --- a/src/server/game/Mercenary/MercenaryMgr.cpp +++ b/src/server/game/Mercenary/MercenaryMgr.cpp @@ -769,6 +769,40 @@ void MercenaryMgr::Update(uint32 diff) PlayerBotMgr::SwitchPlayerBotAI(bot, PlayerBotAIType::PBAIT_GROUP, true); + // ============================================================= + // RERESOLUTION_DES_SORTS + // + // MESURE (sonde SORTDBG, 09/09/2026) : sur quatre mercenaires tous + // montes au niveau 110, l IA avait resolu ses sorts au niveau 1 pour + // l un, au niveau 100 pour deux autres. Seul le quatrieme, re-resolu + // par hasard a 110, n avait plus que quatre capacites indisponibles + // -- et les quatre appartenaient a une autre specialisation, donc + // parfaitement normales. + // + // Les tables de sorts ne sont donc pas en cause. Le defaut est un + // probleme d ordre : chaque IA de classe resout ses poignees UNE + // fois, a sa construction, via FindMaxRankSpellByExist ; ce qui n + // est pas connu a cet instant reste eteint a vie, chaque usage etant + // garde par un « if (poignee) ». + // + // Le core prevoit pourtant la reparation : quand la mise en place s + // acheve, PlayerBotSetting pousse un BGSType_DelayLevelup qui + // reapprend les sorts et rappelle InitializeSpells. Mais + // OnLevelupToBotAI() commence par un dynamic_cast et ne + // fait rien si l IA de groupe n existe pas encore -- or nous venons + // seulement de la creer, la ligne au-dessus. La tache partait avant + // sa cible et tombait dans le vide. + // + // On en repousse donc une maintenant que l IA existe. Elle attend + // que le bot soit hors combat avant d agir, le rehabillage complet + // faisant partie du meme passage. + // ============================================================= + if (PlayerBotSession* botSession = dynamic_cast(bot->GetSession())) + { + BotGlobleSchedule reresolution(BotGlobleScheduleType::BGSType_DelayLevelup, bot->GetGUID()); + botSession->PushScheduleToQueue(reresolution); + } + // Des maintenant, pas au tick suivant : l IA de groupe, en decouvrant // un maitre lointain, armerait le sien vers l employeur, et SetTeleport // refuse d ecraser un teleport en cours. Notre ordre serait perdu et le From afb770d096ca3ad474130a3db1868143090d4f05 Mon Sep 17 00:00:00 2001 From: BlaMacfly <165155133+BlaMacfly@users.noreply.github.com> Date: Thu, 10 Sep 2026 19:28:17 +0200 Subject: [PATCH 42/50] Mascottes de combat : soin chez le maitre d ecurie et criteres de hauts faits Signalement Discord : la quete 31589 (Panser ses plaies) est impossible a valider, un clic sur Murog ouvre directement la boutique. Donnees (sql/sylvania/battlepet_stablemaster_heal.sql) : - Murog (47764) et Jaelysia (10085) n avaient aucun gossip_menu_id : ils retombaient sur le menu 0, dont la seule option compatible pour un non-chasseur est le vendeur, que le client selectionne automatiquement. - le menu 9821 des maitres d ecurie avait perdu ses options vendeur et ecurie : seule restait l option de soin. - 10 des 12 maitres d ecurie de la chaine On The Mend n avaient pas le SmartAI qui soigne les mascottes et donne le credit de quete. - le credit de Jenova Stoneshield pointait sur Elwynn (64320) au lieu de Hurlevent (65214). Core : - CRITERIA_TYPE_BATTLEPET_WIN, _LEVEL_UP et CAPTURE_PET_IN_BATTLE etaient dans la liste non implemente : le systeme de combat de mascottes remontait bien les evenements, le gestionnaire de criteres les jetait. - l ordre des miscValue de _LEVEL_UP ne correspondait pas a ce qu attendent les conditions (espece en miscValue1, niveau en miscValue2). --- sql/sylvania/battlepet_stablemaster_heal.sql | 123 ++++++++++++++++++ .../battlepet_stablemaster_heal_ROLLBACK.sql | 14 ++ .../battlepet_stablemaster_heal_all.sql | 40 ++++++ .../game/Achievements/CriteriaHandler.cpp | 15 ++- src/server/game/BattlePets/PetBattle.cpp | 4 +- src/server/game/Spells/SpellEffects.cpp | 2 +- 6 files changed, 192 insertions(+), 6 deletions(-) create mode 100644 sql/sylvania/battlepet_stablemaster_heal.sql create mode 100644 sql/sylvania/battlepet_stablemaster_heal_ROLLBACK.sql create mode 100644 sql/sylvania/battlepet_stablemaster_heal_all.sql diff --git a/sql/sylvania/battlepet_stablemaster_heal.sql b/sql/sylvania/battlepet_stablemaster_heal.sql new file mode 100644 index 0000000..48546c5 --- /dev/null +++ b/sql/sylvania/battlepet_stablemaster_heal.sql @@ -0,0 +1,123 @@ +-- ===================================================================== +-- Mascottes de combat : « On The Mend » / soin chez le maitre d'ecurie +-- Signalement Discord : Murog (Orgrimmar) ouvre directement la boutique +-- au lieu du dialogue, la quete 31589 est donc impossible a valider. +-- +-- Cause : les maitres d'ecurie n'exposent pas (ou n'implementent pas) +-- l'option de gossip « I'd like to heal and revive my battle pets. ». +-- * Murog (47764) et Jaelysia (10085) n'ont aucun gossip_menu_id : +-- ils retombent sur le menu 0 par defaut, dont la seule option +-- compatible pour un non-chasseur est « vendeur » -> le client 7.3.5 +-- selectionne automatiquement l'unique option et ouvre la boutique. +-- * Le menu 9821 (menu standard des maitres d'ecurie) a perdu ses +-- options « vendeur » et « ecurie » : seule l'option de soin restait. +-- * Seuls 2 maitres d'ecurie sur 12 avaient le SmartAI qui soigne les +-- mascottes et donne le credit de quete. +-- * Le credit de Jenova Stoneshield (Hurlevent) pointait sur le credit +-- d'Elwynn (64320) au lieu de celui de Hurlevent (65214). +-- +-- Applique le 2026-09-10. Rollback : battlepet_stablemaster_heal_ROLLBACK.sql +-- ===================================================================== + +-- --------------------------------------------------------------------- +-- 1. Menu 9821 : restaurer les options vendeur et ecurie +-- (l'option 2 « heal and revive my battle pets » existe deja) +-- --------------------------------------------------------------------- +DELETE FROM `gossip_menu_option` WHERE `MenuId`=9821 AND `OptionIndex` IN (0,4); +INSERT INTO `gossip_menu_option` + (`MenuId`,`OptionIndex`,`OptionIcon`,`OptionText`,`OptionBroadcastTextId`,`OptionType`,`OptionNpcFlag`,`VerifiedBuild`) VALUES + (9821, 0, 0, 'I\'d like to stable my pet here.', 8912, 14, 4194304, 0), + (9821, 4, 1, 'I want to browse your goods.', 3370, 3, 128, 0); + +-- --------------------------------------------------------------------- +-- 2. Menu 12106 (Bezzil, maitre d'ecurie gobelin) : meme jeu d'options +-- --------------------------------------------------------------------- +UPDATE `gossip_menu_option` SET `OptionType`=14, `OptionNpcFlag`=4194304 + WHERE `MenuId`=12106 AND `OptionIndex`=0; +DELETE FROM `gossip_menu_option` WHERE `MenuId`=12106 AND `OptionIndex` IN (2,3); +INSERT INTO `gossip_menu_option` + (`MenuId`,`OptionIndex`,`OptionIcon`,`OptionText`,`OptionBroadcastTextId`,`OptionType`,`OptionNpcFlag`,`VerifiedBuild`) VALUES + (12106, 2, 0, 'I\'d like to heal and revive my battle pets.', 64115, 1, 1, 0), + (12106, 3, 1, 'I want to browse your goods.', 3370, 3, 128, 0); + +-- --------------------------------------------------------------------- +-- 3. PNJ mal configures +-- --------------------------------------------------------------------- +-- Murog (Orgrimmar) et Jaelysia (Sombrivage) : aucun menu de gossip +UPDATE `creature_template` SET `gossip_menu_id`=9821 WHERE `entry` IN (47764,10085); +-- Seriadne (Teldrassil) : npcflag ampute de GOSSIP et STABLEMASTER +UPDATE `creature_template` SET `npcflag`=`npcflag`|4194305 WHERE `entry`=10051; + +-- --------------------------------------------------------------------- +-- 4. SmartAI : soigner + ressusciter les mascottes et donner le credit +-- --------------------------------------------------------------------- +UPDATE `creature_template` SET `AIName`='SmartAI' + WHERE `entry` IN (6749,9980,9987,10050,10051,10085,16185,17485,45789,47764); + +-- Correction du credit de Jenova Stoneshield : Hurlevent (65214), pas Elwynn +UPDATE `smart_scripts` SET `action_param1`=65214, `comment`='Stable Master - Link - Quest Credit 31592' + WHERE `source_type`=0 AND `entryorguid`=11069 AND `id`=2; + +DELETE FROM `smart_scripts` + WHERE `source_type`=0 AND `entryorguid` IN (6749,9980,9987,10050,10051,10085,16185,17485,45789,47764); +INSERT INTO `smart_scripts` + (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`, + `event_param1`,`event_param2`,`event_param3`,`event_param4`,`event_param5`,`event_param_string`, + `action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`, + `target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +-- Erma (Foret d'Elwynn) - quete 31309 +( 6749,0,0,1,62,0,100,0, 9821,2,0,0,0,'', 85,125801,2,0,0,0,0, 7,0,0,0,0,0,0,0,'Erma - Gossip Select - Cast Heal Battle Pets'), +( 6749,0,1,2,61,0,100,0, 0,0,0,0,0,'', 85,133994,2,0,0,0,0, 7,0,0,0,0,0,0,0,'Erma - Link - Cast Revive Battle Pets'), +( 6749,0,2,3,61,0,100,0, 0,0,0,0,0,'', 33, 64320,0,0,0,0,0, 7,0,0,0,0,0,0,0,'Erma - Link - Quest Credit 31309'), +( 6749,0,3,0,61,0,100,0, 0,0,0,0,0,'', 72, 0,0,0,0,0,0, 7,0,0,0,0,0,0,0,'Erma - Link - Close Gossip'), +-- Shelby Stoneflint (Dun Morogh) - quete 31549 +( 9980,0,0,1,62,0,100,0, 9821,2,0,0,0,'', 85,125801,2,0,0,0,0, 7,0,0,0,0,0,0,0,'Shelby Stoneflint - Gossip Select - Cast Heal Battle Pets'), +( 9980,0,1,2,61,0,100,0, 0,0,0,0,0,'', 85,133994,2,0,0,0,0, 7,0,0,0,0,0,0,0,'Shelby Stoneflint - Link - Cast Revive Battle Pets'), +( 9980,0,2,3,61,0,100,0, 0,0,0,0,0,'', 33, 65020,0,0,0,0,0, 7,0,0,0,0,0,0,0,'Shelby Stoneflint - Link - Quest Credit 31549'), +( 9980,0,3,0,61,0,100,0, 0,0,0,0,0,'', 72, 0,0,0,0,0,0, 7,0,0,0,0,0,0,0,'Shelby Stoneflint - Link - Close Gossip'), +-- Shoja'my (Durotar) - quete 31572 +( 9987,0,0,1,62,0,100,0, 9821,2,0,0,0,'', 85,125801,2,0,0,0,0, 7,0,0,0,0,0,0,0,'Shoja\'my - Gossip Select - Cast Heal Battle Pets'), +( 9987,0,1,2,61,0,100,0, 0,0,0,0,0,'', 85,133994,2,0,0,0,0, 7,0,0,0,0,0,0,0,'Shoja\'my - Link - Cast Revive Battle Pets'), +( 9987,0,2,3,61,0,100,0, 0,0,0,0,0,'', 33, 65180,0,0,0,0,0, 7,0,0,0,0,0,0,0,'Shoja\'my - Link - Quest Credit 31572'), +( 9987,0,3,0,61,0,100,0, 0,0,0,0,0,'', 72, 0,0,0,0,0,0, 7,0,0,0,0,0,0,0,'Shoja\'my - Link - Close Gossip'), +-- Seikwa (Mulgore) - quete 31574 +(10050,0,0,1,62,0,100,0, 9821,2,0,0,0,'', 85,125801,2,0,0,0,0, 7,0,0,0,0,0,0,0,'Seikwa - Gossip Select - Cast Heal Battle Pets'), +(10050,0,1,2,61,0,100,0, 0,0,0,0,0,'', 85,133994,2,0,0,0,0, 7,0,0,0,0,0,0,0,'Seikwa - Link - Cast Revive Battle Pets'), +(10050,0,2,3,61,0,100,0, 0,0,0,0,0,'', 33, 65184,0,0,0,0,0, 7,0,0,0,0,0,0,0,'Seikwa - Link - Quest Credit 31574'), +(10050,0,3,0,61,0,100,0, 0,0,0,0,0,'', 72, 0,0,0,0,0,0, 7,0,0,0,0,0,0,0,'Seikwa - Link - Close Gossip'), +-- Seriadne (Teldrassil) - quetes 31553 / 31554 +(10051,0,0,1,62,0,100,0, 9821,2,0,0,0,'', 85,125801,2,0,0,0,0, 7,0,0,0,0,0,0,0,'Seriadne - Gossip Select - Cast Heal Battle Pets'), +(10051,0,1,2,61,0,100,0, 0,0,0,0,0,'', 85,133994,2,0,0,0,0, 7,0,0,0,0,0,0,0,'Seriadne - Link - Cast Revive Battle Pets'), +(10051,0,2,3,61,0,100,0, 0,0,0,0,0,'', 33, 65041,0,0,0,0,0, 7,0,0,0,0,0,0,0,'Seriadne - Link - Quest Credit 31553/31554'), +(10051,0,3,0,61,0,100,0, 0,0,0,0,0,'', 72, 0,0,0,0,0,0, 7,0,0,0,0,0,0,0,'Seriadne - Link - Close Gossip'), +-- Jaelysia (Sombrivage) - quete 31583 +(10085,0,0,1,62,0,100,0, 9821,2,0,0,0,'', 85,125801,2,0,0,0,0, 7,0,0,0,0,0,0,0,'Jaelysia - Gossip Select - Cast Heal Battle Pets'), +(10085,0,1,2,61,0,100,0, 0,0,0,0,0,'', 85,133994,2,0,0,0,0, 7,0,0,0,0,0,0,0,'Jaelysia - Link - Cast Revive Battle Pets'), +(10085,0,2,3,61,0,100,0, 0,0,0,0,0,'', 33, 65199,0,0,0,0,0, 7,0,0,0,0,0,0,0,'Jaelysia - Link - Quest Credit 31583'), +(10085,0,3,0,61,0,100,0, 0,0,0,0,0,'', 72, 0,0,0,0,0,0, 7,0,0,0,0,0,0,0,'Jaelysia - Link - Close Gossip'), +-- Anathos (Bois des Chants eternels) - quete 31580 +(16185,0,0,1,62,0,100,0, 9821,2,0,0,0,'', 85,125801,2,0,0,0,0, 7,0,0,0,0,0,0,0,'Anathos - Gossip Select - Cast Heal Battle Pets'), +(16185,0,1,2,61,0,100,0, 0,0,0,0,0,'', 85,133994,2,0,0,0,0, 7,0,0,0,0,0,0,0,'Anathos - Link - Cast Revive Battle Pets'), +(16185,0,2,3,61,0,100,0, 0,0,0,0,0,'', 33, 65198,0,0,0,0,0, 7,0,0,0,0,0,0,0,'Anathos - Link - Quest Credit 31580'), +(16185,0,3,0,61,0,100,0, 0,0,0,0,0,'', 72, 0,0,0,0,0,0, 7,0,0,0,0,0,0,0,'Anathos - Link - Close Gossip'), +-- Esbina (Azuremyst) - quete 31568 +(17485,0,0,1,62,0,100,0, 9821,2,0,0,0,'', 85,125801,2,0,0,0,0, 7,0,0,0,0,0,0,0,'Esbina - Gossip Select - Cast Heal Battle Pets'), +(17485,0,1,2,61,0,100,0, 0,0,0,0,0,'', 85,133994,2,0,0,0,0, 7,0,0,0,0,0,0,0,'Esbina - Link - Cast Revive Battle Pets'), +(17485,0,2,3,61,0,100,0, 0,0,0,0,0,'', 33, 65179,0,0,0,0,0, 7,0,0,0,0,0,0,0,'Esbina - Link - Quest Credit 31568'), +(17485,0,3,0,61,0,100,0, 0,0,0,0,0,'', 72, 0,0,0,0,0,0, 7,0,0,0,0,0,0,0,'Esbina - Link - Close Gossip'), +-- Bezzil (Orgrimmar, gobelins) - quete 31586 - menu 12106 +(45789,0,0,1,62,0,100,0,12106,2,0,0,0,'', 85,125801,2,0,0,0,0, 7,0,0,0,0,0,0,0,'Bezzil - Gossip Select - Cast Heal Battle Pets'), +(45789,0,1,2,61,0,100,0, 0,0,0,0,0,'', 85,133994,2,0,0,0,0, 7,0,0,0,0,0,0,0,'Bezzil - Link - Cast Revive Battle Pets'), +(45789,0,2,3,61,0,100,0, 0,0,0,0,0,'', 33, 65200,0,0,0,0,0, 7,0,0,0,0,0,0,0,'Bezzil - Link - Quest Credit 31586'), +(45789,0,3,0,61,0,100,0, 0,0,0,0,0,'', 72, 0,0,0,0,0,0, 7,0,0,0,0,0,0,0,'Bezzil - Link - Close Gossip'), +-- Murog (Orgrimmar) - quete 31589 - le bug signale +(47764,0,0,1,62,0,100,0, 9821,2,0,0,0,'', 85,125801,2,0,0,0,0, 7,0,0,0,0,0,0,0,'Murog - Gossip Select - Cast Heal Battle Pets'), +(47764,0,1,2,61,0,100,0, 0,0,0,0,0,'', 85,133994,2,0,0,0,0, 7,0,0,0,0,0,0,0,'Murog - Link - Cast Revive Battle Pets'), +(47764,0,2,3,61,0,100,0, 0,0,0,0,0,'', 33, 65212,0,0,0,0,0, 7,0,0,0,0,0,0,0,'Murog - Link - Quest Credit 31589'), +(47764,0,3,0,61,0,100,0, 0,0,0,0,0,'', 72, 0,0,0,0,0,0, 7,0,0,0,0,0,0,0,'Murog - Link - Close Gossip'); + +-- --------------------------------------------------------------------- +-- 5. Menu 12106 : brancher les textes diffuses pour avoir la VF +-- --------------------------------------------------------------------- +UPDATE `gossip_menu_option` SET `OptionBroadcastTextId`= 8912 WHERE `MenuId`=12106 AND `OptionIndex`=0; +UPDATE `gossip_menu_option` SET `OptionBroadcastTextId`=56613 WHERE `MenuId`=12106 AND `OptionIndex`=1; diff --git a/sql/sylvania/battlepet_stablemaster_heal_ROLLBACK.sql b/sql/sylvania/battlepet_stablemaster_heal_ROLLBACK.sql new file mode 100644 index 0000000..0e4ea49 --- /dev/null +++ b/sql/sylvania/battlepet_stablemaster_heal_ROLLBACK.sql @@ -0,0 +1,14 @@ +-- Rollback de battlepet_stablemaster_heal.sql (2026-09-10) +DELETE FROM `gossip_menu_option` WHERE `MenuId`=9821 AND `OptionIndex` IN (0,4); +DELETE FROM `gossip_menu_option` WHERE `MenuId`=12106 AND `OptionIndex` IN (2,3); +UPDATE `gossip_menu_option` SET `OptionType`=1, `OptionNpcFlag`=1 WHERE `MenuId`=12106 AND `OptionIndex`=0; + +UPDATE `creature_template` SET `gossip_menu_id`=0 WHERE `entry` IN (47764,10085); +UPDATE `creature_template` SET `npcflag`=130 WHERE `entry`=10051; +UPDATE `creature_template` SET `AIName`='' + WHERE `entry` IN (6749,9980,9987,10050,10051,10085,16185,17485,45789,47764); + +DELETE FROM `smart_scripts` + WHERE `source_type`=0 AND `entryorguid` IN (6749,9980,9987,10050,10051,10085,16185,17485,45789,47764); +UPDATE `smart_scripts` SET `action_param1`=64320, `comment`='Stable Master - Link - Quest Credit 31309' + WHERE `source_type`=0 AND `entryorguid`=11069 AND `id`=2; diff --git a/sql/sylvania/battlepet_stablemaster_heal_all.sql b/sql/sylvania/battlepet_stablemaster_heal_all.sql new file mode 100644 index 0000000..5b61c12 --- /dev/null +++ b/sql/sylvania/battlepet_stablemaster_heal_all.sql @@ -0,0 +1,40 @@ +-- ===================================================================== +-- OPTIONNEL (non applique le 2026-09-10) - a valider avant execution. +-- +-- Complement de battlepet_stablemaster_heal.sql : rend l'option +-- « J'aimerais soigner et ressusciter mes mascottes de combat » reellement +-- fonctionnelle chez TOUS les maitres d'ecurie du menu 9821, et pas +-- seulement chez les 12 PNJ concernes par la quete « On The Mend ». +-- +-- Sans ce complement, ~89 maitres d'ecurie affichent l'option mais ne +-- font rien quand on la choisit (bug present avant le correctif). +-- +-- Portee : uniquement les PNJ qui ont deja le drapeau STABLEMASTER, le +-- menu 9821, et AUCUNE IA (AIName et ScriptName vides) - donc aucun +-- script existant n'est ecrase. Trois maitres d'ecurie deja en SmartAI +-- (Wesley 9978, Maluressian 10052, Thomas Partridge 33854) sont exclus : +-- il faudrait leur ajouter les lignes avec des `id` libres. +-- ===================================================================== + +CREATE TEMPORARY TABLE `_sm_heal` AS + SELECT `entry` FROM `creature_template` + WHERE `gossip_menu_id`=9821 AND `npcflag` & 4194304 + AND `AIName`='' AND `ScriptName`=''; + +UPDATE `creature_template` SET `AIName`='SmartAI' + WHERE `entry` IN (SELECT `entry` FROM `_sm_heal`); + +DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid` IN (SELECT `entry` FROM `_sm_heal`); + +INSERT INTO `smart_scripts` + (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`, + `event_param1`,`event_param2`,`event_param3`,`event_param4`,`event_param5`,`event_param_string`, + `action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`, + `target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) +SELECT `entry`,0,0,1,62,0,100,0,9821,2,0,0,0,'',85,125801,2,0,0,0,0,7,0,0,0,0,0,0,0,'Stable Master - Gossip Select - Cast Heal Battle Pets' FROM `_sm_heal` +UNION ALL +SELECT `entry`,0,1,2,61,0,100,0, 0,0,0,0,0,'',85,133994,2,0,0,0,0,7,0,0,0,0,0,0,0,'Stable Master - Link - Cast Revive Battle Pets' FROM `_sm_heal` +UNION ALL +SELECT `entry`,0,2,0,61,0,100,0, 0,0,0,0,0,'',72, 0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Stable Master - Link - Close Gossip' FROM `_sm_heal`; + +DROP TEMPORARY TABLE `_sm_heal`; diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp index 890731f..70f60a1 100644 --- a/src/server/game/Achievements/CriteriaHandler.cpp +++ b/src/server/game/Achievements/CriteriaHandler.cpp @@ -498,6 +498,9 @@ void CriteriaHandler::UpdateCriteria(CriteriaTypes type, uint64 miscValue1 /*= 0 case CRITERIA_TYPE_ON_LOGIN: case CRITERIA_TYPE_PLACE_GARRISON_BUILDING: case CRITERIA_TYPE_COLLECT_BATTLEPET: + case CRITERIA_TYPE_CAPTURE_PET_IN_BATTLE: + case CRITERIA_TYPE_BATTLEPET_WIN: + case CRITERIA_TYPE_BATTLEPET_LEVEL_UP: case CRITERIA_TYPE_HONOR_LEVEL_REACHED: case CRITERIA_TYPE_BUY_GUILD_TABARD: case CRITERIA_TYPE_PRESTIGE_REACHED: @@ -759,9 +762,6 @@ void CriteriaHandler::UpdateCriteria(CriteriaTypes type, uint64 miscValue1 /*= 0 case CRITERIA_TYPE_BE_KICKED_FROM_LFR: case CRITERIA_TYPE_COUNT_OF_LFR_QUEUE_BOOSTS_BY_TANK: case CRITERIA_TYPE_COMPLETE_SCENARIO_COUNT: - case CRITERIA_TYPE_CAPTURE_PET_IN_BATTLE: - case CRITERIA_TYPE_BATTLEPET_WIN: - case CRITERIA_TYPE_BATTLEPET_LEVEL_UP: case CRITERIA_TYPE_CAPTURE_BATTLE_PET_CREDIT: case CRITERIA_TYPE_ENTER_AREA: case CRITERIA_TYPE_LEAVE_AREA: @@ -1207,6 +1207,9 @@ bool CriteriaHandler::IsCompletedCriteria(Criteria const* criteria, uint64 requi case CRITERIA_TYPE_SEND_EVENT_SCENARIO: case CRITERIA_TYPE_COMPLETE_SCENARIO: case CRITERIA_TYPE_COLLECT_BATTLEPET: + case CRITERIA_TYPE_CAPTURE_PET_IN_BATTLE: + case CRITERIA_TYPE_BATTLEPET_WIN: + case CRITERIA_TYPE_BATTLEPET_LEVEL_UP: return progress->Counter >= requiredAmount; case CRITERIA_TYPE_CAPTURE_SPECIFIC_BATTLEPET: case CRITERIA_TYPE_COMPLETE_ACHIEVEMENT: @@ -1622,6 +1625,12 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis if (!miscValue2 /*login case*/ || miscValue1 != uint32(criteria->Entry->Asset.EquipmentSlot)) return false; break; + case CRITERIA_TYPE_BATTLEPET_LEVEL_UP: + // miscValue1 = espece de la mascotte, miscValue2 = niveau atteint, + // Asset.ID = niveau exige par le critere + if (!miscValue1 || !miscValue2 || miscValue2 != uint64(criteria->Entry->Asset.ID)) + return false; + break; default: break; } diff --git a/src/server/game/BattlePets/PetBattle.cpp b/src/server/game/BattlePets/PetBattle.cpp index ac411c3..61049de 100644 --- a/src/server/game/BattlePets/PetBattle.cpp +++ b/src/server/game/BattlePets/PetBattle.cpp @@ -1288,7 +1288,7 @@ void PetBattle::Finish(uint32 winnerTeamID, bool aborted, bool ignoreAbandonPena if (auto speciesInfo = sBattlePetSpeciesStore.LookupEntry(currentPet->Species)) { - player->UpdateCriteria(CRITERIA_TYPE_BATTLEPET_LEVEL_UP, currentPet->Level, speciesInfo->PetTypeEnum, currentPet->Species); + player->UpdateCriteria(CRITERIA_TYPE_BATTLEPET_LEVEL_UP, currentPet->Species, currentPet->Level, speciesInfo->PetTypeEnum); player->UpdateCriteria(CRITERIA_TYPE_LEVEL_BATTLE_PET_CREDIT, speciesInfo->ID, currentPet->Level, currentPet->Species); } @@ -1317,7 +1317,7 @@ void PetBattle::Finish(uint32 winnerTeamID, bool aborted, bool ignoreAbandonPena if (winnerTeamID == currentTeamID) { auto speciesInfo = sDB2Manager.GetSpeciesByCreatureID(InitialWildPetGUID.GetEntry()); - player->UpdateCriteria(CRITERIA_TYPE_BATTLEPET_WIN, BattleType != PETBATTLE_TYPE_PVE, 0, speciesInfo ? speciesInfo->ID : 0); + player->UpdateCriteria(CRITERIA_TYPE_BATTLEPET_WIN, speciesInfo ? speciesInfo->ID : 0, BattleType != PETBATTLE_TYPE_PVE, 0); if (speciesInfo) player->QuestObjectiveSatisfy(speciesInfo->ID, 1, QUEST_OBJECTIVE_DEFEATBATTLEPET, InitialWildPetGUID); } diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 0708712..45df95f 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -4545,7 +4545,7 @@ void Spell::EffectGrantBattlePetLevel(SpellEffIndex effIndex) BattlePetSpeciesEntry const* speciesInfo = sBattlePetSpeciesStore.LookupEntry(battlePet->Species); if (speciesInfo) { - player->UpdateCriteria(CRITERIA_TYPE_BATTLEPET_LEVEL_UP, battlePet->Level, speciesInfo->PetTypeEnum, battlePet->Species); + player->UpdateCriteria(CRITERIA_TYPE_BATTLEPET_LEVEL_UP, battlePet->Species, battlePet->Level, speciesInfo->PetTypeEnum); player->UpdateCriteria(CRITERIA_TYPE_LEVEL_BATTLE_PET_CREDIT, speciesInfo->ID, battlePet->Level, battlePet->Species); } From fa6d14c4a070527dc924732e0675a4d7ff0f3d52 Mon Sep 17 00:00:00 2001 From: BlaMacfly <165155133+BlaMacfly@users.noreply.github.com> Date: Thu, 10 Sep 2026 19:50:19 +0200 Subject: [PATCH 43/50] Butin WoD/Legion : brancher les boss sur le Guide d aventure Signalement Discord : les instances haut niveau ne lachent aucun equipement. Sur ce core, le butin d equipement des boss modernes ne vient pas de creature_loot_template mais de Unit::Kill, qui lit creature_template_journal (entree -> JournalEncounterID) puis tire 2 objets dans JournalEncounterItem.db2 avec le bon masque de difficulte et le bon contexte d objet. Cette table ne contenait que 45 lignes, toutes Burning Crusade : aucun boss de Draenor ni de Legion, et ces boss ont lootid = 0. Ils ne lachaient donc rigoureusement rien. 44 correspondances ajoutees, etablies depuis les DB2 officiels du client (JournalInstance -> JournalEncounter -> JournalEncounterCreature -> CreatureDisplayInfoID -> creature_template.modelid), une seule creature par rencontre et uniquement celles sans table de butin, pour ne rien doubler. Couvre entre autres la Fonderie des Rochenoire (10 boss), les Docks de fer, Haut-perchoir, le Pic Rochenoire, la Floraison eternelle, le Siege du Triumvirat (4 boss), le Tombeau de Sargeras (6), Gul dan et Elisande. Les scripts de generation et de verification sont dans chantiers/butin-journal. --- .../butin-journal/build_journal_mapping.py | 97 +++++++++++++++++++ .../butin-journal/verify_journal_mapping.py | 25 +++++ sql/sylvania/butin_journal_wod_legion.sql | 91 +++++++++++++++++ .../butin_journal_wod_legion_ROLLBACK.sql | 6 ++ 4 files changed, 219 insertions(+) create mode 100644 chantiers/butin-journal/build_journal_mapping.py create mode 100644 chantiers/butin-journal/verify_journal_mapping.py create mode 100644 sql/sylvania/butin_journal_wod_legion.sql create mode 100644 sql/sylvania/butin_journal_wod_legion_ROLLBACK.sql diff --git a/chantiers/butin-journal/build_journal_mapping.py b/chantiers/butin-journal/build_journal_mapping.py new file mode 100644 index 0000000..736fc94 --- /dev/null +++ b/chantiers/butin-journal/build_journal_mapping.py @@ -0,0 +1,97 @@ +# -*- coding: utf-8 -*- +"""Genere creature_template_journal pour les boss WoD/Legion sans butin. + Source officielle : JournalInstance -> JournalEncounter -> JournalEncounterCreature.""" +import sys, subprocess, collections +sys.path.insert(0, '/home/ubuntu') +from db2read import DB2 +D = '/home/ubuntu/server/data/dbc/enUS/' + +CIBLES = [1175,1176,1182,1195,1209,1279,1358,1205,1228, + 1456,1458,1466,1477,1492,1501,1544,1571,1753,1520,1530,1676] + +# adds / decors qui partagent le modele du boss mais ne doivent rien lacher +EXCLUS = { + 76057, # Carrion Worm (add de Bonemaw) + 76874, 76945, 76884, # Dreadwing / Ironcrusher / Cruelfang (bestioles de Darmac) + 77337, # Aknor Steelbringer (add de Flamebender) + 76810, # Furnace Engineer + 76087, # Defense Construct (Skyreach) + 99801, 105383, 105322, 105304, # tentacules + 117123, # Tidescale Legionnaire + 122571, 125860, 122319, 125340, # adds du Siege du Triumvirat + 118460, # Engine of Souls (l'encontre se termine sur Soul Queen Dejahna) + 76018, 82556, # Drakonid Monstrosity (trash UBRS) + 106482, # Malfurion (PNJ de la rencontre Cenarius) + 120996, # doublon d'Atrigan + 77810, # doublon de Soulbinder Nyami + 84336, # doublon de Yalnu (pre-event) + 83893, 83892, # Protecteurs anciens : on garde Dulhu comme porteur + 76973, # Hans'gar : on garde Franzok + 78237, # Phemos : on garde Pol + 116689, # Atrigan : on garde Belac + 118523, 118374, # Soeurs de la Lune : on garde Priestess Lunaspyre + 102681, 102679, # Dragons du Cauchemar : on garde Lethon + 80808, 80805, # Contremaitres du Rail-de-fer : on garde Ahri'ok Dugru + 83613, # Koramar : on garde Skulloc + 76806, # Haut fourneau : on garde Foreman Feldspar ? non -> voir plus bas + 77231, 77477, # Vierges de fer : on garde Admiral Gar'an +} +# Haut fourneau : la rencontre se termine sur le Coeur de la Montagne +EXCLUS.discard(76806); EXCLUS.add(76809) + +ji = DB2(D+'JournalInstance.db2', "ssiiiihhbbi", [1]*11, 10, -1) +je = DB2(D+'JournalEncounter.db2', "ssfhhhhbbii", [1,1,2,1,1,1,1,1,1,1,1], -1, -1) +jec = DB2(D+'JournalEncounterCreature.db2',"ssiiihbi", [1]*8, 7, 5) +jei = DB2(D+'JournalEncounterItem.db2', "ihbbbi", [1]*6, 5, 1) + +instMap = {ji.getId(i): ji.getRaw(i,6,0,"h") for i in range(ji.recCount)} +encMap = {} +for i in range(je.recCount): + eid = je.getId(i); mid = instMap.get(je.getRaw(i,6,0,"h"), 0) + if mid in CIBLES: encMap[eid] = mid +nbItems = {eid: len(jei.parentMap.get(eid, [])) for eid in encMap} +disp = collections.defaultdict(set) +for eid, idxs in jec.parentMap.items(): + if eid in encMap: + for r in idxs: disp[eid].add(jec.getRaw(r,2,0,"i")) + +q = ("SELECT DISTINCT c.map, ct.entry, ct.name, ct.rank, ct.ScriptName, " + "ct.modelid1, ct.modelid2, ct.modelid3, ct.modelid4, " + "(SELECT COUNT(*) FROM creature c2 WHERE c2.id=ct.entry AND c2.map=c.map), " + "(SELECT COUNT(*) FROM creature_loot_template l WHERE l.entry=ct.lootid) " + "FROM creature c JOIN creature_template ct ON ct.entry=c.id " + "WHERE c.map IN (%s)" % ','.join(map(str, CIBLES))) +out = subprocess.run(['mysql','-N','-B','dc_world','-e',q], capture_output=True, text=True).stdout +byMapModel = collections.defaultdict(list) +for line in out.splitlines(): + f = line.split('\t') + mp, entry, name, rank, script = int(f[0]), int(f[1]), f[2], int(f[3]), f[4] + spawns, butin = int(f[9]), int(f[10]) + for m in (int(x) for x in f[5:9]): + if m: byMapModel[(mp, m)].append((entry, name, rank, script, spawns, butin)) + +rows, rejets = [], [] +for eid, mid in sorted(encMap.items(), key=lambda kv: kv[1]): + cands, seen = [], set() + for d in disp.get(eid, ()): + for c in byMapModel.get((mid, d), []): + if c[0] in seen: continue + seen.add(c[0]); cands.append(c) + # on ne garde que les boss credibles, sans butin, hors liste d'exclusion + keep = [c for c in cands + if c[0] not in EXCLUS and c[5] == 0 + and (c[3].startswith('boss_') or c[2] == 3 or (c[2] >= 1 and c[4] <= 3))] + if not keep: + rejets.append((mid, eid, nbItems.get(eid,0), [(c[0], c[1], c[5]) for c in cands])) + continue + keep.sort(key=lambda c: (0 if c[3].startswith('boss_') else 1, c[4])) + for c in keep: + rows.append((mid, eid, c[0], c[1], nbItems.get(eid,0))) + +print("-- creature_template_journal : %d lignes" % len(rows)) +for mid, eid, entry, name, n in rows: + print("(%d, %d), -- carte %d : %s (%d objets au journal)" % (entry, eid, mid, name, n)) +print() +print("-- rencontres sans candidat retenu : %d" % len(rejets)) +for mid, eid, n, cands in rejets: + print("-- carte %d rencontre %d (%d objets) -> %s" % (mid, eid, n, cands if cands else "aucun PNJ apparu")) diff --git a/chantiers/butin-journal/verify_journal_mapping.py b/chantiers/butin-journal/verify_journal_mapping.py new file mode 100644 index 0000000..e0b6c2e --- /dev/null +++ b/chantiers/butin-journal/verify_journal_mapping.py @@ -0,0 +1,25 @@ +import sys, subprocess, collections +sys.path.insert(0, '/home/ubuntu') +from db2read import DB2 +D = '/home/ubuntu/server/data/dbc/enUS/' +ji = DB2(D+'JournalInstance.db2', "ssiiiihhbbi", [1]*11, 10, -1) +je = DB2(D+'JournalEncounter.db2', "ssfhhhhbbii", [1,1,2,1,1,1,1,1,1,1,1], -1, -1) +jei = DB2(D+'JournalEncounterItem.db2', "ihbbbi", [1]*6, 5, 1) +instMap = {ji.getId(i): ji.getRaw(i,6,0,"h") for i in range(ji.recCount)} +enc = {} +for i in range(je.recCount): + enc[je.getId(i)] = (instMap.get(je.getRaw(i,6,0,"h"),0), je.getRaw(i,9,0,"i")) +rows = subprocess.run(['mysql','-N','-B','dc_world','-e', + "SELECT j.entry, j.JournalEncounterID, ct.name FROM creature_template_journal j " + "JOIN creature_template ct ON ct.entry=j.entry WHERE j.entry>70000"], + capture_output=True, text=True).stdout +print("entry\tenc\tcarte\tordre\tnbObjets\tnom") +bad=0 +for line in rows.splitlines(): + e, eid, name = line.split('\t'); eid=int(eid) + mid, oi = enc.get(eid, (0,0)) + n = len(jei.parentMap.get(eid, [])) + flag = "" if (mid and n) else " <<< PROBLEME" + if flag: bad+=1 + print("%s\t%d\t%d\t%d\t%d\t%s%s" % (e, eid, mid, oi, n, name, flag)) +print("problemes:", bad) diff --git a/sql/sylvania/butin_journal_wod_legion.sql b/sql/sylvania/butin_journal_wod_legion.sql new file mode 100644 index 0000000..bab4a28 --- /dev/null +++ b/sql/sylvania/butin_journal_wod_legion.sql @@ -0,0 +1,91 @@ +-- ===================================================================== +-- Butin des donjons et raids WoD / Legion +-- +-- Signalement Discord : « les instances HL ne loot pas de stuff ». +-- Cause : sur ce core, le butin d'equipement des boss modernes ne vient +-- PAS de `creature_loot_template` mais du Guide d'aventure de Blizzard : +-- `Unit::Kill` lit `creature_template_journal` (entree -> JournalEncounterID) +-- puis tire 2 objets au hasard dans JournalEncounterItem.db2, avec le +-- masque de difficulte et le contexte d'objet corrects. +-- Or `creature_template_journal` ne contenait que 45 lignes, toutes +-- Burning Crusade : aucun boss de Draenor ni de Legion n'y figurait, +-- et ces boss ont `lootid = 0` -> ils ne lachaient rigoureusement rien. +-- +-- Correspondances etablies a partir des DB2 officiels du client : +-- JournalInstance (MapID) -> JournalEncounter -> JournalEncounterCreature +-- (CreatureDisplayInfoID) -> creature_template.modelid1..4 +-- Une seule creature par rencontre (celle qui la conclut), et uniquement +-- celles qui n'ont aucune table de butin, pour ne rien doubler. +-- +-- Applique le 2026-09-10. +-- ===================================================================== + +DELETE FROM `creature_template_journal` WHERE `entry` IN ( + 74366,81297,80816,83612,87420,76865,76814,76906,76806,76974,76877,77692,77182,77557, + 75964,76141,76143,82682,84550,83846,76413,76021,77120,76585,91005,94960,95674,96759, + 102682,104154,106643,116407,115767,116691,118462,117269,118518,122316,122313,122056, + 124729,98965,79852,79912); + +INSERT INTO `creature_template_journal` (`entry`,`JournalEncounterID`) VALUES +-- Mines de Sangyre (1175) +(74366, 893), -- Forgemaster Gog'duh +-- Docks de fer (1195) +(81297, 1235), -- Dreadfang (Fleshrender Nok'gar) +(80816, 1236), -- Ahri'ok Dugru (Contremaitres du Rail-de-fer) +(79852, 1237), -- Oshir +(83612, 1238), -- Skulloc +-- Auchindoun (1182) : PAS de ligne pour Azzakel. Le vrai boss (75927, +-- niveau 97, script boss_azzakel, 49 lignes de butin) n'est PAS apparu ; +-- le PNJ pose dans le donjon est un doublon de niveau 1 sans script. +-- C'est un defaut d'apparition, pas de butin : a corriger separement. +-- Aire de Haut-perchoir (1209) +(75964, 965), -- Ranjit +(76141, 966), -- Araknath +(76143, 967), -- Rukhran +-- Floraison eternelle (1279) +(82682, 1208), -- Archmage Sol +(84550, 1209), -- Xeri'tac +(83846, 1210), -- Yalnu +-- Pic Rochenoire, sommet (1358) +(76413, 1226), -- Orebender Gor'ashan +(76021, 1227), -- Kyrak +(79912, 1228), -- Commander Tharbek +(76585, 1229), -- Ragewing the Untamed +(77120, 1234), -- Warlord Zaela +-- Fonderie des Rochenoire (1205) - raid entier sans butin +(77182, 1202), -- Oregorger +(76974, 1155), -- Franzok (Hans'gar et Franzok) +(76865, 1122), -- Beastlord Darmac +(76877, 1161), -- Gruul +(76814, 1123), -- Flamebender Ka'graz +(76906, 1147), -- Operator Thogar +(76806, 1154), -- Heart of the Mountain (Haut fourneau) +(77692, 1162), -- Kromog +(77557, 1203), -- Admiral Gar'an (Vierges de fer) +(87420, 959), -- Blackhand +-- Repaire de Neltharion (1458) +(91005, 1673), -- Naraxas +-- Salles des Valeureux (1477) +(94960, 1485), -- Hymdall +(95674, 1487), -- Fenryr +-- Gouffre des ames (1492) +(96759, 1663), -- Helya +-- Donjon de Tenebreterre (1501) +(98965, 1672), -- Kur'talos Ravencrest +-- Cauchemar d'emeraude (1520) +(102682, 1704), -- Lethon (Dragons du Cauchemar) +-- Nighthold (1530) +(104154, 1737), -- Gul'dan +(106643, 1743), -- Grande magistrix Elisande +-- Tombeau de Sargeras (1676) +(116407, 1856), -- Harjatan +(115767, 1861), -- Mistress Sassz'ine +(116691, 1867), -- Belac (Inquisition demoniaque) +(118518, 1903), -- Priestess Lunaspyre (Soeurs de la Lune) +(118462, 1896), -- Soul Queen Dejahna (Hote desole) +(117269, 1898), -- Kil'jaeden +-- Siege du Triumvirat (1753) - donjon entier sans butin +(122313, 1979), -- Zuraal the Ascended +(122316, 1980), -- Saprish +(122056, 1981), -- Viceroy Nezhar +(124729, 1982); -- L'ura diff --git a/sql/sylvania/butin_journal_wod_legion_ROLLBACK.sql b/sql/sylvania/butin_journal_wod_legion_ROLLBACK.sql new file mode 100644 index 0000000..6190b21 --- /dev/null +++ b/sql/sylvania/butin_journal_wod_legion_ROLLBACK.sql @@ -0,0 +1,6 @@ +-- Rollback de butin_journal_wod_legion.sql (2026-09-10) +DELETE FROM `creature_template_journal` WHERE `entry` IN ( + 74366,81297,80816,83612,87420,76865,76814,76906,76806,76974,76877,77692,77182,77557, + 75964,76141,76143,82682,84550,83846,76413,76021,77120,76585,91005,94960,95674,96759, + 102682,104154,106643,116407,115767,116691,118462,117269,118518,122316,122313,122056, + 124729,98965,79852,79912); From 7f0c3a545349942378b8cb4058c55f2693417ca0 Mon Sep 17 00:00:00 2001 From: BlaMacfly <165155133+BlaMacfly@users.noreply.github.com> Date: Thu, 10 Sep 2026 20:05:58 +0200 Subject: [PATCH 44/50] Salles des Valeureux : les 3 boss absents, et Azzakel jamais invoque Salles des Valeureux (1477) : Hyrja, le Roi-dieu Skovald et Odyn n existaient dans aucune ligne de creature. Le donjon etait bloque bien avant le butin : les portes GOB_DOOR_ODYN_PASSAGE et GOB_DOOR_ODYN_BRIDGE sont des passages commandes par DATA_HYRJA, qui restait donc NOT_STARTED pour toujours - la moitie arriere du donjon etait inaccessible. Apparitions ajoutees pour Hyrja, Olmyr, Solsten, Skovald et Odyn ; Odyn n avait pas de table de butin, il est branche sur sa rencontre du Guide d aventure (1489). Auchindoun : Azzakel n etait pas un boss absent mais un boss jamais invoque. Le controleur qui l invoque est Claws of Argus (76216) apres la mort de six Cackling Pyromaniac ; or la mort de ces derniers envoyait le compteur a la creature 87218, un simple marqueur de position sans IA - l action tombait dans le vide. Le compteur passe desormais par les donnees d instance (DataTriggerAzzakelController). Corrige au passage une condition inversee dans l invocation (if (!m_Azzakel) au lieu de if (!m_Azzakel.IsEmpty())), qui empechait Azzakel de devenir hostile et de charger la plateforme. --- sql/sylvania/hov_boss_manquants.sql | 37 +++++++++++++++++++ sql/sylvania/hov_boss_manquants_ROLLBACK.sql | 3 ++ .../scripts/Draenor/Auchindoun/auchindoun.cpp | 9 +++-- .../Draenor/Auchindoun/boss_azzakel.cpp | 6 ++- 4 files changed, 50 insertions(+), 5 deletions(-) create mode 100644 sql/sylvania/hov_boss_manquants.sql create mode 100644 sql/sylvania/hov_boss_manquants_ROLLBACK.sql diff --git a/sql/sylvania/hov_boss_manquants.sql b/sql/sylvania/hov_boss_manquants.sql new file mode 100644 index 0000000..28c7ec8 --- /dev/null +++ b/sql/sylvania/hov_boss_manquants.sql @@ -0,0 +1,37 @@ +-- ===================================================================== +-- Salles des Valeureux (carte 1477) : les 3 boss absents +-- +-- Constat du 2026-09-10 : Hymdall, Fenryr et les quatre Rois valarjar +-- sont bien posés, mais Hyrja, le Roi-dieu Skovald et Odyn n'existent +-- nulle part dans `creature` — donc le donjon s'arrête après Fenryr. +-- Leurs modèles, factions, drapeaux, scripts et tables de butin sont +-- pourtant tous en base : il ne manquait que les apparitions. +-- +-- Positions : Odyn est repris tel quel du script (boss_odyn.cpp, +-- SetHomePosition 2402.76 / 528.64 / 748.99) ; Skovald est placé dans le +-- hall d'Odyn, à l'intérieur de la porte 246145 (2520.3 / 529.0 / 749.0) +-- dont il commande la fermeture ; Hyrja et ses deux acolytes sont posés +-- au-delà de la porte de sa salle (245702, 3196.2 / 371.3 / 655.4), sur +-- l'axe d'entrée. La position de Hyrja est la seule estimée : si elle +-- flotte ou s'enfonce, corriger le seul Z avec un UPDATE. +-- +-- Odyn a `lootid = 0` : sa ligne de Guide d'aventure est ajoutée ici +-- (rencontre 1489, 17 objets officiels). Hyrja et Skovald ont déjà leurs +-- tables de butin, on n'y touche pas. +-- ===================================================================== + +DELETE FROM `creature` WHERE `guid` BETWEEN 290200801 AND 290200805; +INSERT INTO `creature` + (`guid`,`id`,`map`,`zoneId`,`areaId`,`spawnDifficulties`,`phaseUseFlags`,`PhaseId`,`PhaseGroup`, + `terrainSwapMap`,`modelid`,`equipment_id`,`position_x`,`position_y`,`position_z`,`orientation`, + `spawntimesecs`,`spawndist`,`currentwaypoint`,`curhealth`,`curmana`,`MovementType`, + `npcflag`,`unit_flags`,`unit_flags2`,`unit_flags3`,`dynamicflags`,`ScriptName`,`movementmode`,`VerifiedBuild`) VALUES +(290200801, 95833, 1477, 7672, 7672, '1,2,8,23', 0,0,0, -1, 0,0, 3175.00, 350.00, 655.40, 0.79, 7200,0,0,0,0,0, 0,0,0,0,0, '', 0, 0), -- Hyrja +(290200802, 97202, 1477, 7672, 7672, '1,2,8,23', 0,0,0, -1, 0,0, 3166.50, 358.50, 655.40, 0.79, 7200,0,0,0,0,0, 0,0,0,0,0, '', 0, 0), -- Olmyr the Enlightened +(290200803, 97219, 1477, 7672, 7672, '1,2,8,23', 0,0,0, -1, 0,0, 3183.50, 341.50, 655.40, 0.79, 7200,0,0,0,0,0, 0,0,0,0,0, '', 0, 0), -- Solsten +(290200804, 95675, 1477, 7672, 7672, '1,2,8,23', 0,0,0, -1, 0,0, 2500.00, 529.00, 749.00, 0.00, 7200,0,0,0,0,0, 0,0,0,0,0, '', 0, 0), -- God-King Skovald +(290200805, 95676, 1477, 7672, 7672, '1,2,8,23', 0,0,0, -1, 0,0, 2402.76, 528.64, 748.99, 0.00, 7200,0,0,0,0,0, 0,0,0,0,0, '', 0, 0); -- Odyn + +-- Odyn n'a aucune table de butin : on le branche sur le Guide d'aventure +DELETE FROM `creature_template_journal` WHERE `entry` = 95676; +INSERT INTO `creature_template_journal` (`entry`,`JournalEncounterID`) VALUES (95676, 1489); diff --git a/sql/sylvania/hov_boss_manquants_ROLLBACK.sql b/sql/sylvania/hov_boss_manquants_ROLLBACK.sql new file mode 100644 index 0000000..90f90f9 --- /dev/null +++ b/sql/sylvania/hov_boss_manquants_ROLLBACK.sql @@ -0,0 +1,3 @@ +-- Rollback de hov_boss_manquants.sql (2026-09-10) +DELETE FROM `creature` WHERE `guid` BETWEEN 290200801 AND 290200805; +DELETE FROM `creature_template_journal` WHERE `entry` = 95676; diff --git a/src/server/scripts/Draenor/Auchindoun/auchindoun.cpp b/src/server/scripts/Draenor/Auchindoun/auchindoun.cpp index 13247fb..09bfab5 100644 --- a/src/server/scripts/Draenor/Auchindoun/auchindoun.cpp +++ b/src/server/scripts/Draenor/Auchindoun/auchindoun.cpp @@ -1228,9 +1228,12 @@ struct auchindoun_mob_blazing_trickster : public ScriptedAI if (l_Azzakel->IsInCombat() && l_Azzakel->IsAlive() && l_Azzakel->IsAIEnabled) l_Azzakel->GetAI()->DoAction(eAuchindounActions::ActionDemonSoulsAchievement); } - if (me->GetEntry() == 79510) - if (Creature* Azzakel_control = me->FindNearestCreature(87218, 50.0f, true)) - Azzakel_control->AI()->DoAction(2); + /// 87218 n'est qu'un marqueur de position sans IA : le compteur doit + /// aller au vrai controleur (76216), retrouve par les donnees d'instance. + if (me->GetEntry() == 79510 && m_Instance != nullptr) + if (Creature* l_Trigger = m_Instance->instance->GetCreature(m_Instance->GetGuidData(eAuchindounDatas::DataTriggerAzzakelController))) + if (l_Trigger->IsWithinDistInMap(me, 50.0f) && l_Trigger->IsAIEnabled) + l_Trigger->AI()->DoAction(eAuchindounActions::ActionCountPre3StBossKill); } void UpdateAI(uint32 p_Diff) override diff --git a/src/server/scripts/Draenor/Auchindoun/boss_azzakel.cpp b/src/server/scripts/Draenor/Auchindoun/boss_azzakel.cpp index e8fdc09..1650a12 100644 --- a/src/server/scripts/Draenor/Auchindoun/boss_azzakel.cpp +++ b/src/server/scripts/Draenor/Auchindoun/boss_azzakel.cpp @@ -485,15 +485,17 @@ struct auchindoun_azzakel_mob_controller : public ScriptedAI } case eAzzakelEvents::EventSummonAzzakel02: { - if (!m_Azzakel) + /// la condition etait inversee : on entrait ici uniquement quand + /// le GUID etait vide, donc Azzakel n'etait jamais rendu hostile. + if (!m_Azzakel.IsEmpty()) { if (Creature* l_Azzakael = ObjectAccessor::GetCreature(*me, m_Azzakel)) { l_Azzakael->setFaction(HostileFaction); l_Azzakael->GetMotionMaster()->MoveCharge(1911.93f, 2754.40f, 30.973f, 42.0f); } - break; } + break; } default: break; From 65d5978f4a383eac19997aed963370751c6b184a Mon Sep 17 00:00:00 2001 From: BlaMacfly <165155133+BlaMacfly@users.noreply.github.com> Date: Fri, 11 Sep 2026 13:25:34 +0200 Subject: [PATCH 45/50] Mercenaires : trois correctifs issus de l audit du module MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. La re-resolution des sorts passait par une file qui la jetait. Le correctif 19c0cf03 poussait un BGSType_DelayLevelup apres la creation de l IA de groupe. Mesure sur quatre mercenaires : deux repares, deux non. En cause PushScheduleToQueue, qui jette silencieusement une tache si une du meme type est deja en file, et -- pour ce type precisement -- si IsSettingFinish() est faux. La reparation ne partait qu au hasard. On appelle desormais OnLevelupToBotAI() directement. L IA de groupe vient d etre creee : le dynamic_cast qui l ouvre aboutit forcement. 2. Le raccourci de mise en place renvoyait des mercenaires nus. Signale en jeu : « Kaerbrus n a meme pas d equipement ». Constate en base : niveau 110, 76 sorts, zero piece portee. ProcessSetting court-circuite le re-level d un bot deja au bon niveau, avec ses talents et la bonne specialisation -- et saute du meme coup les etapes d habillage. Un bot ayant perdu son equipement ne le retrouvait jamais : a chaque embauche le raccourci concluait que tout allait bien. On verifie donc qu il porte au moins dix pieces avant de couper. 3. Le rappel n intervenait qu au-dela de 160 metres. Mesure : au moment d un « !attack », deux des quatre mercenaires se trouvaient a 100 et 106 metres de leur employeur. Sous le seuil de rappel, ils acceptaient l ordre et partaient A PIED -- une quinzaine de secondes de marche, le combat fini avant leur arrivee. Vu du joueur, le mercenaire « refuse d attaquer ». Ce seuil convient a un bot de terrain, pas a un membre de groupe. Ramene a deux fois la portee de recherche, soit 64 metres : bien au-dela des 32 ou l IA engage et des 28 de portee des sorts. Co-Authored-By: Claude Opus 5 --- .../AI/PlayerAI/BotGroupAI/BotGroupAI.cpp | 48 ++++++++++++++++++- src/server/game/Mercenary/MercenaryMgr.cpp | 22 +++++---- src/server/game/Server/PlayerBotSession.cpp | 25 +++++++++- 3 files changed, 85 insertions(+), 10 deletions(-) diff --git a/src/server/game/AI/PlayerAI/BotGroupAI/BotGroupAI.cpp b/src/server/game/AI/PlayerAI/BotGroupAI/BotGroupAI.cpp index 6315f53..4d68f3f 100644 --- a/src/server/game/AI/PlayerAI/BotGroupAI/BotGroupAI.cpp +++ b/src/server/game/AI/PlayerAI/BotGroupAI/BotGroupAI.cpp @@ -264,9 +264,22 @@ void BotGroupAI::ProcessAttackCommand() { Unit* pMasterTarget = m_MasterPlayer->GetSelectedUnit(); if (!pMasterTarget || !pMasterTarget->IsAlive()) + { + TC_LOG_ERROR("botai", "ATTACKDBG %s: ordre recu mais le maitre n a pas de cible vivante.", + me->GetName().c_str()); return; + } if (!me->IsValidAttackTarget(pMasterTarget)) + { + TC_LOG_ERROR("botai", "ATTACKDBG %s: cible %u (entree %u) refusee par IsValidAttackTarget.", + me->GetName().c_str(), pMasterTarget->GetGUID().GetCounter(), + pMasterTarget->ToCreature() ? pMasterTarget->ToCreature()->GetEntry() : 0); return; + } + TC_LOG_ERROR("botai", "ATTACKDBG %s: cible %u (entree %u) retenue, distance %.1f.", + me->GetName().c_str(), pMasterTarget->GetGUID().GetCounter(), + pMasterTarget->ToCreature() ? pMasterTarget->ToCreature()->GetEntry() : 0, + me->GetDistance(pMasterTarget)); me->SetSelection(pMasterTarget->GetGUID()); m_ForceFlee = false; m_StopFollow = false; @@ -1448,7 +1461,26 @@ bool BotGroupAI::TryTeleportToMaster() m_Flee.Clear(); return true; } - else if (me->GetDistance(m_MasterPlayer->GetPosition()) > BOTAI_SEARCH_RANGE * 5) + // DISTANCE_DE_RAPPEL + // + // MESURE (audit du 09/09) : au moment d un « !attack », deux des quatre + // mercenaires se trouvaient a 100 et 106 metres de leur employeur, les + // deux autres a 21 et 28. Les lointains n etaient pas perdus au sens du + // code -- simplement sous le seuil de rappel, qui valait + // BOTAI_SEARCH_RANGE * 5, soit 160 metres. + // + // Ils recevaient donc l ordre, l acceptaient, et partaient A PIED. Cent + // metres de marche, c est une quinzaine de secondes : le combat est + // termine avant leur arrivee, et de l exterieur le mercenaire a + // simplement « refuse d attaquer ». + // + // Ce seuil de 160 convient a un bot de terrain qui vagabonde ; pas a un + // membre de groupe, qui n a aucune raison de s eloigner autant de son + // employeur. On le ramene a deux fois la portee de recherche, soit 64 + // metres -- largement au-dela des 32 metres ou l IA engage le combat et + // des 28 de portee des sorts, donc sans risque de teleporter un lanceur + // de sorts en pleine rotation. + else if (me->GetDistance(m_MasterPlayer->GetPosition()) > BOTAI_SEARCH_RANGE * 2) { m_Teleporting.SetTeleport(m_MasterPlayer, 0); me->SetSelection(ObjectGuid::Empty); @@ -3006,6 +3038,20 @@ Unit* BotGroupAI::GetBotAIValidSelectedUnit() isValid = false; if (!isValid) { + // SONDE ATTACKDBG : nommer le filtre qui rejette, une fois par + // seconde au plus pour ne pas noyer le journal. + if (pTarget && m_AttackDbgTick + 1000 < getMSTime()) + { + m_AttackDbgTick = getMSTime(); + char const* motif = "inconnu"; + if (!pTarget->IsVisible()) motif = "IsVisible"; + else if (!me->InSamePhase(pTarget->GetPhaseShift())) motif = "phase"; + else if (IsNotSelect(pTarget)) motif = "IsNotSelect"; + else if (TargetIsControl(pTarget)) motif = "controle/evade"; + else if (m_FliterCreatures.IsFliterCreature(pTarget->ToCreature())) motif = "filtre"; + TC_LOG_ERROR("botai", "ATTACKDBG %s: cible %u rejetee -- %s.", + me->GetName().c_str(), pTarget->GetGUID().GetCounter(), motif); + } me->AttackStop(); me->SetSelection(ObjectGuid::Empty); return NULL; diff --git a/src/server/game/Mercenary/MercenaryMgr.cpp b/src/server/game/Mercenary/MercenaryMgr.cpp index 7d3044d..6f00e15 100644 --- a/src/server/game/Mercenary/MercenaryMgr.cpp +++ b/src/server/game/Mercenary/MercenaryMgr.cpp @@ -793,15 +793,21 @@ void MercenaryMgr::Update(uint32 diff) // seulement de la creer, la ligne au-dessus. La tache partait avant // sa cible et tombait dans le vide. // - // On en repousse donc une maintenant que l IA existe. Elle attend - // que le bot soit hors combat avant d agir, le rehabillage complet - // faisant partie du meme passage. + // CORRECTION DU CORRECTIF (audit du 09/09) : la premiere version + // poussait un BGSType_DelayLevelup dans la file du bot. Mesure faite + // sur quatre mercenaires : deux repares, deux non. En cause, + // PushScheduleToQueue, qui jette SILENCIEUSEMENT une tache dans deux + // cas -- si une du meme type est deja en file, et, pour ce type + // precisement, si IsSettingFinish() est faux. La reparation ne + // partait donc qu au petit bonheur. + // + // On appelle directement. L IA de groupe vient d etre creee a la + // ligne precedente : le dynamic_cast qui ouvre + // OnLevelupToBotAI() aboutit forcement, et InitializeSpells re-resout + // les poignees contre le niveau, la specialisation et le grimoire + // definitifs. Rien ne peut plus l escamoter. // ============================================================= - if (PlayerBotSession* botSession = dynamic_cast(bot->GetSession())) - { - BotGlobleSchedule reresolution(BotGlobleScheduleType::BGSType_DelayLevelup, bot->GetGUID()); - botSession->PushScheduleToQueue(reresolution); - } + bot->OnLevelupToBotAI(); // Des maintenant, pas au tick suivant : l IA de groupe, en decouvrant // un maitre lointain, armerait le sien vers l employeur, et SetTeleport diff --git a/src/server/game/Server/PlayerBotSession.cpp b/src/server/game/Server/PlayerBotSession.cpp index 581cbd9..a7576a7 100644 --- a/src/server/game/Server/PlayerBotSession.cpp +++ b/src/server/game/Server/PlayerBotSession.cpp @@ -405,7 +405,30 @@ bool PlayerBotSession::ProcessSetting(BotGlobleSchedule& schedule) // heritage de l epoque ou LearnTalents() etait un corps vide. PlayerTalentMap const* talents = player->GetTalentMap(player->GetActiveTalentGroup()); bool const hasTalents = talents && talents->size() >= player->CalculateTalentsTiers(); - if (hasTalents && (schedule.parameter3 >= 4 || (player->FindTalentType() + 1 == schedule.parameter3))) + + // SIGNALE EN JEU : « Kaerbrus n a meme pas d equipement ». + // Constate en base : niveau 110, 76 sorts, ZERO piece portee. + // + // Ce raccourci evite un re-level complet a un bot deja au bon + // niveau, avec ses talents et la bonne specialisation. Mais il + // saute du meme coup les etapes 6 a 10 de UpdateReset(), qui sont + // justement l habillage. Un mercenaire ayant perdu son equipement + // -- contrat precedent interrompu, re-level avorte -- ne le + // retrouvait donc JAMAIS : a chaque embauche, le raccourci + // concluait que tout allait bien et le renvoyait nu. + // + // On verifie donc qu il est reellement habille avant de couper. + // Dix pieces sur les dix-neuf emplacements : de quoi distinguer un + // bot equipe d un bot depouille, sans exiger un sans-faute (la + // seconde babiole et l arme de jet manquent souvent, legitimement). + uint32 piecesPortees = 0; + for (uint8 emplacement = EQUIPMENT_SLOT_START; emplacement < EQUIPMENT_SLOT_END; ++emplacement) + if (player->GetItemByPos(INVENTORY_SLOT_BAG_0, emplacement)) + ++piecesPortees; + bool const correctementEquipe = (piecesPortees >= 10); + + if (hasTalents && correctementEquipe && + (schedule.parameter3 >= 4 || (player->FindTalentType() + 1 == schedule.parameter3))) return true; } } From 01046fd22af136f39cd0031ab3293bf75a541516 Mon Sep 17 00:00:00 2001 From: BlaMacfly <165155133+BlaMacfly@users.noreply.github.com> Date: Fri, 11 Sep 2026 20:46:29 +0200 Subject: [PATCH 46/50] Quetes : crediter les objectifs "Parler a" sur CMSG_QUESTGIVER_HELLO Un PNJ qui porte le drapeau donneur de quete sans le drapeau papotage recoit CMSG_QUESTGIVER_HELLO et non CMSG_GOSSIP_HELLO. Seul le handler du papotage appelait TalkedToCreature : tous les objectifs de type TALKTO vises sur ce genre de PNJ (19 objectifs en base, dont Sergent Grimjaw pour la quete du fief Nouvelles marchandises) ne se validaient jamais. --- src/server/game/Handlers/QuestHandler.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index 87efae4..4bf01a4 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -96,6 +96,10 @@ void WorldSession::HandleQuestgiverHelloOpcode(WorldPackets::Quest::QuestGiverHe if (sScriptMgr->OnGossipHello(_player, creature)) return; + // Un PNJ purement donneur de quete (sans drapeau papotage) recoit CMSG_QUESTGIVER_HELLO + // au lieu de CMSG_GOSSIP_HELLO : sans cet appel, les objectifs \"Parler a\" ne sont jamais valides. + _player->TalkedToCreature(creature->GetEntry(), creature->GetGUID()); + _player->PrepareGossipMenu(creature, creature->GetCreatureTemplate()->GossipMenuId, true); _player->SendPreparedGossip(creature); From 5f430f0510b00efd6cd88c60ea887a385769786d Mon Sep 17 00:00:00 2001 From: BlaMacfly <165155133+BlaMacfly@users.noreply.github.com> Date: Sat, 12 Sep 2026 01:02:48 +0200 Subject: [PATCH 47/50] Butin de groupe : une devise dans le butin d un boss tuait le worldserver Signalement Discord : entrer dans la Prison violette fait planter le serveur. Trois SIGSEGV cette nuit, pile identique : ASSERT_NOTNULL sur GetItemTemplate dans Group::GroupLoot, appele depuis HandleLootOpcode. Dans les tables de butin de ce core, un Item negatif designe une devise (LootMgr.cpp:151). Loot::AddItem les range dans le meme tableau que les objets mais sans modele d objet. Group::GroupLoot parcourait ce tableau et exigeait un modele pour chaque entree : la premiere devise rencontree tuait le processus. 24 creatures sont concernees, dont cinq boss de l Assaut sur la Prison violette (Blood-Princess Thal ena, Sael orn, Lord Malgath, Festerface, Taldath). Les devises sont desormais ignorees par le tirage au sort, et un objet introuvable est journalise puis saute au lieu de faire tomber le serveur. --- src/server/game/Groups/Group.cpp | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index e32ccea..11ac833 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -1172,7 +1172,20 @@ void Group::GroupLoot(Loot* loot, WorldObject* lootedObject) if (i->freeforall) continue; - item = ASSERT_NOTNULL(sObjectMgr->GetItemTemplate(i->itemid)); + // Les devises (Item negatif dans les tables de butin) occupent le meme tableau + // que les objets mais n'ont pas de modele d'objet. Les laisser arriver jusqu'a + // l'ASSERT tuait le worldserver des qu'un groupe ouvrait le butin d'un boss qui + // en lache -- ceux de la Prison violette, entre autres. + if (i->type != LOOT_ITEM_TYPE_ITEM) + continue; + + item = sObjectMgr->GetItemTemplate(i->itemid); + if (!item) + { + TC_LOG_ERROR("sql.sql", "Group::GroupLoot: objet %u introuvable dans les donnees, ignore dans le butin de %s", + i->itemid, lootedObject->GetGUID().ToString().c_str()); + continue; + } //roll for over-threshold item if it's one-player loot if (item->GetQuality() >= uint32(m_lootThreshold)) @@ -1247,7 +1260,13 @@ void Group::GroupLoot(Loot* loot, WorldObject* lootedObject) if (!i->follow_loot_rules) continue; + if (i->type != LOOT_ITEM_TYPE_ITEM) + continue; + item = sObjectMgr->GetItemTemplate(i->itemid); + if (!item) + continue; + Roll* r = new Roll(*i); for (GroupReference* itr = GetFirstMember(); itr != NULL; itr = itr->next()) From e0e0ba12507446a4038c35735b26b0f8be7d025d Mon Sep 17 00:00:00 2001 From: BlaMacfly <165155133+BlaMacfly@users.noreply.github.com> Date: Sat, 12 Sep 2026 10:17:32 +0200 Subject: [PATCH 48/50] Raids : coffre de butin detruit avec le boss, Alysrazor dans la lave, Oondasta intouchable Trois signalements Discord du meme joueur. Coffres : WorldObject::SummonGameObject rattachait TOUT objet invoque a son invocateur. Les objets rattaches sont detruits avec lui (RemoveAllGameObjects au retrait du monde), donc le coffre d un boss disparaissait cote serveur des que le cadavre s effacait : le raid voyait encore le coffre mais ne pouvait plus l ouvrir. Cas signale : le Coffre du seigneur du feu de Ragnaros, mais tous les boss qui invoquent leur coffre etaient concernes. Les coffres ne sont plus rattaches. Alysrazor : elle meurt en vol et JustDied enchainait directement sur MoveFall. Au-dessus du vide entre les plateformes, la depouille finissait dans la lave, butin compris. Elle est ramenee au centre de l arene avant la chute. Oondasta : l intro pose UNIT_FLAG_IMMUNE_TO_PC et seul l evenement de fin la retire. Reset() reposait ce drapeau et effacait les evenements d intro a chaque evade, sans garantie de rejouer l intro : le boss frappait les joueurs sans qu ils puissent riposter. Le drapeau n est plus repose apres coup, il est leve des l entree en combat, et _introEnd est enfin initialise (il ne l etait pas). --- src/server/game/Entities/Object/Object.cpp | 6 +++++- .../scripts/Kalimdor/Firelands/boss_alysrazor.cpp | 4 ++++ .../Pandaria/Zones/WorldBosses/boss_oondasta.cpp | 15 ++++++++++++--- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 72ed1cf..4818327 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -2777,7 +2777,11 @@ GameObject* WorldObject::SummonGameObject(uint32 entry, Position const& pos, Qua go->SetVisibleBySummonerOnly(visibleBySummonerOnly); go->SetRespawnTime(respawnTime); - if (GetTypeId() == TYPEID_PLAYER || GetTypeId() == TYPEID_UNIT) //not sure how to handle this + // Un coffre de butin ne doit pas etre rattache a son invocateur : les objets + // rattaches sont detruits avec lui (RemoveAllGameObjects), donc le coffre d'un + // boss disparaissait cote serveur des que son cadavre s'effacait -- le raid + // voyait encore le coffre mais ne pouvait plus l'ouvrir (Ragnaros, entre autres). + if ((GetTypeId() == TYPEID_PLAYER || GetTypeId() == TYPEID_UNIT) && goinfo->type != GAMEOBJECT_TYPE_CHEST) ToUnit()->AddGameObject(go); else go->SetSpawnedByDefault(false); diff --git a/src/server/scripts/Kalimdor/Firelands/boss_alysrazor.cpp b/src/server/scripts/Kalimdor/Firelands/boss_alysrazor.cpp index cd237a9..a590ff1 100644 --- a/src/server/scripts/Kalimdor/Firelands/boss_alysrazor.cpp +++ b/src/server/scripts/Kalimdor/Firelands/boss_alysrazor.cpp @@ -539,6 +539,10 @@ class boss_alysrazor : public CreatureScript RemoveEncounterAuras(); me->SetCanFly(false); me->SetDisableGravity(false); + // Elle meurt en vol : laissee a elle-meme, la depouille traverse le vide + // entre les plateformes et finit dans la lave, butin compris. On la ramene + // au centre de l'arene avant la chute, comme en jeu officiel. + me->NearTeleportTo(centerPos.GetPositionX(), centerPos.GetPositionY(), centerPos.GetPositionZ(), centerPos.GetOrientation()); me->GetMotionMaster()->MoveFall(); } diff --git a/src/server/scripts/Pandaria/Zones/WorldBosses/boss_oondasta.cpp b/src/server/scripts/Pandaria/Zones/WorldBosses/boss_oondasta.cpp index bfead37..41aa1e6 100644 --- a/src/server/scripts/Pandaria/Zones/WorldBosses/boss_oondasta.cpp +++ b/src/server/scripts/Pandaria/Zones/WorldBosses/boss_oondasta.cpp @@ -70,7 +70,7 @@ class boss_oondasta : public CreatureScript struct boss_oondastaAI : public ScriptedAI { - boss_oondastaAI(Creature* creature) : ScriptedAI(creature), summons(me) { } + boss_oondastaAI(Creature* creature) : ScriptedAI(creature), summons(me), _introEnd(false) { } EventMap _events; EventMap _introEvents; @@ -85,8 +85,10 @@ class boss_oondasta : public CreatureScript void Reset() override { - _introEnd = false; - + // _introEnd n'est volontairement plus remis a false ici : chaque evade + // reposait UNIT_FLAG_IMMUNE_TO_PC et effacait les evenements d'intro, si + // bien que le boss redevenait intouchable pour de bon -- il frappait les + // joueurs sans qu'ils puissent riposter. me->RemoveAurasDueToSpell(SPELL_CRUSH); me->RemoveAura(SPELL_GROWING_FURY); @@ -119,6 +121,13 @@ class boss_oondasta : public CreatureScript void EnterCombat(Unit* /*who*/) override { + // Filet de securite : un boss qui frappe doit pouvoir etre frappe. + if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC)) + { + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + _introEnd = true; + } + _events.ScheduleEvent(EVENT_SPIRITFIRE_BEAM, 15s); _events.ScheduleEvent(EVENT_PIERCING_ROAR, 20s); _events.ScheduleEvent(EVENT_FRILL_BLAST, 40s); From da7d96f124f87dc125bf790fc9e0da90e23dbd03 Mon Sep 17 00:00:00 2001 From: BlaMacfly <165155133+BlaMacfly@users.noreply.github.com> Date: Sat, 12 Sep 2026 10:56:23 +0200 Subject: [PATCH 49/50] Zul Aman : les captifs de la course contre la montre, et le combat de Nalorakk Signalement Discord : impossible d obtenir la monture du chrono, et Nalorakk ne fait rien. Captifs : l instance tenait deja le chrono (15 minutes, +5 aux deux premiers boss) mais les quatre case de SetBossState etaient vides. SummonHostage n avait jamais ete porte : la course allait jusqu au bout sans que personne apparaisse. Tanzar, Harkor, Ashli et Kraz sont desormais invoques a la mort de leur boss, et un script leur fait remettre leur coffre quand on leur parle (les quatre coffres et leurs tables de butin etaient deja en base, seul le script manquait). Nalorakk : sa coquille de script ne contenait aucun sort. Combat ecrit d apres l amont en gardant notre numerotation de creature_text : les deux formes qui alternent toutes les 45 s, leurs sorts respectifs et la frenesie a 10 minutes. Les quatre vagues de trolls de la rampe ne sont pas portees : l amont les pilote par des spawn groups et des chemins de waypoints que ce core n a pas. --- .../EasternKingdoms/ZulAman/boss_nalorakk.cpp | 127 +++++++++++++++++- .../ZulAman/instance_zulaman.cpp | 48 +++++++ .../EasternKingdoms/ZulAman/zulaman.cpp | 65 +++++++++ 3 files changed, 235 insertions(+), 5 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp index 4224aef..5b8ac70 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp @@ -1,5 +1,5 @@ - /* - * Copyright (C) 2008-2018 TrinityCore +/* + * This file is part of the DestinyCore Project. See AUTHORS file for Copyright information * * 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 @@ -15,6 +15,13 @@ * with this program. If not, see . */ +// Nalorakk n'avait qu'une coquille de script : il frappait en melee et rien d'autre, +// ni sorts ni changement de forme. Le combat est ici ecrit a partir du script amont +// TrinityCore, en gardant NOTRE numerotation de creature_text (0-11). +// Ce qui n'est pas porte : les quatre vagues de trolls qui l'annoncent dans la rampe. +// L'amont les pilote par des spawn groups et des chemins de waypoints que ce core +// n'a pas (pas de table spawn_group) -- cela demanderait de recreer les donnees. + #include "ScriptMgr.h" #include "ScriptedCreature.h" #include "zulaman.h" @@ -37,10 +44,33 @@ enum Says enum Spells { + // Forme troll + SPELL_BRUTAL_SWIPE = 42384, + SPELL_MANGLE = 42389, + SPELL_SURGE = 44019, + + // Forme d'ours + SPELL_LACERATING_SLASH = 42395, + SPELL_REND_FLESH = 42397, + SPELL_DEAFENING_ROAR = 42398, + + // Communs + SPELL_SHAPE_OF_THE_BEAR = 42377, + SPELL_BERSERK = 45078 }; enum Events { + EVENT_BRUTAL_SWIPE = 1, + EVENT_MANGLE, + EVENT_SURGE, + + EVENT_LACERATING_SLASH, + EVENT_REND_FLESH, + EVENT_DEAFENING_ROAR, + + EVENT_SHAPESHIFT, + EVENT_BERSERK }; class boss_nalorakk : public CreatureScript @@ -51,17 +81,23 @@ class boss_nalorakk : public CreatureScript struct boss_nalorakkAI : public BossAI { - boss_nalorakkAI(Creature* creature) : BossAI(creature, DATA_NALORAKK) { } + boss_nalorakkAI(Creature* creature) : BossAI(creature, DATA_NALORAKK), _bearForm(false) { } void Reset() override { _Reset(); + _bearForm = false; + me->RemoveAurasDueToSpell(SPELL_SHAPE_OF_THE_BEAR); } void EnterCombat(Unit* /*who*/) override { Talk(SAY_AGGRO); _EnterCombat(); + + ScheduleTrollEvents(); + events.ScheduleEvent(EVENT_SHAPESHIFT, 45000); + events.ScheduleEvent(EVENT_BERSERK, 600000); } void JustDied(Unit* /*killer*/) override @@ -76,6 +112,30 @@ class boss_nalorakk : public CreatureScript Talk(SAY_PLAYER_KILL); } + void ScheduleTrollEvents() + { + events.ScheduleEvent(EVENT_BRUTAL_SWIPE, urand(10000, 20000)); + events.ScheduleEvent(EVENT_MANGLE, urand(15000, 20000)); + events.ScheduleEvent(EVENT_SURGE, urand(20000, 25000)); + } + + void ScheduleBearEvents() + { + events.ScheduleEvent(EVENT_LACERATING_SLASH, urand(10000, 15000)); + events.ScheduleEvent(EVENT_REND_FLESH, urand(12000, 18000)); + events.ScheduleEvent(EVENT_DEAFENING_ROAR, urand(20000, 25000)); + } + + void CancelFormEvents() + { + events.CancelEvent(EVENT_BRUTAL_SWIPE); + events.CancelEvent(EVENT_MANGLE); + events.CancelEvent(EVENT_SURGE); + events.CancelEvent(EVENT_LACERATING_SLASH); + events.CancelEvent(EVENT_REND_FLESH); + events.CancelEvent(EVENT_DEAFENING_ROAR); + } + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) @@ -85,19 +145,76 @@ class boss_nalorakk : public CreatureScript if (me->HasUnitState(UNIT_STATE_CASTING)) return; - /* + while (uint32 eventId = events.ExecuteEvent()) { switch (eventId) { + case EVENT_BRUTAL_SWIPE: + DoCastVictim(SPELL_BRUTAL_SWIPE); + events.ScheduleEvent(EVENT_BRUTAL_SWIPE, urand(10000, 20000)); + break; + case EVENT_MANGLE: + DoCastVictim(SPELL_MANGLE); + events.ScheduleEvent(EVENT_MANGLE, urand(15000, 20000)); + break; + case EVENT_SURGE: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, NonTankTargetSelector(me))) + { + Talk(SAY_SURGE); + Talk(EMOTE_SURGE, target); + DoCast(target, SPELL_SURGE); + } + events.ScheduleEvent(EVENT_SURGE, urand(20000, 25000)); + break; + case EVENT_LACERATING_SLASH: + DoCastVictim(SPELL_LACERATING_SLASH); + events.ScheduleEvent(EVENT_LACERATING_SLASH, urand(10000, 15000)); + break; + case EVENT_REND_FLESH: + DoCastVictim(SPELL_REND_FLESH); + events.ScheduleEvent(EVENT_REND_FLESH, urand(12000, 18000)); + break; + case EVENT_DEAFENING_ROAR: + DoCast(me, SPELL_DEAFENING_ROAR); + events.ScheduleEvent(EVENT_DEAFENING_ROAR, urand(20000, 25000)); + break; + case EVENT_SHAPESHIFT: + CancelFormEvents(); + _bearForm = !_bearForm; + + if (_bearForm) + { + Talk(SAY_BEAR); + Talk(EMOTE_BEAR); + DoCast(me, SPELL_SHAPE_OF_THE_BEAR); + ScheduleBearEvents(); + events.ScheduleEvent(EVENT_SHAPESHIFT, 45000); + } + else + { + Talk(SAY_TROLL); + me->RemoveAurasDueToSpell(SPELL_SHAPE_OF_THE_BEAR); + ScheduleTrollEvents(); + events.ScheduleEvent(EVENT_SHAPESHIFT, 45000); + } + break; + case EVENT_BERSERK: + DoCast(me, SPELL_BERSERK); + break; default: break; } + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; } - */ DoMeleeAttackIfReady(); } + + private: + bool _bearForm; }; CreatureAI* GetAI(Creature* creature) const override diff --git a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp index c91d4d9..4d1ad5f 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp @@ -20,10 +20,27 @@ #include "GameObject.h" #include "InstanceScript.h" #include "Map.h" +#include "Player.h" #include "ScriptedCreature.h" #include "WorldStatePackets.h" #include "zulaman.h" +// Les quatre captifs liberes par la course contre la montre. Chacun apparait la +// ou son boss vient de tomber et remet un coffre de recompense quand on lui parle. +struct HostageInfoEntry +{ + uint32 Npc; + float X, Y, Z, O; +}; + +static HostageInfoEntry const HostageInfo[4] = +{ + { 23790, -57.0f, 1343.0f, 40.77f, 3.2f }, // Tanzar - ours (Nalorakk) + { 23999, 400.0f, 1414.0f, 74.36f, 3.3f }, // Harkor - aigle (Akil'zon) + { 24001, -35.0f, 1134.0f, 18.71f, 1.9f }, // Ashli - dragonhalc (Jan'alai) + { 24024, 413.0f, 1117.0f, 6.32f, 3.1f } // Kraz - lynx (Halazzi) +}; + class instance_zulaman : public InstanceMapScript { public: @@ -139,6 +156,28 @@ class instance_zulaman : public InstanceMapScript return ObjectGuid::Empty; } + // Rien n'invoquait les captifs : la course contre la montre se deroulait + // jusqu'au bout sans que personne n'apparaisse, donc sans recompense. + void SummonHostage(uint8 num) + { + if (ZulAmanState != IN_PROGRESS) + return; + + Map::PlayerList const& playerList = instance->GetPlayers(); + if (playerList.isEmpty()) + return; + + if (Player* player = playerList.begin()->GetSource()) + { + HostageInfoEntry const& hostageInfo = HostageInfo[num]; + if (Creature* hostage = player->SummonCreature(hostageInfo.Npc, hostageInfo.X, hostageInfo.Y, hostageInfo.Z, hostageInfo.O, TEMPSUMMON_DEAD_DESPAWN)) + { + hostage->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + hostage->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + } + } + } + void SetData(uint32 type, uint32 data) override { switch (type) @@ -202,12 +241,21 @@ class instance_zulaman : public InstanceMapScript switch (type) { case DATA_AKILZON: + if (state == DONE) + SummonHostage(1); break; case DATA_NALORAKK: + if (state == DONE) + SummonHostage(0); break; case DATA_JANALAI: + if (state == DONE) + SummonHostage(2); break; case DATA_HALAZZI: + if (state == DONE) + SummonHostage(3); + break; case DATA_HEXLORD: case DATA_DAAKARA: break; diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp index fca2d98..a7a192c 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp @@ -250,8 +250,73 @@ class spell_banging_the_gong : public SpellScriptLoader } }; +// Tanzar, Harkor, Ashli et Kraz : les captifs liberes par la course contre la +// montre. Ils sont invoques par l'instance a la mort de leur boss ; leur seule +// raison d'etre est de remettre le coffre de recompense quand on leur parle. +// Rien ne les scriptait, donc meme invoques ils n'auraient rien donne. +class npc_zulaman_hostage : public CreatureScript +{ +public: + npc_zulaman_hostage() : CreatureScript("npc_zulaman_hostage") { } + + enum Hostages + { + NPC_TANZAR = 23790, + NPC_HARKOR = 23999, + NPC_ASHLI = 24001, + NPC_KRAZ = 24024, + + GO_HAZLEKS_TRUNK = 186648, // Tanzar + GO_BAKKALZUS_SATCHEL = 187021, // Harkor + GO_KASHAS_BAG = 186672, // Ashli + GO_NORKANIS_PACKAGE = 186667, // Kraz + + ACTION_FREE_HOSTAGE = GOSSIP_ACTION_INFO_DEF + 1 + }; + + static uint32 ChestForHostage(uint32 entry) + { + switch (entry) + { + case NPC_TANZAR: return GO_HAZLEKS_TRUNK; + case NPC_HARKOR: return GO_BAKKALZUS_SATCHEL; + case NPC_ASHLI: return GO_KASHAS_BAG; + case NPC_KRAZ: return GO_NORKANIS_PACKAGE; + default: return 0; + } + } + + bool OnGossipHello(Player* player, Creature* creature) override + { + AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Vous etes libre ! Partez d'ici !", GOSSIP_SENDER_MAIN, ACTION_FREE_HOSTAGE); + SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID()); + return true; + } + + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override + { + CloseGossipMenuFor(player); + + if (action != ACTION_FREE_HOSTAGE) + return true; + + // Un seul coffre par captif, quel que soit le nombre de joueurs qui lui parlent. + if (!creature->HasFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP)) + return true; + + creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + + if (uint32 chest = ChestForHostage(creature->GetEntry())) + creature->SummonGameObject(chest, creature->GetPositionX() - 2.0f, creature->GetPositionY(), + creature->GetPositionZ(), 0.0f, QuaternionData(), WEEK); + + return true; + } +}; + void AddSC_zulaman() { + new npc_zulaman_hostage(); new npc_voljin_zulaman(); new spell_banging_the_gong(); } From 4f21e529868c7076e2d52b6e0c1e8ba29d114f2c Mon Sep 17 00:00:00 2001 From: BlaMacfly <165155133+BlaMacfly@users.noreply.github.com> Date: Sat, 12 Sep 2026 12:32:57 +0200 Subject: [PATCH 50/50] Zul Aman : les quatre vagues de trolls de Nalorakk Ecrit d apres AzerothCore, qui tient la meilleure version de ce contenu BC : le boss attend au pied de la rampe, jette sur les joueurs le groupe de trolls pose autour de lui, ATTEND QUE LA VAGUE SOIT MORTE, puis recule d un palier en lancant Make way for da Nalorakk!. Il n est attaquable qu apres la quatrieme. Composition des vagues reprise telle quelle (lanceurs de hache et hommes de tribu, puis avec le medecin, puis les porte-guerre, enfin porte-guerre et medecin a 25 m) : nos spawns correspondent deja exactement a ces groupes le long de la rampe. Les deplacements passent par des positions en dur, ce core n ayant ni spawn groups ni chemins de waypoints. Deux pieges evites : notre spawn est pose a la position FINALE du boss, il est donc ramene au pied de la rampe au depart ; et l evenement ne se rejoue jamais apres coup, avec une sortie de secours si un joueur arrive au contact -- une immunite d introduction qui ne se leve pas rend un boss definitivement intuable. La numerotation des textes est celle de NOTRE creature_text, verifiee ligne a ligne : le groupe 10 est le cri de repli, pas le retour en forme de troll. --- .../EasternKingdoms/ZulAman/boss_nalorakk.cpp | 285 ++++++++++++++++-- 1 file changed, 259 insertions(+), 26 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp index 5b8ac70..ce9a817 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp @@ -15,14 +15,23 @@ * with this program. If not, see . */ -// Nalorakk n'avait qu'une coquille de script : il frappait en melee et rien d'autre, -// ni sorts ni changement de forme. Le combat est ici ecrit a partir du script amont -// TrinityCore, en gardant NOTRE numerotation de creature_text (0-11). -// Ce qui n'est pas porte : les quatre vagues de trolls qui l'annoncent dans la rampe. -// L'amont les pilote par des spawn groups et des chemins de waypoints que ce core -// n'a pas (pas de table spawn_group) -- cela demanderait de recreer les donnees. +// Nalorakk n'avait qu'une coquille de script : ni sorts, ni formes, ni les quatre +// vagues de trolls de la rampe. +// +// L'evenement suit AzerothCore, qui tient la meilleure version de ce contenu BC : +// le boss attend au pied de la rampe, lance sur les joueurs le groupe de trolls +// pose autour de lui, ATTEND QUE LA VAGUE SOIT MORTE, puis recule d'un palier en +// lancant « Make way for da Nalorakk! ». Il n'est attaquable qu'apres la quatrieme. +// Les deplacements passent par des positions en dur (reprises de l'ancien script +// TrinityCore) : ni spawn groups ni chemins de waypoints n'existent sur ce core. +// +// Numerotation des textes : celle de NOTRE creature_text (verifiee ligne a ligne), +// qui est l'ancienne numerotation BC et non celle des cores modernes. #include "ScriptMgr.h" +#include "Creature.h" +#include "MotionMaster.h" +#include "ObjectAccessor.h" #include "ScriptedCreature.h" #include "zulaman.h" @@ -37,8 +46,8 @@ enum Says SAY_SURGE = 6, EMOTE_SURGE = 7, EMOTE_BEAR = 8, - SAY_BEAR = 9, - SAY_TROLL = 10, + SAY_SHIFT_TO_BEAR = 9, + SAY_MAKE_WAY = 10, // « Make way for da Nalorakk! » : il recule d'un palier SAY_DEATH = 11 }; @@ -47,7 +56,7 @@ enum Spells // Forme troll SPELL_BRUTAL_SWIPE = 42384, SPELL_MANGLE = 42389, - SPELL_SURGE = 44019, + SPELL_SURGE = 42402, // Forme d'ours SPELL_LACERATING_SLASH = 42395, @@ -73,6 +82,29 @@ enum Events EVENT_BERSERK }; +enum WaveCreatures +{ + NPC_AMANISHI_AXE_THROWER = 23542, + NPC_AMANISHI_WARBRINGER = 23580, + NPC_AMANISHI_MEDICINE_MAN = 23581, + NPC_AMANISHI_TRIBESMAN = 23582 +}; + +// Le chemin de la rampe. Les paliers ou il s'arrete pour lancer une vague sont +// 0, 1, 5 et 8 ; les autres points ne sont que des etapes de trajet. +static float const NalorakkWay[9][3] = +{ + { 18.569f, 1414.512f, 11.42f }, // palier 1 + { -17.264f, 1419.551f, 12.62f }, // palier 2 + { -52.642f, 1419.357f, 27.31f }, + { -69.908f, 1419.721f, 27.31f }, + { -79.929f, 1395.958f, 27.31f }, + { -80.072f, 1374.555f, 40.87f }, // palier 3 + { -80.072f, 1314.398f, 40.87f }, + { -80.072f, 1295.775f, 48.60f }, + { -80.072f, 1362.000f, 40.87f } // palier 4 +}; + class boss_nalorakk : public CreatureScript { public: @@ -81,13 +113,193 @@ class boss_nalorakk : public CreatureScript struct boss_nalorakkAI : public BossAI { - boss_nalorakkAI(Creature* creature) : BossAI(creature, DATA_NALORAKK), _bearForm(false) { } + boss_nalorakkAI(Creature* creature) : BossAI(creature, DATA_NALORAKK), + _bearForm(false), _waveEvent(true), _waveInProgress(false), _inMove(false), + _wave(0), _currentPoint(0), _targetPoint(0), _checkTimer(0) { } void Reset() override { _Reset(); _bearForm = false; me->RemoveAurasDueToSpell(SPELL_SHAPE_OF_THE_BEAR); + + if (!_waveEvent) + return; + + // Une fois l'evenement joue, il ne recommence pas : sans cela un simple + // repli rendrait le boss intouchable pour de bon. + _waveInProgress = false; + _inMove = false; + _wave = 0; + _currentPoint = 0; + _targetPoint = 0; + _checkTimer = 0; + _waveGuids.clear(); + + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); + me->SetSpeedRate(MOVE_RUN, 2.0f); + me->SetWalk(false); + + // Notre spawn est pose a la position finale du boss, en haut de la rampe : + // on le remet au pied, sinon l'evenement se deroulerait a l'envers. + me->NearTeleportTo(NalorakkWay[0][0], NalorakkWay[0][1], NalorakkWay[0][2], 3.14f); + me->SetHomePosition(NalorakkWay[0][0], NalorakkWay[0][1], NalorakkWay[0][2], 3.14f); + } + + // Tant que les vagues durent, il ne repond pas aux provocations. + void AttackStart(Unit* who) override + { + if (!_waveEvent) + BossAI::AttackStart(who); + } + + void GatherWave(uint32 entry, float radius) + { + std::list found; + me->GetCreatureListWithEntryInGrid(found, entry, radius); + for (Creature* creature : found) + if (creature->IsAlive()) + _waveGuids.push_back(creature->GetGUID()); + } + + void LaunchWave(Unit* target) + { + _waveGuids.clear(); + + switch (_wave) + { + case 0: + GatherWave(NPC_AMANISHI_AXE_THROWER, 10.0f); + GatherWave(NPC_AMANISHI_TRIBESMAN, 10.0f); + break; + case 1: + GatherWave(NPC_AMANISHI_AXE_THROWER, 10.0f); + GatherWave(NPC_AMANISHI_TRIBESMAN, 10.0f); + GatherWave(NPC_AMANISHI_MEDICINE_MAN, 10.0f); + break; + case 2: + GatherWave(NPC_AMANISHI_WARBRINGER, 10.0f); + break; + case 3: + GatherWave(NPC_AMANISHI_WARBRINGER, 25.0f); + GatherWave(NPC_AMANISHI_MEDICINE_MAN, 25.0f); + break; + default: + break; + } + + Talk(uint8(SAY_WAVE_1 + _wave)); + + for (ObjectGuid const& guid : _waveGuids) + if (Creature* member = ObjectAccessor::GetCreature(*me, guid)) + { + member->SetNoCallAssistance(true); + member->AI()->AttackStart(target); + } + + // La quatrieme vague est la derniere : il descend dans l'arene. + if (_wave == 3) + { + EndWaveEvent(); + return; + } + + _waveInProgress = true; + _checkTimer = 2000; + } + + bool WaveIsDead() const + { + for (ObjectGuid const& guid : _waveGuids) + if (Creature* member = ObjectAccessor::GetCreature(*me, guid)) + if (member->IsAlive()) + return false; + + return true; + } + + // Fin de l'evenement : il redevient un boss ordinaire. Appele aussi en filet + // de securite si un joueur lui arrive au contact, parce qu'une immunite + // d'introduction qui ne se leve jamais rend un boss definitivement intuable. + void EndWaveEvent() + { + if (!_waveEvent) + return; + + _waveEvent = false; + _waveInProgress = false; + _inMove = false; + _waveGuids.clear(); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); + me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation()); + } + + void MoveInLineOfSight(Unit* who) override + { + if (!_waveEvent) + { + BossAI::MoveInLineOfSight(who); + return; + } + + if (who->GetTypeId() != TYPEID_PLAYER || !me->IsHostileTo(who) || !who->IsAlive()) + return; + + if (me->IsWithinDistInMap(who, 8.0f)) + { + EndWaveEvent(); + return; + } + + if (_waveInProgress || _inMove) + return; + + float const range = (_wave == 0 || _wave == 3) ? 50.0f : 40.0f; + if (me->IsWithinDistInMap(who, range)) + LaunchWave(who); + } + + void MoveToNextStop() + { + Talk(SAY_MAKE_WAY); + + _waveInProgress = false; + _inMove = true; + ++_wave; + + switch (_wave) + { + case 1: _targetPoint = 1; break; + case 2: _targetPoint = 5; break; + case 3: _targetPoint = 8; break; + default: _targetPoint = _currentPoint; break; + } + + AdvanceOnePoint(); + } + + void AdvanceOnePoint() + { + uint32 next = (_currentPoint < 7 && _targetPoint != 8) ? _currentPoint + 1 + : (_targetPoint == 8 ? 8 : _targetPoint); + + _currentPoint = next; + me->GetMotionMaster()->MovePoint(_currentPoint, NalorakkWay[_currentPoint][0], NalorakkWay[_currentPoint][1], NalorakkWay[_currentPoint][2]); + } + + void MovementInform(uint32 type, uint32 id) override + { + if (!_waveEvent || type != POINT_MOTION_TYPE || !_inMove || _currentPoint != id) + return; + + if (_currentPoint == _targetPoint) + { + _inMove = false; + me->SetFacingTo(float(M_PI) * 0.5f); + return; + } + + AdvanceOnePoint(); } void EnterCombat(Unit* /*who*/) override @@ -114,16 +326,16 @@ class boss_nalorakk : public CreatureScript void ScheduleTrollEvents() { - events.ScheduleEvent(EVENT_BRUTAL_SWIPE, urand(10000, 20000)); - events.ScheduleEvent(EVENT_MANGLE, urand(15000, 20000)); - events.ScheduleEvent(EVENT_SURGE, urand(20000, 25000)); + events.ScheduleEvent(EVENT_BRUTAL_SWIPE, urand(7000, 12000)); + events.ScheduleEvent(EVENT_MANGLE, urand(10000, 15000)); + events.ScheduleEvent(EVENT_SURGE, urand(15000, 20000)); } void ScheduleBearEvents() { - events.ScheduleEvent(EVENT_LACERATING_SLASH, urand(10000, 15000)); - events.ScheduleEvent(EVENT_REND_FLESH, urand(12000, 18000)); - events.ScheduleEvent(EVENT_DEAFENING_ROAR, urand(20000, 25000)); + events.ScheduleEvent(EVENT_LACERATING_SLASH, 2000); + events.ScheduleEvent(EVENT_REND_FLESH, 3000); + events.ScheduleEvent(EVENT_DEAFENING_ROAR, urand(5000, 10000)); } void CancelFormEvents() @@ -138,6 +350,20 @@ class boss_nalorakk : public CreatureScript void UpdateAI(uint32 diff) override { + // Deroulement des vagues : il ne recule qu'une fois la vague abattue. + if (_waveInProgress) + { + if (_checkTimer <= diff) + { + if (WaveIsDead()) + MoveToNextStop(); + else + _checkTimer = 2000; + } + else + _checkTimer -= diff; + } + if (!UpdateVictim()) return; @@ -152,11 +378,11 @@ class boss_nalorakk : public CreatureScript { case EVENT_BRUTAL_SWIPE: DoCastVictim(SPELL_BRUTAL_SWIPE); - events.ScheduleEvent(EVENT_BRUTAL_SWIPE, urand(10000, 20000)); + events.ScheduleEvent(EVENT_BRUTAL_SWIPE, urand(7000, 12000)); break; case EVENT_MANGLE: DoCastVictim(SPELL_MANGLE); - events.ScheduleEvent(EVENT_MANGLE, urand(15000, 20000)); + events.ScheduleEvent(EVENT_MANGLE, urand(10000, 15000)); break; case EVENT_SURGE: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, NonTankTargetSelector(me))) @@ -165,19 +391,19 @@ class boss_nalorakk : public CreatureScript Talk(EMOTE_SURGE, target); DoCast(target, SPELL_SURGE); } - events.ScheduleEvent(EVENT_SURGE, urand(20000, 25000)); + events.ScheduleEvent(EVENT_SURGE, urand(15000, 20000)); break; case EVENT_LACERATING_SLASH: DoCastVictim(SPELL_LACERATING_SLASH); - events.ScheduleEvent(EVENT_LACERATING_SLASH, urand(10000, 15000)); + events.ScheduleEvent(EVENT_LACERATING_SLASH, urand(18000, 22000)); break; case EVENT_REND_FLESH: DoCastVictim(SPELL_REND_FLESH); - events.ScheduleEvent(EVENT_REND_FLESH, urand(12000, 18000)); + events.ScheduleEvent(EVENT_REND_FLESH, urand(10000, 15000)); break; case EVENT_DEAFENING_ROAR: DoCast(me, SPELL_DEAFENING_ROAR); - events.ScheduleEvent(EVENT_DEAFENING_ROAR, urand(20000, 25000)); + events.ScheduleEvent(EVENT_DEAFENING_ROAR, urand(10000, 15000)); break; case EVENT_SHAPESHIFT: CancelFormEvents(); @@ -185,18 +411,17 @@ class boss_nalorakk : public CreatureScript if (_bearForm) { - Talk(SAY_BEAR); + Talk(SAY_SHIFT_TO_BEAR); Talk(EMOTE_BEAR); DoCast(me, SPELL_SHAPE_OF_THE_BEAR); ScheduleBearEvents(); - events.ScheduleEvent(EVENT_SHAPESHIFT, 45000); + events.ScheduleEvent(EVENT_SHAPESHIFT, urand(20000, 25000)); } else { - Talk(SAY_TROLL); me->RemoveAurasDueToSpell(SPELL_SHAPE_OF_THE_BEAR); ScheduleTrollEvents(); - events.ScheduleEvent(EVENT_SHAPESHIFT, 45000); + events.ScheduleEvent(EVENT_SHAPESHIFT, urand(45000, 50000)); } break; case EVENT_BERSERK: @@ -215,6 +440,14 @@ class boss_nalorakk : public CreatureScript private: bool _bearForm; + bool _waveEvent; + bool _waveInProgress; + bool _inMove; + uint32 _wave; + uint32 _currentPoint; + uint32 _targetPoint; + uint32 _checkTimer; + std::vector _waveGuids; }; CreatureAI* GetAI(Creature* creature) const override